C
C  User subroutine to define damage-parameter eta for Mullins effect

      subroutine umullins(numProps,props,uMaxNew,uMaxOld,sedDev,
     *     eta,detadW,dmgDissOld,dmgDissNew,senerNew,numStateV,stateV,
     *     temp,dtemp,numFieldV,fieldV,fieldVInc,cmname,linper)
C
      include 'aba_param.inc'
C
      character*80 cmname
      dimension props(*),stateV(*),fieldV(*),fieldVInc(*)
C
      parameter ( c1 = -1.26551223d0, c2 = 1.00002368d0,
     *     c3 = 0.37409196d0, c4 = 0.09678418d0,
     *     c5 =-0.18628806d0, c6 = 0.27886807d0,
     *     c7 =-1.13520398d0, c8 = 1.48851587d0,
     *     c9 =-0.82215223d0, c10= 0.17087277d0,
     *     one=1.d0,two=2.d0,half=0.5d0,pi=3.14159265358979d0,
     *     zero=0.d0,tol=1.d-15)   
C
      if (cmname(1:6) .eq. 'YEOH1') then
         continue
      else if ((cmname(1:6) .eq. 'YEOH2').and.numStateV.gt.0) then
         uMaxNew = max(uMaxNew,stateV(1))
      end if
C
      rMullins=props(1)
      amMullins=props(2)
      betaMullins=props(3)
      rInv = one/rMullins
C
      oSqrtPi=one/sqrt(pi)
      term=(amMullins+betaMullins*uMaxNew)
      if (uMaxNew.lt.zero) then
         arg1=zero
      else
         arg1=(uMaxNew-sedDev)/term
      end if
C
      if (arg1.gt.tol) then
         z = abs(arg1)
         t = one/(one+half*z)
         erfc = t*exp(-z*z + c1 + t * (c2 + t * (c3 + t * (c4
     *        + t * (c5 + t * (c6 + t * (c7 + t * (c8
     *        + t * (c9 + t * c10)))))))))
         erf = one - erfc
         eta = one - rInv*erf
         if (eta.gt.one) eta=one
      else
         eta = one
      end if
C
      detadW = oSqrtPi*rInv*two*exp(-arg1*arg1)/term
C
C     Damage dissipation calculations
      if (uMaxNew.gt.zero) then
         arg2=uMaxNew/term
      else
         arg2=zero
      end if
      z = abs(arg2)
      t = one/(one+half*z)
      erfc = t*exp(-z*z + c1 + t * (c2 + t * (c3 + t * (c4
     *           + t * (c5 + t * (c6 + t * (c7 + t * (c8
     *           + t * (c9 + t * c10)))))))))
      erf = one - erfc
      term1=exp(-arg2*arg2)
      dmgDissNew=erf*uMaxNew
     *     - oSqrtPi*term*(one-term1)
      dmgDissNew = rInv*dmgDissNew     
C
C    Compute phi(eta)
      term2=exp(-arg1*arg1)
      phiOfEta=oSqrtPi*rInv*term*(term2-one) + (one-eta)*uMaxNew      
C
      senerNew=eta*sedDev+phiOfEta-dmgDissNew
C
      return
      end

