umat自学整理.docx

上传人:b****8 文档编号:10404519 上传时间:2023-02-11 格式:DOCX 页数:31 大小:124.23KB
下载 相关 举报
umat自学整理.docx_第1页
第1页 / 共31页
umat自学整理.docx_第2页
第2页 / 共31页
umat自学整理.docx_第3页
第3页 / 共31页
umat自学整理.docx_第4页
第4页 / 共31页
umat自学整理.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

umat自学整理.docx

《umat自学整理.docx》由会员分享,可在线阅读,更多相关《umat自学整理.docx(31页珍藏版)》请在冰豆网上搜索。

umat自学整理.docx

umat自学整理

什么是UMAT?

v.l4W*F9T%r

UMAT:

[userdefinedmaterialmechanicalbehavior]用户材料子程序,是ABAQUS提供给用户自定义材料属性的FORTRAN程序接口;注意是接口程序,真正的定义材料的力学行为即属性,是用户自己编译的FORTRAN程序来实现的UMAT通过与ABAQUS主求解程序的接口实现与ABAQUS的数据交流+^7P'Z1?

.

UMAT功能简介!

[摘自庄茁老师的书]

4y-P+l&`)C#B1{%H(F:

_#~%`2d;W"s6R$O'n"t(U2I0^7^:

n$D6d-x+[.z7@,g:

^UMAT子程序具有强大的功能,使用UMAT子程序:

(P6f.C.r6A;})~)p!

v:

N

(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序*s;b'z6Z*N(|"UU'E6V3@功能。

ABAQUS软件2003年度用户年会论文集,I*A:

(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQUS中的任何单元;1K"?

e#g3l/I!

f/X2\

(3)必须在UMAT中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量+x%F4F2u+];N6b0@.k的变化率。

)z:

w#Q.H/W0d+M*J;f

(4)可以和用户子程序“USDFLD”联合使用,通过“USDFLD”重新定义单元每一物质点上传K:

r.B/M*\0_.t递到UMAT中场变量的数值。

UMAT开始的变量声明6p4q/a"C4S-T

+E%x.P(I,f7e-U/i%G$D由于主程序与UMAT之间存在数据传递,甚至共用一些变量,因此必须遵守有关书写格式,UMAT中常用的变量在文件开头予以定义,通常格式为:

&Q9?

+o6Y-w3Q4i:

h)C

SUBROUTINEUMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,

3@%Z:

|;_+U#V1RPL,DDSDDT,DRPLDE,DRPLDT,"U#\.h:

W6?

(w/X+{$C;M

2STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME3u._1T'v5y7J0y'Y)z8K

3NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,

4[8O8v"Ju+v4CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)E1o'B4H!

Y-y6R1F1w

C

0s}!

D6{8L0o'GINCLUDE'ABA_PARAM.INC'-----此处是将ABAQUS本身自带的参量精度定义的文件包含进来[后面详说]

.s;H)B'z,_*PC

9O$t,g/V.C6lCHARACTER*80CMNAME

"L/T$W$P3pk7w3]DIMENSIONSTRESS(NTENS),STATEV(NSTATV),

"`;d+R;e+f&P1DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),

%g2@/R!

[!

F*n+e0P2STRAN(NTENS),DSTRAN(NTENS),TIME

(2),PREDEF

(1),DPRED

(1),

8S'TY3?

8Ju#y0n0N#w,D+s3PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)

~'A:

b&W8o0F-a-A&L5N(B-------------------------------以上是变量声明吧!

:

W!

n!

F1^0k-\(EusercodingtodefineDDSDDE,STRESS,STATEV,SSE,SPD,SCD

*j"S%L)_&Iand,ifnecessary,RPL,DDSDDT,DRPLDE,DRPLDT,PNEWDT(j9lW(I'n&u

-------------------------------此处,看来是将用户定义材料属性的fortran程序编入

8y*B/y7v2k4j'J.O*d0B!

O

RETURN------------------这是返回值

5~%G9R8E.wEND------------------------结束

UMAT中各个变量的详细解释[凡是-注明david的,都是我自己猜的,仅供参考]

7g-I&|-C3_#r

0d'j%k7?

8A,l,N

f,P6D:

F&~5O1N

6_+d7q$C9s,v0jVDDSDDE(NTENS,NTENS)

"x9C;F&O"O/@,E7a+b&\是一个NTENS[NumberoftheTensions----david]维的方阵,称作雅可比矩阵,应力增量/应变增量的偏导数,DDSDDE(I,J)表示增量步结束时第J个应变分量的改变引起的第I个应力增量的变化!

雅可比是一个对称矩阵,除非在“*USERMATERIAL”语句中加"UNSYMM"参数+z)D0\/c$N,E+f

2x2N)O'Q.`~#S

;i7F#X't&t!

B)|3C1E3@6d(Z1I"]/w6I

STRESS(NTENS)1t5A,q-R,@*N4K

应力张量矩阵,对应NDI[NumberoftheDirectComponents--david]个直接分量和NSHR[NumberoftheshearComponents-david]个剪切分量.在增量步的开始,应力张量矩阵中的数值通过UMAT和主程序之间的接口传递到UMAT中,在增量步的结束,UMAT将对应力张量矩阵更新,即[return].对于包含刚体转动的有限应变问题,一个增量步条用UMAT之前就已经对应力张量进行了刚体转动,因此在UMAT中只需处理应力张量的共旋部分-------这部分我没看明白,敬请高手指点.UMAT中应力张量的度量为柯西(真实)应力/_.{-m%e-H7o9[#H&`.a:

{%Y

+H#{9@aj$Y*F6A4A$x-H-w0\,_

STATEV(NSTATEV)[STATEVARIABLES(NumberoftheStateVariables)]!

A:

J)a9G0V5o:

e3J)B"_

用于存储状态变量的矩阵,在增量步开始时将数值传递到UMAT中。

也可在子程序USDFLD或UEXPAN中先更新数据,然后增量步开始时将更新后的数据传递到UMAT中。

在增量步的结束必须更新状态变量矩阵中的数据。

'X8O;i2T+]!

S和应力张量矩阵不同的是:

对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。

-----不懂,请高手指教9N#V/f4Y-R$u

状态变量矩阵的维数NATATEV,等于关键字“*DEPVAR”定义的数值。

状态变量矩阵的维数通过ABAQUS输入文件中的关键字“*DEPVAR”定义,关键字下面数据行的数值即为状态变量矩阵的维数。

-ix)I.["];F&Q材料常数的个数,等于关键字“*USERMATERIAL”中“CONSTANTS”常数设定的值。

+b9h$Ts2v#A4@

(}(B,f+};c3`)n&J

*x9S+Q;H&i'N&]#x2GPROPS(NPROPS);n3y2C8d;d0G:

K(m#}&x

材料常数矩阵,矩阵中元素的数值对应于关键字“*USERMATERIAL”下面的数据行。

#R'~*h'_#H.E7Y

)Y,w:

t,@-F!

C2Z'o&}+]

3@+N7_'gY"A%U4`7N#L*jG"^'o

SSE,SPD,SCD

]&Q;W*k+r分别定义每一增量步的弹性应变能[ElasticStrainEnergy],塑性耗散[PlasticDissipation]和蠕变耗散[CreepDissipation]。

它们对计算结果没有影响,仅仅作为能量输出。

'v%Z8e9@6X&e6Z0v-w1J:

S:

e.n0n!

[3`+v+Z$~*I

/B9v7b;X8Y+_;{

STRAN(NTENS):

应变矩阵;.b3u"Q0C&I

7e+O#k$v/I#B1@*o;F7T

].d+~(M%P:

C:

kDSTRAN(NTENS):

[D--大抵代表Deta,增量的意思-david]应变增量矩阵;

!

E&w2y_9o{/R/U4I"x%M(Z2H7B:

^2E"[!

v*v9k!

o#U:

V%_

3D0|%p&u-p,N&|

DTIME:

增量步的时间增量;

/X#p/m._8[4D#j*c.L:

B2z0e+W4`0S+E4Q)u

5K1}&G-[6\9w6}NDI:

直接应力分量的个数;

2A9]+o7?

'O$p"?

!

U8V*D

!

p9o8[(r#x,B+^.?

2r'o2c)o'K/Z+R#f'N#Q3{:

d3m

NSHR:

剪切应力分量的个数;3J#L3_f"v6i7v

)G6_1Q"t)_1O,?

%`'\(o

#Q'?

$V#V3Y-\9QH/{3|NTENS:

总应力分量的个数,NTENS=NDI+NSHR。

关于沙漏刚度控制和横向剪切刚度

G4v7t'W3p$U,X"d.V/E/Z(a9E/w;Q6o8^:

c

{+X0d+i1Y3x#O使用UMAT时需要注意单元的沙漏控制刚度和横向剪切刚度。

通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。

这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“*ELASTIC”选项定义。

但是使用UMAT的时候,ABAQUS对程序输入文件进行预处理的时候得不到剪切模量的数值。

所以这时候用户必须使用“*HOURGLASSSTIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSESHEARSTIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度。

-d0m*E7W#V1s3^m1C

9K4N0?

(j)F!

]%?

0o.~0e$R8N!

I,h/u

7\"Z\7p"T1p'W~8J!

P3@7X7C------------;n"N2^4x&~7|/|1Y,m

2x+S!

~)h&G:

U&H2_7z+^一个问题:

得不到剪切模量的数值0W:

T:

E,m9E*j

+]-s(^*a/q,U3}"~2M-g解决方案:

用户必须使用“*HOURGLASSSTIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSESHEARSTIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度

关于UMAT的流程图和参数表格实例

3i!

o8t8b9d%W6U

0hF0b2X)].U4{%K$x2Y/z

跟大家说说所谓的接口程序Interface--FORTRAN的知识({.\#K-}"P,p*EM9I

6}0X9|+`#`!

m5o'`*e:

O0C|

:

[*a+d!

l;B/S9F

#[)Hr9o:

B4r

在Fortan语言中,主调程序和被调程序是分别编译的.由于Fortran90对过程的许多功能做了扩充,有些功能单靠简单的调用语句已经无法反应,因而系统也就无法进行正确的编译,这时需要在主调程序中加入interface接口块,通过它为主调程序和被调程序指明一个显示的接口.如果被调用中哑元含有假定形状[assumed-shape]数组,或可选变元,或含键盘输入的参数,就需要interface接口块说明.一般来讲,在Fortran90程序之间需要提供interface块有三种方法:

1R6g2r-O-M+H3F0l1.将interface接口块直接写入调用程序,并复制被调用程序的参数列表这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化,就必须相应改变interface接口块和调用[call]语句.4V&@&kg&mX

2.可以将一个软件包中所有程序的interface块写入一个模块中,该模块被软件包中的所有程序使用.这样做的优点是只需一个模块来检查interface定义,缺点是仍需对此模块和调用语句进行维护.0e9b5|:

I-\7s;M

3.Fortran90编译器可在contains语句后自动提供过程之间的interface块,这种interface块可用于使用模块的任何程序.

*b+}6J4y"A;M3g6p$P5K

(H9Y1Z9q.T,z建议在同一个软件包中使用2\3的形式,在调用软件包的入口程序时采用1\2的形式!

7{8@1D,a.g

3P%U9?

;[-_8f[是不是在UMAT中,我们所编译的带接口的Fortran程序为调用程序,原ABAQUS主程序为被调用程序,调用程序中的第一部分我们先复制被调入程序的参数列表?

?

?

?

?

?

?

?

似乎和ABAQUS主程序调用UMAT有些相反了?

?

?

?

?

?

?

不过个人认为interface作为一个接口块,在Fortran语法中应该放在主调程序中,且复制被调程序的参数列表.而UMAT的参数变量的声明,只不过是为了和ABAQUS使用一致的变量格式,当Fortran程序处理完材料的本构定义之后再以这一致的形式将变量值返回到ABAQUS主程序中吧]

关于Fortran77的一些有用的简介[1]:

+z+D9l!

b4[

#q,X-k'I)d8E*j)I/MFortran77的基本结构:

:

c0m(m)a'f%u8V

(U#?

;}3y&h,Z9F,a,X

9x$C:

Q/{o1k!

m'A

1.一个Fortran源程序由一个或者多个程序单位组成,每个独立的程序单位以'end'语句结束

2.每个程序单位包括若干行[不能一行写多条语句,但是可以一个语句写成行];分为语句行[执行语句行和非执行语句]和非语句行[注释行]

7Y(J/p!

CZ"_8v7a

0z*I.~;C4I-c-|;S源程序的书写格式:

7S,W/C"Y)X.n#g

d6K!

vd.^&k(~

3^*k9|-k/y7dN*M(O%l2N!

L

1.不区分大小写:

每行只能80列以内,并把80列分为四个区

2.1-5列:

标号区[1-5位整数;第一列为'*'或者'C'时,为注释行]

3.第6列,续行标志区[非空格或非0;最多19个续行]

4.7-72列:

语句区[书写语句:

一行只能写一个语句]

5.73-80列:

语句注释区[一般做编号注释]

程序的编辑与运行:

:

]!

u:

i5F8["N)d9L

1.创建源程序文件并编写源程序

2.编译并连接源文件

3.运行程序编译生成的可执行文件

:

M%aA.]']%A)V1L"W9^G8h"q

常量:

&y&X.A$b"f.[W.p;n!

a+?

6Q&\)A1z#i

六种1q$a0}%ga

"{9S-}-e(P)~9\"f

1.整型常量[Integer]4位:

正\负整数和0

2.实型常量[Real]4位:

小数和指数形式

3.双精度常量[Doubleprecision]8位

4.复型常量[Complex]8位

5.逻辑性常量[Logical]4位

6.字符型常量[Character]1位

"C'?

9?

:

]1_#H5f*r/S(V1}"H5F4e"G

变量

8l.m"^:

U;q-B7m6H$W$P6x;|1n;Rf0c5Bp,B3w

(E8E&w+E1W*Q+@

6S'W*[:

Y4W4k

∙变量名

-S:

K'l/D#o9y

1.第一个字符是字母第一个字符后可跟1-5个字母或者数字

2.不区分大小写

3.空格不起作用

4.允许变量名与语言中具有特定含义的字同名,但尽量不适用

5.尽量"见名知义"

6KX6H$V7p6f9o

∙变量类型

)a#Q+h'R[&C

不同的变量类型用来存放不同类型的常量数据.变量相应的也有六种;变量在使用前必须首先对其进行类型说明,三种说明方法:

;P3T(k(J+K#s,M+D;^4v(E+O&q4L$f/o#h$H.b

按优先级别排列

.o*L$p!

],R0O3T

#b%F9\"m1n3w)D1.类型说明语句:

类型变量名列表,多个变量名之间用逗号隔开,如

#E6|0X#A)@+c)s8^REALA,B,C

5_)J$L*i6r)r%F5_DOUBLEPRECISIONX,Y,Z[或者REAL*8X,Y,Z]

$`!

u0`9{8J"\9nCHARACTER*5[缺省字符长度5]STR1,STR2*8,STR3*19

#}2C%c3S-a"I-z!

X8A[此处,STR1未指明长度,则默认使用缺省长度5;STR2的长度为8;STR3的长度为19]

#a*N5V8P|.P6v#y6V!

|5C!

A+D.Y(J-z5h

2.IMPLCIT语句:

IMPLICIT类型[字母表],类型[字母表],....

;{4i!

k!

T7r;X1Z如:

IMPLICITREAL(A-D),INTERGER(I-M),DOUBLEPRECISION(X,Z)

!

E1|*v9s+M;e8d,z,X

"@%i6F/r,W(G3.I-N规则:

Fortran规定,不加说明的情况下,I-N为整型,其他都为实型'{/|*|R-y*Q;{:

_'_9?

8s1_7M.U3b8e2d.I

几点说明

3K:

y-Z$@3{1l类型语句说明位于所有可执行语句的前面;IMPLICIT语句位于最前面;1g.^1r#?

6q:

]+q&h/T%m0}.^

IMPLICITNONE取消IMPLICIT说明和I-N规则,所有的变量必须显式说明;只在本程序单位有效.

关于Fortran77的一些有用的简介[2]:

2@+J,Jg*c0t3S!

m%a

"i2D7O-k4a7}1H4s算术表达式:

9W4c7z:

S:

R9}&J#X

1.运算符:

+,-,*,/,**

2.优先级:

(),**,*\/,+\-

3.书写问题

1.*不能省略

2.括号不分大小写,成对出现

3.多次乘方,按'先右边后左边'处理

4.运算符不能连续出现,要用小括号隔开

5.运算顺序

)---->函数---->**----->*,/----->+,-

6.运算中的类型问题:

运算类型相同:

结果仍为原类型;不同,则自动转换成同一类型

7.误差问题:

1.溢出:

超出有效数字范围-------->解决:

很大或者很小的数用实型的指数表示

2.误差:

由于有效数字的位数限制,实型数运算存在误差-------->解决:

转换成双精度型或者避免因为书写不当造成有效数字的丢失

+l1e.C)Y7{

1V(O#a"F#c*`1g)t简单输出\输入语句:

4G+S+|/b.t"Y7@

&j/O(R-k0X0X$d输入\输出三要素:

对象[哪些数据];格式;设备.

4_4b,C&V%]$C!

c(A-{%K

&f8{7s/P/~*S9D4Y/r#x输出语句9w%C;JP%o*|9r6W"R8|

'm!

r;]%N1P$H,l

输出语句的分类:

格式输出'表控格式输出[系统标准格式];无格式输出[二进制]

.~7q4`,NW9x:

r4`*@

1.表控输出语句:

按计算机系统规定的格式输出:

系统自动为每种类型的数据规定了列数

1.整数的表控输出格式[与具体的计算机系统有关]:

规定每个整数占13列,打印在右端,左补空格;

2.实数的表控输出格式:

规定每个实数占17列,打印在右端,左补空格,小数部分占7列;[当实数的绝对值>=10**7或<1时,按标准的指数格式输出,共占15列,指数4列,小数6列

2.表控格式输出语句:

1.print*,<输出表列>:

print*,56.8,125

2.write(*,*)<输出表列>

输入语句2i&M#C)O'QX

*W3X"i([#M/K输入\输出三要素:

对象;格式;设备.

)tu%YE8X$y4t+U#t分类:

同上

3P*T-n-n2R(|;J5R:

U'a$b

1.表控输入语句

1.自由格式输入-->语句:

read*,<输入表列>;read(*,*)<输入表列>

2.输入数据以逗号或者空格作为间隔

3.变量名称为输入表

4.输入的数据应和输入表的变量个数\类型\次序严格地一一对应;少了,程序停止,等待继续输入;多了,程序继续进行,多

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1