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