Product: Abaqus/Explicit
User subroutine VUMULLINS:
can be used to define the damage variable for the Mullins effect material model (“Mullins effect,” Section 22.6.1 of the Abaqus Analysis User's Guide), including the use of the Mullins effect approach to model energy dissipation in elastomeric foams (“Energy dissipation in elastomeric foams,” Section 22.6.2 of the Abaqus Analysis User's Guide);
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.
Material points that satisfy a user-defined failure criterion can be deleted from the model (see “User-defined mechanical material behavior,” Section 26.7.1 of the Abaqus Analysis User's Guide). 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,” Section 26.7.1 of the Abaqus Analysis User's Guide. 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.
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
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, , 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,
, 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.
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 “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User's Guide, 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.
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” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User's Guide).
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, , when the primary material behavior is hyperelastic. The value, at the end of the increment, of the total primary strain energy density,
, when the primary material behavior is hyperfoam.
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
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,
; 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