VUMULLINS

User subroutine to define damage variable for the Mullins effect material model.

User subroutine VUMULLINS:

  • can be used to define the damage variable for the Mullins effect material model (Mullins Effect), including the use of the Mullins effect approach to model energy dissipation in elastomeric foams (Energy Dissipation in Elastomeric Foams);

  • will be called for blocks of material calculation points for which the material definition contains a user-defined Mullins effect;

  • can be used to define a failure criterion based on the strain energy density of the material;

  • can use and update solution-dependent state variables;

  • can use any field variables that are passed in; and

  • should be used when you do not want to use the Ogden and Roxburgh form of the damage variable, η, that is used by Abaqus/Explicit.

This page discusses:

Material Point Deletion

Material points that satisfy a user-defined failure criterion can be deleted from the model (see User-Defined Mechanical Material Behavior). You must specify the state variable number controlling the element deletion flag when you allocate space for the solution-dependent state variables, as explained in User-Defined Mechanical Material Behavior. The deletion state variable can be set to a value of one or zero inside user subroutine VUMULLINS. A value of one indicates that the material point is active, and a value of zero indicates that Abaqus/Explicit should delete the material point from the model by setting the stresses to zero. The structure of the block of material points passed to user subroutine VUMULLINS remains unchanged during the analysis; deleted material points are not removed from the block. Abaqus/Explicit will “freeze” the values of the strain energy density passed to user subroutine VUMULLINS for all deleted material points; that is, the values remain constant after deletion is triggered. Once a material point has been flagged as deleted, it cannot be reactivated.

User Subroutine Interface

      subroutine vumullins (
C Read only (unmodifiable) variables –
     1     nblock,
     2     jElem, kIntPt, kLayer, kSecPt, 
     3     cmname,
     4     nstatev, nfieldv, nprops,
     5     props, tempOld, tempNew, fieldOld, fieldNew,
     6     stateOld, enerDamageOld, 
     7     uMaxOld, uMaxNew, uDev,
C Write only (modifiable) variables –
     8     eta, detaDuDev, 
     9     stateNew, enerDamageNew )
C
      include 'vaba_param.inc'
C
      dimension props(nprops), 
     1  tempOld(nblock),
     2  fieldOld(nblock,nfieldv), 
     3  stateOld(nblock,nstatev), 
     4  tempNew(nblock),
     5  fieldNew(nblock,nfieldv),
     6  enerDamageOld(nblock), 
     7  uMaxOld(nblock), uMaxNew(nblock),
     8  uDev(nblock),
     9  eta(nblock), detaDuDev(nblock),
     1  stateNew(nblock,nstatev),
     2  enerDamageNew(nblock)
C
      character*80 cmname
C

      do 100 km = 1,nblock
        user coding
  100 continue

      return
      end

Variables to Be Defined

eta(nblock)

The damage variable, η.

detaDuDev(nblock)

The derivative of the damage variable with respect to the deviatoric elastic strain energy density of the undamaged material, dη/dU~dev, when the primary material behavior is hyperelastic. The derivative of the damage variable with respect to the total elastic strain energy density of the undamaged material, dη/dU~, when the primary material behavior is hyperfoam. This quantity is needed for the evaluation of the effective moduli of the material, which enters the stable time increment calculation.

Variables That Can Be Updated

stateNew(nblock,nstatev)

State variables at each material point at the end of the increment. You define the size of this array by allocating space for it (see About User Subroutines and Utilities for more information).

enerDamageNew(nblock)

The energy dissipation density at the end of the increment. This quantity can be defined either in total form or in an incremental manner using the old value of the damage dissipation enerDamageOld and the increment in damage dissipation. This quantity is used for output purposes only.

Variables Passed in for Information

nblock

Number of material points to be processed in this call to VUMULLINS.

jElem(nblock)

Array of element numbers.

kIntPt

Integration point number.

kLayer

Layer number (for composite shells).

kSecPt

Section point number within the current layer.

cmname

User-specified material name, left justified. It is passed in as an uppercase character string. Some internal material models are given names starting with the “ABQ_” character string. To avoid conflict, you should not use “ABQ_” as the leading string for cmname.

nstatev

Number of user-defined state variables that are associated with this material type (you define the number as described in Allocating Space for Solution-Dependent State Variables).

nfieldv

Number of user-defined external field variables.

nprops

User-specified number of user-defined material properties.

props(nprops)

User-supplied material properties.

tempOld(nblock)

Temperatures at each material point at the beginning of the increment.

tempNew(nblock)

Temperatures at each material point at the end of the increment.

fieldOld(nblock,nfieldv)

Values of the user-defined field variables at each material point at the beginning of the increment.

fieldNew(nblock,nfieldv)

Values of the user-defined field variables at each material point at the end of the increment.

stateOld(nblock,nstatev)

State variables at each material point at the beginning of the increment.

enerDamageOld(nblock)

The value of energy dissipated at the beginning of the increment.

uMaxOld(nblock)

The value, at the beginning of the increment, of the maximum primary strain energy density over its entire deformation history.

uMaxNew(nblock)

The value, at the end of the increment, of the maximum primary strain energy density over its entire deformation history.

uDev(nblock)

The value, at the end of the increment, of the deviatoric primary strain energy density, U~dev, when the primary material behavior is hyperelastic. The value, at the end of the increment, of the total primary strain energy density, U~, when the primary material behavior is hyperfoam.

Example: Hyperelasticity with Softening

As a simple example of the coding of user subroutine VUMULLINS, consider the following damage model based on the softening hyperelasticity approach proposed by Volokh (2007). The damage variable is assumed to vary with the deformation according to

η=exp(-UdevmU0),

where Udevm is the maximum value of U~dev at a material point during its deformation history, U~dev is the deviatoric part of the strain energy density of the undamaged hyperelastic behavior, and U0 is a material parameter with units of strain energy density. The energy dissipation function for this model takes the form

ϕ(η)=U0(1-η+ηln(η)).

It can be shown that the functions η and ϕ(η) satisfy the following condition:

(U~dev+ϕ(η))η˙=0.

The code in user subroutine VUMULLINS must return the damage variable, η; the derivative of the damage variable with respect to the elastic strain energy density of the undamaged material, dη/dU~dev; and the energy dissipation ϕ(η). The user subroutine would be coded as follows:

      subroutine vumullins (
C Read only (unmodifiable) variables –
     1     nblock,
     2     jElem, kIntPt, kLayer, kSecPt, 
     3     cmname,
     4     nstatev, nfieldv, nprops,
     5     props, tempOld, tempNew, fieldOld, fieldNew,
     6     stateOld, enerDamageOld, 
     7     uMaxOld, uMaxNew, uDev,
C Write only (modifiable) variables –
     8     eta, detaDuDev, 
     9     stateNew, enerDamageNew )
C
      include 'vaba_param.inc'
C
      dimension props(nprops), 
     1  tempOld(nblock),
     2  fieldOld(nblock,nfieldv), 
     3  stateOld(nblock,nstatev), 
     4  tempNew(nblock),
     5  fieldNew(nblock,nfieldv),
     6  enerDamageOld(nblock), 
     7  uMaxOld(nblock), uMaxNew(nblock),
     8  uDev(nblock),
     9  eta(nblock), detaDuDev(nblock),
     1  stateNew(nblock,nstatev),
     2  enerDamageNew(nblock)
C
      character*80 cmname
C
      parameter ( zero = 0.d0, one = 1.d0 )
C
      u0 = props(1)
      u0Inv = zero 
      if ( u0 .gt. zero ) u0Inv = one / u0
C
      do k=1, nblock
         eta(k) = exp( -uMaxNew(k) * u0Inv )
         detaDUdev(k) = zero
         if ( uMaxNew(k) .gt. uMaxOld(k) ) 
     1        detaDUdev(k) = -u0Inv * eta(k)
         enerDamageNew(k) = u0*(one-eta(k)+eta(k)*log(eta(k)))
       end do
C
      return
      end

Additional Reference

  1. Volokh K. Y.Hyperelasticity with Softening for Modeling Materials Failure,” Journal of the Mechanics and Physics of Solids, vol. 55, pp. 22372264, 2007.