Abaqus使用心得分享

Abaqus2021的接口程序;Johnson-Cook本构

看了很多本构模型的代码,也走了很多弯路,“error”千奇百怪

最后总算能跑完程序了

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
     1 RPL,DDSDDT,DRPLDE,DRPLDT,
     2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
     3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*80 CMNAME
      DIMENSION STRESS(NTENS),STATEV(NSTATV),
     1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
     2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
     3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),
     4 JSTEP(4)
C    数值及矩阵尺寸声明
      PARAMETER(ZERO=0.0D0,ONE=0.0D0,TWO=2.0D0,THREE=3.0D0,SIX=6.0D0)
      DIMENSION EELAS(6),EPLAS(6),FLOW(6)
      DATA NEWTON,TOLER/20,1.D-6/

C     读取材料参数
      E=PROPS(1)
      ENU=PROPS(2)
      A=PROPS(3)
      B=PROPS(4)
      EN=PROPS(5)
C     计算材料参数
      EBULK3=E/(ONE-TWO*ENU)
      EG2=E/(ONE+ENU)
      EG=EG2/TWO
      EG3=THREE*EG
      ELAM=(EBULK3-EG2)/THREE
C     计算材料弹性刚度矩阵DDSDDE
      DO 20 K1=1,NTENS
          DO 10 K2=1,NTENS
              DDSDDE(K2,K1)=0.0
10        CONTINUE
20    CONTINUE
      DO 40 K1=1,NDI
          DO 30 K2=1,NDI
              DDSDDE(K2,K1)=ELAM
30        CONTINUE
          DDSDDE(K1,K1)=ELAM+EG2
40    CONTINUE
      DO 50 K1=NDI+1,NTENS
          DDSDDE(K1,K1)=EG
50    CONTINUE
C     读取等效塑性应变、弹性应变、塑性应变
      EQPLAS=STATEV(1+2*NTENS)
      DO 60 K1=1,NTENS
          EELAS(K1)=STATEV(K1)+DSTRAN(K1)
          EPLAS(K1)=STATEV(K1+NTENS)
60    CONTINUE
C     计算试应力
      DO 80 K1=1,NTENS
          DO 70 K2=1,NTENS
          STRESS(K2)=STRESS(K2)+DDSDDE(K2,K1)*DSTRAN(K1)
70        CONTINUE
80    CONTINUE
      IF(NPROPS.GT.2.AND.PROPS(3).GT.0.0) THEN
C     计算米塞斯等效试应力SMISES
      SMISES=(STRESS(1)-STRESS(2))*(STRESS(1)-STRESS(2))
     1      +(STRESS(2)-STRESS(3))*(STRESS(2)-STRESS(3))
     1      +(STRESS(3)-STRESS(1))*(STRESS(3)-STRESS(1))
      SMISES=SMISES+SIX*(STRESS(4)*STRESS(4)+STRESS(5)*STRESS(5)
     1      +STRESS(6)*STRESS(6))
      SMISES=SQRT(SMISES/TWO)
C     计算硬化率和当前屈服应力
      CALL USERHARD(SYIEL0,HARD,EQPLAS,PROPS,NPROPS)
C     判断材料是否处于屈服阶段
      IF (SMISES.GT.(1.0+TOLER)*SYIEL0) THEN
C     计算塑性流动方向
C     计算静水压力SHYDRO
      SHYDRO=(STRESS(1)+STRESS(2)+STRESS(3))/THREE
      ONESY=ONE/SMISES
          DO 90 K1=1,NDI
              FLOW(K1)=(STRESS(K1)-SHYDRO)*ONESY
90        CONTINUE
          DO 100 K1=NDI+1,NTENS
              FLOW(K1)=STRESS(K1)*ONESY
100       CONTINUE
C     牛顿迭代
          SYIELD=SYIEL0
          DEQPL=(SMISES-SYIELD)/EG3
          DO 110 KEWTON=1,NEWTON
              CALL USERHARD(SYIELD,HARD,EQPLAS+DEQPL,PROPS,NPROPS)
              RHS=SMISES-EG3*DEQPL-SYIELD
              DEQPL=DEQPL+RHS/(EG3+HARD)
          IF (ABS(RHS).LE.TOLER*SYIEL0) GOTO 10
110       CONTINUE
C     将警告消息写入.dat文件
		WRITE(6,2) NEWTON
2		FORMAT(//,30X,'***WARNING - PLASTICITY ALGORITHM DID NOT ',
	1		'CONVERGE AFTER ',I3,' ITERATIONS')
120   CONTINUE
C     计算此增量步硬化段斜率
      EFFHRD=EG3*HARD/(EG3+HARD)
C     计算应力和更新应变
          DO 130 K1=1,NDI
              STRESS(K1)=FLOW(K1)*SYIELD+SHYDRO
              EPLAS(K1)=EPLAS(K1)+THREE*FLOW(K1)*DEQPL/TWO
              EELAS(K1)=EELAS(K1)-THREE*FLOW(K1)*DEQPL/TWO
130       CONTINUE
          DO 140 K1=DNI+1,NTENS
              STRESS(K1)=FLOW(K1)*SYIELD
              EPLAS(K1)=EPLAS(K1)+THREE*FLOW(K1)*DEQPL
              EELAS(K1)=EELAS(K1)-THREE*FLOW(K1)*DEQPL
140       CONTINUE
          EQPLAS=EQPLAS+DEQPL
C     计算塑性变形下的雅克比矩阵
          EFFG=EG*SYIELD/SMISES
          EFFG2=TWO*EFFG
          EFFG3=THREE*EFFG2/TWO
          EFFLAM=(EBULK3-EFFG2)/THREE
          DO 160 K1=1,NDI
              DO 150 K2=1,NDI
                  DDSDDE(K2,K1)=EFFLAM
150           CONTINUE
              DDSDDE(K1,K1)=EFFG2+EFFLAM
160       CONTINUE
          DO 170 K1=NDI+1,NTENS
              DDSDDE(K1,K1)=EFFG
170       CONTINUE
          DO 190 K1=1,NTENS
              DO 180 K2=1,NTENS
                  DDSDDE(K2,K1)=DDSDDE(K2,K1)+FLOW(K2)*FLOW(K1)
     1         *(EFFHRD-EFFG3)
180           CONTINUE
190       CONTINUE
        END IF
      END IF
C     将弹性应变,塑性应变分量和等效塑性应变保存到状态变量中,并
C     传递到下一个增量步
      DO 200 K1=1,NTENS
          STATEV(K1)=EELAS(K1)
          STATEV(K1+NTENS)=EPLAS(K1)
200   CONTINUE
      STATEV(1+2*NTENS)=EQPLAS
      STATEV(2+2*NTENS)=SYIELD
      STATEV(3+2*NTENS)=DEQPL
      STATEV(4+2*NTENS)=HARD
      STATEV(5+2*NTENS)=EQPLAS**EN
      STATEV(6+2*NTENS)=B*(EQPLAS**(EN-1))
      RETURN
      END

      SUBROUTINE USERHARD(SYIELD,HARD,EQPLAS,PROPS,NPROPS)
C
      INCLUDE 'ABA_PARAM.INC'
      DIMENSION PROPS(NPROPS)

      A=PROPS(3)
      B=PROPS(4)
      EN=PROPS(5)
      HARD=0.0
      IF(EQPLAS.EQ.0.0) THEN
        SYIELD=A
      ELSE
          HARD=EN*B*EQPLAS**(EN-1)
          SYIELD=A+B*EQPLAS**EN
      END IF
      RETURN
      END

注意事项(每项都是血的教训):

1、Fortran语言遵循IN原则,即i、j、k、l、m、n(包括大写)都是整型变量,说白了就是整数,所以参数赋值的时候避开以这些开头。

2、最让我不能理解的是里面的“continue”如果换成“end do”就会出错,到现在我也不知道为什么,反正就老老实实打上编号用“continue”就完事了。

3、如果程序老出错可以多弄点中间变量,在后处理数据时好查错。

未完...

       后续有时间可能会把验证子程序用的有限元模型和子程序里面的部分公式附上(可以用来对比Abaqus和UMAT子程序编的J-C),因为加上模型出错后,会分不清到底是模型错了,还是程序错了。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空