Finite Strain Models
Hyperelastic and finite strain constitutive models (Neo-Hookean, Mooney-Rivlin, Ogden, 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, const int &tangent_mode = tangent_default)
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, const int &tangent_mode = tangent_default)
Generic hyperelastic UMAT for potentials expressed in isochoric principal stretches \( \bar{\lambda}_a \).
The potential is selected by umat_name. Currently available:
OGDEN: \( W = \sum_{i=1}^N \frac{2 \mu_i}{\alpha_i^2} \left( \bar{\lambda}_1^{\alpha_i} + \bar{\lambda}_2^{\alpha_i} + \bar{\lambda}_3^{\alpha_i} - 3 \right) + \kappa \left( J \, \textrm{ln} J - J + 1 \right) \) with props = { N, \( \kappa \), \( \mu_1 \), \( \alpha_1 \), …, \( \mu_N \), \( \alpha_N \) } (nprops = 2 + 2N). Constraints (validated, throws std::invalid_argument): \( N \geq 1 \) and every \( \alpha_i \neq 0 \). The ground-state shear modulus is \( \mu = \sum_i \mu_i \); N=1, \( \alpha_1 = 2 \) recovers the compressible neo-Hookean potential (NEOHC).
The Cauchy stress and the spatial tangent are assembled from the isochoric principal-stretch machinery (sigma_iso_hyper_pstretch / L_iso_hyper_pstretch) plus the volumetric part (sigma_vol_hyper / L_vol_hyper); the returned Lt follows the canonical box convention \( \partial \hat{\tau} / \partial D_e \) (see generic_hyper_invariants).
statev(0) stores the initial temperature; nstatev = 1.
-
void umat_hypoelasticity_ortho(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, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, double &tnew_dt, const int &tangent_mode = tangent_default)
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
Hypoelastic orthotropic finite-strain UMAT (rate form).
Note
Stress measure: the kernel updates the COROTATIONAL CAUCHY stress additively ( \( \boldsymbol{\sigma}_{n+1} = \boldsymbol{\sigma}_n + \mathbf{L}:\Delta\boldsymbol{\varepsilon}^{el} \), no Jacobian anywhere) — the classic Abaqus-style hypoelastic convention. It is therefore NOT in the Kirchhoff-box set: the solver and the python wrapper treat its sigma as Cauchy, with no J conversion at any boundary.
-
void umat_neo_hookean_incomp(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, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, double &tnew_dt, const int &tangent_mode = tangent_default)
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 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, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, double &tnew_dt, const int &tangent_mode = tangent_default)
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