ABAQUS二次开发资料UMAT.docx
- 文档编号:25107339
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:61
- 大小:52.43KB
ABAQUS二次开发资料UMAT.docx
《ABAQUS二次开发资料UMAT.docx》由会员分享,可在线阅读,更多相关《ABAQUS二次开发资料UMAT.docx(61页珍藏版)》请在冰豆网上搜索。
ABAQUS二次开发资料UMAT
各个楼层及内容索引
2-------------------------------------什么是UMAT
3-------------------------------------UMAT功能简介
4-------------------------------------UMAT开始的变量声明
5-------------------------------------UMAT中各个变量的详细解释
6-------------------------------------关于沙漏和横向剪切刚度
7-------------------------------------UMAT流程和参数表格实例展示
8-------------------------------------FORTRAN语言中的接口程序Interface
9-------------------------------------关于UMAT是否可以用Fortran90编写的问题
10-17--------------------------------Fortran77的一些有用的知识简介
20-25\30-32-----------------------弹塑性力学相关知识简介
34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载
38-------------------------------------JOhn-cook模型本构简介图
40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢迎大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带""部分,还望各位大师\同仁指教]
1什么是UMAT
1.1UMAT功能简介!
!
!
[-摘自庄茁老师的书
UMAT子程序具有强大的功能,使用UMAT子程序:
(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序
功能。
ABAQUS软件2003年度用户年会论文集
(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQUS中
的任何单元;
(3)必须在UMAT中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量
的变化率。
(4)可以和用户子程序“USDFLD”联合使用,通过“USDFLD”重新定义单元每一物质点上传
递到UMAT中场变量的数值。
1.2UMAT开始的变量声明
由于主程序与UMAT之间存在数据传递,甚至共用一些变量,因此必须遵守有关书写格式,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,KSTEP,KINC)
C
INCLUDE'ABA_PARAM.INC'-----此处是将ABAQUS本身自带的参量精度定义的文件包含进来[后面详说]
C
CHARACTER*80CMNAME
DIMENSIONSTRESS(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)
-------------------------------以上是变量声明吧!
usercodingtodefineDDSDDE,STRESS,STATEV,SSE,SPD,SCD
and,ifnecessary,RPL,DDSDDT,DRPLDE,DRPLDT,PNEWDT
-------------------------------此处,看来是将用户定义材料属性的fortran程序编入
RETURN------------------这是返回值
END------------------------结束
UMAT中各个变量的详细解释[凡是-注明david的,都是我自己猜的,仅供参考]
DDSDDE(NTENS,NTENS)
是一个NTENS[NumberoftheTensions----david]维的方阵,称作雅可比矩阵,应力增量/应变增量的偏导数,DDSDDE(I,J)表示增量步结束时第J个应变分量的改变引起的第I个应力增量的变化!
雅可比是一个对称矩阵,除非在“*USERMATERIAL”语句中加"UNSYMM"参数
STRESS(NTENS)
应力张量矩阵,对应NDI[NumberoftheDirectComponents--david]个直接分量和NSHR[NumberoftheshearComponents-david]个剪切分量.在增量步的开始,应力张量矩阵中的数值通过UMAT和主程序之间的接口传递到UMAT中,在增量步的结束,UMAT将对应力张量矩阵更新,即[return].对于包含刚体转动的有限应变问题,一个增量步条用UMAT之前就已经对应力张量进行了刚体转动,因此在UMAT中只需处理应力张量的共旋部分-------这部分我没看明白,敬请高手指点.UMAT中应力张量的度量为柯西(真实)应力
STATEV(NSTATEV)[STATEVARIABLES(NumberoftheStateVariables)]
?
?
用于存储状态变量的矩阵,在增量步开始时将数值传递到UMAT中。
也可在子程序USDFLD或UEXPAN中先更新数据,然后增量步开始时将更新后的数据传递到UMAT中。
在增量步的结束必须更新状态变量矩阵中的数据。
?
?
?
?
和应力张量矩阵不同的是:
对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。
-----不懂,请高手指教
?
?
?
?
状态变量矩阵的维数NATATEV,等于关键字“*DEPVAR”定义的数值。
状态变量矩阵的维数通过ABAQUS输入文件中的关键字“*DEPVAR”定义,关键字下面数据行的数值即为状态变量矩阵的维数。
?
?
?
?
材料常数的个数,等于关键字“*USERMATERIAL”中“CONSTANTS”常数设定的值。
PROPS(NPROPS)
材料常数矩阵,矩阵中元素的数值对应于关键字“*USERMATERIAL”下面的数据行。
SSE,SPD,SCD
分别定义每一增量步的弹性应变能[ElasticStrainEnergy],塑性耗散[PlasticDissipation]和蠕变耗散[CreepDissipation]。
它们对计算结果没有影响,仅仅作为能量输出。
STRAN(NTENS):
应变矩阵;
DSTRAN(NTENS):
[D--大抵代表Deta,增量的意思-david]应变增量矩阵;
DTIME:
增量步的时间增量;
NDI:
直接应力分量的个数;
NSHR:
剪切应力分量的个数;
NTENS:
总应力分量的个数,NTENS=NDI+NSHR。
1.3关于沙漏刚度控制和横向剪切刚度
使用UMAT时需要注意单元的沙漏控制刚度和横向剪切刚度。
通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。
这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“*ELASTIC”选项定义。
但是使用UMAT的时候,ABAQUS对程序输入文件进行预处理的时候得不到剪切模量的数值。
所以这时候用户必须使用“*HOURGLASSSTIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSESHEARSTIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度。
------------
一个问题:
得不到剪切模量的数值
和
解决方案:
用户必须使用“*HOURGLASSSTIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSESHEARSTIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度
1.4关于UMAT的流程图和参数表格实例
跟大家说说所谓的接口程序Interface--FORTRAN的知识
在Fortan语言中,主调程序和被调程序是分别编译的.由于Fortran90对过程的许多功能做了扩充,有些功能单靠简单的调用语句已经无法反应,因而系统也就无法进行正确的编译,这时需要在主调程序中加入interface接口块,通过它为主调程序和被调程序指明一个显示的接口.如果被调用中哑元含有假定形状[assumed-shape]数组,或可选变元,或含键盘输入的参数,就需要interface接口块说明.一般来讲,在Fortran90程序之间需要提供interface块有三种方法:
1.将interface接口块直接写入调用程序,并复制被调用程序的参数列表这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化,就必须相应改变interface接口块和调用[call]语句.
2.可以将一个软件包中所有程序的interface块写入一个模块中,该模块被软件包中的所有程序使用.这样做的优点是只需一个模块来检查interface定义,缺点是仍需对此模块和调用语句进行维护.
3.Fortran90编译器可在contains语句后自动提供过程之间的interface块,这种interface块可用于使用模块的任何程序.
建议在同一个软件包中使用2\3的形式,在调用软件包的入口程序时采用1\2的形式!
[是不是在UMAT中,我们所编译的带接口的Fortran程序为调用程序,原ABAQUS主程序为被调用程序,调用程序中的第一部分我们先复制被调入程序的参数列表似乎和ABAQUS主程序调用UMAT有些相反了不过个人认为interface作为一个接口块,在Fortran语法中应该放在主调程序中,且复制被调程序的参数列表.而UMAT的参数变量的声明,只不过是为了和ABAQUS使用一致的变量格式,当Fortran程序处理完材料的本构定义之后再以这一致的形式将变量值返回到ABAQUS主程序中吧]
2关于UMAT用Fortran90可不可以的问题
在论坛上搜索了关于这个问题,某位高手说是可以的,只要你自己装的Fortran编译器能成功编译你的Fortran90程序即可,个人认为也是如此,不过我还没有证明过!
2.1关于Fortran77的一些有用的简介[1]:
Fortran77的基本结构:
1.一个Fortran源程序由一个或者多个程序单位组成,每个独立的程序单位以'end'语句结束
2.每个程序单位包括若干行[不能一行写多条语句,但是可以一个语句写成行];分为语句行[执行语句行和非执行语句]和非语句行[注释行]
源程序的书写格式:
1.不区分大小写:
每行只能80列以内,并把80列分为四个区
2.1-5列:
标号区[1-5位整数;第一列为'*'或者'C'时,为注释行]
3.第6列,续行标志区[非空格或非0;最多19个续行]
4.7-72列:
语句区[书写语句:
一行只能写一个语句]
5.73-80列:
语句注释区[一般做编号注释]
程序的编辑与运行:
1.创建源程序文件并编写源程序
2.编译并连接源文件
3.运行程序编译生成的可执行文件
常量:
六种
1.整型常量[Integer]4位:
正\负整数和0
2.实型常量[Real]4位:
小数和指数形式
3.双精度常量[Doubleprecision]8位
4.复型常量[Complex]8位
5.逻辑性常量[Logical]4位
6.字符型常量[Character]1位
变量
∙变量名
1.第一个字符是字母第一个字符后可跟1-5个字母或者数字
2.不区分大小写
3.空格不起作用
4.允许变量名与语言中具有特定含义的字同名,但尽量不适用
5.尽量"见名知义"
∙变量类型
?
?
?
?
不同的变量类型用来存放不同类型的常量数据.变量相应的也有六种;变量在使用前必须首先对其进行类型说明,三种说明方法:
?
?
?
?
?
?
?
?
?
?
按优先级别排列
?
?
1.类型说明语句:
类型变量名列表,多个变量名之间用逗号隔开,如
?
?
?
?
REAL?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
A,B,C
?
?
?
?
DOUBLE?
?
PRECISION?
?
?
?
?
?
?
?
?
?
?
?
X,Y,Z[或者REAL*8?
?
X,Y,Z]?
?
?
?
?
?
?
CHARACTER*5[缺省字符长度5]?
?
STR1,STR2*8,STR3*19
?
?
?
?
[此处,STR1未指明长度,则默认使用缺省长度5;STR2的长度为8;STR3的长度为19]?
?
?
2.IMPLCIT语句:
IMPLICIT类型[字母表],类型[字母表],....
?
?
?
?
?
?
?
?
如:
IMPLICIT?
?
REAL(A-D),INTERGER(I-M),DOUBLEPRECISION?
?
(X,Z)?
?
?
?
?
?
?
3.I-N规则:
Fortran规定,不加说明的情况下,I-N为整型,其他都为实型
几点说明
类型语句说明位于所有可执行语句的前面;IMPLICIT语句位于最前面;
IMPLICITNONE取消IMPLICIT说明和I-N规则,所有的变量必须显式说明;只在本程序单位有效.
2.2关于Fortran77的一些有用的简介[2]:
算术表达式:
1.运算符:
+,?
?
-,?
?
*,?
?
/,?
?
**
2.优先级:
(),?
?
**,?
?
*\/,?
?
+\-
3.书写问题
1.*不能省略
2.括号不分大小写,成对出现
3.多次乘方,按'先右边后左边'处理
4.运算符不能连续出现,要用小括号隔开
5.运算顺序
?
?
)---->函数---->**----->*,/----->+,-
6.运算中的类型问题:
运算类型相同:
结果仍为原类型;不同,则自动转换成同一类型
7.误差问题:
1.溢出:
超出有效数字范围-------->解决:
很大或者很小的数用实型的指数表示
2.误差:
由于有效数字的位数限制,实型数运算存在误差-------->解决:
转换成双精度型或者避免因为书写不当造成有效数字的丢失
简单输出\输入语句:
输入\输出三要素:
对象[哪些数据];格式;设备.
输出语句
输出语句的分类:
格式输出'表控格式输出[系统标准格式];无格式输出[二进制]
1.表控输出语句:
按计算机系统规定的格式输出:
系统自动为每种类型的数据规定了列数
1.整数的表控输出格式[与具体的计算机系统有关]:
规定每个整数占13列,打印在右端,左补空格;
2.实数的表控输出格式:
规定每个实数占17列,打印在右端,左补空格,小数部分占7列;[当实数的绝对值>=10**7或<1时,按标准的指数格式输出,共占15列,指数4列,小数6列
2.表控格式输出语句:
1.print*,<输出表列>:
?
?
?
?
?
?
?
?
print*,56.8,125
2.write(*,*)<输出表列>
输入语句
?
?
输入\输出三要素:
对象;格式;设备.
?
?
分类:
同上
1.表控输入语句
1.自由格式输入-->语句:
read*,<输入表列>;read(*,*)<输入表列>
2.输入数据以逗号或者空格作为间隔
3.变量名称为输入表
4.输入的数据应和输入表的变量个数\类型\次序严格地一一对应;少了,程序停止,等待继续输入;多了,程序继续进行,多余的不起作用;较多的数据可以几个一组,回车,再输入几个一组,回车...
5.重复数据,可以7*3---->7,7,7
6.每一个read(*,*)和write(*,*)语句从一个新的记录[以回车结束的一批输入\输出数据]开始读数\输出
▪例如:
read(*,*)?
?
?
?
?
?
A,B,C
▪?
?
?
?
?
?
read(*,*)?
?
?
?
?
?
D,I,J
▪输入:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
2.3,-63.5[回车]
▪?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
6.4,91.0[回车]
▪?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
5,8[回车]
▪结果:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
A=2.3,B=-63.5,C=6.4,
▪?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
[从新记录开始读数]
▪?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D=5.0,I=8,J未被赋值
PARAMETER语句
作用:
将程序中经常用到的参数或字符串定义成一个符号常量,其值不可改变.
语句:
parameter(p1=c1,p2=c2,...,pn=cn)
注意:
1.符号常量的命名规则与变量名相同,但在程序中其值不可改变,也不能赋值;
2.符号变量也有类型,可用前面的三种类型说明方法说明类型;
3.参数语句是非执行语句,位于所有可执行语句的前面,单位与类型说明语句的后面;
4.一条语句可以定义多个符号常量;
5.优点:
方便修改程序
END,STOP,PAUSE语句
END语句:
结束标志,有且仅有一条
PAUSE[n]语句:
暂定执行;用于调试程序,n可以是一个字符串或不超过5位的数
STOP[n]语句:
停止运行语句;用于调试程序,n可以是一个字符串或不超过5位的数
2.3关于Fortran77的一些有用的简介[3]:
逻辑运算和选择结构
∙关系表达式
1.构成选择判断的基本式子
2.关系运算符:
1..GT.[greaterthan]?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
>
2..GE.[greaterthanorequalto]?
?
?
?
?
?
?
?
?
?
?
?
>=
3..LT.[limiterthan]?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
<
4..LE.[limiterthanorequalto]?
?
?
?
?
?
?
?
?
?
?
?
?
?
<=
5..EQ.[equalto]?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
=
6..NE.[notequalto]?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
≠
3.一般形式:
<算术量或者算术表达式><关系运算符><算术量或者算术表达式>
4.运算结果:
逻辑值:
真[.TRUE.]\假[.FALSE.]
5.运算顺序:
算术运算>关系运算
∙逻辑表达式
1.运算符:
1..and.
2..or.
3..not.
4..eqv.逻辑等
5..neqv.逻辑不等
2.一般形式:
<逻辑变量\逻辑常量\关系表达式><逻辑运算符><逻辑变量\逻辑常量\关系表达式>
3.结果:
逻辑值:
真[.TRUE.]\假[.FALSE.]
4.运算顺序:
算术运算--->关系运算--->逻辑运算
5.逻辑运算优先级:
.not.--->.and.--->.or.--->.eqv.--->.neqv.
关于Fortran77的一些有用的简介[4]:
IF类选择结构
∙用块IF实现选择结构:
三种典型形式
1.基本形式
1.IF(条件)?
?
?
?
?
?
?
?
?
?
THEN?
?
?
?
?
?
?
?
(块IF语句)
2.?
?
块1?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
(THEN块)
3.ELSE?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
(ELSE语句)
4.?
?
块2?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
(ELSE块)
5.ENDIF?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
(ENDIF语句)
6.说明:
IF...THEN语句为块IF结构的入口语句;ENDIF语句为出口语句,必须一一对应,配对使用
2.简单结构
1.IF(条件)?
?
THEN?
?
2.块
3.ENDIF
4.说明:
没有else块
3.嵌套结构
1.IF(?
?
)?
?
THEN
2.块1
3.ELSEIF(?
?
)THEN
4.块2
5....
6.ELSEIF(?
?
)?
?
THEN
7.块n
8.[ELSE?
?
块n+1]
9.ENDIF
∙逻辑IF语句
只用一行表示一种选择结构,当且仅当条件成立时执行,并且只执行一条语句;
IF(条件)?
?
语句
∙算术IF语句
IF<算术表达式>N1,N2,N3
当算术表达式的值
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
<0执行标号为N1的语句;
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
=0执行标号为N2的语句;
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
>0执行标号为N1的语句;
关于Fortran77的一些有用的简介[5]:
循环结构
∙结构形式:
循环体[由一些可执行的语句组成]+循环控制语句[控制循环的开始和结束]
∙分类:
条件型循环和计数型循环[DO循环]
GOTO语句实现循环
∙一般形式:
GOTO
?
其中:
S1为语句标号
∙功能:
程序执行到此语句时,无条件的转向标号为S1的语句
DO语句实现循环
∙当循环的初值\终值\循环次数都已知时,可用;
∙组成:
一个DO语句和循环体组成
∙一般形式:
?
?
?
?
?
?
?
?
DO?
?
S1I=E1,E2[,E3]
DO?
?
I=E1,E2[,E3]
?
?
?
?
?
?
?
?
......
S1?
?
<终端语句>
?
?
?
?
?
?
?
?
......ENDDO
例如
DO?
?
10?
?
I=1,19,2
DO?
?
10?
?
I=E1,19,2
?
?
?
?
?
?
SUM=SUM+1
S1?
?
CONTINUE
10?
?
?
?
SUM=SUM+1?
DO?
?
I=1,19,2
?
?
?
?
?
?
SUM=SUM+1
ENDDO
∙说明
1.I为循环变量,S1为语句标号,是本程序单位中另一可执行语句的标号;
2.步长可以省略,缺省值=1;
3.循环初值[E1],终值[E2]和步长[E3]都可以是常量\变量\表达式;
4.由于实数在内存中存储的误差,I,E1,E2,E3尽可能用振型量
5.E1,E2,E3都可正可负,E1,E2,可为0,但是E3不能为0.
∙具体执行过程
6.执行DO语句,首先计算表达式E1,E2,E3的值,若他们的类型与循环变量I不一致,则自动转换成循环变量的类型
7.将E1的值赋予循环变量I,及执行赋值语句:
I=E1;
8.计算循环次数:
R=MAX0(E2-E1+E3)/E3,MAX0表示从多个整型变量中取最大的一个;
9.检查循环次数:
若R=0则不执行循环体内的语句,跳出循环;R≠0则执行循环体内的语句
10.执行循环终端语句:
I=I+E3,即是循环变量获得一个新值,而循环次数R自动减1;
11.返回步骤4,继续执行,直到R=0.
oCONTINUE语句
?
?
?
?
循环终端语句必须是可执行语句;那么,这种作为循环终端的语句具有双重作用:
一是作为循环终端的标志;而
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ABAQUS 二次开发 资料 UMAT