Finite Strain Models

Hyperelastic and finite strain constitutive models (Neo-Hookean, Mooney-Rivlin, Saint-Venant, etc.).

void umat_generic_hyper_invariants(const std::string &umat_name, const arma::vec &etot, const arma::vec &Detot, const arma::mat &F0, const arma::mat &F1, arma::vec &sigma, arma::mat &Lt, arma::mat &L, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm_0, double &Wm_1, double &Wm_2, double &Wm_3, const int &ndi, const int &nshr, const bool &start, double &tnew_dt)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law

void umat_generic_hyper_pstretch(const std::string &umat_name, const arma::vec &etot, const arma::vec &Detot, const arma::mat &F0, const arma::mat &F1, arma::vec &sigma, arma::mat &Lt, arma::mat &L, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm_0, double &Wm_1, double &Wm_2, double &Wm_3, const int &ndi, const int &nshr, const bool &start, double &tnew_dt)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law

void umat_hypoelasticity_ortho(const arma::vec&, const arma::vec&, const arma::mat&, const arma::mat&, arma::vec&, arma::mat&, arma::mat&, arma::vec&, const arma::mat&, const int&, const arma::vec&, const int&, arma::vec&, const double&, const double&, const double&, const double&, double&, double&, double&, double&, const int&, const int&, const bool&, const int&, double&)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law

void umat_mooney_rivlin(const arma::vec&, const arma::vec&, const arma::mat&, const arma::mat&, arma::vec&, arma::mat&, arma::mat&, arma::vec&, const arma::mat&, const int&, const arma::vec&, const int&, arma::vec&, const double&, const double&, const double&, const double&, double&, double&, double&, double&, const int&, const int&, const bool&, const int&, double&)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law

void umat_neo_hookean_comp(const arma::vec &Etot, const arma::vec &DEtot, const arma::mat &F0, const arma::mat &F1, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)

Compressible Neo-Hookean hyperelastic constitutive model for finite strain analysis.

This function implements the compressible Neo-Hookean hyperelastic model, one of the simplest hyperelastic models suitable for large deformation analysis of rubber-like materials and soft tissues.

Strain Energy Function:

The total strain energy density is decomposed into isochoric (volume-preserving) and volumetric parts:

\[\Psi(\mathbf{F}) = \bar{W}(\bar{I}_1) + U(J) \]

Isochoric Part (Neo-Hookean):

\[\bar{W}(\bar{I}_1) = \frac{\mu}{2} (\bar{I}_1 - 3) \]
where:
  • \( \mu = \frac{E}{2(1+\nu)} \) is the shear modulus

  • \( \bar{I}_1 = J^{-2/3} I_1 = J^{-2/3} \text{tr}(\mathbf{C}) \) is the first isochoric invariant

  • \( I_1 = \lambda_1^2 + \lambda_2^2 + \lambda_3^2 \) is the first invariant of the right Cauchy-Green tensor

  • \( J = \det(\mathbf{F}) \) is the volume ratio

Volumetric Part:

\[U(J) = \frac{\kappa}{2} (J - 1)^2 \]
where:
  • \( \kappa = \frac{E}{3(1-2\nu)} \) is the bulk modulus

Cauchy Stress Tensor:

The Cauchy stress is computed as:

\[\boldsymbol{\sigma} = \boldsymbol{\sigma}_{\text{iso}} + \boldsymbol{\sigma}_{\text{vol}} \]

Isochoric part:

\[\boldsymbol{\sigma}_{\text{iso}} = \frac{\mu}{J} J^{-2/3} \left( \mathbf{b} - \frac{I_1}{3} \mathbf{I} \right) \]

Volumetric part:

\[\boldsymbol{\sigma}_{\text{vol}} = \kappa (J - 1) \mathbf{I} \]
where \( \mathbf{b} = \mathbf{F} \mathbf{F}^T \) is the left Cauchy-Green tensor.

Consistent Tangent Modulus:

The algorithmic tangent modulus is computed for implicit finite element analysis:

\[\mathbf{L}_t = \mathbf{L}_{\text{iso}} + \mathbf{L}_{\text{vol}} \]

This ensures quadratic convergence in Newton-Raphson iterations.

Material Parameters (props):

Index

Symbol

Description

Units

props[0]

\( E \)

Young’s modulus

Stress

props[1]

\( \nu \)

Poisson’s ratio (should be < 0.5 for compressibility)

-

props[2]

\( \alpha \)

Thermal expansion coefficient

1/Temperature

State Variables (statev):

No internal state variables are required for this hyperelastic model (purely elastic response).

// Example usage:
mat F0 = eye(3,3);
mat F1 = {{1.1, 0.0, 0.0}, {0.0, 1.05, 0.0}, {0.0, 0.0, 0.95}};  // 10% stretch
vec Etot = Green_Lagrange(F1);
vec DEtot = Etot;  // Starting from reference
vec sigma = zeros(6);
mat Lt = zeros(6,6);
mat L = zeros(6,6);
vec sigma_in = zeros(6);
mat DR = eye(3,3);
vec props = {1000, 0.45, 1e-5};  // E=1000, nu=0.45 (nearly incompressible), alpha=1e-5
vec statev = zeros(1);  // Not used

umat_neo_hookean_comp(Etot, DEtot, F0, F1, sigma, Lt, L, sigma_in, DR,
                      3, props, 0, statev, 20.0, 0.0, 0.0, 1.0,
                      Wm, Wm_r, Wm_ir, Wm_d, 3, 3, true, 0, tnew_dt);

See also

isochoric_invariants() for computing isochoric strain invariants

See also

sigma_iso_hyper_invariants() for isochoric Cauchy Stress Functions computation

See also

sigma_vol_hyper() for volumetric Cauchy Stress Functions computation

See also

L_iso_hyper_invariants() for isochoric tangent modulus

See also

L_vol_hyper() for volumetric tangent modulus

See also

L_Cauchy_Green() for left Cauchy-Green tensor computation

References:

  • Bonet, J., & Wood, R. D. (2008). Nonlinear Continuum Mechanics for Finite Element Analysis. Cambridge University Press.

  • Holzapfel, G. A. (2000). Nonlinear Solid Mechanics: A Continuum Approach for Engineering. Wiley.

  • Connolly, S. J., et al. (2019). “Automatic differentiation based formulation of computational models.” Computational Mechanics, 64, 1273-1288.

Note

The compressible Neo-Hookean model is suitable for moderate strains (< 100%)

Note

For nearly incompressible materials (nu → 0.5), use the incompressible version instead

Note

Thermal strains are handled through thermal expansion coefficient alpha

Note

This is a purely hyperelastic model with no energy dissipation (Wm_ir = Wm_d = 0)

Parameters:
  • Etot – Total Green-Lagrange strain tensor at beginning of increment (Voigt notation: 6×1)

  • DEtot – Green-Lagrange strain increment tensor (Voigt notation: 6×1)

  • F0 – Deformation gradient at beginning of increment (3×3 matrix)

  • F1 – Deformation gradient at end of increment (3×3 matrix)

  • sigma – Cauchy stress tensor (Voigt notation: 6×1) [output]

  • Lt – Consistent tangent modulus \( \mathbf{L}_t = \frac{\partial \boldsymbol{\sigma}}{\partial \boldsymbol{\varepsilon}} \) (6×6 matrix) [output]

  • L – Elastic stiffness tensor (6×6 matrix) [output]

  • sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]

  • DR – Rotation increment matrix (3×3) for objective integration

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables (0 for this model)

  • statev – State variables vector (unused for this model) [input/output]

  • T – Temperature at beginning of increment

  • DT – Temperature increment

  • Time – Time at beginning of increment

  • DTime – Time increment

  • Wm – Total mechanical work [output]

  • Wm_r – Recoverable (elastic) work [output]

  • Wm_ir – Irrecoverable work (0 for elastic model) [output]

  • Wm_d – Dissipated work (0 for elastic model) [output]

  • ndi – Number of direct stress components (typically 3)

  • nshr – Number of shear stress components (typically 3)

  • start – Flag indicating first increment (true) or continuation (false)

  • solver_type – Solver type: 0=implicit, 1=explicit, 2=dynamic implicit

  • tnew_dt – Suggested new time step size for adaptive time stepping [output]

void umat_neo_hookean_incomp(const arma::vec &etot, const arma::vec &Detot, const arma::mat &F0, const arma::mat &F1, arma::vec &sigma, arma::mat &Lt, arma::mat &L, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm_0, double &Wm_1, double &Wm_2, double &Wm_3, const int &ndi, const int &nshr, const bool &start, double &tnew_dt)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law

void umat_saint_venant(const arma::vec&, const arma::vec&, const arma::mat&, const arma::mat&, arma::vec&, arma::mat&, arma::mat&, arma::vec&, const arma::mat&, const int&, const arma::vec&, const int&, arma::vec&, const double&, const double&, const double&, const double&, double&, double&, double&, double&, const int&, const int&, const bool&, const int&, double&)

The elastic UMAT requires 2 constants:

props[0] : Young modulus

props[1] : Poisson ratio

props[2] : CTE

No statev is required for thermoelastic constitutive law