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 | |||||||||||||