<!-- source-page: 261 -->

```prolog
C
INCLUDE 'ABA_PARAM.INC'
CHARACTER*80 CENAME
DIMENSION DDNDDE(NSECV,NSECV),FORCE(NSECV),STATEV(NSTATV),
1 STRAN(NSECV),DSTRAN(NSECV),TSS(2),TIME(2),PREDEF(*),
2 DPRED(*),PROPS(*),JPROPS(*),COORDS(3),DFGRD(3,3),
3 CURV(2,2),BASIS(3,3)
user coding to define DDNDDE, FORCE, STATEV, SSE, PNEWDT
RETURN
END 
```

# Variables to be defined

# DDNDDE(NSECV,NSECV)

Section stiffness matrix of the shell section, , where are the section forces and moments on the shell section and are the generalized section strains in the shell. DDNDDE(I,J) defines the change in the Ith force component at the end of the time increment caused by an infinitesimal perturbation of the Jth component of the section strain increment array. The size of this matrix depends on the values of NSECV (see below for details).

Unless you invoke the unsymmetric equation solution capability in the general shell section definition (“Defining whether or not the section stiffness matrices are symmetric” in “Using a general shell section to define the section behavior,” Section 29.6.6 of the Abaqus Analysis User’s Guide), Abaqus/Standard will use only the symmetric part of DDNDDE. The symmetric part of the matrix is calculated by taking one half the sum of the matrix and its transpose.

# FORCE(NSECV)

This array is passed in as the forces and moments per unit length on the shell surface at the beginning of the increment and must be updated in this routine to be the forces and moments at the end of the increment.

# STATEV(NSTATV)

An array containing the solution-dependent state variables. These are passed in as the values at the beginning of the increment and must be returned as the values at the end of the increment.

# SSE, SPD

Elastic strain energy and plastic dissipation, respectively. These are passed in as the values at the beginning of the increment and should be updated to the corresponding energy values at the end of the increment. These values have no effect on the solution; they are used for the energy output.

<!-- source-page: 262 -->

# PNEWDT

Ratio of suggested new time increment to the time increment being used (DTIME, see below). This variable allows you to provide input to the automatic time incrementation algorithms in Abaqus/Standard (if automatic time incrementation is chosen).

PNEWDT is set to a large value before each call to UGENS.

If PNEWDT is redefined to be less than 1.0, Abaqus/Standard must abandon the time increment and attempt it again with a smaller time increment. The suggested new time increment provided to the automatic time integration algorithms is PNEWDT × DTIME, where the PNEWDT used is the minimum value for all calls to user subroutines that allow redefinition of PNEWDT for this iteration.

If PNEWDT is given a value that is greater than 1.0 for all calls to user subroutines for this iteration and the increment converges in this iteration, Abaqus/Standard may increase the time increment. The suggested new time increment provided to the automatic time integration algorithms is PNEWDT × DTIME, where the PNEWDT used is the minimum value for all calls to user subroutines for this iteration.

If automatic time incrementation is not selected in the analysis procedure, values of PNEWDT that are greater than 1.0 will be ignored and values of PNEWDT that are less than 1.0 will cause the job to terminate.

# Variables passed in for information

# STRAN(NSECV)

An array containing the generalized section strains (membrane strains and curvature changes) at the beginning of the increment. The size of this array depends on the value of NSECV (see below for details).

# DSTRAN(NSECV)

Array of generalized section strain increments.

# TSS(2)

Array containing the transverse shear strains.

# TIME(1)

Value of step time at the beginning of the current increment.

# TIME(2)

Value of total time at the beginning of the current increment.

# DTIME

Time increment.

# TEMP

Temperature at the start of the increment.

<!-- source-page: 263 -->

# DTEMP

Increment of temperature.

# PREDEF

Array of interpolated values of predefined field variables at this point at the start of the increment, based on the values read in at the nodes.

# DPRED

Array of increments of predefined field variables.

# CENAME

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

# NDI

Number of direct force components at this point.

# NSHR

Number of shear force components at this point.

# NSECV

Size of the force and strain component arrays.

# NSTATV

User-defined number of solution-dependent state variables associated with this section (“Defining the number of solution-dependent variables that must be stored for the section” in “Using a general shell section to define the section behavior,” Section 29.6.6 of the Abaqus Analysis User’s Guide).

# PROPS(NPROPS)

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

# JPROPS(NJPROP)

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

# NPROPS

User-defined number of real property values associated with this section (“Defining the section properties” in “Using a general shell section to define the section behavior,” Section 29.6.6 of the Abaqus Analysis User’s Guide).

# NJPROP

User-defined number of integer property values associated with the element (“Defining the section properties” in “Using a general shell section to define the section behavior,” Section 29.6.6 of the Abaqus Analysis User’s Guide).

# COORDS

An array containing the current coordinates of this integration point.

<!-- source-page: 264 -->

# CELENT

Characteristic element length in the reference surface.

# THICK

Original section thickness.

# DFGRD(3,3)

An array containing the components of the midsurface deformation gradient, $\bar { f } _ { i j }$ . The deformation gradient curvature tensor is available for finite-strain shells (S3/S3R, S4, S4R, SAXs, and SAXAs); it is not available for small-strain shells.

The deformation gradient is stored as a 3 × 3 matrix with component equivalence DFGRD $( \pmb { \tau } , \pmb { \ J } ) \Leftrightarrow$ $\bar { f } _ { i j } . \bar { f } _ { \alpha \beta }$ (Greek subscripts range from 1 to 2) are the in-plane components of the deformation gradient, and $\bar { f } _ { 3 3 }$ is the thickness change component. The components, $\bar { \bar { f } } _ { \alpha 3 }$ , are the transverse shear strains scaled by $\bar { f } _ { 3 3 }$ . The remaining components, $\bar { f } _ { 3 \beta }$ , are all zero.

The tensor is provided in the local shell coordinate system.

# CURV(2,2)

An array containing the midsurface curvature tensor, $b _ { \alpha \beta }$ . The curvature tensor is available for finitestrain shells (S3/S3R, S4, S4R, SAXs, and SAXAs); it is not available for small-strain shells.

The curvature tensor is stored as a 2 × 2 matrix with component equivalence CURV $( \pmb { \tau } , \pmb { \sigma } ) \Leftrightarrow b _ { \alpha \beta }$

The tensor is provided in the local shell coordinate system.

# BASIS(3,3)

An array containing the direction cosines of the shell local surface coordinate system. BASIS(1,1), BASIS(2,1), and BASIS(3,1) give the (1, 2, 3) components of the first local direction, etc. The first two directions are in the plane of the element surface, and the third direction is the normal. The conventions for local directions on shell surfaces are defined in “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide. You can redefine the local system; see “Orientations,” Section 2.2.5 of the Abaqus Analysis User’s Guide.

# NOEL

Element number.

# NPT

Integration point number.

# KSTEP

Step number.

# KINC

Increment number.

# NIT

Iteration number. NIT=0 during the first assembly of the system matrix in any increment.

<!-- source-page: 265 -->

# LINPER

Linear perturbation flag. LINPER=1 if the step is a linear perturbation step. LINPER=0 if the step is a general step.

<!-- source-page: 266 -->

<!-- source-page: 267 -->

# 1.1.39 UHARD: User subroutine to define the yield surface size and hardening parameters for isotropic plasticity or combined hardening models.

# Product: Abaqus/Standard

# References

• “Classical metal plasticity,” Section 23.2.1 of the Abaqus Analysis User’s Guide   
• “Models for metals subjected to cyclic loading,” Section 23.2.2 of the Abaqus Analysis User’s Guide   
• \*CYCLIC HARDENING   
• \*PLASTIC

# Overview

User subroutine UHARD:

• is called at all material calculation points of elements for which the material definition includes user-defined isotropic hardening or cyclic hardening for metal plasticity;   
• can be used to define a material’s isotropic yield behavior;   
• can be used to define the size of the yield surface in a combined hardening model;   
• can include material behavior dependent on field variables or state variables; and   
• requires, when appropriate, that the values of the derivatives of the yield stress (or yield surface size in combined hardening models) be defined with respect to the strain, strain rate, and temperature.

# User subroutine interface

```prolog
SUBROUTINE UHARD (SYIELD, HARD, EQPLAS, EQPLASRT, TIME, DTIME, TEMP, 1 DTEMP, NOEL, NPT, LAYER, KSPT, KSTEP, KINC, CMNAME, NSTATV, 2 STATEV, NUMFIELDV, PREDEF, DPRED, NUMPROPS, PROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
DIMENSION HARD(3), STATEV(NSTATV), TIME(*), $ PREDEF(NUMFIELDV), DPRED(*), PROPS(*)
user coding to define SYIELD, HARD(1), HARD(2), HARD(3)
RETURN
END 
```

<!-- source-page: 268 -->

# Variables to be defined

# SYIELD

. Yield stress for isotropic plasticity. Yield surface size for combined hardening.

# HARD(1)

Variation of SYIELD with respect to the equivalent plastic strain,

# HARD(2)

Variation of SYIELD with respect to the equivalent plastic strain rate,

# HARD(3)

Variation of SYIELD with respect to temperature, This quantity is required only in adiabatic, fully coupled temperature-displacement, and thermal-electrical-structural analyses.

# STATEV(NSTATV)

Array containing the user-defined solution-dependent state variables at this point. These are supplied as values at the beginning of the increment or as values updated by other user subroutines (see “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide) and must be returned as values at the end of the increment.

# Variables passed in for information

# EQPLAS

Equivalent plastic strain,

# EQPLASRT

Equivalent plastic strain rate,

# TIME(1)

Value of step time at the beginning of the current increment.

# TIME(2)

Value of total time at the beginning of the current increment.

# DTIME

Time increment.

# TEMP

Temperature at the beginning of the increment.

# DTEMP

Increment of temperature.

# NOEL

Element number.

<!-- source-page: 269 -->

# NPT

Integration point number.

# LAYER

Layer number (for composite shells and layered solids).

# KSPT

Section point number within the current layer.

# KSTEP

Step number.

# KINC

Increment number.

# CMNAME

User-specified material name, left justified.

# NSTATV

User-specified number of solution-dependent state variables associated with this material (“Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide).

# NUMFIELDV

Number of field variables.

# PREDEF(NUMFIELDV)

Array of interpolated values of predefined field variables at this material point at the start of the increment based on the values read in at the nodes (initial values at the beginning of the analysis and current values during the analysis).

# DPRED(NUMFIELDV)

Array of increments of predefined field variables at this material point for this increment; this includes any values updated by user subroutine USDFLD.

# NPROPS

Number of hardening properties entered for this user-defined hardening definition.

# PROPS(NPROPS)

Array of hardening properties entered for this user-defined hardening definition.

<!-- source-page: 270 -->
