仿真干货丨基于ABAQUS-UMAT(User Material Subroutine)本构模型开发
01
有限元软件ABAQUS支持用户自定义材料模型,相应的自定义模型程序称为用户材料子程序(User-Material Subroutine,简称UMAT)。通过此方法可以开发各类非线性本构关系并应用于工程结构的有限元分析中。ABAQUS中UMAT应具备以下的特点:
可以用来描述材料的力学行为;
在单元的每一个积分点均可进行计算;
可用于任何力学问题的分析;
可调用与计算结果相关的状态变量;
必须在增量步结束时刻更新应力和状态变量;
需提供与力学本构模型相关的材料雅可比矩阵,也就是一致性切线刚度矩阵;
可与用户自定义场变量子程序(USDFLD)一起使用;
编程语言为FORTRAN 77。
基于ABAQUS的规则,UMAT子程序需要有以下声明要求:
SUBROUTINEUMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1RPL,DDSDDT,DRPLDE,DRPLDT,
2STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
3NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
4CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
2STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
3PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),
4JSTEP(4)
必须定义的变量 DDSDDE, STRESS, STATEV
可以定义的变量(但是针对基于能量相关的本构模型,必须定义) SSE, SPD, SCD
RETURN
END
必须定义的变量:
DDSDDE(NTENS,NTENS)
该数组也就是雅可比矩阵。例如DDSDDE(I,J)表示第I个应力分量在时间增量步结束时由第J个应变分量的小扰动引起的变化。NTENS表示应力分量的个数。需要说明的是ABAQUS的默认求解设置只采用DDSDDE矩阵的对称部分进行求解。对于非对称的雅可比矩阵需要进行非对称求解设置。除此之外,雅可比矩阵,即一致性切线刚度矩阵,能够保证整体牛顿迭代的快速收敛性,但是具有较小误差的一致性切线刚度矩阵只影响收敛的速度,并不影响结果的正确性。
STRESS(NTENS)
该数组表示应力张量分量,在增量步开始时由ABAQUS传递给UMAT,并在增量步结束时必须进行更新。需要注意的是,在有限应变变形的问题中,在调用UMAT之前,考虑到刚体转动需要进行应力张量旋转,因而在UMAT中只需要实现应力积分的共旋部分,使用的应力是柯西(Cauchy)应力。
STATEV(NTENS)
该数组表示与解相关的状态变量,可以理解为需要传递的中间变量。在增量步开始时具有ABAQUS传递的初值,在增量步结束时必须进行更新。该数组的变量个数由用户根据本构方程中涉及的具体变量数目进行自定义。
SSE,SPD, SCD
此三个变量分别表示比弹性应变能、塑性耗散和蠕变耗散,同样也需要在增量步结束时完成更新。对于非能量形式的解则不受影响。
信息传递变量:
02
将编写好的UMAT进行单元验证是非常重要的一步,很多教程中的单元验证都是简单的单调拉伸或者压缩,这对于各向同性材料而言无可厚非,但是对于静水敏感的本构模型或者是各向异性的本构模型是不够充分的。对于静水压力敏感的材料建议进行:单调拉伸、压缩以及剪切三种工况的验证;对于各向异性材料最好进行六种工况的验证(三个主应变方向和三个剪切应变方向)。此外,还有一个很重要的原因是,单个工况的验证具有欺骗性,掩盖UMAT子程序鲁棒性不强的缺点,因此多工况下的单元验证可以在进行大规模有限元计算之前发现bug,及时Degug。
本算例针对静水压力敏感(含损伤)的本构模型进行的单元的验证:
参数输入:
单调压缩:
单调剪切:
03
SDV9 代表单元的损伤(云图中Cohesive单元没有删除)。
04