Mechanical Models

Small strain mechanical constitutive models including elasticity, plasticity, viscoelasticity, and damage.

void abaqus2smart_M_light(const double *stress, const double *ddsdde, const int &nstatev, double *statev, const int &ndi, const int &nshr, arma::vec &sigma, arma::mat &Lt, arma::vec &Wm, arma::vec &statev_smart)

Light transfer from Abaqus output arrays to simcoon format (mechanical).

Converts stress, tangent, and state variables from Abaqus format. Use this after calling an external Abaqus UMAT to retrieve results.

Parameters:
  • stress – Abaqus stress array (ntens)

  • ddsdde – Abaqus tangent operator array (ntens \(\times\) ntens, column-major)

  • nstatev – Number of state variables

  • statev – Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • sigma – [out] simcoon stress vector (6)

  • Lt – [out] simcoon tangent matrix ( \(6 \times 6\))

  • Wm – [out] simcoon work quantities vector (4): Wm, Wm_r, Wm_ir, Wm_d

  • statev_smart – [out] simcoon state variables vector

void abaqus2smart_M(const double *stress, const double *ddsdde, const double *stran, const double *dstran, const double *time, const double &dtime, const double &temperature, const double &Dtemperature, const int &nprops, const double *props, const int &nstatev, double *statev, const int &ndi, const int &nshr, const double *drot, arma::vec &sigma, arma::mat &Lt, arma::vec &Etot, arma::vec &DEtot, double &T, double &DT, double &Time, double &DTime, arma::vec &props_smart, arma::vec &Wm, arma::vec &statev_smart, arma::mat &DR, bool &start)

Full transfer from Abaqus input arrays to simcoon format (mechanical).

Converts all UMAT inputs from Abaqus format to simcoon Armadillo format. Use this before calling a simcoon constitutive model from an Abaqus UMAT wrapper.

Parameters:
  • stress – Abaqus stress array

  • ddsdde – Abaqus tangent operator array

  • stran – Abaqus total strain array

  • dstran – Abaqus strain increment array

  • time – Abaqus time array [step_time, total_time]

  • dtime – Time increment

  • temperature – Temperature at start of increment

  • Dtemperature – Temperature increment

  • nprops – Number of material properties

  • props – Abaqus material properties array

  • nstatev – Number of state variables

  • statev – Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • drot – Abaqus rotation increment matrix ( \(3 \times 3\), column-major)

  • sigma – [out] simcoon stress vector

  • Lt – [out] simcoon tangent matrix

  • Etot – [out] simcoon total strain vector

  • DEtot – [out] simcoon strain increment vector

  • T – [out] simcoon temperature

  • DT – [out] simcoon temperature increment

  • Time – [out] simcoon total time

  • DTime – [out] simcoon time increment

  • props_smart – [out] simcoon properties vector

  • Wm – [out] simcoon work quantities vector

  • statev_smart – [out] simcoon state variables vector

  • DR – [out] simcoon rotation matrix

  • start – [out] true if this is the first increment

void abaqus2smart_T(const double *stress, const double *ddsdde, const double *ddsddt, const double *drplde, const double &drpldt, const double *stran, const double *dstran, const double *time, const double &dtime, const double &temperature, const double &Dtemperature, const int &nprops, const double *props, const int &nstatev, double *statev, const int &ndi, const int &nshr, const double *drot, arma::vec &sigma, arma::mat &dSdE, arma::mat &dSdT, arma::mat &drpldE, arma::mat &drpldT, arma::vec &Etot, arma::vec &DEtot, double &T, double &DT, double &Time, double &DTime, arma::vec &props_smart, arma::vec &Wm, arma::vec &Wt, arma::vec &statev_smart, arma::mat &DR, bool &start)

Full transfer from Abaqus input arrays to simcoon format (thermomechanical).

Converts all thermomechanical UMAT inputs from Abaqus format. Includes thermal tangent operators and heat generation terms.

Parameters:
  • stress – Abaqus stress array

  • ddsdde – Abaqus mechanical tangent array

  • ddsddt – Abaqus stress-temperature tangent array

  • drplde – Abaqus heat generation-strain tangent array

  • drpldt – Abaqus heat generation-temperature tangent

  • stran – Abaqus total strain array

  • dstran – Abaqus strain increment array

  • time – Abaqus time array

  • dtime – Time increment

  • temperature – Temperature at start of increment

  • Dtemperature – Temperature increment

  • nprops – Number of material properties

  • props – Abaqus material properties array

  • nstatev – Number of state variables

  • statev – Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • drot – Abaqus rotation increment matrix

  • sigma – [out] simcoon stress vector

  • dSdE – [out] simcoon mechanical tangent matrix

  • dSdT – [out] simcoon stress-temperature tangent matrix

  • drpldE – [out] simcoon heat generation-strain tangent matrix

  • drpldT – [out] simcoon heat generation-temperature tangent matrix

  • Etot – [out] simcoon total strain vector

  • DEtot – [out] simcoon strain increment vector

  • T – [out] simcoon temperature

  • DT – [out] simcoon temperature increment

  • Time – [out] simcoon total time

  • DTime – [out] simcoon time increment

  • props_smart – [out] simcoon properties vector

  • Wm – [out] simcoon mechanical work quantities vector

  • Wt – [out] simcoon thermal work quantities vector

  • statev_smart – [out] simcoon state variables vector

  • DR – [out] simcoon rotation matrix

  • start – [out] true if this is the first increment

void smart2abaqus_M(double *stress, double *ddsdde, double *statev, const int &ndi, const int &nshr, const arma::vec &sigma, const arma::vec &statev_smart, const arma::vec &Wm, const arma::mat &Lt)

Transfer simcoon output to Abaqus format (mechanical, simple).

Converts stress, tangent, and state variables to Abaqus format. Use this to return results from a simcoon model to an Abaqus UMAT.

Parameters:
  • stress – [out] Abaqus stress array

  • ddsdde – [out] Abaqus tangent operator array

  • statev – [out] Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • sigma – simcoon stress vector

  • statev_smart – simcoon state variables vector

  • Wm – simcoon work quantities vector

  • Lt – simcoon tangent matrix

void smart2abaqus_M_full(double *stress, double *ddsdde, double *stran, double *dstran, double *time, double &dtime, double &temperature, double &Dtemperature, int &nprops, double *props, int &nstatev, double *statev, const int &ndi, const int &nshr, double *drot, const arma::vec &sigma, const arma::mat &Lt, const arma::vec &Etot, const arma::vec &DEtot, const double &T, const double &DT, const double &Time, const double &DTime, const arma::vec &props_smart, const arma::vec &Wm, const arma::vec &statev_smart, const arma::mat &DR, bool &start)

Full transfer from simcoon to Abaqus format (mechanical).

Converts all simcoon outputs to Abaqus UMAT format. Use this for complete state transfer in external UMAT wrappers.

Parameters:
  • stress – [out] Abaqus stress array

  • ddsdde – [out] Abaqus tangent operator array

  • stran – [out] Abaqus total strain array

  • dstran – [out] Abaqus strain increment array

  • time – [out] Abaqus time array

  • dtime – [out] Time increment

  • temperature – [out] Temperature

  • Dtemperature – [out] Temperature increment

  • nprops – Number of material properties

  • props – [out] Abaqus material properties array

  • nstatev – Number of state variables

  • statev – [out] Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • drot – [out] Abaqus rotation increment matrix

  • sigma – simcoon stress vector

  • Lt – simcoon tangent matrix

  • Etot – simcoon total strain vector

  • DEtot – simcoon strain increment vector

  • T – simcoon temperature

  • DT – simcoon temperature increment

  • Time – simcoon total time

  • DTime – simcoon time increment

  • props_smart – simcoon properties vector

  • Wm – simcoon work quantities vector

  • statev_smart – simcoon state variables vector

  • DR – simcoon rotation matrix

  • start – simcoon start flag

void smart2abaqus_T(double *stress, double *ddsdde, double *ddsddt, double *drplde, double &drpldt, double &rpl, double *statev, const int &ndi, const int &nshr, const arma::vec &sigma, const arma::vec &statev_smart, const double &r, const arma::vec &Wm, const arma::vec &Wt, const arma::mat &dSdE, const arma::mat &dSdT, const arma::mat &drpldE, const arma::mat &drpldT)

Transfer simcoon output to Abaqus format (thermomechanical).

Converts thermomechanical outputs to Abaqus UMAT format. Includes thermal tangent operators and heat generation.

Parameters:
  • stress – [out] Abaqus stress array

  • ddsdde – [out] Abaqus mechanical tangent array

  • ddsddt – [out] Abaqus stress-temperature tangent array

  • drplde – [out] Abaqus heat generation-strain tangent array

  • drpldt – [out] Abaqus heat generation-temperature tangent

  • rpl – [out] Abaqus heat generation rate

  • statev – [out] Abaqus state variables array

  • ndi – Number of direct stress components

  • nshr – Number of shear stress components

  • sigma – simcoon stress vector

  • statev_smart – simcoon state variables vector

  • r – simcoon heat generation rate

  • Wm – simcoon mechanical work quantities vector

  • Wt – simcoon thermal work quantities vector

  • dSdE – simcoon mechanical tangent matrix

  • dSdT – simcoon stress-temperature tangent matrix

  • drpldE – simcoon heat generation-strain tangent matrix

  • drpldT – simcoon heat generation-temperature tangent matrix

void ansys2smart_M(const double *stress, const double *dstran, const double &sedEl, const double &sedPl, const double &epseq, const double *statev, const double *props, const double &Time, const double &DTime, const double &temperature, const double &Dtemperature, const int &ncomp, const int &nprops, const int &nstatev, arma::vec &sigma, arma::vec &DEtot, arma::vec &Wm, arma::vec &statev_smart, arma::vec &props_smart, double &T, double &DT)

Transfer Ansys USERMAT input arrays to simcoon format (mechanical).

Converts all USERMAT inputs from Ansys format to simcoon format. Handles Ansys Voigt notation: (11,22,33,12,23,13) by swapping components 4 and 5.

Parameters:
  • stress – Ansys stress array (ncomp)

  • dstran – Ansys strain increment array (ncomp)

  • sedEl – Specific elastic strain energy

  • sedPl – Specific plastic strain energy

  • epseq – Equivalent plastic strain

  • statev – Ansys state variables array

  • props – Ansys material properties array

  • Time – Total time

  • DTime – Time increment

  • temperature – Temperature

  • Dtemperature – Temperature increment

  • ncomp – Number of stress/strain components

  • nprops – Number of material properties

  • nstatev – Number of state variables

  • sigma – [out] simcoon stress vector

  • DEtot – [out] simcoon strain increment vector

  • Wm – [out] simcoon work quantities vector

  • statev_smart – [out] simcoon state variables vector

  • props_smart – [out] simcoon properties vector

  • T – [out] simcoon temperature

  • DT – [out] simcoon temperature increment

void smart2ansys_M(double *stress, double *ddsdde, double &sedEl, double &sedPl, double *statev, const int &ncomp, const arma::vec &sigma, const arma::mat &Lt, const arma::vec &Wm, const arma::vec &statev_smart)

Transfer simcoon output to Ansys USERMAT format (mechanical).

Converts stress, tangent, and state variables to Ansys format. Handles Ansys Voigt notation by swapping components 4 and 5.

Parameters:
  • stress – [out] Ansys stress array

  • ddsdde – [out] Ansys tangent operator array

  • sedEl – [out] Specific elastic strain energy

  • sedPl – [out] Specific plastic strain energy

  • statev – [out] Ansys state variables array

  • ncomp – Number of stress/strain components

  • sigma – simcoon stress vector

  • Lt – simcoon tangent matrix

  • Wm – simcoon work quantities vector

  • statev_smart – simcoon state variables vector

void umat_damage_LLD_0(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Ladevèze-Le Dantec (LLD) anisotropic damage model with coupled plasticity for composite materials.

This function implements the Ladevèze-Le Dantec damage model specifically designed for unidirectional fiber-reinforced composite materials. The model features:

  • Transversely isotropic elastic behavior

  • Anisotropic damage in matrix-dominated modes (transverse tension, in-plane shear)

  • Coupled transverse-shear plasticity

  • Thermodynamically consistent damage evolution based on energy release rate

  • Separate damage variables for different failure modes

  • No fiber failure (matrix-dominated damage only)

Material Symmetry:

The model assumes transverse isotropy with the fiber direction as the axis of symmetry:

  • Direction 1: Fiber direction (longitudinal, no damage)

  • Directions 2-3: Transverse plane (isotropic, subject to damage)

Damage Variables:

Two independent scalar damage variables characterize the material state:

  • \( d_{22} \in [0,1] \): Transverse damage (matrix cracking perpendicular to fibers)

  • \( d_{12} \in [0,1] \): Shear damage (matrix/interface damage in fiber-matrix plane)

where \( d = 0 \) is undamaged and \( d = 1 \) is fully damaged.

Effective Stress Concept:

The effective stress acting on the undamaged material configuration is:

\[\tilde{\boldsymbol{\sigma}} = \mathbf{M}^{-1} : \boldsymbol{\sigma} \]
where \( \mathbf{M} \) is the damage effect tensor:
\[\mathbf{M} = \text{diag}(1, 1-d_{22}, 1-d_{22}, 1-d_{12}, 1-d_{12}, 1) \]

Damaged Elastic Stiffness:

The elastic stiffness degrades with damage:

\[\mathbf{L}(d_{22}, d_{12}) = \mathbf{L}_0 : \mathbf{M} \]
where \( \mathbf{L}_0 \) is the undamaged transversely isotropic stiffness.

Specific moduli degradation:

  • \( E_2 = E_{2,0} (1 - d_{22}) \) (transverse Young’s modulus)

  • \( E_3 = E_{3,0} (1 - d_{22}) \) (out-of-plane Young’s modulus)

  • \( G_{12} = G_{12,0} (1 - d_{12}) \) (in-plane shear modulus)

  • \( G_{13} = G_{13,0} (1 - d_{12}) \) (out-of-plane shear modulus)

  • \( E_1 \) (fiber direction) remains constant (no fiber damage)

Thermodynamic Forces:

The energy release rates driving damage evolution are:

\[Y_{22} = \frac{1}{2} \boldsymbol{\varepsilon}^e : \frac{\partial \mathbf{L}}{\partial d_{22}} : \boldsymbol{\varepsilon}^e \]
\[Y_{12} = \frac{1}{2} \boldsymbol{\varepsilon}^e : \frac{\partial \mathbf{L}}{\partial d_{12}} : \boldsymbol{\varepsilon}^e \]

Damage Evolution Laws:

**Transverse Damage ( \(d_{22}\)):**

\[\begin{split}\dot{d}_{22} = \begin{cases} 0 & \text{if } Y_{22} < Y_{22,0} \\ \left( \frac{Y_{22} - Y_{22,c}}{Y_{22,u} - Y_{22,c}} \right)^b & \text{if } Y_{22,0} \leq Y_{22} < Y_{22,u} \\ \infty & \text{if } Y_{22} \geq Y_{22,u} \end{cases} \end{split}\]
where:
  • \( Y_{22,0} \) is the damage initiation threshold

  • \( Y_{22,c} \) is the characteristic energy release rate

  • \( Y_{22,u} \) is the ultimate energy release rate (failure)

  • \( b \) is the damage evolution exponent

**Shear Damage ( \(d_{12}\)):**

\[\begin{split}\dot{d}_{12} = \begin{cases} 0 & \text{if } Y_{12} < Y_{12,0} \\ \frac{Y_{12} - Y_{12,c}}{Y_{12,c}} & \text{if } Y_{12} \geq Y_{12,0} \end{cases} \end{split}\]
where:
  • \( Y_{12,0} \) is the shear damage initiation threshold

  • \( Y_{12,c} \) is the characteristic shear energy release rate

Coupled Transverse-Shear Plasticity:

A Hill-type yield criterion couples transverse and shear stresses:

\[\Phi = \sqrt{\left( \frac{\sigma_{22}}{A_{ts}} \right)^2 + \sigma_{12}^2} - \sigma_{ts,0} - \alpha_{ts} p_{ts} - \beta_{ts} p_{ts}^2 \leq 0 \]
where:
  • \( A_{ts} \) is the transverse-shear coupling parameter

  • \( \sigma_{ts,0} \) is the initial yield stress

  • \( \alpha_{ts}, \beta_{ts} \) are hardening parameters

  • \( p_{ts} \) is the accumulated plastic strain

Plastic Flow Rule:

Associative flow in the transverse-shear plane:

\[\dot{\boldsymbol{\varepsilon}}^p = \dot{p}_{ts} \frac{\partial \Phi}{\partial \boldsymbol{\sigma}} \]

Material Parameters (props):

Index

Symbol

Description

Units

Typical Range (CFRP)

props[0]

axis

Fiber orientation axis (1, 2, or 3)

-

1

props[1]

\( E_L \)

Longitudinal Young’s modulus

Stress

100-200 GPa

props[2]

\( E_T \)

Transverse Young’s modulus

Stress

5-15 GPa

props[3]

\( \nu_{TL} \)

Major Poisson’s ratio

-

0.25-0.35

props[4]

\( \nu_{TT} \)

Transverse Poisson’s ratio

-

0.35-0.45

props[5]

\( G_{LT} \)

In-plane shear modulus

Stress

3-8 GPa

props[6]

\( \alpha_L \)

Longitudinal CTE

1/Temperature

-0.5 to 0 e-6 /K

props[7]

\( \alpha_T \)

Transverse CTE

1/Temperature

20-40 e-6 /K

props[8]

\( Y_{12,0} \)

Shear damage initiation threshold

Energy/Volume

0.05-0.2 MPa

props[9]

\( Y_{12,c} \)

Characteristic shear energy release

Energy/Volume

0.1-0.5 MPa

props[10]

\( Y_{22,0} \)

Transverse damage initiation

Energy/Volume

0.1-0.3 MPa

props[11]

\( Y_{22,c} \)

Characteristic transverse energy

Energy/Volume

0.2-0.6 MPa

props[12]

\( Y_{22,u} \)

Ultimate transverse energy

Energy/Volume

0.5-2.0 MPa

props[13]

\( b \)

Transverse damage exponent

-

1-5

props[14]

\( A_{ts} \)

Transverse-shear coupling

-

1-3

props[15]

\( \sigma_{ts,0} \)

Initial yield stress

Stress

30-80 MPa

props[16]

\( \alpha_{ts} \)

Linear hardening parameter

Stress

0-500 MPa

props[17]

\( \beta_{ts} \)

Quadratic hardening parameter

Stress

0-5000 MPa

State Variables (statev):

Total state variables required: \( n_{statev} = 10 \)

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial/reference temperature

Temperature

statev[1]

\( d_{22} \)

Transverse damage variable

-

statev[2]

\( d_{12} \)

Shear damage variable

-

statev[3]

\( p_{ts} \)

Accumulated plastic strain

Strain

statev[4]

\( \varepsilon^p_{11} \)

Plastic strain component 11

Strain

statev[5]

\( \varepsilon^p_{22} \)

Plastic strain component 22

Strain

statev[6]

\( \varepsilon^p_{33} \)

Plastic strain component 33

Strain

statev[7]

\( \varepsilon^p_{12} \)

Plastic strain component 12 (engineering)

Strain

statev[8]

\( \varepsilon^p_{13} \)

Plastic strain component 13 (engineering)

Strain

statev[9]

\( \varepsilon^p_{23} \)

Plastic strain component 23 (engineering)

Strain

// Example usage: Carbon/Epoxy unidirectional composite (T300/914)
vec props(18);
props(0) = 1;           // axis = 1 (fibers along direction 1)
props(1) = 138000;      // EL = 138 GPa (fiber-dominated)
props(2) = 11000;       // ET = 11 GPa (matrix-dominated)
props(3) = 0.28;        // nuTL = 0.28
props(4) = 0.40;        // nuTT = 0.40
props(5) = 5500;        // GLT = 5.5 GPa
props(6) = -0.3e-6;     // alphaL = -0.3e-6 /K (negative for carbon fibers)
props(7) = 30e-6;       // alphaT = 30e-6 /K (resin dominated)
props(8) = 0.10;        // Y_12_0 = 0.10 MPa (shear damage threshold)
props(9) = 0.30;        // Y_12_c = 0.30 MPa
props(10) = 0.15;       // Y_22_0 = 0.15 MPa (transverse damage threshold)
props(11) = 0.40;       // Y_22_c = 0.40 MPa
props(12) = 1.20;       // Y_22_u = 1.20 MPa (ultimate failure)
props(13) = 2.5;        // b = 2.5
props(14) = 2.0;        // A_ts = 2.0
props(15) = 50;         // sigma_ts_0 = 50 MPa
props(16) = 300;        // alpha_ts = 300 MPa
props(17) = 1000;       // beta_ts = 1000 MPa

vec statev = zeros(10);
statev(0) = 20.0;  // Reference temperature 20°C

vec Etot = {0.0, 0.005, 0.0, 0.0, 0.0, 0.0};  // 0.5% transverse strain (induces damage)
vec DEtot = {0.0, 0.0001, 0.0, 0.0, 0.0, 0.0};
vec stress = zeros(6);
mat Lt = zeros(6,6);
mat L = zeros(6,6);
vec sigma_in = zeros(6);
mat DR = eye(3,3);

umat_damage_LLD_0(Etot, DEtot, stress, Lt, L, sigma_in, DR,
                  18, props, 10, statev, 20.0, 0.0, 0.0, 1.0,
                  Wm, Wm_r, Wm_ir, Wm_d, 3, 3, false, 0, tnew_dt);

// Check damage state
double d22 = statev(1);  // Transverse damage
double d12 = statev(2);  // Shear damage
cout << "Transverse damage: " << d22 << ", Shear damage: " << d12 << endl;

See also

L_isotrans() for transversely isotropic stiffness construction

See also

Lagrange_exp() for penalty function (Damage Functions bounds enforcement)

See also

rotate_strain() for strain tensor rotation

See also

rotate_stress() for stress tensor rotation

References:

  • Ladevèze, P., & Le Dantec, E. (1992). “Damage modelling of the elementary ply for laminated composites.” Composites Science and Technology, 43(3), 257-267.

  • Allix, O., & Ladevèze, P. (1992). “Interlaminar interface modelling for the prediction of delamination.” Composite Structures, 22(4), 235-242.

  • Ladevèze, P. (1992). “A damage computational method for composite structures.” Computers & Structures, 44(1-2), 79-87.

  • Matzenmiller, A., Lubliner, J., & Taylor, R. L. (1995). “A constitutive model for anisotropic damage in fiber-composites.” Mechanics of Materials, 20(2), 125-152.

  • Pinho, S. T., et al. (2012). “Material and structural response of polymer-matrix fibre-reinforced composites.” Journal of Composite Materials, 46(19-20), 2313-2341.

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

The LLD model is specifically designed for unidirectional fiber composites

Note

Damage is irreversible and monotonically increasing

Note

The model does NOT account for fiber failure (compression/tension in direction 1)

Note

Suitable for matrix-dominated failure modes: transverse cracking, delamination

Note

Parameter identification requires multiple test configurations:

Note

- Transverse tension for \(d_{22}\) parameters

Note

- In-plane shear for \(d_{12}\) parameters

Note

- Off-axis tests for plasticity coupling

Note

Convergence requires small load steps once damage initiates

Note

Material axes must be properly oriented relative to global coordinates

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus ( \(6 \times 6\) matrix) [output]

  • L – Damaged elastic stiffness tensor ( \(6 \times 6\) matrix) [output]

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

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in damage [output]

  • Wm_d – Dissipated work (damage + plasticity) [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_damage_weibull(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)
void umat_external(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

External mechanical UMAT subroutine wrapper.

Wrapper function for external user-defined material subroutines (UMATs) loaded as plugins at runtime. The actual constitutive model is implemented by the user through the plugin API (see umat_plugin_api.hpp).

Material parameters and state variables are user-defined and depend on the specific constitutive model implemented in the plugin.

See also

umat_plugin_ext_api for the native simcoon plugin base class

See also

umat_plugin_aba_api for Abaqus-compatible plugins

See also

umat_plugin_ans_api for ANSYS-compatible plugins

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: 6x1 vector)

  • DEtot – Strain increment tensor (Voigt notation: 6x1 vector)

  • stress – Stress tensor (Voigt notation: 6x1 vector) [output]

  • Lt – Consistent tangent modulus (6x6 matrix) [output]

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

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

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

  • nprops – Number of material properties

  • props – Material properties vector

  • nstatev – Number of state variables

  • statev – State variables vector [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 [output]

  • Wm_d – Dissipated work [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 (Newton), 1=explicit (RNL), 2=dynamic implicit

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

void umat_plasticity_chaboche_CCP(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Elastic-plastic constitutive model with Chaboche kinematic hardening solved by the Convex Cutting Plane (CCP) algorithm.

This function implements the Chaboche unified viscoplasticity model for small and finite strain analysis. The model features:

  • J2 (von Mises) plasticity with associative flow rule

  • Multiple Armstrong-Frederick backstresses for nonlinear kinematic hardening

  • Optional isotropic hardening with Voce law

  • Dynamic recovery (recall terms) in backstress evolution

  • Convex Cutting Plane algorithm for return mapping

  • Thermal expansion effects

  • Consistent tangent modulus for implicit FE analysis

Constitutive Equations:

The yield function is defined as:

\[\Phi(\boldsymbol{\sigma}, \mathbf{X}, R) = \sigma_{eq}(\boldsymbol{\sigma} - \mathbf{X}) - R - \sigma_Y \leq 0 \]
where:
  • \( \sigma_{eq}(\boldsymbol{\eta}) = \sqrt{\frac{3}{2} \boldsymbol{\eta}_{dev} : \boldsymbol{\eta}_{dev}} \) is the von Mises equivalent stress

  • \( \boldsymbol{\eta} = \boldsymbol{\sigma} - \mathbf{X} \) is the shifted (effective) stress tensor

  • \( \mathbf{X} = \mathbf{X}_1 + \mathbf{X}_2 \) is the total backstress (two AF terms in this implementation)

  • \( R \) is the isotropic hardening stress

  • \( \sigma_Y \) is the initial yield stress

Armstrong-Frederick Backstress Evolution:

Each backstress component evolves according to the Armstrong-Frederick law with dynamic recovery:

\[\dot{\mathbf{X}}_i = \frac{2}{3} C_i \dot{\boldsymbol{\varepsilon}}^p - D_i \mathbf{X}_i \dot{p} \]
where:
  • \( C_i \) is the kinematic hardening modulus of the i-th backstress

  • \( D_i \) is the dynamic recovery (recall) parameter of the i-th backstress

  • \( \dot{\boldsymbol{\varepsilon}}^p \) is the plastic strain rate tensor

  • \( \dot{p} = \sqrt{\frac{2}{3} \dot{\boldsymbol{\varepsilon}}^p : \dot{\boldsymbol{\varepsilon}}^p} \) is the accumulated plastic strain rate

Physical Interpretation:

  • The \( C_i \) term represents strain hardening (backstress growth)

  • The \( D_i \mathbf{X}_i \dot{p} \) term represents dynamic recovery (backstress fading)

  • Multiple backstresses capture different scales of cyclic hardening behavior

  • Typically 2-3 backstress components are used

Isotropic Hardening (Optional):

The isotropic hardening follows the Voce law, integrated in rate form \( \dot{H}_p = b \left( Q - H_p \right) \dot{p} \) (a single term, so \( R(p) = Q \left( 1 - e^{-b p} \right) \) exactly under monotonic flow): where:

  • \( Q \) is the saturation value of the isotropic hardening stress

  • \( b \) is the hardening rate parameter

  • \( p \) is the accumulated plastic strain

Plastic Flow Rule:

The plastic strain rate follows the associative flow rule:

\[\dot{\boldsymbol{\varepsilon}}^p = \dot{p} \mathbf{n} \]
where:
\[\mathbf{n} = \frac{3}{2} \frac{\boldsymbol{\eta}_{dev}}{\sigma_{eq}(\boldsymbol{\eta})} \]
is the flow direction (normal to the yield surface).

Incremental Form (CCP Algorithm):

For an increment \( \Delta p \), the stress and backstresses are updated as:

\[\boldsymbol{\sigma}_{n+1} = \boldsymbol{\sigma}^{trial} - \Delta p \left( \mathbf{L} : \mathbf{n} + \frac{\partial \mathbf{n}}{\partial \boldsymbol{\sigma}} : \boldsymbol{\sigma} \right) \]
\[\mathbf{X}_{i,n+1} = \mathbf{X}_{i,n} + \frac{2}{3} C_i \Delta \boldsymbol{\varepsilon}^p - D_i \mathbf{X}_{i,n} \Delta p \]

The CCP algorithm solves for \( \Delta p \) using the Fischer-Burmeister complementarity condition:

\[FB(\Delta p, \Phi) = \sqrt{(\Delta p)^2 + \Phi^2} - \Delta p - \Phi = 0 \]

Consistent Tangent Modulus:

The algorithmic tangent modulus accounts for both plastic flow and backstress evolution:

\[\mathbf{L}_t = \mathbf{L} - \frac{(\mathbf{L}:\mathbf{n}) \otimes (\mathbf{n}:\mathbf{L})}{\mathbf{n}:\mathbf{L}:\mathbf{n} + H_{tot}} \]
where:
\[H_{tot} = \sum_{i=1}^{2} \left( \tfrac{2}{3} C_i - D_i\, \mathbf{X}_i : \mathbf{n} \right) + b\,(Q - H_p) \]
is the total hardening modulus combining the two kinematic contributions and the Voce isotropic term (integrated in rate form \( \dot{H}_p = b (Q - H_p) \dot{p} \)).

Material Parameters (props):

Fixed layout — exactly ONE Voce isotropic term and TWO Armstrong–Frederick backstresses (nprops = 10). For a variable number of terms use the modular UMAT (MODUL) with ChabocheHardening / CombinedVoceHardening.

Index

Symbol

Description

Units

Typical Range

props[0]

\( E \)

Young’s modulus

Stress

50-500 GPa

props[1]

\( \nu \)

Poisson’s ratio

-

0.2-0.45

props[2]

\( \alpha \)

Coefficient of thermal expansion

1/Temperature

1e-6 to 1e-4 /K

props[3]

\( \sigma_Y \)

Initial yield stress

Stress

100-1000 MPa

props[4]

\( Q \)

Voce saturation stress

Stress

0-500 MPa

props[5]

\( b \)

Voce hardening rate

1/Strain

1-100

props[6]

\( C_1 \)

Kinematic modulus of backstress 1

Stress

10-500 GPa

props[7]

\( D_1 \)

Dynamic recovery of backstress 1

-

0-3000

props[8]

\( C_2 \)

Kinematic modulus of backstress 2

Stress

10-500 GPa

props[9]

\( D_2 \)

Dynamic recovery of backstress 2

-

0-3000

Notes on Parameter Selection:

  • First backstress typically has high \( C_1 \), low \( D_1 \) (long-range)

  • Second backstress typically has lower \( C_2 \), higher \( D_2 \) (short-range)

  • Set \( Q = b = 0 \) for pure kinematic hardening

State Variables (statev):

Total: \( n_{statev} = 33 \) ( \( T_{init} + p + \boldsymbol{\varepsilon}^p + \boldsymbol{a}_1 + \boldsymbol{a}_2 + \mathbf{X}_1 + \mathbf{X}_2 + H_p \)).

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial/reference temperature

Temperature

statev[1]

\( p \)

Accumulated plastic strain

Strain

statev[2..7]

\( \boldsymbol{\varepsilon}^p \)

Plastic strain (Voigt, engineering shear)

Strain

statev[8..13]

\( \boldsymbol{a}_1 \)

Back-strain 1 (Voigt, engineering shear)

Strain

statev[14..19]

\( \boldsymbol{a}_2 \)

Back-strain 2 (Voigt, engineering shear)

Strain

statev[20..25]

\( \mathbf{X}_1 = \tfrac{2}{3} C_1 \boldsymbol{a}_1 \)

Backstress 1 (Voigt)

Stress

statev[26..31]

\( \mathbf{X}_2 = \tfrac{2}{3} C_2 \boldsymbol{a}_2 \)

Backstress 2 (Voigt)

Stress

statev[32]

\( H_p \)

Integrated Voce isotropic hardening stress

Stress

// Example usage: 316 stainless steel (1 Voce term + 2 backstresses, fixed)
vec props(10);
props(0) = 200000;      // E = 200 GPa
props(1) = 0.3;         // nu = 0.3
props(2) = 1.7e-5;      // alpha = 17e-6 /K
props(3) = 150;         // sigma_Y = 150 MPa

// Isotropic hardening (Voce, rate form dHp = b (Q - Hp) dp)
props(4) = 100;         // Q = 100 MPa (saturation stress)
props(5) = 10;          // b = 10 (hardening rate)

// First backstress (long-range)
props(6) = 300000;      // C1 = 300 GPa
props(7) = 1000;        // D1 = 1000 (moderate recovery)

// Second backstress (short-range)
props(8) = 50000;       // C2 = 50 GPa
props(9) = 100;         // D2 = 100 (strong recovery)

vec statev = zeros(33);  // see the state-variable table
statev(0) = 20.0;  // Reference temperature 20°C

vec Etot = {0.002, -0.0006, -0.0006, 0.0, 0.0, 0.0};  // 0.2% axial strain
vec DEtot = {0.0001, -0.00003, -0.00003, 0.0, 0.0, 0.0};
vec stress = zeros(6);
mat Lt = zeros(6,6);
mat L = zeros(6,6);
vec sigma_in = zeros(6);
mat DR = eye(3,3);

umat_plasticity_chaboche_CCP(Etot, DEtot, stress, Lt, L, sigma_in, DR,
                             12, props, 20, statev, 20.0, 0.0, 0.0, 1.0,
                             Wm, Wm_r, Wm_ir, Wm_d, 3, 3, false, 0, tnew_dt);

// Check backstress components
vec X1 = statev.subvec(8, 13);   // First backstress
vec X2 = statev.subvec(14, 19);  // Second backstress

See also

Ireal() for real identity tensor (Voigt \(6 \times 6\))

See also

Idev() for deviatoric projection tensor

See also

Fischer_Burmeister() for complementarity solver

See also

eta_stress() for shifted stress computation

See also

denom_FB_N_Mises() for CCP denominator

References:

  • Chaboche, J. L. (1986). “Time-independent constitutive theories for cyclic plasticity.” International Journal of Plasticity, 2(2), 149-188.

  • Chaboche, J. L. (1989). “Constitutive equations for cyclic plasticity and cyclic viscoplasticity.” International Journal of Plasticity, 5(3), 247-302.

  • Chaboche, J. L. (2008). “A review of some plasticity and viscoplasticity constitutive theories.” International Journal of Plasticity, 24(10), 1642-1693.

  • Armstrong, P. J., & Frederick, C. O. (1966). “A mathematical representation of the multiaxial Bauschinger effect.” CEGB Report RD/B/N731.

  • Lemaitre, J., & Chaboche, J. L. (1990). Mechanics of Solid Materials. Cambridge University Press.

  • Ortiz, M., & Simo, J. C. (1986). “An analysis of a new class of integration algorithms for elastoplastic constitutive relations.” International Journal for Numerical Methods in Engineering, 23(3), 353-366.

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

The Chaboche model excels at capturing ratcheting and cyclic plasticity

Note

Multiple backstresses are essential for accurate multiaxial loading predictions

Note

Parameter identification typically requires cyclic test data (tension-compression, torsion)

Note

For monotonic loading, simpler isotropic hardening may suffice

Note

The model assumes small strains (< 10%); use updated Lagrangian for larger strains

Note

Dynamic recovery (D > 0) prevents unbounded backstress growth under cycling

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus \( \mathbf{L}_t \) ( \(6 \times 6\) matrix) [output]

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

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

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in plastic deformation [output]

  • Wm_d – Dissipated (plastic) work [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_plasticity_iso_CCP(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Elastic-plastic constitutive model with isotropic hardening solved by the Convex Cutting Plane (CCP) algorithm.

This function implements an elastic-plastic material model for small and finite strain analysis. The model features:

  • J2 (von Mises) plasticity with associative flow rule

  • Isotropic hardening following a power law: \( H_p = k \cdot p^m \)

  • Convex Cutting Plane algorithm for return mapping

  • Thermal expansion effects

  • Consistent tangent modulus for implicit FE analysis

Constitutive Equations:

The yield function is defined as:

\[\Phi(\boldsymbol{\sigma}, p) = \sigma_{eq} - H_p(p) - \sigma_Y \leq 0 \]
where:
  • \( \sigma_{eq} = \sqrt{\frac{3}{2} \mathbf{s} : \mathbf{s}} \) is the von Mises equivalent stress

  • \( \mathbf{s} \) is the deviatoric stress tensor

  • \( H_p(p) = k \cdot p^m \) is the isotropic hardening function

  • \( p = \int \sqrt{\frac{2}{3} \dot{\boldsymbol{\varepsilon}}^p : \dot{\boldsymbol{\varepsilon}}^p} \, dt \) is the accumulated plastic strain

  • \( \sigma_Y \) is the initial yield stress

The plastic flow rule (associative plasticity):

\[\dot{\boldsymbol{\varepsilon}}^p = \dot{\lambda} \frac{\partial \Phi}{\partial \boldsymbol{\sigma}} = \dot{\lambda} \frac{3}{2} \frac{\mathbf{s}}{\sigma_{eq}} \]

Evolution of accumulated plastic strain:

\[\dot{p} = \sqrt{\frac{2}{3} \dot{\boldsymbol{\varepsilon}}^p : \dot{\boldsymbol{\varepsilon}}^p} = \dot{\lambda} \]

Convex Cutting Plane Algorithm:

The CCP algorithm solves the return mapping problem by reformulating it as a complementarity problem:

  • Find \( \Delta p \geq 0 \) such that \( \Phi(\boldsymbol{\sigma}, p) \leq 0 \) and \( \Delta p \cdot \Phi = 0 \)

  • This is solved using the Fischer-Burmeister function for robust convergence

  • The method provides a consistent tangent modulus for implicit finite element analysis

Material Parameters (props):

The material properties vector must contain 6 constants:

Index

Symbol

Description

Units

props[0]

\( E \)

Young’s modulus

Stress

props[1]

\( \nu \)

Poisson’s ratio

-

props[2]

\( \alpha \)

Isotropic thermal expansion coefficient

1/Temperature

props[3]

\( \sigma_Y \)

Initial yield stress

Stress

props[4]

\( k \)

Hardening parameter

Stress

props[5]

\( m \)

Hardening exponent

-

State Variables (statev):

The state variables vector contains 8 internal variables:

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial temperature

Temperature

statev[1]

\( p \)

Accumulated plastic strain

-

statev[2]

\( \varepsilon^p_{11} \)

Plastic strain component 11

-

statev[3]

\( \varepsilon^p_{22} \)

Plastic strain component 22

-

statev[4]

\( \varepsilon^p_{33} \)

Plastic strain component 33

-

statev[5]

\( \varepsilon^p_{12} \)

Plastic strain component 12 ( \(\times 2\) in Voigt)

-

statev[6]

\( \varepsilon^p_{13} \)

Plastic strain component 13 ( \(\times 2\) in Voigt)

-

statev[7]

\( \varepsilon^p_{23} \)

Plastic strain component 23 ( \(\times 2\) in Voigt)

-

// Example usage:
vec Etot = {0.001, 0.0, 0.0, 0.0, 0.0, 0.0};
vec DEtot = {0.0001, 0.0, 0.0, 0.0, 0.0, 0.0};
vec stress = zeros(6);
mat Lt = zeros(6,6);
mat L = zeros(6,6);
mat DR = eye(3,3);
vec props = {70000, 0.3, 1e-5, 200, 500, 0.2};
vec statev = zeros(8);

umat_plasticity_iso_CCP("EPICP", Etot, DEtot, stress, Lt, L, DR, 6, props, 8, statev,
                        20.0, 0.0, 0.0, 1.0, Wm, Wm_r, Wm_ir, Wm_d,
                        3, 3, true, tnew_dt);

See also

Fischer_Burmeister_m() for the complementarity solver

See also

L_iso() for isotropic elastic stiffness construction

See also

eta_stress() for plastic flow direction computation

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

Voigt notation convention: [11, 22, 33, 12, 13, 23] with engineering shear strains ( \(\gamma = 2\varepsilon\))

Note

The consistent tangent modulus Lt ensures quadratic convergence in implicit Newton-Raphson schemes

Note

The tangent modulus Lt is always computed

Parameters:
  • umat_name – Name of the constitutive model (EPICP)

  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

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

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

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in hardening [output]

  • Wm_d – Dissipated (plastic) work [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)

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

void umat_sma_mono(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Micromechanical monocrystal model for SMA based on Patoor et al. (1996).

This function implements the micromechanical monocrystal model of Patoor et al. (1996) for shape memory alloys. The model describes the martensitic phase transformation in a single crystal by tracking N individual martensite variants, where N is typically 12 or 24 depending on the crystallographic system.

Elastic Symmetry Selection:

The elastic behavior is determined by the umat_name parameter:

umat_name

Symmetry

Elastic Parameters

SMAMO

Isotropic

E, nu

SMAMC

Cubic

C11, C12, C44

SMAOT

Orthotropic

E1, E2, E3, nu12, nu13, nu23, G12, G13, G23

SMATI

Transverse Isotropic

EL, ET, nuTL, nuTT, GLT

Key Features:

  • Explicit tracking of N martensite variant volume fractions \( f_n \) (n = 1, …, N)

  • Crystallographic transformation strains for each variant

  • Variant selection driven by resolved thermodynamic driving force

  • Inter-variant interactions through hardening matrix

  • Applicable to single crystal SMA behavior

  • Supports multiple elastic symmetry types

Physical Background:

In single crystal SMAs, the austenite-to-martensite transformation occurs through the formation of distinct crystallographic variants. For cubic-to-monoclinic transformations (e.g., NiTi), there are typically 12 or 24 habit plane variants, each characterized by:

  • A specific transformation strain tensor \( \boldsymbol{\varepsilon}^{tr}_n \)

  • A habit plane normal and transformation direction

Variant Volume Fractions:

The microstructural state is characterized by N variant volume fractions:

\[f_n \geq 0, \quad \sum_{n=1}^{N} f_n \leq 1, \quad f_A = 1 - \sum_{n=1}^{N} f_n \]
where:
  • \( f_n \) is the volume fraction of martensite variant n

  • \( f_A \) is the austenite volume fraction

  • The total martensite fraction is \( \xi = \sum_{n=1}^{N} f_n \)

Transformation Strain:

The macroscopic transformation strain is the volume-weighted sum over all variants:

\[\boldsymbol{\varepsilon}^{tr} = \sum_{n=1}^{N} f_n \boldsymbol{\varepsilon}^{tr}_n \]
where \( \boldsymbol{\varepsilon}^{tr}_n \) is the crystallographic transformation strain tensor of variant n, computed from the lattice correspondence.

Thermodynamic Driving Force:

For each variant n, the driving force for transformation is:

\[F_n = \boldsymbol{\sigma} : \boldsymbol{\varepsilon}^{tr}_n - \Delta G^{chem}(T) - \sum_{m=1}^{N} H_{nm} f_m \]
where:
  • \( \boldsymbol{\sigma} : \boldsymbol{\varepsilon}^{tr}_n \) is the mechanical driving force

  • \( \Delta G^{chem}(T) \) is the chemical free energy difference (temperature-dependent)

  • \( H_{nm} \) is the interaction matrix describing variant-variant hardening

Transformation Criteria:

**Forward Transformation ( \(A \to M_n\)):**

\[\Phi_n^{fwd} = F_n - F_c^{fwd} \leq 0, \quad \dot{f}_n \geq 0 \]

**Reverse Transformation ( \(M_n \to A\)):**

\[\Phi_n^{rev} = -F_n - F_c^{rev} \leq 0, \quad \dot{f}_n \leq 0 \]

where \( F_c^{fwd} \) and \( F_c^{rev} \) are critical driving forces for forward and reverse transformations.

Interaction Matrix:

The hardening matrix \( H_{nm} \) captures:

  • Self-hardening ( \( H_{nn} \)): resistance to growth of variant n

  • Latent hardening ( \( H_{nm}, n \neq m \)): interaction between different variants

Variant Selection:

Under applied stress, variants with favorable orientation (high resolved stress on transformation system) are preferentially activated. This leads to:

  • Single variant formation under uniaxial loading along specific orientations

  • Multi-variant microstructures under complex loading

  • Texture-dependent macroscopic response

Number of Variants:

Common crystallographic systems:

  • Cubic \(\to\) Orthorhombic: N = 6 variants

  • Cubic \(\to\) Monoclinic (NiTi): N = 12 or 24 variants

  • Cubic \(\to\) Tetragonal: N = 3 variants

Material Parameters (props):

The props vector layout depends on the elastic symmetry (umat_name):

SMAMO (Isotropic): 16 parameters

Index

Symbol

Description

props[0]

E

Young’s modulus

props[1]

nu

Poisson’s ratio

props[2]

alpha_iso

Coefficient of thermal expansion

props[3]

b

Slope parameter

props[4]

g

Shear strain magnitude

props[5]

Ms

Martensite start temperature

props[6]

Af

Austenite finish temperature

props[7]

nvariants

Number of martensite variants

props[8-15]

c_lambda0, p0_lambda0, …

Lagrange multiplier parameters

SMAMC (Cubic): 17 parameters

Index

Symbol

Description

props[0]

C11

Elastic constant C11

props[1]

C12

Elastic constant C12

props[2]

C44

Elastic constant C44

props[3]

alpha_iso

Coefficient of thermal expansion

props[4]

b

Slope parameter

props[5]

g

Shear strain magnitude

props[6]

Ms

Martensite start temperature

props[7]

Af

Austenite finish temperature

props[8]

nvariants

Number of martensite variants

props[9-16]

c_lambda0, p0_lambda0, …

Lagrange multiplier parameters

State Variables (statev):

Total state variables required: \( n_{statev} = 1 + N + 7 \) (for N variants)

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial/reference temperature

Temperature

statev[1]

\( f_1 \)

Volume fraction of martensite variant 1

-

statev[2]

\( f_2 \)

Volume fraction of martensite variant 2

-

statev[N]

\( f_N \)

Volume fraction of martensite variant N

-

statev[N+1:N+6]

\( \varepsilon^{tr} \)

Macroscopic transformation strain (Voigt)

Strain

statev[N+7]

\( \xi \)

Total martensite volume fraction

-

The macroscopic transformation strain is computed as: \( \boldsymbol{\varepsilon}^{tr} = \sum_{n=1}^{N} f_n \boldsymbol{\varepsilon}^{tr}_n \)

References:

  • Patoor, E., Eberhardt, A., & Berveiller, M. (1996). “Micromechanical modelling of

    superelasticity in shape memory alloys.”

    Journal de Physique IV, 6(C1), 277-292.

  • Patoor, E., Lagoudas, D. C., Entchev, P. B., Brinson, L. C., & Gao, X. (2006). “Shape memory alloys, Part I: General properties and modeling of single crystals.” Mechanics of Materials, 38(5-6), 391-429.

  • Gall, K., & Sehitoglu, H. (1999). “The role of texture in tension-compression

    asymmetry in polycrystalline NiTi.”

    International Journal of Plasticity, 15(1), 69-92.

See also

L_iso() for isotropic stiffness tensor (SMAMO)

See also

L_cubic() for cubic stiffness tensor (SMAMC)

See also

L_ortho() for orthotropic stiffness tensor (SMAOT)

See also

L_isotrans() for transverse isotropic stiffness tensor (SMATI)

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

This model is specifically for single crystal SMA behavior

Note

For polycrystalline SMAs, use this model within a homogenization scheme

Note

The number of variants N depends on the crystallographic transformation system

Note

Variant transformation strains must be provided based on crystallographic data

Parameters:
  • umat_name – Name of the constitutive model (SMAMO, SMAMC, SMAOT, SMATI)

  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Cauchy stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus ( \(6 \times 6\) matrix) [output]

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

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

  • nprops – Number of material properties

  • props – Material properties vector (layout depends on umat_name)

  • nstatev – Number of state variables (includes N variant volume fractions)

  • statev – State variables vector containing variant fractions [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 stored in transformation [output]

  • Wm_d – Dissipated work (hysteresis) [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)

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

void umat_sma_unified_T(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Unified phenomenological SMA model with phase transformation.

This function implements the unified phenomenological model for shape memory alloys based on Chatziathanasiou’s framework. The model describes the macroscopic thermomechanical behavior through a single scalar internal variable (martensitic volume fraction \( \xi \)) and a tensorial transformation strain \( \boldsymbol{\varepsilon}^{tr} \).

Elastic Symmetry and Criteria Selection:

The elastic behavior and transformation criteria are determined by the umat_name parameter:

umat_name

Elasticity

Criteria

Number of props

SMADI

Isotropic

Drucker

28

SMADC

Cubic

Drucker

30

SMAAI

Isotropic

Anisotropic Drucker (DFA)

35

SMAAC

Cubic

Anisotropic Drucker (DFA)

37

Effective Properties:

The effective compliance is obtained via a Reuss mixing rule:

\[\mathbf{M}_{eff} = \xi \mathbf{M}_M + (1 - \xi) \mathbf{M}_A \]
and the effective CTE is similarly interpolated.

Current Maximum Transformation Strain:

The maximum transformation strain magnitude \( H^{cur} \) evolves with stress:

\[H^{cur}(\bar{\sigma}) = H_{min} + (H_{max} - H_{min})(1 - e^{-k_1 \bar{\sigma} / \sigma_{crit}}) \]

Material Parameters (props):

SMADI (Isotropic elasticity, Drucker criteria) — 28 props:

Index

Symbol

Description

Units

0

flagT

Temperature extrapolation (0=linear, 1=smooth)

-

1

\( E_A \)

Young’s modulus of Austenite

MPa

2

\( E_M \)

Young’s modulus of Martensite

MPa

3

\( \nu_A \)

Poisson’s ratio of Austenite

-

4

\( \nu_M \)

Poisson’s ratio of Martensite

-

5

\( \alpha_A \)

CTE of Austenite

1/K

6

\( \alpha_M \)

CTE of Martensite

1/K

7

\( H_{min} \)

Minimal transformation strain magnitude

-

8

\( H_{max} \)

Maximal transformation strain magnitude

-

9

\( k_1 \)

Exponential evolution parameter for \( H^{cur} \)

-

10

\( \sigma_{crit} \)

Critical stress for \( H^{cur} \) evolution

MPa

11

\( C_A \)

Clausius-Clapeyron slope (M \( \rightarrow \) A)

MPa/K

12

\( C_M \)

Clausius-Clapeyron slope (A \( \rightarrow \) M)

MPa/K

13

\( M_{s0} \)

Martensite start temperature at zero stress

K

14

\( M_{f0} \)

Martensite finish temperature at zero stress

K

15

\( A_{s0} \)

Austenite start temperature at zero stress

K

16

\( A_{f0} \)

Austenite finish temperature at zero stress

K

17

\( n_1 \)

Martensite start smooth exponent

-

18

\( n_2 \)

Martensite finish smooth exponent

-

19

\( n_3 \)

Austenite start smooth exponent

-

20

\( n_4 \)

Austenite finish smooth exponent

-

21

\( \sigma_{caliber} \)

Calibration stress for \( C_A \) / \( C_M \)

MPa

22

\( b \)

Tension-compression asymmetry parameter (Prager)

-

23

\( n \)

Tension-compression asymmetry exponent (Prager)

-

24

\( c_\lambda \)

Penalty function exponent start point

-

25

\( p_{0\lambda} \)

Penalty function limit value

-

26

\( n_\lambda \)

Penalty function power law exponent

-

27

\( \alpha_\lambda \)

Penalty function power law parameter

-

SMADC (Cubic elasticity, Drucker criteria) — 30 props:

Index

Symbol

Description

Units

0

flagT

Temperature extrapolation (0=linear, 1=smooth)

-

1

\( E_A \)

Young’s modulus of Austenite ([100] direction)

MPa

2

\( E_M \)

Young’s modulus of Martensite ([100] direction)

MPa

3

\( \nu_A \)

Poisson’s ratio of Austenite

-

4

\( \nu_M \)

Poisson’s ratio of Martensite

-

5

\( G_A \)

Shear modulus of Austenite

MPa

6

\( G_M \)

Shear modulus of Martensite

MPa

7–29

Same as SMADI props[5–27] (common SMA parameters)

SMAAI (Isotropic elasticity, anisotropic Drucker criteria) — 35 props:

Same as SMADI (props[0–27]) followed by 7 DFA parameters:

Index

Symbol

Description

28

\( F_{dfa} \)

F parameter of DFA criteria

29

\( G_{dfa} \)

G parameter of DFA criteria

30

\( H_{dfa} \)

H parameter of DFA criteria

31

\( L_{dfa} \)

L parameter of DFA criteria

32

\( M_{dfa} \)

M parameter of DFA criteria

33

\( N_{dfa} \)

N parameter of DFA criteria

34

\( K_{dfa} \)

K parameter of DFA criteria

SMAAC (Cubic elasticity, anisotropic Drucker criteria) — 37 props:

Same as SMADC (props[0–29]) followed by 7 DFA parameters (props[30–36]).

State Variables (statev) — 17 variables:

Index

Symbol

Description

Units

0

\( T_{init} \)

Initial/reference temperature

K

1

\( \xi \)

Martensitic volume fraction

-

2

\( \varepsilon^{tr}_{11} \)

Transformation strain component 11

-

3

\( \varepsilon^{tr}_{22} \)

Transformation strain component 22

-

4

\( \varepsilon^{tr}_{33} \)

Transformation strain component 33

-

5

\( \gamma^{tr}_{12} \)

Transformation strain component 12 (engineering)

-

6

\( \gamma^{tr}_{13} \)

Transformation strain component 13 (engineering)

-

7

\( \gamma^{tr}_{23} \)

Transformation strain component 23 (engineering)

-

8

\( \xi_F \)

Forward martensitic volume fraction

-

9

\( \xi_R \)

Reverse martensitic volume fraction

-

10

\( \rho \Delta s_0 \)

Entropy difference between phases (M - A)

MPa/K

11

\( \rho \Delta E_0 \)

Internal energy difference between phases (M - A)

MPa

12

\( D \)

Stress dependence parameter for transformation limits

-

13

\( a_1 \)

Forward hardening parameter

MPa

14

\( a_2 \)

Reverse hardening parameter

MPa

15

\( a_3 \)

Equilibrium hardening parameter

MPa

16

\( Y_{0t} \)

Initial transformation critical value

MPa

References:

  • Chatziathanasiou, D. (2016). Ph.D. Thesis — Phenomenological constitutive modeling of shape memory alloys.

  • Chemisky, Y., Chatziathanasiou, D., Kumar, P., & Lagoudas, D. C. (2014). “A constitutive model for cyclic actuation of high-temperature shape memory alloys.” Mechanics of Materials, 68, 120-136.

See also

L_iso() for isotropic stiffness tensor (SMADI, SMAAI)

See also

L_cubic() for cubic stiffness tensor (SMADC, SMAAC)

See also

umat_sma_mono() for the micromechanical monocrystal SMA model

Note

Elastic convention: isotropic uses “Enu”, cubic uses “EnuG” for L_iso / L_cubic

Note

The flagT parameter controls temperature extrapolation: 0 for linear, 1 for smooth

Note

Legacy aliases SMAUT and SMANI map to SMADI and SMAAI respectively

Parameters:
  • umat_name – Model variant (SMADI, SMADC, SMAAI, SMAAC)

  • Etot – Total strain tensor at beginning of increment (Voigt notation: 6x1)

  • DEtot – Strain increment tensor (Voigt notation: 6x1)

  • stress – Cauchy stress tensor (Voigt notation: 6x1) [output]

  • Lt – Consistent tangent modulus (6x6) [output]

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

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

  • nprops – Number of material properties

  • props – Material properties vector (layout depends on umat_name)

  • nstatev – Number of state variables (17)

  • statev – State variables vector [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 stored in transformation [output]

  • Wm_d – Dissipated work (hysteresis) [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)

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

void umat_sma_unified_TR(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Unified phenomenological SMA model with phase transformation and reorientation.

Extends umat_sma_unified_T with a third leading mechanism: martensite reorientation. The macroscopic state is the martensitic volume fraction \( \xi \), the transformation strain \( \boldsymbol{\varepsilon}^{tr} \), the reorientation strain accumulator \( \mathbf{E}^{Reo} \), and three back-strain channels \( \mathbf{a}_F, \mathbf{a}_R, \mathbf{a}_{reo} \) that grow with the forward / reverse / reorientation increments respectively.

Variants:

umat_name

Elasticity

Criteria

nprops

SMRDI

Isotropic

Drucker

35

SMRDC

Cubic

Drucker

37

SMRAI

Isotropic

Anisotropic Drucker (DFA)

42

SMRAC

Cubic

Anisotropic Drucker (DFA)

44

Effective back-stress and saturation-coupled reorientation surface (Form B):

\[\mathbf{X} = H^{Reo} \, (\mathbf{a} \odot \mathbf{I}_{r05}), \qquad \mathbf{a} = \mathbf{a}_F + \mathbf{a}_R + \mathbf{a}_{reo} \]
\[\Phi^{Reo} = \mathrm{Prager}\!\bigl( \boldsymbol{\sigma} - (1+\lambda_{1}^{Reo}) \, \mathbf{X} \bigr) - Y^{Reo} \]

where \( \lambda_{1}^{Reo} = \mathrm{lagrange}_{\mathrm{pow}_1}(\|\mathbf{v}^{re}\|/E_{T}^{Reo,max}, \ldots) \) is the saturation penalty on the intrinsic (per-unit-martensite) back-strain \( \mathbf{v}^{re} \).

Property layout for SMRDI (28 + 7 = 35 props):

Index

Symbol

Description

0..27

&#8212;

Same as SMADI (flagT, EA, EM, nuA, nuM, alphaA, alphaM, Hmin, Hmax, k1, sigmacrit, C_A, C_M, Ms0, Mf0, As0, Af0, n1..n4, sigmacaliber, prager_b, prager_n, c_lambda, p0_lambda, n_lambda, alpha_lambda)

28

\( Y^{Reo} \)

Stress limit for onset of reorientation

29

\( H^{Reo} \)

Reorientation kinematic hardening coefficient

30

\( E_{T}^{Reo,max} \)

Maximum reorientation back-strain magnitude

31

\( c_{\lambda Reo} \)

Reorientation penalty exponent start point

32

\( p_{0\lambda Reo} \)

Reorientation penalty limit value

33

\( n_{\lambda Reo} \)

Reorientation penalty power exponent

34

\( \alpha_{\lambda Reo} \)

Reorientation penalty power parameter

For SMRDC, SMRAI, SMRAC the same 7 reorientation parameters are appended after the SMADC / SMAAI / SMAAC property block.

State variables (statev) — 30 entries:

Per Chatziathanasiou §4.3, the internal variables of the model are \( \{\boldsymbol\sigma, T, \boldsymbol\varepsilon^F, \boldsymbol\varepsilon^R, \boldsymbol\varepsilon^{re}, \mathbf{v}^{re}, \xi^F, \xi^R\} \). There is only one back-strain in the entire model — \( \mathbf{v}^{re} \) — associated with the reorientation channel. Forward and reverse transformation use isotropic hardening only and do not carry back-strains.

Index

Description

0..16

Identical to umat_sma_unified_T (T_init, xi, ET(6), xiF, xiR, calibrated rho-Ds0, rho-DE0, D, a1, a2, a3, Y0t)

17

\( p^{TR} \) : cumulative reorientation multiplier \( \sum \Delta s^{Reo} \)

18..23

\( \mathbf{v}^{re} \) : reorientation back-strain (Voigt, strain convention with engineering shears)

24..29

\( \mathbf{E}^{Reo} \) : macroscopic reorientation strain accumulator

References:

  • Chatziathanasiou, D. (2016). Ph.D. Thesis.

  • Chatziathanasiou, Chemisky, Meraghni, Echchorfi, Patoor (2015). Smart Materials and Structures.

See also

umat_sma_unified_T for the transformation-only base model.

See also

assemble_continuum_tangent for the shared 3-mechanism tangent operator.

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

SMRDI/SMRDC/SMRAI/SMRAC route through umat_sma_unified_TR.

Note

Internal vectorial state variables are rotated as strain by DR.

Note

When \( \Delta s^{Reo} = 0 \), the result is bit-identical to umat_sma_unified_T (same elastic mixing, same forward/reverse equations).

void umat_prony_Nfast(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Linear viscoelastic constitutive model with Prony series representation (Generalized Maxwell model).

This function implements a linear viscoelastic material model using the Prony series decomposition, also known as the Generalized Maxwell model. The model consists of multiple Maxwell elements in parallel, each characterized by a relaxation time and modulus.

Constitutive Equations:

The relaxation modulus is expressed as a Prony series:

\[E(t) = E_\infty + \sum_{i=1}^N E_i e^{-t/\tau_i} \]
where:
  • \( E_\infty \) is the long-term (equilibrium) modulus

  • \( E_i \) is the modulus of the i-th Maxwell element

  • \( \tau_i \) is the relaxation time of the i-th element

  • \( N \) is the number of Maxwell elements

Incremental Form:

The stress at time \( t + \Delta t \) is computed as:

\[\boldsymbol{\sigma}(t + \Delta t) = \mathbf{L}_\infty : \boldsymbol{\varepsilon}(t + \Delta t) + \sum_{i=1}^N \mathbf{q}_i(t + \Delta t) \]

where \( \mathbf{q}_i \) are the internal state variables (stress-like quantities) that evolve according to:

\[\mathbf{q}_i(t + \Delta t) = e^{-\Delta t/\tau_i} \mathbf{q}_i(t) + \frac{E_i}{E_\infty} \mathbf{L}_\infty : \left( e^{-\Delta t/\tau_i} - 1 \right) \Delta \boldsymbol{\varepsilon} \]

Bulk and Shear Decomposition:

The model handles volumetric and deviatoric responses independently:

  • Volumetric: \( K(t) = K_\infty + \sum_{i=1}^N K_i e^{-t/\tau_i^K} \)

  • Deviatoric: \( G(t) = G_\infty + \sum_{i=1}^N G_i e^{-t/\tau_i^G} \)

Consistent Tangent Modulus:

For implicit finite element analysis:

\[\mathbf{L}_t = \mathbf{L}_\infty + \sum_{i=1}^N \left( 1 - e^{-\Delta t/\tau_i} \right) \mathbf{L}_i \]

Material Parameters (props):

For N Maxwell elements, the props vector contains:

Index

Symbol

Description

Units

props[0]

\( N \)

Number of Maxwell elements

-

props[1]

\( E_\infty \)

Equilibrium Young’s modulus

Stress

props[2]

\( \nu_\infty \)

Equilibrium Poisson’s ratio

-

props[3]

\( \alpha \)

Thermal expansion coefficient

1/Temperature

props[4]

\( E_1 \)

Modulus of 1st Maxwell element

Stress

props[5]

\( \tau_1 \)

Relaxation time of 1st element

Time

props[4+2(i-1)]

\( E_i \)

Modulus of i-th element

Stress

props[5+2(i-1)]

\( \tau_i \)

Relaxation time of i-th element

Time

State Variables (statev):

For each Maxwell element, 6 internal state variables store the stress-like quantities \( \mathbf{q}_i \):

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial temperature

Temperature

statev[1:6]

\( \mathbf{q}_1 \)

Internal stresses of 1st element (Voigt)

Stress

statev[7:12]

\( \mathbf{q}_2 \)

Internal stresses of 2nd element (Voigt)

Stress

statev[1+6(i-1):6i]

\( \mathbf{q}_i \)

Internal stresses of i-th element (Voigt)

Stress

Total state variables required: \( n_{statev} = 1 + 6N \)

// Example usage: 2 Maxwell elements
int N = 2;
vec props(8);
props(0) = N;          // 2 Maxwell elements
props(1) = 1000;       // E_inf = 1000 MPa
props(2) = 0.3;        // nu_inf = 0.3
props(3) = 1e-5;       // alpha = 1e-5 /K
props(4) = 500;        // E_1 = 500 MPa
props(5) = 0.1;        // tau_1 = 0.1 s
props(6) = 200;        // E_2 = 200 MPa
props(7) = 1.0;        // tau_2 = 1.0 s

vec statev = zeros(1 + 6*N);  // 1 + 12 state variables
vec Etot = {0.001, 0, 0, 0, 0, 0};
vec DEtot = {0.0001, 0, 0, 0, 0, 0};
vec stress = zeros(6);
mat Lt = zeros(6,6);
mat DR = eye(3,3);

umat_prony_Nfast(Etot, DEtot, stress, Lt, DR, 8, props, 13, statev,
                 20.0, 0.0, 0.0, 0.01, Wm, Wm_r, Wm_ir, Wm_d,
                 3, 3, false, tnew_dt);

See also

L_iso() for isotropic elastic stiffness construction

See also

Ivol() for volumetric projection tensor

See also

Idev() for deviatoric projection tensor

References:

  • Ferry, J. D. (1980). Viscoelastic Properties of Polymers (3rd ed.). Wiley.

  • Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.

  • Park, S. W., & Schapery, R. A. (1999). “Methods of interconversion between linear viscoelastic material functions. Part I—A numerical method based on Prony series.” International Journal of Solids and Structures, 36(11), 1653-1675.

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

The Prony series provides an efficient representation for viscoelastic relaxation

Note

Relaxation times should span the expected loading time scales

Note

For frequency-domain data, use fitting algorithms to extract Prony parameters

Note

The model assumes small strains and linear viscoelasticity

Note

Time step should be small relative to shortest relaxation time for accuracy

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus ( \(6 \times 6\) matrix) [output]

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in viscous elements [output]

  • Wm_d – Dissipated (viscous) work [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)

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

void umat_zener_fast(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Linear viscoelastic constitutive model using the Zener (Standard Linear Solid) model.

This function implements a linear viscoelastic material model using the Zener model, also known as the Standard Linear Solid (SLS). The Zener model consists of a spring in series with a Kelvin-Voigt element (spring and dashpot in parallel), providing both instantaneous elastic response and time-dependent relaxation.

Rheological Representation:

  E_0 (instantaneous)
─────────┬─────────
         │
  ┌──────┴──────┐
  │   E_1      η_1   │  (Kelvin-Voigt element)
  │ ──/\/\──┬──[=]──│
  │         │        │
  └─────────┴────────┘

Constitutive Equations:

The Zener model stress-strain relationship is given by:

\[ \boldsymbol{\sigma} + \tau \dot{\boldsymbol{\sigma}} = E_0 \boldsymbol{\varepsilon} + (E_0 + E_1) \tau \dot{\boldsymbol{\varepsilon}} \]
where:
  • \( E_0 \) is the instantaneous (glassy) modulus

  • \( E_1 \) is the modulus of the Kelvin-Voigt element

  • \( \tau = \eta_1 / E_1 \) is the relaxation time

  • \( \eta_1 \) is the viscosity of the dashpot

Relaxation Modulus:

The relaxation modulus for the Zener model is:

\[ E(t) = E_\infty + (E_0 - E_\infty) e^{-t/\tau} \]
where:
  • \( E_\infty = \frac{E_0 E_1}{E_0 + E_1} \) is the long-term (rubbery) modulus

  • \( E_0 \) is the instantaneous modulus

  • \( \tau \) is the relaxation time

Creep Compliance:

The creep compliance is:

\[ J(t) = \frac{1}{E_0} + \frac{1}{E_1} \left( 1 - e^{-t/\tau_c} \right) \]
where \( \tau_c = \eta_1 / E_1 \) is the retardation time.

Incremental Form:

For numerical integration over a time step \( \Delta t \):

\[ \boldsymbol{\sigma}_{n+1} = \mathbf{L}_\infty : \boldsymbol{\varepsilon}_{n+1} + \mathbf{q}_{n+1} \]
where the internal variable \( \mathbf{q} \) evolves as:
\[ \mathbf{q}_{n+1} = e^{-\Delta t/\tau} \mathbf{q}_n + \frac{E_1 - E_\infty}{E_\infty} \mathbf{L}_\infty : \left( e^{-\Delta t/\tau} - 1 \right) \Delta \boldsymbol{\varepsilon} \]

Material Parameters (props):

Index

Symbol

Description

Units

props[0]

\( E_\infty \)

Equilibrium (long-term) Young’s modulus

Stress

props[1]

\( \nu \)

Poisson’s ratio (assumed constant)

-

props[2]

\( \alpha \)

Thermal expansion coefficient

1/Temperature

props[3]

\( E_1 \)

Modulus of Kelvin-Voigt element

Stress

props[4]

\( \tau \)

Relaxation time

Time

State Variables (statev):

Total state variables required: \( n_{statev} = 7 \)

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial temperature

Temperature

statev[1:6]

\( \mathbf{q} \)

Internal stress-like variable (Voigt \(6 \times 1\))

Stress

References:

  • Zener, C. (1948). Elasticity and Anelasticity of Metals. University of Chicago Press.

  • Ferry, J. D. (1980). Viscoelastic Properties of Polymers (3rd ed.). Wiley.

  • Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

The Zener model is the simplest model capturing both creep and relaxation

Note

For multiple relaxation times, use the Prony series model (umat_prony_Nfast)

Note

Time step should be small relative to relaxation time for accuracy

Note

The model assumes small strains and linear viscoelasticity

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus ( \(6 \times 6\) matrix) [output]

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in viscous elements [output]

  • Wm_d – Dissipated (viscous) work [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)

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

void umat_zener_Nfast(const std::string &umat_name, const arma::vec &Etot, const arma::vec &DEtot, arma::vec &stress, 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)

Generalized Zener (Standard Linear Solid) viscoelastic model with N parallel branches.

This function implements a generalized linear viscoelastic material model using N Zener (Maxwell) elements in parallel with a long-term equilibrium spring. This is equivalent to a Generalized Maxwell model and provides a discrete approximation of the continuous relaxation spectrum.

Rheological Representation:

                 E_∞ (equilibrium spring)
────────────────────/\/\/\────────────────
         │                       │
         ├──── E_1 ─[η_1]────────┤   Branch 1
         │                       │
         ├──── E_2 ─[η_2]────────┤   Branch 2
         │                       │
         │         ...           │
         │                       │
         └──── E_N ─[η_N]────────┘   Branch N

Constitutive Equations:

The relaxation modulus is expressed as a sum of exponentials (Prony series):

\[ E(t) = E_\infty + \sum_{i=1}^N E_i e^{-t/\tau_i} \]
where:
  • \( E_\infty \) is the long-term (equilibrium) modulus

  • \( E_i \) is the modulus of the i-th Maxwell element

  • \( \tau_i = \eta_i / E_i \) is the relaxation time of the i-th element

  • \( N \) is the number of Maxwell elements

Instantaneous Modulus:

At \( t = 0 \):

\[ E_0 = E(0) = E_\infty + \sum_{i=1}^N E_i \]

Stress Decomposition:

The total stress is the sum of the equilibrium stress and internal stresses:

\[ \boldsymbol{\sigma} = \mathbf{L}_\infty : \boldsymbol{\varepsilon} + \sum_{i=1}^N \mathbf{q}_i \]
where \( \mathbf{q}_i \) are the internal stress-like variables for each Maxwell element.

Internal Variable Evolution:

Each internal variable evolves according to:

\[ \dot{\mathbf{q}}_i + \frac{1}{\tau_i} \mathbf{q}_i = \frac{E_i}{E_\infty} \mathbf{L}_\infty : \dot{\boldsymbol{\varepsilon}} \]

Incremental Form:

For numerical integration over a time step \( \Delta t \):

\[ \mathbf{q}_{i,n+1} = e^{-\Delta t/\tau_i} \mathbf{q}_{i,n} + \frac{E_i}{E_\infty} \mathbf{L}_\infty : \frac{\tau_i}{\Delta t} \left( 1 - e^{-\Delta t/\tau_i} \right) \Delta \boldsymbol{\varepsilon} \]

Consistent Tangent Modulus:

For implicit finite element analysis:

\[ \mathbf{L}_t = \mathbf{L}_\infty \left( 1 + \sum_{i=1}^N \frac{E_i}{E_\infty} \frac{\tau_i}{\Delta t} \left( 1 - e^{-\Delta t/\tau_i} \right) \right) \]

Material Parameters (props):

For N Maxwell elements, the props vector contains:

Index

Symbol

Description

Units

props[0]

\( N \)

Number of Maxwell elements

-

props[1]

\( E_\infty \)

Equilibrium Young’s modulus

Stress

props[2]

\( \nu \)

Poisson’s ratio (assumed constant)

-

props[3]

\( \alpha \)

Thermal expansion coefficient

1/Temperature

props[4]

\( E_1 \)

Modulus of 1st Maxwell element

Stress

props[5]

\( \tau_1 \)

Relaxation time of 1st element

Time

props[4+2(i-1)]

\( E_i \)

Modulus of i-th element

Stress

props[5+2(i-1)]

\( \tau_i \)

Relaxation time of i-th element

Time

State Variables (statev):

For each Maxwell element, 6 internal state variables store the stress-like quantities:

Index

Symbol

Description

Units

statev[0]

\( T_{init} \)

Initial temperature

Temperature

statev[1:6]

\( \mathbf{q}_1 \)

Internal stresses of 1st element (Voigt)

Stress

statev[7:12]

\( \mathbf{q}_2 \)

Internal stresses of 2nd element (Voigt)

Stress

statev[1+6(i-1):6i]

\( \mathbf{q}_i \)

Internal stresses of i-th element (Voigt)

Stress

Total state variables required: \( n_{statev} = 1 + 6N \)

References:

  • Zener, C. (1948). Elasticity and Anelasticity of Metals. University of Chicago Press.

  • Ferry, J. D. (1980). Viscoelastic Properties of Polymers (3rd ed.). Wiley.

  • Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.

  • Park, S. W., & Schapery, R. A. (1999). “Methods of interconversion between linear viscoelastic material functions.” Int. J. Solids Struct., 36(11), 1653-1675.

See also

umat_zener_fast() for single Maxwell element version

See also

umat_prony_Nfast() for equivalent Prony series formulation

Note

Stress measure. The stress returned by this model (the stress argument, written \( \boldsymbol{\sigma} \) in the relations above) is the Cauchy stress under infinitesimal strain; under finite strain the update runs in a corotational frame, so it is the rotated Kirchhoff stress \( \hat{\boldsymbol{\tau}} = \boldsymbol{Q}^{T}\boldsymbol{\tau}\,\boldsymbol{Q} \) on the frame fixed by the chosen objective rate ( \( \boldsymbol{Q} = \boldsymbol{R} \) for Green&#8212;Naghdi and \( \log_R \), the logarithmic frame for the XBM/log rate, \( \boldsymbol{F} \) for \( \log_F \)).

Note

Relaxation times should span the expected loading time scales (decades in log-time)

Note

Typically 5-10 Maxwell elements are sufficient for most polymers

Note

For frequency-domain data, use fitting algorithms to extract Prony parameters

Note

The model assumes small strains and linear viscoelasticity

Note

Time step should be small relative to shortest relaxation time for accuracy

Parameters:
  • Etot – Total strain tensor at beginning of increment (Voigt notation: \(6 \times 1\) vector)

  • DEtot – Strain increment tensor (Voigt notation: \(6 \times 1\) vector)

  • stress – Stress tensor (Voigt notation: \(6 \times 1\) vector) [output]

  • Lt – Consistent tangent modulus ( \(6 \times 6\) matrix) [output]

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

  • nprops – Number of material properties

  • props – Material properties vector (see table above)

  • nstatev – Number of state variables

  • statev – State variables vector (see table above) [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 stored in viscous elements [output]

  • Wm_d – Dissipated (viscous) work [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)

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

void get_L_elastic(phase_characteristics&)