以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

工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
