飞翔的fresh 发表于 2012-7-11 09:35:02

UMAT学习总结

                         UMAT学习总结
知识积累和储备
        在进行ABAQUS子程序UMAT的编写前,要弄清楚:ABAQUS调用UMAT子程序流程;要建立的材料模型的本构关系和屈服准则等;UMAT子程序中相关参数、以及矩阵的表达。
        主要求解过程:每一个增量步开始,ABAQUS主程序在单元积分点上调用UMAT子程序,并转入应变增量、时间步长及荷载增量,同时也传入当前已知的状态的应力、应变及其他求解过程相关的变量;UMAT子程序根据本构方程求解应力增量及其他相关的变量,提供Jacobian矩阵给ABAQUS主程序以形成整体刚度矩阵;主程序结合当前荷载增量求解位移增量,继而进行平衡校核;如果不满足指定的误差,ABAQUS将进行迭代直到收敛,然后进行下一增量步的求解。
        弹性力学相关知识(基本)
          仿真论坛(http://forum.simwe.com/forum.php?mod=viewthread&tid=995421&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子程序中最重要也是最难的是材料的本构关系的推导!

       

guyuezhihu 发表于 2012-7-11 09:44:38

沙发?先占位学习!

donghuaubc 发表于 2012-8-12 14:24:52

谢谢!:)

lxzzwn1004 发表于 2013-2-1 10:40:34

好帖子啊 谢谢 学习了

dingdong2011 发表于 2013-2-25 19:58:21

你好,在ABAQUS User's Manual**别建议进行单元测试,对单元分别进行单轴拉伸、压缩及纯剪条件下的计算,请问单元所受的应力,应该依据什么确定?

leecoming 发表于 2013-2-28 10:32:31

赞+++++啊!

leevis 发表于 2013-3-22 20:48:30

看来楼主这方面强人啊

leevis 发表于 2013-4-2 15:20:17

大侠,问你一个问题,我也在做umat,在umat中要调用AHARD,看了一些列子 ,就是不是很明白在子程序中AHARD中大家引用的 TABLE,是什么意思 TABLE指代的是那里的数据

飞翔的fresh 发表于 2013-4-2 20:23:39

leevis 发表于 2013-4-2 15:20 static/image/common/back.gif
大侠,问你一个问题,我也在做umat,在umat中要调用AHARD,看了一些列子 ,就是不是很明白在子程序中AHARD ...

Mises各向同性的子程序中,调用硬化曲线函数中的Table(2,nvalue)这个二维数
值保存是应力应变曲线的数据

飞翔的fresh 发表于 2013-4-2 20:40:49

leevis 发表于 2013-4-2 15:20 static/image/common/back.gif
大侠,问你一个问题,我也在做umat,在umat中要调用AHARD,看了一些列子 ,就是不是很明白在子程序中AHARD ...

CALL HARDSUB(SYIEL0,HARD,EQPLAS,PROPS(3),NVALUE)
。。。。。。
SUBROUTINE HARDSUB(SYIELD,HARD,EQPLAS,TABLE,NVALUE)
你可能没有理解这个程序的结构,HARDSUB()是一个子程序,不是主程序,主UMAT程序调用HARDSUB()。程序中的table只在子程序中起作用,而在主程序中,table被赋值给PROPS(3)。

leevis 发表于 2013-4-2 22:46:37

飞翔的fresh 发表于 2013-4-2 20:40 static/image/common/back.gif
CALL HARDSUB(SYIEL0,HARD,EQPLAS,PROPS(3),NVALUE)
。。。。。。
SUBROUTINE HARDSUB(SYIELD,HARD,EQP ...

不好意思在问你一句,比如说在子程序中,A=TABLE(1),B=TABLE(2),是不是说吧table(1)赋值给A,但是table(1)指代的是什么数据

guojunhang 发表于 2013-4-3 12:00:59

飞翔的fresh 发表于 2013-4-2 20:40 static/image/common/back.gif
CALL HARDSUB(SYIEL0,HARD,EQPLAS,PROPS(3),NVALUE)
。。。。。。
SUBROUTINE HARDSUB(SYIELD,HARD,EQP ...

把props(3)的地址传给table的首地址,table数组的内容是:

wuyage 发表于 2013-5-19 23:34:57

好贴 ,学习了

李小倩 发表于 2013-5-25 15:27:26

大哥,问你一个问题,我编写了一个含损伤弹性本构方程,没考虑塑性,这样材料是非线性的,应该是按照UMAT的一般编写步鄹就可以计算了,可是结果很奇怪,应力应变关系还是直线,是怎么回事啊

lxzzwn1004 发表于 2013-5-25 22:17:20

不错不错 作为基础很好的

@小白 发表于 2015-9-29 09:52:52

:)学习了。谢谢楼主

yuyinweisan 发表于 2015-9-29 10:10:54

可以用到感谢楼主

wujianyu18 发表于 2015-10-10 17:06:00

好帖。。。顶起

断水流 发表于 2016-10-14 14:45:20

最喜欢看心得体会

tml2012 发表于 2016-10-14 18:05:53

谢谢楼主分享
页: [1] 2
查看完整版本: UMAT学习总结