ProductsAbaqus/Explicit Model descriptionThe user subroutine allows a creep law of the following general form to be defined: where and
The left Cauchy-Green strain tensor, , is defined as where is the deformation gradient with volume change eliminated, which is computed using The user subroutine must define the increment of creep equivalent strain, , as a function of the time increment, , and the variables used in the definition of , as well as the derivatives of the equivalent creep strain increment with respect to those variables. If any solution-dependent state variables are included in the definition of , they must also be integrated forward in time in this user subroutine.
User subroutine interface subroutine vucreepnetwork (
C Read only -
* nblock, networkid, nstatev, nfieldv,
* nprops, nDg, stepTime, totalTime, dt,
* jElem, kIntPt, kLayer, kSecPt, cmname,
* props, coordMp, tempOld, fieldOld,
* stateOld, tempNew, fieldNew,
* nIarray, i_array, nRarray, r_array,
* q, p, eqcs, TrCc,
C Write only -
* dg, stateNew )
C
include 'vaba_param.inc'
C
C indices for equivalent creep strain and its derivatives
parameter( i_deqcs = 1,
* i_DdeqcsDq = 2,
* i_DdeqcsDeqcs = 3,
* i_DdeqcsDi1c = 4 )
C
C indices for strain invariants
parameter( i_I1 = 1,
* i_I2 = 2,
* i_J = 3 )
C
dimension props(nprops),
* tempOld(nblock),
* fieldOld(nblock,nfieldv),
* stateOld(nblock,nstatev),
* tempNew(nblock),
* fieldNew(nblock,nfieldv),
* coordMp(nblock,*),
* jElem(nblock),
* i_array(nblock,nIarray),
* r_array(nblock,nRarray),
* q(nblock),
* p(nblock),
* eqcs(nblock),
* TrCc(nblock),
* stateNew(nblock,nstatev),
* dg(nblock,nDg)
character*80 cmname
C
do 100 km = 1,nblock
user coding
100 continue
return
end
Variables to be defined
Variables that can be updated
Variables passed in for information
Example: Power-law strain hardening modelAs an example of the coding of user subroutine VUCREEPNETWORK, consider the power-law strain hardening model. In this case the equivalent creep strain rate is expressed as where
The user subroutine would be coded as follows: subroutine vucreepnetwork (
C Read only -
* nblock, networkid, nstatev, nfieldv,
* nprops, nDg, stepTime, totalTime, dt,
* jElem, kIntPt, kLayer, kSecPt, cmname,
* props, coordMp, tempOld, fieldOld,
* stateOld, tempNew, fieldNew,
* nIarray, i_array, nRarray, r_array,
* q, p, eqcs, TrCc,
C Write only -
* dg, stateNew )
C
include 'vaba_param.inc'
C
parameter ( one = 1.d0, half = 0.5d0 )
parameter ( eqcsSmall = 1.d-8 )
parameter ( rMinVal = 1.d-12 )
C
parameter( i_deqcs = 1,
* i_DdeqcsDq = 2,
* i_DdeqcsDeqcs = 3,
* i_DdeqcsDi1c = 4 )
C
dimension props(nprops),
* tempOld(nblock),
* fieldOld(nblock,nfieldv),
* stateOld(nblock,nstatev),
* tempNew(nblock),
* fieldNew(nblock,nfieldv),
* coordMp(nblock,*),
* jElem(nblock),
* i_array(nblock,nIarray),
* r_array(nblock,nRarray),
* q(nblock),
* p(nblock),
* eqcs(nblock),
* TrCc(nblock),
* stateNew(nblock,nstatev),
* dg(nblock,nDg)
C
character*80 cmname
C
C Read properties
C
rA = props(1)
rN = props(2)
rM = props(3)
C
C Update equivalent creep strain and its derivatives
C
do k = 1, nblock
om1 = one / ( one + rM )
test = half - sign( half, q(k) - rMinVal )
qInv = ( one - test ) / ( q(k) + test )
eqcs_t = eqcs(k)
if ( eqcs_t .le. eqcsSmall .and. q(k).gt.rMinVal ) then
C Initial guess based on constant creep strain rate during increment
eqcs_t = dt*(exp(log(rA)+rN*log(q(k)))*
* ((one+rM)*dt)**rM)
end if
C
test2 = half - sign( half, eqcs_t - rMinVal )
eqcsInv = ( one - test2 ) / ( eqcs_t + test2 )
g = dt*(exp(log(rA)+rN*log(q(k)))*
* ((one+rM)*(test2+eqcs_t))**rM)**om1
dg(k,i_deqcs) = g
dg(k,i_DdeqcsDq) = qInv * rN * om1 * g
dg(k,i_DdeqcsDeqcs) = eqcsInv * rM * om1 * g
end do
C
return
end | |||||||||||||