VUGENS

User subroutine to define the mechanical behavior of a shell section.

User subroutine VUGENS:

  • is used to define the (nonlinear) mechanical behavior of a shell section directly in terms of generalized section quantities;

  • requires you to define the section behavior of the shell directly in terms of membrane strains and curvature changes;

  • can define a damage variable to be applied to the (elastic) transverse shear stiffness of the section;

  • is called for blocks of integration points in shell elements with a general shell section definition with user-defined section behavior;

  • can use and update solution-dependent state variables; and

  • can use any field variables that are passed in.

This page discusses:

Storage of Membrane and Bending Components

The arrays of the section forces, moments, and curvatures contain ndir + nshr components, with ndir = 2 and nshr = 1 for three-dimensional shells and ndir = 2 and nshr = 0 for axisymmetric shells. The direct components (11 and 22) are stored first, followed by the indirect 12 component (for three-dimensional shells). The arrays of section membrane strains and strain increments contain (ndir +1) + nshr components, where the additional direct component corresponds to the thickness strain.

The shear strain components in user subroutine VUGENS are stored as tensor components, not as engineering components.

Stability

You should ensure that the integration scheme coded in this routine is stable.

Abaqus/Explicit uses the tangent stiffness matrix ddndde to compute an effective modulus of the material, which in turn is used for the calculation of the stable time increment. To ensure stability, the matrix ddndde defined inside VUGENS should provide a conservative estimate of the stiffness. The matrix ddndde is assumed to be symmetric for efficiency reasons. If the constitutive response leads to nonsymmetric stiffness, compute the symmetric part of the matrix by taking one half of the sum of the matrix and its transpose.

Use with Shells That Have Transverse Shear

If user subroutine VUGENS is used to describe the section behavior of shells with transverse shear, you must define the transverse shear stiffness (see Defining the Transverse Shear Stiffness).

This initial value of the transverse shear stiffness can be modified within VUGENS by defining a TVS DAMAGE factor.

Use with Continuum Shell Elements

User subroutine VUGENS cannot be used to describe the section behavior of continuum shell elements.

User Subroutine Interface

 subroutine vugens ( 
C Read only - 
 * nblock, ndir, nshr, nstatev, nfieldv, 
 * jElem, kIntPt, kIncr, 
 * stepTime, totalTime, dt, 
 * cElsetName, coordMp, 
 * strainInc, curvInc, 
 * tempOld, fieldOld, 
 * defgradOld, direct, 
 * forceOld, xmomOld, stateOld, 
 * enerInternOld, enerInelasOld, 
 * props, nprops, jprops, njprops, 
 * density, thick, 
 * tempNew, fieldNew, 
 * defgradNew, curvNew, gamma, 
C Write only - 
 * ddndde, 
 * forceNew, xmomNew, stateNew, 
 * enerInternNew, enerInelasNew ) 
* 
 include 'vaba_param.inc' 
* 
 character*80 cElsetName 
* 
 dimension jElem(nblock), 
 * forceNew(nblock,ndir+nshr), 
 * forceOld(nblock,ndir+nshr), 
 * xmomNew(nblock,ndir+nshr), 
 * xmomOld(nblock,ndir+nshr), 
 * stateOld(nblock,nstatev), 
 * stateNew(nblock, nstatev), 
 * coordMp(nblock,3), 
 * strainInc(nblock,ndir+1+nshr), 
 * curvInc(nblock,ndir+nshr), 
 * ddndde(nblock,*), 
 * defgradNew(nblock,ndir+1+nshr+nshr), 
 * defgradOld(nblock,ndir+1+nshr+nshr), 
 * direct(nblock,3,3), 
 * curvNew(nblock,ndir+nshr), 
 * gamma(nblock, 2), 
 * tempNew(nblock),
 * tempOld(nblock), 
 * fieldNew(nblock,nfieldv), 
 * fieldOld(nblock,nfieldv), 
 * props(nprops), 
 * density(nblock), 
 * thick(nblock), 
 * enerInternNew(nblock), 
 * enerInternOld(nblock), 
 * enerInelasOld(nblock), 
 * enerInelasNew(nblock) 

Variables to Be Defined

ddndde(nblock, *)

Symmetric part of the section stiffness matrix of the shell section, N / E , where N are the section forces and moments on the shell section and E are the generalized section strains in the shell. The components of ddndde define the change at the end of the time increment caused by an infinitesimal perturbation of the generalized section strain increment array. The size of this matrix is (ndir + nshr ) × ((ndir + nshr) × 2 +1) corresponding to the triangular storage of the symmetric part of N / E .

forceNew (nblock, ndir+nshr)

Array of section forces at each integration point at the end of the increment. Stored as ( N 11 , N 22 , N 33 ) for three-dimensional shells and as ( N 11 , N 22 ) for axisymmetric shells.

xmomNew (nblock, ndir+nshr)

Array of section moments at each integration point at the end of the increment. Stored as ( M 11 , M 22 , M 33 ) for three-dimensional shells and as ( M 11 , M 22 ) for axisymmetric shells.

stateNew(nblock, nstatev)

State variables at each integration point at the end of the increment. You define the size of this array by allocating space for it using the VARIABLES parameter in the SHELL GENERAL SECTION option.

Variables That Can Be Updated

enerInternNew(nblock)

Internal energy per unit mass at each integration point at the end of the increment.

enerInelasNew(nblock)

Dissipated inelastic energy per unit mass at each integration point at the end of the increment.

Variables Passed in for Information

nblock

Number of integration points to be processed in this call to VUGENS.

ndir

Number of direct components in a symmetric tensor.

nshr

Number of indirect components in a symmetric tensor.

jElem(nblock)

Array of element numbers.

kIntPt

Integration point number.

kIncr

Increment number.

nstatev

Number of user-defined state variables that are associated with this integration point. You define this using the VARIABLES parameter in the SHELL GENERAL SECTION option.

nfieldv

Number of user-defined external field variables.

nprops

User-defined number of real property values associated with this section (Defining the Shell Section Behavior).

njprops

User-defined number of integer property values associated with this section (Defining the Shell Section Behavior).

stepTime

Value of time since the step began.

totalTime

Value of total time. The time at the beginning of the step is given by totalTime - stepTime.

dt

Time increment size.

cElsetName

User-specified element set name associated with this section, left justified.

coordMp(nblock, *)

An array containing the current coordinates for each integration point.

direct(nblock, 3, 3)

An array containing the direction cosines of the shell local surface coordinate system. For integration point k, direct(k,1,1), direct(k,2,1), and direct(k,3,1) give the (1, 2, 3) components of the first material direction; direct(k,1,2), direct(k,2,2), and direct(k,3,2) give the second material direction, etc. The first two directions are in the plane of the element, and the third direction is the normal.

props(nprops)

A floating point array containing the nprops real property values defined for use with this section.

jprops(njprops)

An integer array containing the njprops integer property values defined for use with this section.

density(nblock)

Current density at the integration points.

strainInc(nblock, ndir+1+nshr)

Array of membrane strain increments at each integration point. Stored as ( Δ ε 11 , Δ ε 22 , Δ ε 33 , Δ ε 12 ) for three-dimensional shells and as ( Δ ε 11 , Δ ε 22 , Δ ε 33 ) for axisymmetric shells.

curvInc(nblock, ndir+1+nshr)

Array of curvature increments at each integration point. Stored as ( Δ κ 11 , Δ κ 22 , Δ κ 33 ) for three-dimensional shells and as ( Δ κ 11 , Δ κ 22 ) for axisymmetric shells.

tempOld(nblock)

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

defgradOld(nblock, ndir+1+nshr+nshr)

Midsurface deformation gradient tensor at each integration point at the beginning of the increment. Stored in three dimensions as ( F 11 , F 22 , F 33 , F 12 , F 23 , F 13 , F 21 , F 32 , F 31 ) and in two dimensions as ( F 11 , F 22 , F 33 , F 12 , F 21 ).

The deformation gradient curvature tensor is available for finite-strain shells, but it is not available for small-strain shells. The tensor is provided in the local shell coordinate system.

fieldOld(nblock, nfieldv)

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

forceOld (nblock, ndir+nshr)

Array of section forces at each integration point at the beginning of the increment. Stored as ( N 11 , N 22 , N 33 ) for three-dimensional shells and as ( N 11 , N 22 ) for axisymmetric shells.

xmomOld (nblock, ndir+nshr)

Array of section moments at each integration point at the beginning of the increment. Stored as ( M 11 , M 22 , M 33 ) for three-dimensional shells and as ( M 11 , M 22 ) for axisymmetric shells.

stateOld(nblock, nstatev)

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

enerInternOld(nblock)

Internal energy per unit mass at each integration point at the beginning of the increment.

enerInelasOld(nblock)

Dissipated inelastic energy per unit mass at each integration point at the beginning of the increment.

tempNew(nblock)

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

defgradNew(nblock, ndir+1+nshr+nshr)

Midsurface deformation gradient tensor at each integration point at the end of the increment. Stored in three dimensions as ( F 11 , F 22 , F 33 , F 12 , F 23 , F 13 , F 21 , F 32 , F 31 ) and in two dimensions as ( F 11 , F 22 , F 33 , F 12 , F 21 ).

The deformation gradient curvature tensor is available for finite-strain shells, but it is not available for small-strain shells. The tensor is provided in the local shell coordinate system.

fieldNew(nblock, nfieldv)

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

curvNew(nblock, ndir+1+nshr)

An array containing the curvature tensor at each integration point at the end of the increment. Stored as ( κ 11 , κ 22 , κ 12 ) for three-dimensional shells and as ( κ 11 , κ 22 ) for axisymmetric shells.

The tensor is provided in the local shell coordinate system.

gamma(nblock, 2)

Transverse shear strains at each integration point.

thick(nblock)

Section thickness at each integration point.