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 |