上一次发过《ABAQUS 初学者用户子程序小例子》,給学习 UMAT 的初学者带来了一定的帮助。现在用到 VUMAT,发现网上 这种小例子很少,关于 VUMAT 的资料也不多。摸索了一天,做个 VUMAT的小例子供大家分享。
实例:简单的平面平板拉伸,材料本构模型采用随动强化模型, E=210000MPa, ν=0.3,fy=200MPa, E’=10000MPa。左端约束, 右端施加位移载荷V=0.2mm。

在Property 中定义材料时,在General下选中User Material,输入210000、0.3、200、 10000,以上两个数值代表E、ν,、fy、E’。在用户子程序中代表着PROPS(1)、PROPS(2)、 PROPS(3)、PROPS(4)。然后在 General 下选中 Depvar,由于该例子中使用了五个状态变量 (背应力张量和累积塑性应变变量),因此在第一项中输入大于5的数值即可。另外还需要输入密度。


建模大家都会,故省略
由于VUMAT需要用到Explicit求解,因此需要在step步骤中设置explicit选项,如下图, 其设置可以用默认设置。

同UMAT用户子程序的调用方法。
在Job Manager 中点击Edit 选项,在General 选项的最后一项中选择自己建立好的用户子程序文件。(注:用户子程序文件可以使用文本编辑器进行编辑,当然也可以用Fortran编译器,如果对自己的用户子程序文件的语法不放心,可以先用Fortan编译器进行编译,不过编译前要先建立Project,关于Fortran编译,这里不再介绍)。
完成后,点击submit即可进行分析。

以下两张图分布是用户子程序和ABAQUS自带的材料模型(Standard求解器)得到的应力云图,可以看出两种图形基本相同。


对于初学者来说,需要注意的是,FORTRAN对于程序语言格式上的要求。例如,对于FORTRAN语言,前六个字符必须空出来,等等。检查语法最好的方法就是在FORTRAN编译器上进行编译。
SUBROUTINE VUMAT(
C Read only -
1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
2 stepTime, totalTime, dt, cmname, coordMp, charLength,
3 props, density, strainInc, relSpinInc,
4 tempOld, stretchOld, defgradOld, fieldOld,
3 stressOld, stateOld, enerInternOld, enerInelasOld,
6 tempNew, stretchNew, defgradNew, fieldNew,
C Write only -
5 stressNew, stateNew, enerInternNew, enerInelasNew )
C
include 'vaba_param.inc'
C J2 Mises Plasticity with kinematic hardening for plane
C strain case.
C Elastic predictor, radial corrector algorithm.
C
C The state variables are stored as:
C STATE(*,1) = back stress component 11
C STATE(*,2) = back stress component 22
C STATE(*,3) = back stress component 33
C STATE(*,4) = back stress component 12
C STATE(*,5) = equivalent plastic strain
C
C
C All arrays dimensioned by (*) are not used in this algorithm
dimension props(nprops), density(nblock),
1 coordMp(nblock,*),
2 charLength(*), strainInc(nblock,ndir+nshr),
3 relSpinInc(*), tempOld(*),
4 stretchOld(*), defgradOld(*),
5 fieldOld(*), stressOld(nblock,ndir+nshr),
6 stateOld(nblock,nstatev), enerInternOld(nblock),
7 enerInelasOld(nblock), tempNew(*),
8 stretchNew(*), defgradNew(*), fieldNew(*),
9 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),
1 enerInternNew(nblock), enerInelasNew(nblock)
C
character*80 cmname
C
parameter( zero = 0., one = 1., two = 2., three = 3.,
1 third = one/three, half = .5, twoThirds = two/three,
2 threeHalfs = 1.5 )
C
e = props(1)
xnu = props(2)
yield = props(3)
hard = props(4)
C
twomu = e / ( one + xnu )
thremu = threeHalfs * twomu
sixmu = three * twomu
alamda = twomu * ( e - twomu ) / ( sixmu - two * e )
term = one / ( twomu * ( one + hard/thremu ) )
con1 = sqrt( twoThirds )
C
do 100 i = 1,nblock
C
C Trial stress
trace = strainInc(i,1) + strainInc(i,2) + strainInc(i,3)
sig1 = stressOld(i,1) + alamda*trace + twomu*strainInc(i,1)
sig2 = stressOld(i,2) + alamda*trace + twomu*strainInc(i,2)
sig3 = stressOld(i,3) + alamda*trace + twomu*strainInc(i,3)
sig4 = stressOld(i,4) + twomu*strainInc(i,4)
C
C Trial stress measured from the back stress
更多内容见附件
免责声明
本页面/内容部分素材来源于互联网公 开 信 息,旨在传递更多信息,不代表本平台立场。
版权归原作者或机构所有,如涉及侵权,请通过平台联系我们,我们将在核实后第一时间处理。
本平台对转载内容的真实性、准确性不作任何保证,用户需自行判断并承担使用风险。