Files
MultiPhysicsVault/.raw/AbaqusUserSubroutineManual/AbaqusUserSubroutineManual_015.md
T
김경종 6bca119e6c
Tests / Hermetic test suite (push) Has been cancelled
Tests / Skill frontmatter validation (push) Has been cancelled
add raw source
2026-07-02 09:18:17 +09:00

18 KiB
Raw Blame History

jj = max(i, j)
c
    index = ii + jj*(jj-1)/2
c
    return
    end
c
c
C Generate enumeration of Anisotropic Pseudo Invariants of
C type 4
c
    integer function indexInv4(i, j)
c
    include 'aba_param.inc'
c
    ii = min(i, j)
    jj = max(i, j)
c
    indexInv4 = 4 + jj*(jj-1) + 2*(ii-1)
c
    return
    end
c
c
C Generate enumeration of Anisotropic Pseudo Invariants of
C type 5
c
    integer function indexInv5(i, j)
c
    include 'aba_param.inc'
c
    ii = min(i, j)
    jj = max(i, j)
c
    indexInv5 = 5 + jj*(jj-1) + 2*(ii-1)
c
    return
    end 

Additional reference

• Kaliske, M., and J. Schmidt, “Formulation of Finite Nonlinear Anisotropic Elasticity,” CADFEM GmbH Infoplaner 2/2005, vol. 2, pp. 2223, 2005.

1.1.21 UANISOHYPER_STRAIN: User subroutine to define anisotropic hyperelastic material behavior based on Green strain.

Product: Abaqus/Standard

References

• “Anisotropic hyperelastic behavior,” Section 22.5.3 of the Abaqus Analysis Users Guide
• *ANISOTROPIC HYPERELASTIC
• “UANISOHYPER_INV and VUANISOHYPER_INV,” Section 4.1.13 of the Abaqus Verification Guide

Overview

User subroutine UANISOHYPER_STRAIN:

• can be used to define the strain energy potential of anisotropic hyperelastic materials as a function of the components of the Green strain tensor;
• is called at all material calculation points of elements for which the material definition contains user-defined anisotropic hyperelastic behavior with a Green strain-based formulation (“Anisotropic hyperelastic behavior,” Section 22.5.3 of the Abaqus Analysis Users Guide);
• can include material behavior dependent on field variables or state variables;
• requires that the values of the derivatives of the strain energy density function of the anisotropic hyperelastic material be defined with respect to the components of the modified Green strain tensor; and
• is called twice per material point in each iteration.

Storage of strain components

In the array of modified Green strain, EBAR, direct components are stored first, followed by shear components. There are NDI direct and NSHR tensor shear components. The order of the components is defined in “Conventions,” Section 1.2.2 of the Abaqus Analysis Users Guide. Since the number of active stress and strain components varies between element types, the routine must be coded to provide for all element types with which it will be used.

Storage of arrays of derivatives of the energy function

The array of first derivatives of the strain energy function, DU1, contains NTENS+1 components, with NTENS=NDI+NSHR. The first NTENS components correspond to the derivatives with respect to each component of the modified Green strain, { \partial U } / { \partial \overline { { \varepsilon } } _ { i j } ^ { G } } . The last component contains the derivative with respect to the volume ratio, .

The array of second derivatives of the strain energy function, DU2, contains (NTENS+1)*(NTENS+2)/2 components. These components are ordered using the following triangular storage scheme:

Component2D Case3D Case
1 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{11}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{11}^{G}$
2 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{22}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{22}^{G}$
3 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{22}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{22}^{G}$
4 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{33}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{33}^{G}$
5 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{33}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{33}^{G}$
6 $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{33}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{33}^{G}$
7 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{12}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{12}^{G}$
8 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{12}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{12}^{G}$
9 $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{12}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{12}^{G}$
10 $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial\overline{\varepsilon}_{12}^{G}$ $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial\overline{\varepsilon}_{12}^{G}$
11 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial J$ $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{13}^{G}$
12 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial J$ $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{13}^{G}$
13 $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial J$ $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{13}^{G}$
14 $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial J$ $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial\overline{\varepsilon}_{13}^{G}$
15 $\partial^{2}U/\partial J^{2}$ $\partial^{2}U/\partial\overline{\varepsilon}_{13}^{G}\partial\overline{\varepsilon}_{13}^{G}$
16 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial\overline{\varepsilon}_{23}^{G}$
17 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial\overline{\varepsilon}_{23}^{G}$
18 $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial\overline{\varepsilon}_{23}^{G}$
19 $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial\overline{\varepsilon}_{23}^{G}$
20 $\partial^{2}U/\partial\overline{\varepsilon}_{13}^{G}\partial\overline{\varepsilon}_{23}^{G}$
21 $\partial^{2}U/\partial\overline{\varepsilon}_{23}^{G}\partial\overline{\varepsilon}_{23}^{G}$
22 $\partial^{2}U/\partial\overline{\varepsilon}_{11}^{G}\partial J$
23 $\partial^{2}U/\partial\overline{\varepsilon}_{22}^{G}\partial J$
24 $\partial^{2}U/\partial\overline{\varepsilon}_{33}^{G}\partial J$
Component2D Case3D Case
25 $\partial^{2}U/\partial\overline{\varepsilon}_{12}^{G}\partial J$
26 $\partial^{2}U/\partial\overline{\varepsilon}_{13}^{G}\partial J$
27 $\partial^{2}U/\partial\overline{\varepsilon}_{23}^{G}\partial J$
28 $\partial^{2}U/\partial J^{2}$

Finally, the array of third derivatives of the strain energy function, DU3, also contains (NTENS+1)*(NTENS+2)/2 components, each representing the derivative with respect to of the corresponding component of DU2. It follows the same triangular storage scheme as DU2.

Special considerations for various element types

There are several special considerations that need to be noted.

Shells that calculate transverse shear energy

When UANISOHYPER_STRAIN is used to define the material response of shell elements that calculate transverse shear energy, Abaqus/Standard cannot calculate a default value for the transverse shear stiffness of the element. Hence, you must define the elements transverse shear stiffness. See “Shell section behavior,” Section 29.6.4 of the Abaqus Analysis Users Guide, for guidelines on choosing this stiffness.

Elements with hourglassing modes

When UANISOHYPER_STRAIN is used to define the material response of elements with hourglassing modes, you must define the hourglass stiffness for hourglass control based on the total stiffness approach. The hourglass stiffness is not required for enhanced hourglass control, but you can define a scaling factor for the stiffness associated with the drill degree of freedom (rotation about the surface normal). See “Section controls,” Section 27.1.4 of the Abaqus Analysis Users Guide.

User subroutine interface

SUBROUTINE UANISOHYPER_STRAIN (EBAR, AJ, UA, DU1, DU2, DU3,
1 TEMP, NOEL, CMNAME, INCMPFLAG, IHYBFLAG, NDI, NSHR, NTENS,
2 NUMSTATEV, STATEV, NUMFIELDV, FIELDV, FIELDVINC,
3 NUMPROPS, PROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
C
DIMENSION EBAR(NTENS), UA(2), DU1(NTENS+1), 
2 DU2((NTENS+1)*(NTENS+2)/2),
3 DU3((NTENS+1)*(NTENS+2)/2),
4 STATEV(NUMSTATEV), FIELDV(NUMFIELDV),
5 FIELDVINC(NUMFIELDV), PROPS(NUMPROPS) 

user coding to define UA,DU1,DU2,DU3,STATEV

RETURN

END

Variables to be defined

UA(1)

U, strain energy density function. For a compressible material at least one derivative involving J should be nonzero. For an incompressible material all derivatives involving J are ignored.

UA(2)

\tilde { U } _ { d e v } , the deviatoric part of the strain energy density of the primary material response. This quantity is needed only if the current material definition also includes Mullins effect (see “Mullins effect,” Section 22.6.1 of the Abaqus Analysis Users Guide).

DU1(NTENS+1)

Derivatives of strain energy potential with respect to the components of the modified Green strain tensor, { \partial U } / { \partial \overline { { \varepsilon } } _ { i j } ^ { G } } , and with respect to the volume ratio, .

DU2((NTENS+1)*(NTENS+2)/2)

Second derivatives of strain energy potential with respect to the components of the modified Green strain tensor and the volume ratio (using triangular storage, as mentioned earlier).

DU3((NTENS+1)*(NTENS+2)/2)

Derivatives with respect to J of the second derivatives of the strain energy potential (using triangular storage, as mentioned earlier). This quantity is needed only for compressible materials with a hybrid formulation (when INCMPFLAG = 0 and IHYBFLAG = 1).

STATEV

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

Variables passed in for information

TEMP

Current temperature at this point.

NOEL

Element number.

CMNAME

User-specified material name, left justified.

NDI

Number of direct stress components at this point.

NSHR

Number of shear components at this point.

NTENS

Size of the stress or strain component array (NDI + NSHR).

INCMPFLAG

Incompressibility flag defined to be 1 if the material is specified as incompressible or 0 if the material is specified as compressible.

IHYBFLAG

Hybrid formulation flag defined to be 1 for hybrid elements; 0 otherwise.

NUMSTATEV

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

NUMFIELDV

Number of field variables.

FIELDV

Array of interpolated values of predefined field variables at this material point at the end 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).

FIELDVINC

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

NUMPROPS

Number of material properties entered for this user-defined hyperelastic material.

PROPS

Array of material properties entered for this user-defined hyperelastic material.

EBAR(NTENS)

Modified Green strain tensor, \overline { { \varepsilon } } ^ { G } , at the material point at the end of the increment.

AJ

J, determinant of deformation gradient (volume ratio) at the end of the increment.

Example: Orthotropic Saint-Venant Kirchhoff model

As a simple example of the coding of user subroutine UANISOHYPER_STRAIN, consider the generalization to anisotropic hyperelasticity of the Saint-Venant Kirchhoff model. The strain energy function of the Saint-Venant Kirchhoff model can be expressed as a quadratic function of the Green strain tensor, \varepsilon ^ { G } , as


U (\boldsymbol {\varepsilon} ^ {G}) = \frac {1}{2} \boldsymbol {\varepsilon} ^ {G}: \mathbf {D}: \boldsymbol {\varepsilon} ^ {G},

where is the fourth-order elasticity tensor. The derivatives of the strain energy function with respect to the Green strain are given as


\frac {\partial U}{\partial \varepsilon^ {G}} = \mathbf {D}: \varepsilon^ {G},

\frac {\partial^ {2} U}{\partial \varepsilon^ {G} \partial \varepsilon^ {G}} = \mathbf {D}.

However, user subroutine UANISOHYPER_STRAIN must return the derivatives of the strain energy function with respect to the modified Green strain tensor, \overline { { \varepsilon } } ^ { G } , and the volume ratio, J, which can be accomplished easily using the following relationship between \varepsilon ^ { G } , \overline { { \varepsilon } } ^ { G } , and :


\boldsymbol {\varepsilon} ^ {G} = J ^ {\frac {2}{3}} \overline {{\boldsymbol {\varepsilon}}} ^ {G} + \frac {1}{2} (J ^ {\frac {2}{3}} - 1) \mathbf {I},

where is the second-order identity tensor. Thus, using the chain rule we find


\frac {\partial U}{\partial \overline {{\varepsilon}} ^ {G}} = J ^ {\frac {2}{3}} \frac {\partial U}{\partial \varepsilon^ {G}},

\frac {\partial U}{\partial J} = \frac {\partial \varepsilon^ {G}}{\partial J}: \frac {\partial U}{\partial \varepsilon^ {G}},

\frac {\partial^ {2} U}{\partial \overline {{\varepsilon}} ^ {G} \partial \overline {{\varepsilon}} ^ {G}} = J ^ {\frac {4}{3}} \frac {\partial^ {2} U}{\partial \varepsilon^ {G} \partial \varepsilon^ {G}},

\begin{array}{l} \frac {\partial^ {2} U}{\partial J ^ {2}} = \frac {\partial^ {2} \varepsilon^ {G}}{\partial J ^ {2}}: \frac {\partial U}{\partial \varepsilon^ {G}} + \frac {\partial \varepsilon^ {G}}{\partial J}: \frac {\partial^ {2} U}{\partial \varepsilon^ {G} \partial \varepsilon^ {G}}: \frac {\partial \varepsilon^ {G}}{\partial J}, \\ \frac {\partial^ {2} U}{\partial \overline {{\varepsilon}} ^ {G} \partial J} = \frac {2}{3 J} J ^ {\frac {2}{3}} \frac {\partial U}{\partial \varepsilon^ {G}} + J ^ {\frac {2}{3}} \frac {\partial^ {2} U}{\partial \varepsilon^ {G} \partial \varepsilon^ {G}}: \frac {\partial \varepsilon^ {G}}{\partial J}, \\ \end{array}

where


\frac {\partial \pmb {\varepsilon} ^ {G}}{\partial J} = \frac {2}{3 J} J ^ {\frac {2}{3}} (\overline {{\pmb {\varepsilon}}} ^ {G} + \frac {1}{2} \mathbf {I}) = \frac {2}{3 J} (\pmb {\varepsilon} ^ {G} + \frac {1}{2} \mathbf {I})

and


\frac {\partial^ {2} \varepsilon^ {G}}{\partial J ^ {2}} = - \frac {1}{3 J} \frac {\partial \varepsilon^ {G}}{\partial J}.

In this example an auxiliary function is used to facilitate indexing into a fourth-order symmetric tensor. The user subroutine would be coded as follows:

subroutine uanisohyper_strain (
    *    ebar, aj, ua, du1, du2, du3, temp, noel, cmname,
    *    incmpFlag, ihybFlag, ndi, nshr, ntens,
    *    numStatev, statev, numFieldv, fieldv, fieldvInc,
    *    numProps, props)
c
    include 'aba_param.inc'
c
    dimension ebar(ntens), ua(2), du1(ntens+1)
    dimension du2((ntens+1)*(ntens+2)/2)
    dimension du3((ntens+1)*(ntens+2)/2)
    dimension statev(numStatev), fieldv(numFieldv)
    dimension fieldvInc(numFieldv), props(numProps)
c
    character*80 cmname
c
    parameter ( half    = 0.5d0,
    $    one    = 1.d0,
    $    two    = 2.d0,
    $    third    = 1.d0/3.d0,
    $    twothds    = 2.d0/3.d0,
    $    four    = 4.d0 )
*
* Orthotropic Saint-Venant Kirchhoff strain energy function (3D)
* 
D1111=props(1)
D1122=props(2)
D2222=props(3)
D1133=props(4)
D2233=props(5)
D3333=props(6)
D1212=props(7)
D1313=props(8)
D2323=props(9)

*
d2UdE11dE11 = D1111
d2UdE11dE22 = D1122
d2UdE11dE33 = D1133

*
d2UdE22dE11 = d2UdE11dE22
d2UdE22dE22 = D2222
d2UdE22dE33 = D2233

*
d2UdE33dE11 = d2UdE11dE33
d2UdE33dE22 = d2UdE22dE33
d2UdE33dE33 = D3333

*
d2UdE12dE12 = D1212

*
d2UdE13dE13 = D1313

*
d2UdE23dE23 = D2323

*
xpow = exp (log(aj) * twothds)
detuInv = one / aj

*
E11 = xpow * ebar(1) + half * (xpow - one)
E22 = xpow * ebar(2) + half * (xpow - one)
E33 = xpow * ebar(3) + half * (xpow - one)
E12 = xpow * ebar(4)
E13 = xpow * ebar(5)
E23 = xpow * ebar(6)

*
term1 = twothds * detuInv
dE11Dj = term1 * (E11 + half)
dE22Dj = term1 * (E22 + half)
dE33Dj = term1 * (E33 + half)