ABAQUS路面材料使用修正burgers模型时总是出现编译错误

C 瞬态温度场下修正Burgers模型UMAT子程序源代码

C

C 给状态变量数组赋初值为零,调用ABAQUS子程序SDVINI

C GIVE STATEV THE INITIAL VALUE OF ZERO

C

SUBROUTINE SDVINI(STATEV,COORDS,NSTATV,NCRDS,NOEL,NPT,LAYER,KSPT)

C

INCLUDE 'ABA_PARAM.INC'

C

DIMENSION STATEV(NSTATV),COORDS(NCRDS)

C

DO K=1,NSTATV

STATEV(K)=0.0

END DO

C

RETURN

END

C 瞬态温度场下修正Burgers模型UMAT子程序

C UMAT FOR MODIFIED BURGERS MODEL

C

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,RPL,DDSDDT,

1 DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,

2 CMNAME,NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,

3 PNEWDT,CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)

C

INCLUDE 'ABA_PARAM.INC'

C

CHARACTER*80 CMNAME

C

DIMENSION STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS),

1 DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS),

2 TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS),COORDS(3),DROT(3,3),

3 DFGRD0(3,3),DFGRD1(3,3)

C

C LOCAL ARRAYS(定义局部数组,即用户自己定义的数组)

C ----------------------------------------------------------------------------------------------------------------

C EELAS - ELASTIC STRAINS

C DEELA - ELASTIC STRAINS INCREMENT(dt)

C ECREE - CREEP STRAINS

C DECRE - CREEP STRAINS INCREMENT(dt)

C STREST - TEMPORARY ARRAY FOR SAVED STRESS(t+dt)

C DECRT - TEMPORARY ARRAY FOR SAVED CREEP STRAINS INCREMENT(dt)

C DSTREST- STRESS INCREMENT(dt)

C STREST2- TEMPORARY ARRAY FOR SAVED STRESS(t+θdt)

C DVSTRESS-DEVIATORIC STRESS(t+θdt)

C PARAM - ARRAY FOR SAVED MATERIAL PARAMETERS AT TEMPERATURE

C OF THE KSTEP

C ----------------------------------------------------------------------------------------------------------------

C

DIMENSION EELAS(6),ECREE(6),DECRE(6),DVSTRESS(6),STREST(6),

1 DECRT(6),DEELA(6),DSTREST(6),STREST2(6),PARAM(7),

2 TABLE(NPROPS/7,7),TABLE0(7),TABLE1(7)

C

PARAMETER(ZERO=0.D0,ONE=1.D0,TWO=2.D0,THREE=3.D0,SIX=6.D0,

1 ENUMAX=.4999D0,NEWTON=50,TOLER=1.0D-4)

C

C ----------------------------------------------------------------------------------------------------------------

C UMAT FOR MODIFIED BURGERS MODEL

C ----------------------------------------------------------------------------------------------------------------

C PARAMETERS OF MODIFIED BURGERS MODEL AT TRANSIENT TEMPERATURE

C FIELD(材料参数说明):

C PROPS(1)- T Temperature

C PROPS(2)- E0 Young's modulus of the Hookean spring

C PROPS(3)- μ0 Poisson's ratio

C PROPS(4)- E1 Young's modulus of the Kelvin Unit

C PROPS(5)- η1 Viscosity coef. of the Kelvin unit

C PROPS(6)- A

C PROPS(7)- B A and B are parameters of the seperate dashpot

C ---------------------------------------------------------------------------------------------------------------

C 定义初始时刻材料的瞬时弹性参数

NVALUE=NPROPS/7

IF(KINC.EQ.0)THEN

     IF(NVALUE.EQ.1)THEN

     DO K1=1,7

PARAM(K1)=PROPS(K1)

END DO

     END IF

     IF(NVALUE.GT.1)THEN

     DO K1=1,NVALUE

DO K2=1,7

TABLE(K1,K2)=PROPS(7*(K1-1)+K2)

END DO

END DO

C 参数输入应按温度从小到大输入

LOOP2:DO K1=1,NVALUE-1

TEMP1=TABLE(K1+1,1)

IF(TEMP.LT.TEMP1)THEN

TEMP0=TABLE(K1,1)

DO K2=1,7

TABLE1(K2)=TABLE(K1+1,K2)

TABLE0(K2)=TABLE(K1,K2)

END DO

DO K3=1,7

C 对不同温度时的参数进行插值

PARAM(K3)=TABLE0(K3)+(TEMP-TEMP0)

1 *(TABLE1(K3)-TABLE0(K3))/(TEMP1-TEMP0)

END DO

EXIT LOOP2

END IF

END DO LOOP2

IF(TEMP.LT.TABLE(1,1).OR.TEMP.GT.TABLE(NVALUE,1))THEN

DO K1=1,7

TABLE1(K1)=TABLE(NVALUE,K1)

TABLE0(K1)=TABLE(1,K1)

END DO

C 对不同温度时的参数进行插值

DO K2=1,7

PARAM(K2)=TABLE0(K2)+(TEMP-TABLE(1,1))*(TABLE1(K2)

1 -TABLE0(K2))/(TABLE(NVALUE,1)-TABLE(1,1))

END DO

END IF

     END IF

     END IF

EMOD=PARAM(2) !E0

ENU=PARAM(3) !μ0

IF(ENU.GT.0.4999.AND.ENU.LT.0.5001)ENU=0.499

EBULK3=EMOD/(ONE-TWO*ENU) !3K

EG2=EMOD/(ONE+ENU) !2G

EG=EG2/TWO !G

EG3=THREE*EG !3G

ELAM=(EBULK3-EG2)/THREE !λ

C 迭代之前获取上一步的状态变量

DO K1=1,NTENS

EELAS(K1)=STATEV(K1) !弹性应变

ECREE(K1)=STATEV(K1+NTENS) !蠕变应变

END DO

EQCRE=STATEV(1+2*NTENS) !等效蠕变应变

EQVSE=STATEV(2+2*NTENS) !等效粘性流动应变

EQVEE=STATEV(3+2*NTENS) !等效粘弹性应变

C 定义瞬时弹性性能

IF(KSTEP.EQ.1)THEN

C 形成初始时刻弹性刚度

DO K1=1,NTENS

DO K2=1,NTENS

DDSDDE(K1,K2)=ZERO

END DO

END DO

DO K1=1,NDI

DO K2=1,NDI

DDSDDE(K2,K1)=ELAM

END DO

DDSDDE(K1,K1)=EG2+ELAM

END DO

DO K1=NDI+1,NTENS

DDSDDE(K1,K1)=EG

END DO

C 根据弹性应变计算初始时刻应力

DO K1=1,NTENS

DO K2=1,NTENS

STRESS(K2)=STRESS(K2)+DDSDDE(K2,K1)*DSTRAN(K1)

END DO

EELAS(K1)=EELAS(K1)+DSTRAN(K1)

END DO

C

END IF

C

C------------------------------------------------------------------------------------------------------------------

C CALCULATE CREEP STRAIN(计算蠕变应变)

C------------------------------------------------------------------------------------------------------------------

IF(KSTEP.GT.1)THEN

C 采用常刚度迭代方案,刚度为初始时刻弹性刚度

DO K1=1,NTENS

DO K2=1,NTENS

DDSDDE(K1,K2)=ZERO

END DO

END DO

DO K1=1,NDI

DO K2=1,NDI

DDSDDE(K2,K1)=ELAM

END DO

DDSDDE(K1,K1)=EG2+ELAM

END DO

DO K1=NDI+1,NTENS

DDSDDE(K1,K1)=EG

END DO

C 求取t σ avg,t εc avg

SMISES1=(STRESS(1)-STRESS(2))**2+(STRESS(2)-STRESS(3))**2

1 +(STRESS(3)-STRESS(1))**2

DO K1=NDI+1,NTENS

SMISES1=SMISES1+SIX*STRESS(K1)**2

END DO

SMISES1=SQRT(SMISES1/TWO)

     write(6,*)SMISES1

C 获取t时刻材料参数E1,η1,A,B

E1=PARAM(4)

Y1=PARAM(5)

A=PARAM(6)

B=PARAM(7)

C 下面的参数分别表示对外置粘壶和内置粘壶的ε求导

EQVSER1=SMISES1*EXP(-1.0*B*TIME(1))/A

EQVEER1=SMISES1*EXP(-1.0*E1/Y1*TIME(1))/Y1

EQCRER1=EQVSER1+EQVEER1

C 迭代之前,认为t+Δt σ(0)(n+1)= t σ(n+1)

     DO K1=1,NTENS

     STREST(K1)=STRESS(K1)

     END DO

C 给存储蠕应变增量的数组赋初值为0

     DO K1=1,NTENS

     DECRT(K1)=0.0

     END DO

C 非线性迭代过程,求取△ε(n+1)对应的△εc(n+1)和△σ(n+1)

LOOP1:DO KEWTON=1,NEWTON

C 求取t+△t σk(n+1),t+△t εck(n+1)

SMISES2=(STREST(1)-STREST(2))**2+(STREST(2)-STREST(3))**2

1 +(STREST(3)-STREST(1))**2

DO K1=NDI+1,NTENS

SMISES2=SMISES2+SIX*STREST(K1)**2

END DO

SMISES2=SQRT(SMISES2/TWO)

     write(6,*)SMISES2

EQVSER2=SMISES2*EXP(-1.0*B*(TIME(1)+DTIME))/A

EQVEER2=SMISES2*EXP(-1.0*E1/Y1*(TIME(1)+DTIME))/Y1

EQCRER2=EQVSER2+EQVEER2

C 求取t+θ△t σavg (k)(n+1)=(1-θ) t σavg(n+1)+θ t+△t σavg(k)(n+1)

C t+θ△t εcavg (k)(n+1)=(1-θ) t εcavg(n+1)+θ t+△t εcavg(k)(n+1)

SMISES3=0.2*SMISES1+0.8*SMISES2

     write(6,*)SMISES3

     EQCRER3=0.2*EQCRER1+0.8*EQCRER2

C 求取t+θ△t β(k)(n+1)=3/2* t+θ△t εcavg (k)(n+1) / t+θ△t σavg (k)(n+1)

TERM1=(THREE/TWO*EQCRER3)/SMISES3

C 求取t+θ△t σ(k)(n+1)=(1-θ) t σ(n+1)+θ t+△t σ(k)(n+1)

DO K1=1,NTENS

STREST2(K1)=0.2*STREST(K1)+0.8*STRESS(K1)

END DO

C 计算偏应力t+θ△t S(k)(n+1)

PRESS=0.0

DO K1=1,NDI

PRESS=PRESS+STREST2(K1)/THREE

END DO

DO K1=1,NDI

DVSTRESS(K1)=STREST2(K1)-PRESS

END DO

DO K2=NDI+1,NTENS

DVSTRESS(K2)=STREST2(K2)

END DO

C 计算蠕应变、弹性应变、等效蠕应变等的增量

DO K1=1,NTENS

DECRE(K1)=TERM1*DTIME*DVSTRESS(K1)

DEELA(K1)=DSTRAN(K1)-DECRE(K1)

END DO

DEQCRE=EQCRER3*DTIME

DEQVSE=(0.2*EQVSER1+0.8*EQVSER2)*DTIME

DEQVEE=(0.2*EQVEER1+0.8*EQVEER2)*DTIME

C 收敛判定abs(△εc(k+1)(n+1)-△εc(k)(n+1))/abs(△εc(k+1)(n+1))<=toler,则结束迭代

TERM2=0.0

TERM3=0.0

DO K1=1,NTENS

TERM2=TERM2+(DECRE(K1)-DECRT(K1))**2

TERM3=TERM3+DECRE(K1)**2

END DO

TERM4=SQRT(TERM2)

TERM5=SQRT(TERM3)

TERM6=TERM4/TERM5

IF(TERM6.LE.TOLER)THEN

EXIT LOOP1

END IF

C 求取t+△t σ(k+1)(n+1)=t σ+△σ(k)(n+1)

DO K1=1,NTENS

DSTREST(K1)=0.0

END DO

DO K1=1,NTENS

DO K2=1,NTENS

DSTREST(K1)=DSTREST(K1)+DDSDDE(K1,K2)*DEELA(K2)

END DO

END DO

DO K1=1,NTENS

STREST(K1)=STRESS(K1)+DSTREST(K1)

END DO

C 把蠕变增量保存到临时数组DECRT中

     DO K1=1,NTENS

     DECRT(K1)=DECRE(K1)

     END DO

END DO LOOP1

C 更新应力

DO K1=1,NTENS

     STRESS(K1)=STREST(K1)

     END DO

C 更新状态变量,包括蠕变应变、弹性应变以及等效应变等

DO K1=1,NTENS

ECREE(K1)=ECREE(K1)+DECRE(K1)

EELAS(K1)=EELAS(K1)+DEELA(K1)

END DO

EQCRE=EQCRE+DEQCRE

EQVSE=EQVSE+DEQVSE

EQVEE=EQVEE+DEQVEE

C

END IF

C 更新JACOBIAN矩阵

DO K1=1,NTENS

DO K2=1,NTENS

DDSDDE(K1,K2)=ZERO

END DO

END DO

DO K1=1,NDI

DO K2=1,NDI

DDSDDE(K2,K1)=ELAM

END DO

DDSDDE(K1,K1)=EG2+ELAM

END DO

DO K1=NDI+1,NTENS

DDSDDE(K1,K1)=EG

END DO

C 保存状态变量

DO K1=1,NTENS

STATEV(K1)=EELAS(K1)

STATEV(K1+NTENS)=ECREE(K1)

END DO

STATEV(1+2*NTENS)=EQCRE

STATEV(2+2*NTENS)=EQVSE

STATEV(3+2*NTENS)=EQVEE

C

RETURN

END

(1条)
默认 最新
我也找了这个,有点问题,楼主捣鼓明白了吗?
评论 点赞
点赞 1 评论 1 收藏 2
关注