您的当前位置:首页正文

一起学习UMAT 的一些公式注释

2022-02-14 来源:钮旅网
一起学习UMAT的一些公式注释

ZHANG chunyu

herrliubs comments in formulas

知识积累和储备

在进行ABAQUS子程序UMAT的编写前,要弄清楚:ABAQUS调用UMAT子程序流程;要建立的材料模型的本构关系和屈服准则等;UMAT子程序中相关参数、以及矩阵的表达。

主要求解过程:每一个增量步开始,ABAQUS主程序在单元积分点上调用UMAT子程序,并转入应变增量、时间步长及荷载增量,同时也传入当前已知的状态的应力、应变及其他求解过程相关的变量;UMAT子程序根据本构方程求解应力增量及其他相关的变量,提供Jacobian矩阵给ABAQUS主程序以形成整体刚度矩阵;主程序结合当前荷载增量求解位移增量,继而进行平衡校核;如果不满足指定的误差,ABAQUS将进行迭代直到收敛,然后进行下一增量步的求解。 弹性力学相关知识(基本)

仿真论坛(http://forum.simwe.com/forum.php ... &highlight=UMAT) ABAQUS二次开发版块这个人帖子结合例子,列出了弹性力学的基本公式。 UMAT变量含义

UMAT中可以得到的量 增量步开始时刻的,应力(Stress),应变(Strain), 状态变量(Solution-dependent state variables (SDVs))

增量步开始时刻的,应变增量(Strain increment),转角增量(Rotation increment),变形梯度(Deformation gradient)

时间总值及增量(Total and incremental values of time),温度(Temperature),用户定义场变量

材料常数,材料点的位置,特征单元长度 当前分析步,增量步

必须定义的变量 应力,状态变量,材料Jacobian矩阵(本构关系) 可以定义的变量 应变能,塑性耗能,蠕变耗能 新建议的时间增量 变量分类

UMAT中可以直接调用(Call ……)的子程序或子函数

SINV(STRESS,SINV1,SINV2,NDI,NSHR)——用于计算应力不变量。其中:SINV1=第一应力不变量;SINV2=第二应力不变量。

SPRINC(S,PS,LSTR,NDI,NSHR) ——用于计算主应力或应变值。其中:S=应力或应变张量;PS(I),I=1,2,3, 主应力或应变值;LSTR=标识,1表示S为应力张量,2表示S为应变张量。

SPRIND(S,PS,AN,LSTR,NDI,NSHR) ——用于计算主应力或应变的方向。其中:AN(K1,I),I=1,2,3,表示PS(K1)的法向的方向余弦。

ROTSIG(S,R,SPRIME,LSTR,NDI,NSHR) ——用于复原已旋转的张量。其中:R=转角矩阵;SPRIME=已旋转的应力或应变张量。XIT——用于停止分析,并关闭所有与分析相关的文件。 Variables Define

STRESS(NTENS) 该增量步开始之前的应力向量,在增量步结束之后,必须进行更新。如果指定了初始应力,则该向量在分析开始始将保持初始应力。真实Cauchy应力。 需要定义的变量,在所有分析情况下均适用。

STATEV(NSTATV) 求解过程中的状态变量的存贮向量。在该增量步开始时,用来传递状态变量,除非进行了更新(采用USDEFL或UEXPAN)。在增量步结束时,STATEV更新为结束时刻的状态变量值。STATEV的维数(NSTATV)由*DEPVAR决定。

DDSDDE(NTENS,NTENS) Jacobian矩阵,即本构关系矩阵。?σ/?ε。除非声明采用非对称方程求解,否则均为对称矩阵DDSDDE(i, j)。

S SE、SPD、SCD 弹性应变能、塑性耗能、徐(蠕)变耗能。在该增量步结束时进行更新,并在下一增量步开始时进行传递。这些能量参数对于求解结果不起作用,除非结果采用能量形式输出。

RPL 该增量步结束时,由于材料的力学作工而产生的体积发热量。 只用于完全耦合的温度-应力分析

DDSDDT(NTENS) 与温度想对应的应力增量的变化量

DRPLDE(NTENS) 与应变增量相对应的体积发热量(RPL)的变化量 DRPLDT(NTENS) 与温度相对应的体积发热量(RPL)的变化量

STRAIN(NTENS) 该增量步开始之前的总应变向量。如果考虑了热膨胀效应,那么STRAIN仅为力学应变(即已经在总应变中减去了热膨胀得到的温度应变)。这些应变在输出结果中以“弹性”应变给出。 信息传递变量

DSTRAIN(NTENS) 应变增量向量。如果考虑了热膨胀应变,则仅表示力学应变增量。 TIME(1)

TIME(2) 当前分析步开始时刻的,时间步的值。 当前分析步开始时刻的,总时间的值。 DTIME 该增量步的时间增量

TEMP 当前增量步开始时刻的温度 DTEMP 该增量步的温度增量

PREDEF 在当前增量步开始时刻的,预定义的场变量(基于读入的节点值)的内插值向量。

DPRED 预定义的场变量的增量向量

CMNAME 用户定义的材料名。由于ABAQUS内部的一些给定材料是以“ABQ_”作为材料名,因此应尽量不采用“ABQ_”作为CMNAME的名称。 NDI 该点的直接应力分量的个数 NSHR 该点的工程剪应力分量的个数

NTENS 应力或应变向量的维数,等于NDI +NSHR。

NSTATV 求解过程中的状态变量的个数,与材料类型匹配。 PROPS(NPROPS) 用户定义的材料常数 NPROPS 用户定义的材料常数的个数

COORDS 该点的坐标向量。如果在当前分析步中没有考虑几何非线性,COORDS就等于当前坐标系下的向量。否则,COORDS为最开始的坐标向量 信息传递变量 DROT(3,3) 转角增量矩阵。代表了刚体的基本坐标系中的转角增量(该基本坐标系就是应力、应变向量存储时的坐标系)。用于用户定义子程序中的向量或矢量状态变量的转角处理,而应力及应变向量在UMAT调用之前已经进行了转角处理。在小位移分析中,该矩阵是一个单位矩阵;在大位移分析中,如果该材料点的基本坐标系随着材料坐标系转动(如壳单元或采用了局部转角坐标时),该矩阵亦是一个单位矩阵。

PNEWDT 建议的新时间增量与原时间增量(DTIME)之间的比值大小。该变量允许用户在ABAQUS/Standard中输入自动时间增量的计算法则(如果设置了自动时间增量)。对于ABAQUS/Standard的准静态分析中的自动时间增量(基于标准蠕变率积分

技术),不允许在UMAT中控制。

在每一次调用UMAT前,PNEWDT被设置为一个足够大的值。

如果没有选择自动时间增量方法,大于1.0的PNEWDT值将被忽略,而起作用的仅是当小于1.0的PNEWDT值时。 能够更新的变量 CELENT 特征单元长度。 信息传递变量

DFGRD0(3,3) 该增量步开始时刻的变形梯度向量。

DFGRD1(3,3) 该增量步结束时刻的变形梯度向量。如果在分析步中未考虑几何非线性,则该向量为零。 NOEL 单元的个数

NPT 积分点的个数 信息传递变量

LAYER 层的个数(用于复合材料的壳单元,及层结构固体单元) KSPT 当前层的截面点的个数 KSTEP 分析步的个数 KINC 增量步的个数

UMAT程序编写

相对于材料本构关系的推导验证,子程序的编写是相对简单的,在理清了

ABAQUS-UMAT变量的含义和材料的本构关系的前提下,再多看几个UAMT例子,就可以试着自己写UMAT了。我的经验是一定要把流程图画出来,根据材料的本构关系的推导公式来写UMAT程序。

程序的验证需要耐心,用简单的模型验证, 多看.dat和.msg文件。即使UMAT程序没有问题,也可能出错,这时就要认真看本构推导公式,并和程序中的变量一一对应。

UMAT子程序中最重要也是最难的是材料的本构关系的推导!

1、什么时候用用户定义材料(User-defined material, UMAT)?

很简单,当ABAQUS没有提供我们需要的材料模型时。所以,在决定自己定义一种新的材料模型之前,最好对ABAQUS已经提供的模型心中有数,并且尽量使用现有的模型,因为这些模型已经经过详细的验证,并被广泛接受。

2、好学吗?需要哪些基础知识?

先看一下ABAQUS手册(ABAQUS Analysis User's Manual)里的一段话:

Warning: The use of this option generally requires considerable expertise.The user is cautioned that the implementation of any realistic constitutive model requires extensive development and testing. Initial testing on a single element model with prescribed traction loading is strongly recommended.

但这并不意味着非力学专业,或者力学基础知识不很丰富者(就如我本人☺)就只能望洋兴叹,因为我们的任务不是开发一套完整的有限元软件,

而只是提供一个描述材料力学性能的本构方程(Constitutive equation)而已。当然,最基本的一些概念和知识还是要具备的,比如

应力(stress),应变(strain)及其分量; volumetric part和deviatoric part;模量(modulus)、泊松比(Poisson’s ratio)、拉美常数(Lame constant);矩阵的加减乘除甚至求逆;还有一些高等数学知识如积分、微分等。

3、UMAT的基本任务?

我们知道,有限元计算(增量方法)的基本问题是:

已知第n步的结果(应力,应变等) σn ,εn; 然后给出一个应变增量

dεn1, 计算新的应力 σn1 。 UMAT要完成这一计算,并要计算Jacobian矩阵DDSDDE(I,J) =Δσ/Δε。Δσ是应力增量矩阵(张量或许更合适),Δε是应变增量矩阵。DDSDDE(I,J) 定义了第J个应变分量的微小变化对第I个应力分量带来的变化。该矩阵只影响收敛速度,不影响计算结果的准确性(当然,不收敛自然得不到结果)。

4、怎样建立自己的材料模型?

本构方程就是描述材料应力应变(增量)关系的数学公式,不是凭空想象出来的,而是根据实验结果作出的合理归纳。比如对弹性材料,实验发现应力和应变同步线性增长,所以用一个简单的数学公式描述。为了解释弹塑性材料的实验现象,又提出了一些弹塑性模型,并用数学公式表示出来。 对各向同性材料(Isotropic material),经常采用的办法是先研究材料单向应力-应变规律(如单向拉伸、压缩试验),并用一数学公式加以描述,然后把讲该规律推广到各应力分量。这叫做“泛化“(generalization)。

5、一个完整的例子及解释

下面这个UMAT取自ABAQUS手册,是一个用于大变形下的弹塑性材料模型。希望我的注释能帮助初学者理解。需要了解J2理论。

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)

STRESS--应力矩阵,在增量步的开始,保存σn并作为已知量传入UMAT ;在增量步的结束应该保存更新的应力σn1; STRAN--当前应变εn,已知 。 DSTRAN—应变增量dεn1,已知。

STATEV--状态变量矩阵,用来保存用户自己定义的一些变量,如累计塑性应变,粘弹性应变等等。增量步开始时作为已知量传入,增量步结束应该更新;

DDSDDE=。需要更新 DTIME—时间增量dt。已知。

NDI—直接应力、应变个数,对三维问题、轴对称问题自然是3(11,22,33),平面问题是2(11,22);已知。

NSHR —剪切应力、应变个数,三维问题时3(12,13,23),轴对称问题是1(12);已知。

NTENS=NTENS+ NSHR,已知。

PROPS材料常数矩阵,如模量啊,粘度系数啊等等;作为已知量传入,已知。

DROT—对finite strain问题,应变应该排除旋转部分,该矩阵提供了旋转矩阵,详见下面的解释。已知。

PNEWDT—可用来控制时间步的变化。如果设置为小于1的数,则程序放弃当前计算,并用新的时间增量DTIME X PNEWDT作为新的时间增量计算;这对时间相关的材料如聚合物等有用;如果设为大余1的数,则下一个增量步加大DTIME为DTIME X PNEWDT。可以更新。 其他变量含义可参看手册,暂时用不到。 C

INCLUDE 'ABA_PARAM.INC'

定义了一些参数,变量什么的,不用管 C

CHARACTER*8 CMNAME C

DIMENSION

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

DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS), 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 EPLAS - PLASTIC STRAINS

C FLOW - DIRECTION OF PLASTIC FLOW

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

C

局部变量,用来暂时保存弹性应变、塑性应变分量以及流动方向 DIMENSION EELAS(6),EPLAS(6),FLOW(6) C

PARAMETER(ZERO=0.D0,ONE=1.D0,TWO=2.D0,THREE=3.D0,SIX=6.D0, 1 ENUMAX=.4999D0,NEWTON=10,TOLER=1.0D-6) C

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

C UMAT FOR ISOTROPIC ELASTICITY AND ISOTROPIC MISES PLASTICITY

C CANNOT BE USED FOR PLANE STRESS

C ---------------------------------------------------------------- C PROPS(1) - E C PROPS(2) - NU

C PROPS(3..) - SYIELD AN HARDENING DATA

C CALLS HARDSUB FOR CURVE OF YIELD STRESS VS. PLASTIC STRAIN

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

C ELASTIC PROPERTIES C

获取杨氏模量,泊松比,作为已知量由PROPS向量传入 EMOD=PROPS(1) E ENU=PROPS(2) ν

EBULK3=EMOD/(ONE-TWO*ENU) 3K EG2=EMOD/(ONE+ENU) 2G EG=EG2/TWO G EG3=THREE*EG 3G

ELAM=(EBULK3-EG2)/THREE λ DO K1=1,NTENS DO K2=1,NTENS

DDSDDE(K1,K2)=ZERO END DO END DO

弹性部分,Jacobian矩阵很容易计算

注意,在ABAQUS中,剪切应变采用工程剪切应变的定义ijui,juj,i,所以剪切部分模量是G而不是2G! C

C ELASTIC STIFFNESS C

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

C RECOVER ELASTIC AND PLASTIC STRAINS AND ROTATE FORWARD

C ALSO RECOVER EQUIVALENT PLASTIC STRAIN C

读取弹性应变分量,塑性应变分量,并旋转(调用了ROTSIG),分别保存在EELAS和EPLAS中;

CALL ROTSIG(STATEV( 1),DROT,EELAS,2,NDI,NSHR)

CALL ROTSIG(STATEV(NTENS+1),DROT,EPLAS,2,NDI,NSHR) 读取等效塑性应变 STATEV中的第13个量 EQPLAS=STATEV(1+2*NTENS)

先假设没有发生塑性流动,按完全弹性变形计算试算应力σJ.ε σn1σnσ

C

C CALCULATE PREDICTOR STRESS AND ELASTIC STRAIN 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计算Mises应力

C CALCULATE EQUIVALENT VON MISES STRESS C

SMISES=(STRESS(1)-STRESS(2))**2+(STRESS(2)-STRESS(3))**2 1 +(STRESS(3)-STRESS(1))**2 DO K1=NDI+1,NTENS

SMISES=SMISES+SIX*STRESS(K1)**2 END DO

SMISES=SQRT(SMISES/TWO)

C 根据当前等效塑性应变,调用HARDSUB得到对应的屈服应力

C GET YIELD STRESS FROM THE SPECIFIED HARDENING CURVE C

NVALUE=NPROPS/2-1

CALL HARDSUB(SYIEL0,HARD,EQPLAS,PROPS(3),NVALUE)

C

C DETERMINE IF ACTIVELY YIELDING

C 如果Mises应力大余屈服应力,屈服发生,计算流动方向 IF (SMISES.GT.(ONE+TOLER)*SYIEL0) THEN C

C ACTIVELY YIELDING

C SEPARATE THE HYDROSTATIC FROM THE DEVIATORIC STRESS C CALCULATE THE FLOW DIRECTION C

SHYDRO=(STRESS(1)+STRESS(2)+STRESS(3))/THREE 静水压力 DO K1=1,NDI

FLOW(K1)=(STRESS(K1)-SHYDRO)/SMISES 流动方向 END DO

DO K1=NDI+1,NTENS

FLOW(K1)=STRESS(K1)/SMISES END DO

C根据J2理论并应用Newton-Rampson方法求得等效塑性应变增量 C SOLVE FOR EQUIVALENT VON MISES STRESS

C AND EQUIVALENT PLASTIC STRAIN INCREMENT USING NEWTON ITERATION C

SYIELD=SYIEL0 DEQPL=ZERO

DO KEWTON=1,NEWTON

RHS=SMISES-EG3*DEQPL-SYIELD DEQPL=DEQPL+RHS/(EG3+HARD) CALL

HARDSUB(SYIELD,HARD,EQPLAS+DEQPL,PROPS(3),NVALUE) IF(ABS(RHS).LT.TOLER*SYIEL0) GOTO 10 END DO C

C WRITE WARNING MESSAGE TO THE .MSG FILE C

WRITE(7,2) NEWTON

2 FORMAT(//,30X,'***WARNING - PLASTICITY ALGORITHM DID NOT ',

1 'CONVERGE AFTER ',I3,' ITERATIONS') 10 CONTINUE

C更新应力n1,应变分量

C UPDATE STRESS, ELASTIC AND PLASTIC STRAINS AND C EQUIVALENT PLASTIC STRAIN C

DO K1=1,NDI

STRESS(K1)=FLOW(K1)*SYIELD+SHYDRO

EPLAS(K1)=EPLAS(K1)+THREE/TWO*FLOW(K1)*DEQPL EELAS(K1)=EELAS(K1)-THREE/TWO*FLOW(K1)*DEQPL

END DO

DO K1=NDI+1,NTENS

STRESS(K1)=FLOW(K1)*SYIELD

EPLAS(K1)=EPLAS(K1)+THREE*FLOW(K1)*DEQPL EELAS(K1)=EELAS(K1)-THREE*FLOW(K1)*DEQPL END DO

EQPLAS=EQPLAS+DEQPL C

C CALCULATE PLASTIC DISSIPATION C

SPD=DEQPL*(SYIEL0+SYIELD)/TWO C

C 计算塑性变形下的Jacobian矩阵

FORMULATE THE JACOBIAN (MATERIAL TANGENT) C FIRST CALCULATE EFFECTIVE MODULI C

EFFG=EG*SYIELD/SMISES EFFG2=TWO*EFFG

EFFG3=THREE/TWO*EFFG2

EFFLAM=(EBULK3-EFFG2)/THREE

EFFHRD=EG3*HARD/(EG3+HARD)-EFFG3

经典弹塑性理论,应力表达式式如下:prijijsijkk133其中:ijplijpl,ijSijpr/pr2对时间取微分:prijijsijsijkk13其中:ijSijprprSijprpr(pr)2Sijprprprpr3SijprSklSkl2(pr)32G(ij1/3ijmm)pr3Gijkl(kl1/3klmm)prds3GpprdhSkl/prklpdh3G1pr那么ijijsijsijkk3pr2G(ij1/3ijmm)3Gijkl(kl1/3klmm)ijSkl/prsshklKijmmprprh/3G12Gsijmm2Gs3GijklsijklGijklijmms[Kijmm]hklkl3prprijprh/3G1prGijklkls2Gs2Gs3Gsh(K)[]mmijmm3prprijh/3G1prijklklprGijklklsGijsSkprk注意:mmmm0(Skpr)k0prpr2()Gds2如果令:G*=prs,*K-G*,h3dplh则:ij*ijmm2G*ij[3G*]ijklklh/3G1s

=======================================

if (props(7).lt..001) go to 99 c...

DO K1=1,NDI DO K2=1,NDI

DDSDDE(K2,K1)=EFFLAM END DO

DDSDDE(K1,K1)=EFFG2+EFFLAM END DO

DO K1=NDI+1,NTENS DDSDDE(K1,K1)=EFFG END DO

DO K1=1,NTENS DO K2=1,NTENS

DDSDDE(K2,K1)=DDSDDE(K2,K1)+EFFHRD*FLOW(K2)*FLOW(K1) END DO

END DO c...

99 continue c...

ENDIF

C将弹性应变,塑性应变分量保存到状态变量中,并传到下一个增量步 C STORE ELASTIC AND (EQUIVALENT) PLASTIC STRAINS C IN STATE VARIABLE ARRAY C

DO K1=1,NTENS

STATEV(K1)=EELAS(K1)

STATEV(K1+NTENS)=EPLAS(K1) END DO

STATEV(1+2*NTENS)=EQPLAS C

RETURN END c...

c...子程序,根据等效塑性应变,利用插值的方法得到对应的屈服应力 SUBROUTINE HARDSUB(SYIELD,HARD,EQPLAS,TABLE,NVALUE) C

INCLUDE 'ABA_PARAM.INC' C

DIMENSION TABLE(2,NVALUE) C

PARAMETER(ZERO=0.D0) C

C SET YIELD STRESS TO LAST VALUE OF TABLE, HARDENING TO ZERO C

SYIELD=TABLE(1,NVALUE) HARD=ZERO

C IF MORE THAN ONE ENTRY, SEARCH TABLE C

IF(NVALUE.GT.1) THEN DO K1=1,NVALUE-1 EQPL1=TABLE(2,K1+1)

IF(EQPLAS.LT.EQPL1) THEN EQPL0=TABLE(2,K1)

IF(EQPL1.LE.EQPL0) THEN WRITE(7,1)

1 FORMAT(//,30X,'***ERROR - PLASTIC STRAIN MUST BE `, 1 `ENTERED IN ASCENDING ORDER') CALL XIT ENDIF C

C CURRENT YIELD STRESS AND HARDENING C 通过插值得到的硬化 DEQPL=EQPL1-EQPL0 SYIEL0=TABLE(1,K1) SYIEL1=TABLE(1,K1+1) DSYIEL=SYIEL1-SYIEL0 HARD=DSYIEL/DEQPL

SYIELD=SYIEL0+(EQPLAS-EQPL0)*HARD GOTO 10 ENDIF END DO 10 CONTINUE ENDIF RETURN END

因篇幅问题不能全部显示,请点此查看更多更全内容