在帮助文件里有这么一句话: Deleting elements from an Abaqus/Explicit mesh using state variables
……The structure of the block of material points passed to user subroutine VUMAT remains unchanged during the analysis; deleted material points are not removed from the block. Abaqus/Explicit will pass zero stresses and strain increments for all deleted material points. Once a material point has been flagged as deleted, it cannot be reactivated. An element will be deleted from the mesh only after all of the material points in the element are deleted. The status of an element can be determined by requesting output of the variable STATUS. This variable is equal to one if the element is active and equal to zero if the element is deleted.
我也查看了积分点输出的PEEQ,都大于我设置的破坏点的数值,想问下是什么原因?
同时还想请教一下,对于壳单元,在数组设置上有什么需要特别修改的么,以及各个变量的提取有没有对应参考的手册?
c
c User subroutine VUSDFLD for user-defined fields
c
subroutine vusdfld(
c Read only -
* nblock, nstatev, nfieldv, nprops, ndir, nshr,
* jElemUid, kIntPt, kLayer, kSecPt,
* stepTime, totalTime, dt, cmname,
* coordMp, direct, T, charLength, props,
* stateOld,
c Write only -
* stateNew, field )
c
include 'vaba_param.inc'
c
dimension props(nprops),
* jElemUid(nblock), coordMp(nblock, *),
* direct(nblock, 3, 3), T(nblock,3,3),
* charLength(nblock),
* stateOld(nblock, nstatev),
* stateNew(nblock, nstatev),
* field(nblock, nfieldv)
character*80 cmname
c --------------------------------------------------------------------
character*3 cData(maxblk)
dimension jData(maxblk)
dimension eqps(maxblk)
c
parameter ( zero = 0.d0 )
c
c Multi-process information (if needed)
call vgetnumcpus( numProcesses )
call vgetrank( kProcessNum )
c
c Read properties
eqpsCrit = props(1)
failDisp = props(2)
Dmax = 0.001
c Dmax = props(3)
c Get stresses and strains from previous increment
jStatus = 1
call vgetvrm( 'PEEQ', eqps, jData, cData, jStatus )
c
do k = 1, nblock
stateNew(k,1) = eqps(k)
if ( eqps(k) .ge. Dmax ) then
c Element deletion
stateNew(k,3) = zero
end if
end do
c---------------------------------------------------------
c do k = 1, nblock
c eqpsOld = stateOld(k,1)
c damageOld = stateOld(k,2)
c damageNew = damageOld
c if ( eqps(k) .gt. eqpsCrit ) then
c deqps = eqps(k) - eqpsOld
c dUeq = charLength(k) * deqps
c damageNew = damageOld + dUeq / failDisp
c end if
c if ( damageNew .ge. Dmax ) then
c Element deletion
c stateNew(k,3) = zero
c damageNew = Dmax
c end if
c stateNew(k,1) = eqps(k)
c stateNew(k,2) = damageNew
c field(k,1) = damageNew
c end do
c
return
end