用VUSDFLD删除单元??
大家好,目前试着在用VUSDFLD实现单元删除。删除准则很简单,即x方向应变大于0.001时,单元失效删除。根据论坛上已有的例子,试着编写了一段VUSDFLD子程序,但是运行后,发现结果与不加入子程序并无任何差别,子程序似乎没有起作用,请教大家解答。下面附上我的子程序,由于是第一次编写,估计有错误,请大家不吝赐教,感谢
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*6)
dimension jData(maxblk*6)
dimension stress(maxblk*6)
c Get srain from previous increment
jStatus = 1
call vgetvrm( 'LE', strain, jData, cData, jStatus)
c
call LE11strain(nblock, nstatev,
* nfieldv, ndir, nshr,
* strain,
* stateOld,
* stateNew, field)
c
return
end
c
subroutine LE11strain(nblock, nstatev,
* nfieldv, ndir, nshr,
* strain,
* stateOld,
* stateNew, field)
c
include 'vaba_param.inc'
c
dimension strain(nblock,ndir+nshr),
* stateOld(nblock,nstatev),
* stateNew(nblock,nstatev),
* field(nblock,nfieldv)
c
parameter ( zero = 0.d0 )
c Read properties from .inp
dc = 0.001
c Get peeq from previous increment
jStatus = 1
call vgetvrm( 'LE', strain, jData, cData, jStatus )
do k = 1, nblock
if(strain(k,1).gt.dc) then
c Element Deletion
stateNew(k,1) = zero
end if
end do
c
return
end