以C3D8R为例介绍如何在VUMAT中得到单元编号

VUMAT不像UMAT直接给出了单元的编号, VUMAT需要借助一个子程序vumatXtrArg 得到,这个方法最早发布在如下链接中

https://polymerfem.com/community/constitutive-models/nblock-in-vumat/ 

相信有不少朋友需要,摘录如下


You are using C3D8R elements which means continuum 3D 8 noded reduced integration. A reduced integration of this kind has a single Gauss pt.
Thats why you have matching GP and element numbers.

Regarding the second, apply the following cover,




subroutine vumat (
c Read only -
1 jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
2 stepTime, totalTime, dt, cmname, coordMp, charLength,
3 props, density, strainInc, relSpinInc,
4 tempOld, stretchOld, defgradOld, fieldOld,
5 stressOld, stateOld, enerInternOld, enerInelasOld,
6 tempNew, stretchNew, defgradNew, fieldNew,
c Write only -
7 stressNew, stateNew, enerInternNew, enerInelasNew )
c
include vaba_param.inc
c
dimension jblock(*), props(nprops),density(*), coordMp(*),
1 charLength(*), strainInc(*),
2 relSpinInc(*), tempOld(*),
3 stretchOld(*),
4 defgradOld(*),
5 fieldOld(*), stressOld(*),
6 stateOld(*), enerInternOld(*),
7 enerInelasOld(*), tempNew(*),
8 stretchNew(*),
9 defgradNew(*),
1 fieldNew(*),
2 stressNew(*), stateNew(*),
3 enerInternNew(*), enerInelasNew(*)
c
character*80 cmname

parameter (
1 i_umt_nblock = 1,
2 i_umt_npt = 2,
3 i_umt_layer = 3,
4 i_umt_kspt = 4,
5 i_umt_noel = 5 )

call vumatXtrArg ( jblock(i_umt_nblock),
1 ndir, nshr, nstatev, nfieldv, nprops, lanneal,
2 stepTime, totalTime, dt, cmname, coordMp, charLength,
3 props, density, strainInc, relSpinInc,
4 tempOld, stretchOld, defgradOld, fieldOld,
5 stressOld, stateOld, enerInternOld, enerInelasOld,
6 tempNew, stretchNew, defgradNew, fieldNew,
7 stressNew, stateNew, enerInternNew, enerInelasNew,
8 jblock(i_umt_noel), jblock(i_umt_npt),
9 jblock(i_umt_layer), jblock(i_umt_kspt))

return
end

c ----------------------------------------------------------------------------------

subroutine vumatXtrArg (
c read only -
1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
2 stepTime, totalTime, timeinc, 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 read only extra arguments -
6 nElement, nMatPoint, nLayer, nSecPoint)
c
include vaba_param.inc
c
c all arrays dimensioned by (*) are not used in this algorithm
dimension props(nprops), density(nblock),
1 strainInc(nblock,ndir+nshr),
2 relSpinInc(nblock,nshr), defgradOld(nblock,9),
4 stressOld(nblock,ndir+nshr),
5 stateOld(nblock,nstatev), enerInternOld(nblock),
6 enerInelasOld(nblock),
7 stretchNew(nblock,ndir+nshr), defgradNew(nblock,9),
8 stressNew(nblock,ndir+nshr)

dimension enerInelasNew(nblock),stateNew(nblock,nstatev),
1 enerInternNew(nblock)

dimension nElement(nblock),nMatPoint(nblock),nLayer(nblock),
1 nSecPoint(nblock)

character*80 cmname

c make computations for every material point
c -----------------------------------------------------------------------

do 1000 nblck = 1,nblock

Nelem=nElement(nblck) ! here we go 😀
blah blah blah

enddo

return
end

登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

12
8
24