当前位置:首页 > ABAQUS子程序UMAT的应用
3.2. UMAT注意事项
ABAQUS的用户子程序是根据ABAQUS提供的相应接口,按照Fortran语法, 用户自己编写的代码。它是一个独立的程序单元,可以独立的被存储和编译,也能 被其它程序单元引用,因此,利用它可带回大量数据供引用程序使用,也可以用它 来完成各种特殊的功能。它的一般结构形式是:
SUBROUTINE S(x1,x2,……,xn)
INCLUDE‘ABA_PARAM.INC’(用于ABAQUS/Standard用户子程序中) OR INCLUDE‘VABA_PARAM.INC’)(用于ABAQUS/Explicit用户子程序中) …… RETURN END
x1,x2,……,xn是ABAQUS提供的用户子程序的接口参数,有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP、KINC、COORDS,有些是需要用户自己定义的,例如F,文件aba_param.inc和vaba_param.inc随着ABAQUS软件的安装而包含在操作系统中,它们含有重要的参数,帮助ABAQUS主求解程序对用户子程序进行编译和链接。当控制遇到RETURN语句时便返回到引用程序单元中去,END语句是用户子程序结束的标志。
在一个算例中,用户可以用到多个用户子程序,但必须把它们放在一个以.for为扩展名的文件中。运行带有用户子程序的算例同时有两种方法:一是在CAE中运行,在EDIT JOB菜单中的GENERAL子菜单的USER SUBROUTINE FILE对话框中选择用户子程序所在的文件即可;另外是在ABAQUS.COMMAND中运行,语法如下:
abaqus job=job-name user={source-file|object-file}
编制用户子程序时应注意
(1)用户子程序相互之间不能调用,但可以调用用户自己编写的Fortran子程序和ABAQUS应用程序。ABAQUS应用程序必须由用户子程序调用。当用户编写Fortran子程序时,建议子程序名以K开头,以免和ABAQUS内部程序冲突。
(2)当用户在用户子程序中利用OPEN打开外部文件时,要注意以下两点:一是设备号的选择是有限制的,只能取15~18和大于100的设备号,其余的都已被ABAQUS占用;二是用户需提供外部文件的绝对路径而不是相对路径。
9
(3)对于不同的用户子程序ABAQUS调用的时间是不同的,有的是在每个STEP 的开始,有的是STEP的结尾,有的是在每个INCREMENT的开始等等。当ABAQUS 调用用户子程序时,都会把当前的STEP和INCREMENT利用用户子程序的两个实 参KSTEP和KINC传给用户子程序,用户可把它们输出到外部文件中,这样就可清 楚的知道ABAQUS何时调用该用户子程序。
为保证用户子程序的正确执行,子程序的书写必须遵循ABAQUS的相关规定, 下面以用户材料子程序为例详细说明。
3.3. UMAT接口的原理
用户材料子程序(User-defined Material Mechanical Behavior,简称UMAT)是 ABAQUS提供给用户定义自己的材料属性的Fortran程序接口[7][8],使用户能使用 ABAQUS材料库中没有定义的材料模型。用户材料子程序UMAT通过与ABAQUS主求解程序的接口实现与ABAQUS的资料交流。在输入文件中,使用关键词“*USER MATERIAL”表示定义用户材料属性。
UMAT子程序具有强大的功能,使用UMAT子程序:
(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行 计算,扩充程序功能。
(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋 予ABAQUS中的任何单元。
(3)必须在UMAT中提供材料本构的雅可比(Jacobian)矩阵,即应力增量对 应变增量的变化率。
由于主程序与UMAT之间存在数据传递,甚至共享一些变量,因此必须遵守有 关UMAT的书写格式,UMAT中常用的变量在文件开头予以定义,通常格式
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,KSTEP,KINC)
INCLUDE‘ABA_PARAM.INC’
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)
user coding to define DDSDDE,STRESS,STATEV,SSE,SPD,SCD and,if necessary,RPL,DDSDDT,DRPLDE,DRPLDT,PNEWDT RETURN END
UMAT中的应力矩阵、应变矩阵以及矩阵DDSDDE、DDSDDT、DRPLDE等,都是直接分量存储在前,剪切分量存储在后。直接分量有NDI个,剪切分量有NSHR个。各分量之间的顺序根据单元自由度的不同有一些差异,所以编写UMAT时要考虑到所使用单元的类别。下面对UMAT中用到的一些变量进行说明:
DDSDDE(NTENS NTENS):一个NTENS×NTENS的矩阵,称作Jacobian矩阵 ??/????是应力的增量,??是应变的增量,DDSDDE(i,j)表示增量步结束时第j个应变分量的改变引起的第i个应力分量的变化。通常Jacobian矩阵是一个对称矩阵,除非在“*USER MATERIAL”语句中加入了“UNSYMM”参数。
STRESS(NTENS):应力张量数组,对应NDI个直接分量和NSHR个剪切分量。在增量步的开始,应力张量矩阵中的数值通过UMAT和主程序之间的接口传递到UMAT中,在增量步的结束UMAT将对应力张量矩阵更新。对于包含刚体转动的有限应变问题,一个增量步调用UMAT之前就已经对应力张量进行了刚体转动,因此UMAT中只需处理应力张量的共旋部分。UMAT中应力张量的度量为柯西应力。
STATEV(NSTATEV):用于存储与解有关的状态变量的数组,在增量步开始时将数值传递到UMAT中,也可在子程序USDFLD或UEXPAN中先更新数据,然后增量步开始时将更新后的资料传递到UMAT中。在增量步的结束必须更新状态变量矩阵中的数据。和应力张量矩阵不同的是:对于有限应变问题,除了材料本构行为引起的资料更新以外,与解有关的状态变量矩阵中的任何向量或者张量都必须通过旋转来考虑材料的刚体运动。
11
状态变量矩阵的维数通过ABAQUS输入文件中的关键词“*DEPVAR”定义,关键词下面数据行的数值即为状态变量矩阵的维数。
PROPS(NPROPS):材料常数数组。材料常数的个数,等于关键词“*USER MATERIAL”中“CONSTANTS”常数设定的值。矩阵中元素的数值对应于关键词“USER MATERIAL”下面的数据行。
SSE,SPD,SCD:分别定义每一增量步的弹性应变能,塑性耗散和蠕变耗散。 它们对计算结果没有影响,仅仅作为能量输出。 STRAN(NTENS):应变数组。 DSTRAN(NTENS):应变增量数组。 DTIME:增量步的时间增量。 NDI:直接应力分量的个数。 NSHR:剪切应力分量的个数。
NTENS:总应力分量的个数,NTENS=NDI+NSHR。
由于UMAT子程序在单元的积分点上调用,增量步开始时,主程序路径将通过 UMAT的接口进入UMAT,单元当前积分点必要变量的初始值将随之传递给UMAT 的相应变量。在UMAT结束时,变量的更新值将通过接口返回主程序。
3.4. UMAT的使用方法
我们知道,有限元计算(增量方法)的基本问题[7]是:已知第n 步的结果(应力,应变等)
?n,
?n,然后给出一个应变增量d?n?1,计算?n?1,UMAT要完成这一计算,并
要计算DDSDDE(I,J)=??/??。??是应力增量矩阵,??是应变增量矩阵,DDSDDE(I,J) 定义了第J 个应变分量的微小变化对第 I 个应力分量带来的变化。 该矩阵只影响收敛速度,不影响计算结果的准确性 (当然,不收敛自然得不到结果)。
有限元计算的中心问题就是求得节点的位移 (进而应变、应力),以使内力和 外力达到平衡:
intextF(d)?F (3-1)
d 是节点位移矩阵,黑体字表示矩阵或矢量。除了小变形、线弹性问题,方程2-1是非性的,要用迭代的方法解出:
共分享92篇相关文档