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 &corate_type, const int &tangent_mode = tangent_default)
Generic hyperelastic UMAT for potentials expressed in the isochoric invariants.
Serves every HyperPotential of the form
\[ W\left(\bar{I}_1, \bar{I}_2\right) + U(J) \]and, for an anisotropic potential, the fibre pseudo-invariants \( \bar{I}^{*}_{4,i} \) as well.umat_nameselects the potential: NEOHC, MOORI, YEOHH, ISHAH, GETHH, SWANH and HOLZA. The kernel evaluates the potential’s derivatives (hyper_potential_derivatives) and hands them to hyper_invariants_response, which returns the Kirchhoff stress \( \boldsymbol{\tau} \) and the box tangent \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \) in the solver’s corate. The kernel is Kirchhoff-native: the Cauchy stress \( \boldsymbol{\sigma} = \boldsymbol{\tau}/J \) is formed only at the output boundaries.props are the selected potential’s own parameters, in the order HyperPotential documents for it, optionally followed by one more entry selecting the volumetric term \( U(J) \) (see VolumetricPotential: absent or 0 for \( \kappa (J \ln J - J + 1) \), 1 for \( \frac{\kappa}{2} (J-1)^2 \)).
statev: one is required,
statev(0), which stores the initial temperature. The law is hyperelastic, so \( W_m = W_{m,r} \) and \( W_{m,ir} = W_{m,d} = 0 \) throughout.- Parameters:
umat_name – [in] the 5-letter name selecting the potential
etot, Detot – [in] total strain and its increment
F0, F1 – [in] deformation gradient at the start and the end of the increment
sigma – [inout] Kirchhoff stress \( \boldsymbol{\tau} \), 6-Voigt (the UMAT interface name)
Lt – [out] box tangent \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \) in
corate_type, 6x6L – [out] the ground-state stiffness, set on the first call
DR – [in] the increment of rigid-body rotation
nprops, props – [in] the potential’s parameters
nstatev, statev – [in] the state variables (one, the initial temperature)
T, DT – [in] temperature and its increment
Time, DTime – [in] time and its increment
Wm_0, Wm_1, Wm_2, Wm_3 – [inout] the cumulative work terms \( W_m, W_{m,r}, W_{m,ir}, W_{m,d} \)
ndi, nshr – [in] the number of direct and shear components
start – [in] true on the first call of a block
tnew_dt – [out] the suggested time-step scaling
corate_type – [in] the solver’s objective rate, which
Ltis expressed in (see corate_kinematics and Dtau_LieDD_2_DtauDe_corate)tangent_mode – [in] unused: a hyperelastic law returns its exact tangent
-
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 &corate_type, 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 Kirchhoff stress \( \boldsymbol{\tau} \) is assembled from the isochoric principal-stretch machinery (tau_iso_hyper_pstretch) plus the volumetric part (tau_vol_hyper), and is what
sigmacarries: the kernel is Kirchhoff-native, Cauchy \( \boldsymbol{\sigma} = \boldsymbol{\tau}/J \) is formed only at the output boundaries. The spatial tangent comes from L_iso_hyper_pstretch / L_vol_hyper and is converted once, by Dtau_LieDD_2_DtauDe_corate, to the box \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \) incorate_type, the solver’s objective rate (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 &corate_type, const int &tangent_mode = tangent_default)
Hypoelastic orthotropic finite-strain UMAT (rate form).
Integrates the corotational KIRCHHOFF rate incrementally,
\[ \boldsymbol{\tau}_{n+1} = \boldsymbol{\tau}_n + \mathbf{L} : \left( \Delta\boldsymbol{\varepsilon} - \boldsymbol{\alpha} \Delta T \right), \]where \( \boldsymbol{\tau}_n \) has already been transported by the solver’s corate. It is Kirchhoff-native like every other simcoon kernel:sigmacarries \( \boldsymbol{\tau} \), and the Cauchy stress \( \boldsymbol{\sigma} = \boldsymbol{\tau}/J \) is formed only at the output boundaries.It is the RATE counterpart of ELORT, which evaluates the same orthotropic \( \mathbf{L} \) in total form, \( \boldsymbol{\tau} = \mathbf{L} : (\boldsymbol{\varepsilon} - \boldsymbol{\alpha} \Delta T) \). Both run in the frame that follows the material (see umat_convention), so for corates 0 to 3 the transported strain and the transported stress satisfy the same recursion and the two are identical on any path, anisotropic \( \mathbf{L} \) included. They are different laws under corate 4, even for an isotropic \( \mathbf{L} \) (ELORT is then \( \boldsymbol{\tau} = \mathbf{L} : \mathbf{e}_A \), HYPOO integrates the Oldroyd rate of \( \boldsymbol{\tau} \), isochoric solution \( \mu(\mathbf{b} - \mathbf{I}) \): same shear stress \( \mu\gamma \) in simple shear, different normal stresses), and under corate 5 for an anisotropic \( \mathbf{L} \), whose similarity transport by a rotation-free stretch does not commute with it. HYPOO is kept as that reference.
props (12): \( E_x, E_y, E_z, \nu_{xy}, \nu_{xz}, \nu_{yz}, G_{xy}, G_{xz}, G_{yz}, \alpha_x, \alpha_y, \alpha_z \) (“EnuG” convention, material frame).
statev (1):
statev(0)stores the initial temperature. The law is elastic, so \( W_m = W_{m,r} \) (per reference volume, on \( \boldsymbol{\tau} \)) and \( W_{m,ir} = W_{m,d} = 0 \).Ltis \( \mathbf{L} \) itself: for a Kirchhoff rate it is already the box \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \), and it is in-rate whatever the corate, since the increment arrives corotated.corate_type,F0andF1are therefore unused.
-
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 &corate_type, const int &tangent_mode = tangent_default)
Nearly incompressible Neo-Hookean hyperelastic UMAT.
\[ W = C_{10} \left( \bar{I}_1 - 3 \right) + \frac{1}{D_1} \left( J - 1 \right)^2, \qquad C_{10} = \frac{E}{4 (1 + \nu)}, \quad D_1 = \frac{6 (1 - 2\nu)}{E}, \]so that \( \mu = 2 C_{10} \) and \( \kappa = 2 / D_1 \) at the ground state. The kernel is Kirchhoff-native:sigmacarries \( \boldsymbol{\tau} \), and the spatial tangent is mapped once to the box ofcorate_typeby Dtau_LieDD_2_DtauDe_corate. The law is elastic, so \( W_m = W_{m,r} \) and \( W_{m,ir} = W_{m,d} = 0 \).props (3): \( E, \nu, \alpha \). The CTE \( \alpha \) is read but not used: no thermal strain is applied. statev (1):
statev(0)stores the initial temperature.- Parameters:
umat_name – [in] the 5-letter UMAT name
etot, Detot – [in] logarithmic strain at the start of the increment and its increment
F0, F1 – [in] deformation gradient at the start and the end of the increment
sigma – [inout] Kirchhoff stress \( \boldsymbol{\tau} \), 6-Voigt (the UMAT interface name)
Lt – [out] box tangent \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \) in
corate_type, 6x6L – [out] the ground-state stiffness
DR – [in] the increment of rigid-body rotation
nprops, props – [in] the material parameters (see above)
nstatev, statev – [in] the state variables (one, the initial temperature)
T, DT – [in] temperature and its increment
Time, DTime – [in] time and its increment
Wm, Wm_r, Wm_ir, Wm_d – [inout] the cumulative work terms, per reference volume
ndi, nshr – [in] the number of direct and shear components
start – [in] true on the first call of a block
tnew_dt – [out] the suggested time-step scaling
corate_type – [in] the solver’s objective rate, which
Ltis expressed intangent_mode – [in] unused: a hyperelastic law returns its exact tangent
-
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 &corate_type, const int &tangent_mode = tangent_default)
Saint-Venant-Kirchhoff hyperelastic UMAT.
\( \mathbf{S} = \mathbf{L} : \mathbf{E} \) with \( \mathbf{E} \) the Green-Lagrange strain and \( \mathbf{L} \) the isotropic stiffness of \( (E, \nu) \). The kernel is Kirchhoff-native:
sigmacarries \( \boldsymbol{\tau} = \mathbf{F}\mathbf{S}\mathbf{F}^T \), and the tangent is \( \mathbf{L} \) (which is \( \partial \mathbf{S} / \partial \mathbf{E} \)) mapped once to the box ofcorate_typeby DSDE_2_DtauDe_corate. The law is elastic, so \( W_m = W_{m,r} \) and \( W_{m,ir} = W_{m,d} = 0 \).props (3): \( E, \nu, \alpha \). The CTE \( \alpha \) is read but not used: no thermal strain is applied. statev (1):
statev(0)stores the initial temperature.- Parameters:
umat_name – [in] the 5-letter UMAT name
etot, Detot – [in] logarithmic strain at the start of the increment and its increment
F0, F1 – [in] deformation gradient at the start and the end of the increment
sigma – [inout] Kirchhoff stress \( \boldsymbol{\tau} \), 6-Voigt (the UMAT interface name)
Lt – [out] box tangent \( \partial \hat{\boldsymbol{\tau}} / \partial \mathbf{D}_e \) in
corate_type, 6x6L – [out] the ground-state stiffness
DR – [in] the increment of rigid-body rotation
nprops, props – [in] the material parameters (see above)
nstatev, statev – [in] the state variables (one, the initial temperature)
T, DT – [in] temperature and its increment
Time, DTime – [in] time and its increment
Wm, Wm_r, Wm_ir, Wm_d – [inout] the cumulative work terms, per reference volume
ndi, nshr – [in] the number of direct and shear components
start – [in] true on the first call of a block
tnew_dt – [out] the suggested time-step scaling
corate_type – [in] the solver’s objective rate, which
Ltis expressed intangent_mode – [in] unused: a hyperelastic law returns its exact tangent