abaqus与子程序参数不匹配,怎么解决? 50
Error in job ex12-4-O1: Problem during linking - Abaqus/Standard User Subroutines. This error may be due to a mismatch in the Abaqus user subroutine arguments. These arguments sometimes change from release to release, so user subroutines used with a previous release of Abaqus may need to be adjusted.
请问这种问题怎么解决?
我abaqus2018 ivf2017 vs2015
附上源代码
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,RPL,DDSDDT,
& DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,
& CMNAME,NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,
& PNEWDT,CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
! 定义了一些相关参数与变量什么,从 ABAQUS 安装目录下的子文件夹“… \site”中可找到
C
CHARACTER*80 CMNAME
C
DIMENSION STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS),
& DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS) , ! (应变增量矩阵) ,
& TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS),COORDS(3),DROT(3,3), ! (旋转矩阵) ,
& DFGRD0(3,3),DFGRD1(3,3),JSTEP(4)
!上前都是变量的一些声明
DIMENSION DE1(6,6),DE2(6,6),DE(6,6)
DIMENSION DSTRESS1(6),DSTRESS(6),STRESS1(6),STRESS2(6)
DIMENSION FG1(6),FG2(6),FG(6)
DIMENSION DEP1(6,6),DEP2(6,6)
DIMENSION DDSTRAN(6),ESTRESS(6)
SSTOL=1E-3
C 误差控制标准
FLAMA=PROPS(1)
FKAPA=PROPS(2)
FU=PROPS(3)
FM=PROPS(4)
FN0=PROPS(5)
FGA0=PROPS(6)
FN=PROPS(7)
C 7个参数
FR=EXP((FN0-FGA0)/(FLAMA-FKAPA))
FTIME=0.0!T
FDTIME=1.0!dT
888 CONTINUE
FVOID1=STATEV(1)
FPC1=STATEV(2)
FVOID0=STATEV(3)
CALL SINV(STRESS,SINV1,SINV2,NDI,NSHR)
C获取子步增量步起点应力不变量
FP1=SINV1
FQ1=SINV2
IF(FQ1.LE.1e-5)FQ1=1e-5
FSD1=SQRT(FP1**2+FQ1**2)
C应力状态到原点的距离
FKMOD1=-(1+FVOID1)*FP1/FKAPA
FGMOD1=FKMOD1*3.0*(1-2.0*FU)/2.0/(1+FU)
C体积模量和剪切模量
CALL GETDE(FKMOD1,FGMOD1,DE1)
C获取子步增量步起点弹性矩阵
FPFP=-FN*((-FQ1/FM/FP1)**(FN-1))*(-FQ1/FM)/FP1/FP1+1/FP1/LOG(FR)
FPFQ=-FN*((-FQ1/FM/FP1)**(FN-1))/FM/FP1
FATA=FQ1/FP1
C屈服面对p和q的导数,应力比
FPB1=-FPC1*EXP(-((-FATA/FM)**FN)*LOG(FR))
FSDB1=-SQRT(1+FATA**2)*FPB1
C边界面上的应力状态
FKP1=-(1+FVOID1)/(FLAMA-FKAPA)/LOG(FR)*(FM*FM*(FSDB1/FSD1)-FATA*
&FATA)/2.0/FATA
FDS1=(FM*FM*(FSD1/FSDB1)-FATA*FATA)/2.0/FATA
C塑性模量和减胀因子
999 CONTINUE!子步循环
DO I=1,6
DDSTRAN(I)=DSTRAN(I)*FDTIME
END DO
C子步增量应变
CALL GETDEP(FP1,FQ1,STRESS,FDS1,FPFP,FPFQ,DE1,FKP1,DEP1,DDSTRAN,
&FGS1,FF1,FG1)
C获取弹塑性矩阵
DEVP1=FDS1*FGS1
C塑性体积应变增量
FPC2=FPC1*EXP(-(1+FVOID1)/(FLAMA-FKAPA)*DEVP1)
C子步增量步终点屈服应力
CALL GETDSTRESS(DEP1,DDSTRAN,DSTRESS1)
C获得增量应力
DO I=1,6
STRESS1(I)=STRESS(I)+DSTRESS1(I)
END DO
C终点应力第一次试算值
DEV=(DDSTRAN(1)+DDSTRAN(2)+DDSTRAN(3))
FVOID2=EXP(DEV)*(1+FVOID1)-1
C终点孔隙比
CALL SINV(STRESS1,SINV1,SINV2,NDI,NSHR)
FP2=SINV1
FQ2=SINV2
IF(FQ2.LE.1e-5)FQ2=1e-5
C应力状态到原点的距离
FKMOD2=-(1+FVOID2)*FP2/FKAPA
FGMOD2=FKMOD2*3.0*(1-2.0*FU)/2.0/(1+FU)
C体积模量和剪切模量
CALL GETDE(FKMOD2,FGMOD2,DE2)
C获取子步增量步起点弹性矩阵
FPFP=-FN*((-FQ2/FM/FP2)**(FN-1))*(-FQ2/FM)/FP2/FP2+1/FP2/LOG(FR)
FPFQ=-FN*((-FQ2/FM/FP2)**(FN-1))/FM/FP2
FATA=FQ2/FP2
C屈服面对p和q的导数,应力比
FSD2=SQRT(FP2**2+FQ2**2)
FPB2=-FPC2*EXP(-((-FATA/FM)**FN)*LOG(FR))
FSDB2=-SQRT(1+FATA**2)*FPB2
C边界面上的应力状态
FKP2=-(1+FVOID2)/(FLAMA-FKAPA)/LOG(FR)*(FM*FM*(FSDB2/FSD2)-FATA*
& FATA)/2.0/FATA
FDS2=(FM*FM*(FSD2/FSDB2)-FATA*FATA)/2.0/FATA
CALL GETDEP(FP2,FQ2,STRESS1,FDS2,FPFP,FPFQ,DE2,FKP2,DEP2,DDSTRAN,
& FGS2,FF2,FG2)
C计算子步增量步应力增量第二次试算值
DO I=1,6
ESTRESS(I)=0.5*(DSTRESS2(I)-DSTRESS1(I))
STRESS2(I)=STRESS(I)+0.5*DSTRESS1(I)+0.5*DSTRESS2(I)
END DO
FEIE=0.0
FEIS=0.0
FERR=0.0
DO I=1,6
FEIE=FEIE+ESTRESS(I)*ESTRESS(I)
FEIS=FEIS+STRRESS2(I)*STRESS2(I)
END DO
FERR=SQRT(FEIE/FEIS)
IF (FERR .LE. 1E-8)FERR=1E-8!若误差小于10负八次方就把它等于10的负八次方
FBETA=0.8*SQRT(SSTOL/FERR)!β,Tnew=△T*β
IF(FERR .GT. SSTOL)THEN
IF(FBETA .LE. 0.1)FBETA=0.1!如果子步失败
FDTIME=FBETA*FDTIME!缩小步长
GOTO 999
ELSE
FTIME=FTIME+FDTIME!T=T+△T
IF(FBETA .GE. 2.0)FBETA=2.0
FDTIME=FBETA*FDTIME!DTnew=β*DT
END IF
!根据误差控制标准确定新的增量步长
DO I=1,6
STRESS(I)=STRESS(I)+0.5*DSTRESS1(I)+0.5*DSTRESS2(I)!σ=σ+△σ
END DO
DEVP=0.5*(DEVP1+DEVP2)
FPC=FPC1*EXP(-(1+FVOID1)/(FLAMA-FKAPA)*DEVP)
STATEV(1)=FVOID2
STATEV(2)=FPC
C误差标准满足后更新终点状态
IF(FTIME .LT. 1)THEN
IF(FDTIME .GT. (1-FTIME))THEN
FDTIME=1-FTIME
END IF
C继续下一个子步增量步计算
GOTO 888
END IF
CALL SINV(STRESS,SINV1,SINV2,NDI,NSHR)
C获取子步增量步起点应力不变量
FP=SINV1
FQ=SINV2
FVOID=FVOID2
STATEV(1)=FVOID2
STATEV(2)=FPC
FKMOD=-(1+FVOID)*FP/FKAPA
FGMOD=FKMOD*3.0*(1-2.0*FU)/2.0/(1+FU)
C体积模量和剪切模量
CALL GETDE(FKMOD,FGMOD,DE)
C获取子步增量步起点弹性矩阵
IF(FQ .LE. 1e-5)FQ=1e-5
FPFP=-FN*((-FQ/FM/FP)**(FN-1))*(-FQ/FM)/FP/FP+1/FP/LOG(FR)
FPFQ=-FN*((-FQ/FM/FP)**(FN-1))/FM/FP
FATA=FQ/FP
C屈服面对p和q的导数,应力比
FSD=-SQRT(FP**2+FQ**2)
FPB=-FPC*EXP(-((-FATA/FM)**FN)*LOG(FR))
FSDB=-SQRT(1+FATA**2)*FPB
C边界面上的应力状态
FKP=-(1+FVOID)/(FLAMA-FKAPA)/LOG(FR)*(FM*FM*(FSDB/FSD)-FATA*
&FATA)/2.0/FATA
FDS=(FM*FM*(FSD/FSDB)-FATA*FATA)/2.0/FATA
CALL GETDEP(FP,FQ,STRESS,FDS,FPFP,FPFQ,DE,FKP,DDSDDE,DSTRAN,
&FGS1,FF,FG)
C根据终点状态计算弹塑性矩阵,并赋值DDSDDE
RETURN
END
SUBROUTINE GETDE(FKMOD,FGMOD,FDE)
C本子程序功能为确定弹性矩阵
INCLUDE 'ABA_PARAM.INC'
DIMENSION FDE(6,6)
DO I=1,6
DO J=1,6
FDE(I,J)=0.0
END DO
END DO
FDE(1,1)=FKMOD+4.0/3.0*FGMOD
FDE(2,2)=FKMOD+4.0/3.0*FGMOD
FDE(3,3)=FKMOD+4.0/3.0*FGMOD
FDE(4,4)=FGMOD
FDE(5,5)=FGMOD
FDE(6,6)=FGMOD
FDE(1,2)=FKMOD-2.0/3.0*FGMOD
FDE(1,3)=FKMOD-2.0/3.0*FGMOD
FDE(2,1)=FKMOD-2.0/3.0*FGMOD
FDE(2,3)=FKMOD-2.0/3.0*FGMOD
FDE(3,1)=FKMOD-2.0/3.0*FGMOD
FDE(3,2)=FKMOD-2.0/3.0*FGMOD
END
SUBROUTINE GETDSTRESS(FDE,DER,DS)
C本子程序功能为确定应力增量
INCLUDE 'ABA_PARAM.INC'
DIMENSION FDE(6,6),DER(6),DS(6)
DO I=1,6
DS(I)=0.0
END DO
DO I=1,6
DO J=1,6
DS(I)=DS(I)+FDE(I,J)*DER(J)
END DO
END DO
END
SUBROUTINE GETEP(FP,FQ,FSTRESS,FDS,FPFP,FPFQ,FDE,FKP,DEP,DER,FGS,
&FF,FG)
C本程序为确定弹塑性矩阵
INCLUDE 'ABA_PARAM.INC'
DIMENSION FSTRESS(6),FDE(6,6),DEP(6,6),DER(6)
DIMENSION FA(6),FB(6),FC(6),FD(6),FE(6),FG(6),FH(6,6)
FA(1)=1.0/3.0
FA(2)=1.0*3.0
FA(3)=1.0/3.0
FA(4)=0.0
FA(5)=0.0
FA(6)=0.0
FB(1)=1.0/2.0/FQ*(2*FSTRESS(1)-FSTRESS(2)-FSTRESS(3))
FB(2)=1.0/2.0/FQ*(2*FSTRESS(2)-FSTRESS(1)-FSTRESS(3))
FB(3)=1.0/2.0/FQ*(2*FSTRESS(3)-FSTRESS(1)-FSTRESS(2))
FB(4)=3.0/2.0/FQ*2*FSTRESS(4)
FB(5)=3.0/2.0/FQ*2*FSTRESS(5)
FB(6)=3.0/2.0/FQ*2*FSTRESS(6)
DO I=1,6
FC(I)=FDS*FA(I)+FAB(I)
FD(I)=FPFP*FA(I)+FPFQ*FB(I)
END DO
DO I=1,6
FE(I)=0.0
DO J=1,6
FE(I)=FE(I)+FD(J)*FDE(I,J)
END DO
END DO
FF=0.0
DO I=1,6
FF=FF+FE(I)*FC(I)
END DO
DO I=1,6
FG(I)=0.0
DO J=1,6
FG(I)=FG(I)+FDE(I,J)*FC(J)
END DO
END DO
DO I=1,6
DO J=1,6
FH(I,J)=FG(I)*FE(J)
END DO
END DO
DO I=1,6
DO J=1,6
DEP(I,J)=FDE(I,J)-1/(FKP+FF)*FH(I,J)
END DO
END DO
FGS=0.0
DO I=1,6
FGS=FGS+FE(I)*DER(I)/(FKP+FF)
END DO
FUNLOAD=0.0
DO I=1,6
FUNLOAD=FUNLOAD+FD(I)*DER(I)
END DO
IF(FUNLOAD .LT. 0)THEN
DO I=1,6
DO J=1,6
DEP(I,J)=FDE(I,J)
END DO
END DO
FGS=0
END IF
END