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×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×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×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 arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
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₂₂):
\[\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₁₂):
\[\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 sigma = 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, sigma, 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 Functions 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
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₂₂ parameters
Note
- In-plane shear for d₁₂ 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×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Damaged elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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 arma::vec&, const arma::vec&, arma::vec&, arma::mat&, arma::mat&, arma::vec&, const arma::mat&, const int&, const arma::vec&, const int&, arma::vec&, const double&, const double&, const double&, const double&, double&, double&, double&, double&, const int&, const int&, const bool&, const int&, double&)
-
void umat_elasticity_iso(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Linear elastic isotropic constitutive model with thermal expansion.
This function implements the fundamental linear elastic isotropic material model based on Hooke’s law, suitable for small strain analysis of materials exhibiting reversible elastic deformation.
Constitutive Equations:
The stress-strain relationship follows the generalized Hooke’s law:
\[\boldsymbol{\sigma} = \mathbf{L} : (\boldsymbol{\varepsilon} - \boldsymbol{\varepsilon}^{th}) \]where:
\( \boldsymbol{\sigma} \) is the stress tensor (Voigt notation)
\( \mathbf{L} \) is the fourth-order elastic stiffness tensor
\( \boldsymbol{\varepsilon} \) is the total strain tensor
\( \boldsymbol{\varepsilon}^{th} = \alpha (T - T_0) \mathbf{I} \) is the thermal strain
\( \alpha \) is the coefficient of thermal expansion
\( T \) is the current temperature
\( T_0 \) is the reference temperature
Elastic Stiffness Tensor:
For an isotropic material, the stiffness tensor is constructed from two independent constants:
\[\mathbf{L} = 3K \mathbf{I}_{vol} + 2\mu \mathbf{I}_{dev} \]where:
\( K = \frac{E}{3(1-2\nu)} \) is the bulk modulus
\( \mu = \frac{E}{2(1+\nu)} \) is the shear modulus
\( \mathbf{I}_{vol} \) is the volumetric projection tensor
\( \mathbf{I}_{dev} \) is the deviatoric projection tensor
In component form (Voigt notation):
\[\begin{split}\mathbf{L} = \frac{E}{(1+\nu)(1-2\nu)} \begin{bmatrix} 1-\nu & \nu & \nu & 0 & 0 & 0 \\ \nu & 1-\nu & \nu & 0 & 0 & 0 \\ \nu & \nu & 1-\nu & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1-2\nu}{2} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1-2\nu}{2} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1-2\nu}{2} \end{bmatrix} \end{split}\]Stress Update:
For an increment of strain \( \Delta \boldsymbol{\varepsilon} \):
\[\boldsymbol{\sigma}_{n+1} = \boldsymbol{\sigma}_n + \mathbf{L} : \left( \Delta \boldsymbol{\varepsilon} - \alpha \Delta T \mathbf{I} \right) \]Tangent Modulus:
For linear elasticity, the tangent modulus is constant and equal to the elastic stiffness:
\[\mathbf{L}_t = \mathbf{L} \]This ensures optimal convergence in Newton-Raphson iterations.
Material Parameters (props):
Index
Symbol
Description
Units
Typical Range
props[0]
\( E \)
Young’s modulus
Stress
1-500 GPa
props[1]
\( \nu \)
Poisson’s ratio
-
0.0-0.5
props[2]
\( \alpha \)
Coefficient of thermal expansion
1/Temperature
1e-6 to 1e-4 /K
Constraint on Poisson’s ratio:
For 3D: \( -1 < \nu < 0.5 \)
\( \nu = 0.5 \) implies incompressibility (infinite bulk modulus)
\( \nu = 0 \) implies no lateral strain under uniaxial loading
State Variables (statev):
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial/reference temperature
Temperature
Total state variables required: \( n_{statev} = 1 \)
// Example usage: Steel vec props = {210000, 0.3, 1.2e-5}; // E=210 GPa, nu=0.3, alpha=12e-6 /K vec statev = zeros(1); statev(0) = 20.0; // Reference temperature 20°C vec Etot = {0.001, 0.0, 0.0, 0.0, 0.0, 0.0}; // 0.1% strain in direction 1 vec DEtot = {0.0001, 0.0, 0.0, 0.0, 0.0, 0.0}; vec sigma = zeros(6); mat Lt = zeros(6,6); mat L = zeros(6,6); vec sigma_in = zeros(6); mat DR = eye(3,3); umat_elasticity_iso(Etot, DEtot, sigma, Lt, L, sigma_in, DR, 3, props, 1, statev, 25.0, 5.0, 0.0, 1.0, Wm, Wm_r, Wm_ir, Wm_d, 3, 3, false, 0, tnew_dt); // Expected stress: sigma(0) ≈ E*Etot(0)*(1-nu)/((1+nu)(1-2nu)) - E*alpha*DT/(1-2nu)See also
L_iso() for elastic stiffness tensor construction
See also
Ivol() for volumetric projection tensor
See also
Idev() for deviatoric projection tensor
See also
Ith() for thermal expansion vector
References:
Timoshenko, S. P., & Goodier, J. N. (1970). Theory of Elasticity (3rd ed.). McGraw-Hill.
Bower, A. F. (2009). Applied Mechanics of Solids. CRC Press.
Gurtin, M. E. (1981). An Introduction to Continuum Mechanics. Academic Press.
Note
This model is restricted to small strains (< 1%)
Note
For large strains, use hyperelastic models (Neo-Hookean, Mooney-Rivlin)
Note
The model is path-independent (no history dependence)
Note
No energy dissipation occurs (Wm_ir = Wm_d = 0, Wm = Wm_r)
Note
For plane stress/strain, set ndi=2 or ndi=1 accordingly
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Tangent modulus \( \mathbf{L}_t = \mathbf{L} \) (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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 (0 for elastic model) [output]
Wm_d – Dissipated work (0 for elastic model) [output]
ndi – Number of direct stress components (typically 3)
nshr – Number of shear stress components (typically 3)
start – Flag indicating first increment (true) or continuation (false)
solver_type – Solver type: 0=implicit, 1=explicit, 2=dynamic implicit
tnew_dt – Suggested new time step size for adaptive time stepping [output]
-
void umat_elasticity_ortho(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Linear elastic orthotropic constitutive model with thermal expansion.
This function implements a linear elastic orthotropic material model suitable for materials with three perpendicular planes of symmetry, such as:
Wood and timber
Rolled metals
Unidirectional composites (approximation)
Crystals with orthorhombic symmetry
Constitutive Equations:
The stress-strain relationship in the material principal axes:
\[\begin{split}\begin{bmatrix} \varepsilon_{11} \\ \varepsilon_{22} \\ \varepsilon_{33} \\ \gamma_{12} \\ \gamma_{13} \\ \gamma_{23} \end{bmatrix} = \begin{bmatrix} 1/E_1 & -\nu_{12}/E_1 & -\nu_{13}/E_1 & 0 & 0 & 0 \\ -\nu_{12}/E_1 & 1/E_2 & -\nu_{23}/E_2 & 0 & 0 & 0 \\ -\nu_{13}/E_1 & -\nu_{23}/E_2 & 1/E_3 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1/G_{12} & 0 & 0 \\ 0 & 0 & 0 & 0 & 1/G_{13} & 0 \\ 0 & 0 & 0 & 0 & 0 & 1/G_{23} \end{bmatrix} \begin{bmatrix} \sigma_{11} \\ \sigma_{22} \\ \sigma_{33} \\ \tau_{12} \\ \tau_{13} \\ \tau_{23} \end{bmatrix} + \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ 0 \\ 0 \\ 0 \end{bmatrix} \Delta T \end{split}\]Symmetry Requirements:
The compliance matrix must be symmetric, which imposes:
\[\frac{\nu_{ij}}{E_i} = \frac{\nu_{ji}}{E_j} \]Material Parameters (props):
Index
Symbol
Description
Units
props[0]
\( E_1 \)
Young’s modulus in direction 1
Stress
props[1]
\( E_2 \)
Young’s modulus in direction 2
Stress
props[2]
\( E_3 \)
Young’s modulus in direction 3
Stress
props[3]
\( \nu_{12} \)
Poisson’s ratio (strain in 2 due to stress in 1)
-
props[4]
\( \nu_{13} \)
Poisson’s ratio (strain in 3 due to stress in 1)
-
props[5]
\( \nu_{23} \)
Poisson’s ratio (strain in 3 due to stress in 2)
-
props[6]
\( G_{12} \)
Shear modulus in 1-2 plane
Stress
props[7]
\( G_{13} \)
Shear modulus in 1-3 plane
Stress
props[8]
\( G_{23} \)
Shear modulus in 2-3 plane
Stress
props[9]
\( \alpha_1 \)
CTE in direction 1
1/Temperature
props[10]
\( \alpha_2 \)
CTE in direction 2
1/Temperature
props[11]
\( \alpha_3 \)
CTE in direction 3
1/Temperature
State Variables (statev):
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial/reference temperature
Temperature
See also
L_ortho() for orthotropic stiffness tensor construction
Note
Material axes must be aligned with global axes. For rotated materials, use local orientation definitions in the FE software.
Note
The stiffness matrix must be positive definite for physical stability
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1)
DEtot – Strain increment tensor (Voigt notation: 6×1)
sigma – Stress tensor [output] (Voigt notation: 6×1)
Lt – Tangent modulus (= L for linear elasticity) [output] (6×6)
L – Elastic stiffness tensor [output] (6×6)
sigma_in – Internal stress for explicit solvers [output] (6×1)
DR – Rotation increment matrix (3×3)
nprops – Number of material properties (12)
props – Material properties vector
nstatev – Number of state variables (1)
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 (0 for elastic) [output]
Wm_d – Dissipated work (0 for elastic) [output]
ndi – Number of direct stress components
nshr – Number of shear stress components
start – Flag indicating first increment
solver_type – Solver type (0=implicit, 1=explicit)
tnew_dt – Suggested new time step [output]
-
void umat_elasticity_trans_iso(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Linear elastic transversely isotropic constitutive model with thermal expansion.
This function implements a linear elastic transversely isotropic material model suitable for materials with one preferred direction, such as:
Unidirectional fiber composites
Hexagonal crystals
Biological tissues (muscles, tendons)
Extruded or drawn materials
Material Symmetry:
The material has rotational symmetry about axis 1 (fiber direction). Properties are isotropic in the 2-3 plane (transverse plane).
Constitutive Equations:
The compliance matrix in the material principal axes:
\[\begin{split}\begin{bmatrix} \varepsilon_{11} \\ \varepsilon_{22} \\ \varepsilon_{33} \\ \gamma_{12} \\ \gamma_{13} \\ \gamma_{23} \end{bmatrix} = \begin{bmatrix} 1/E_L & -\nu_{LT}/E_L & -\nu_{LT}/E_L & 0 & 0 & 0 \\ -\nu_{LT}/E_L & 1/E_T & -\nu_{TT}/E_T & 0 & 0 & 0 \\ -\nu_{LT}/E_L & -\nu_{TT}/E_T & 1/E_T & 0 & 0 & 0 \\ 0 & 0 & 0 & 1/G_{LT} & 0 & 0 \\ 0 & 0 & 0 & 0 & 1/G_{LT} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2(1+\nu_{TT})/E_T \end{bmatrix} \begin{bmatrix} \sigma_{11} \\ \sigma_{22} \\ \sigma_{33} \\ \tau_{12} \\ \tau_{13} \\ \tau_{23} \end{bmatrix} \end{split}\]Note: The transverse shear modulus is not independent:
\[G_{TT} = \frac{E_T}{2(1 + \nu_{TT})} \]Material Parameters (props):
Index
Symbol
Description
Units
props[0]
\( E_L \)
Longitudinal Young’s modulus (fiber direction)
Stress
props[1]
\( E_T \)
Transverse Young’s modulus
Stress
props[2]
\( \nu_{LT} \)
Poisson’s ratio (transverse strain due to longitudinal stress)
-
props[3]
\( \nu_{TT} \)
Transverse Poisson’s ratio (in the isotropic plane)
-
props[4]
\( G_{LT} \)
Longitudinal shear modulus
Stress
props[5]
\( \alpha_L \)
Longitudinal CTE
1/Temperature
props[6]
\( \alpha_T \)
Transverse CTE
1/Temperature
Typical Values (UD Carbon/Epoxy):
\( E_L \) ≈ 140 GPa
\( E_T \) ≈ 10 GPa
\( \nu_{LT} \) ≈ 0.3
\( \nu_{TT} \) ≈ 0.4
\( G_{LT} \) ≈ 5 GPa
State Variables (statev):
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial/reference temperature
Temperature
See also
L_isotrans() for transversely isotropic stiffness tensor construction
Note
The fiber direction (axis 1) must be aligned with the global x-axis. For rotated fibers, use local orientation definitions.
Note
The 2-3 plane is the plane of isotropy (transverse plane)
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1)
DEtot – Strain increment tensor (Voigt notation: 6×1)
sigma – Stress tensor [output] (Voigt notation: 6×1)
Lt – Tangent modulus (= L for linear elasticity) [output] (6×6)
L – Elastic stiffness tensor [output] (6×6)
sigma_in – Internal stress for explicit solvers [output] (6×1)
DR – Rotation increment matrix (3×3)
nprops – Number of material properties (7)
props – Material properties vector
nstatev – Number of state variables (1)
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 (0 for elastic) [output]
Wm_d – Dissipated work (0 for elastic) [output]
ndi – Number of direct stress components
nshr – Number of shear stress components
start – Flag indicating first increment
solver_type – Solver type (0=implicit, 1=explicit)
tnew_dt – Suggested new time step [output]
-
void umat_ani_chaboche_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Elastic-plastic model with general anisotropic yield criterion and Chaboche kinematic hardening.
This function implements an advanced anisotropic plasticity model combining a general quadratic anisotropic yield criterion with Chaboche nonlinear kinematic hardening. This model provides maximum flexibility for capturing complex anisotropic cyclic plasticity behavior.
Key Features:
General quadratic anisotropic yield criterion (21 independent parameters)
Multiple Armstrong-Frederick backstresses for nonlinear kinematic hardening
Optional Voce-type isotropic hardening
Convex Cutting Plane algorithm for return mapping
Consistent tangent modulus for implicit FE analysis
General Anisotropic Yield Function:
The yield function is defined as:
\[\Phi(\boldsymbol{\sigma}, \mathbf{X}, p) = \sqrt{(\boldsymbol{\sigma} - \mathbf{X}) : \mathbf{H} : (\boldsymbol{\sigma} - \mathbf{X})} - R(p) - \sigma_Y \leq 0 \]where \( \mathbf{H} \) is a general fourth-order anisotropy tensor with up to 21 independent components for a fully anisotropic material.**Anisotropy Tensor \( \mathbf{H} \):**
In Voigt notation, the anisotropy tensor is represented as a 6×6 symmetric matrix:
\[\begin{split}\mathbf{H} = \begin{bmatrix} H_{11} & H_{12} & H_{13} & H_{14} & H_{15} & H_{16} \\ H_{12} & H_{22} & H_{23} & H_{24} & H_{25} & H_{26} \\ H_{13} & H_{23} & H_{33} & H_{34} & H_{35} & H_{36} \\ H_{14} & H_{24} & H_{34} & H_{44} & H_{45} & H_{46} \\ H_{15} & H_{25} & H_{35} & H_{45} & H_{55} & H_{56} \\ H_{16} & H_{26} & H_{36} & H_{46} & H_{56} & H_{66} \end{bmatrix} \end{split}\]Special Cases:
von Mises (isotropic): \( \mathbf{H} = \mathbf{I}_{dev} \) (deviatoric identity)
Hill orthotropic: \( H_{ij} = 0 \) for \( i \leq 3 < j \) or \( j \leq 3 < i \)
Transversely isotropic: 5 independent parameters
Armstrong-Frederick Backstress Evolution:
Each backstress component evolves according to:
\[\dot{\mathbf{X}}_i = \frac{2}{3} C_i \dot{\boldsymbol{\varepsilon}}^p - D_i \mathbf{X}_i \dot{p} \]Isotropic Hardening (Voce Law):
\[R(p) = \sum_{j=1}^{N_{iso}} Q_j (1 - e^{-b_j p}) \]Applications:
This model is suited for:
Single crystals with complex slip system interactions
Highly textured polycrystals requiring full anisotropy
Materials with non-orthotropic symmetry (monoclinic, triclinic)
Advanced composite materials with complex anisotropy
State Variables (statev):
Total: \( n_{statev} = 1 + 1 + 6 + 6 \times N_{kin} \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2:7]
\( \boldsymbol{\varepsilon}^p \)
Plastic strain tensor (Voigt)
Strain
statev[8+6i:13+6i]
\( \mathbf{X}_i \)
Backstress i (Voigt)
Stress
References:
Chaboche, J. L. (1986). “Time-independent constitutive theories for cyclic plasticity.” Int. J. Plasticity, 2(2), 149-188.
Barlat, F., et al. (2005). “Linear transformation-based anisotropic yield functions.” Int. J. Plasticity, 21(5), 1009-1039.
See also
umat_hill_chaboche_CCP() for orthotropic Hill + Chaboche
See also
umat_plasticity_chaboche_CCP() for isotropic von Mises + Chaboche
Note
The anisotropy tensor must be positive semi-definite for convexity
Note
For orthotropic materials, consider using Hill_chaboche_ccp instead
Note
Parameter identification requires extensive multiaxial testing
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector
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 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)
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_dfa_chaboche_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Elastic-plastic model with Distortional/Directional Forming Anisotropy (DFA) and Chaboche hardening.
This function implements an advanced plasticity model that captures the evolution of plastic anisotropy during deformation (distortional hardening). Unlike classical models where the yield surface only translates (kinematic) or expands (isotropic), the DFA model allows the yield surface shape to evolve with plastic straining.
Key Features:
Distortional hardening: yield surface shape evolves with deformation
Multiple Armstrong-Frederick backstresses for kinematic hardening
Optional Voce-type isotropic hardening
Captures cross-hardening and directional effects
Convex Cutting Plane algorithm for return mapping
Physical Motivation:
Classical hardening models (isotropic + kinematic) cannot capture:
Cross-hardening: Yield stress in one direction affected by prior loading in another
Permanent softening: Reduced yield in tension after prior compression (or vice versa)
Yield surface distortion: Changes in yield locus shape observed in metals after pre-straining
The DFA model addresses these limitations by allowing the anisotropy tensor \( \mathbf{H} \) to evolve with plastic deformation.
Yield Function with Evolving Anisotropy:
\[\Phi = \sqrt{(\boldsymbol{\sigma} - \mathbf{X}) : \mathbf{H}(p, \boldsymbol{\varepsilon}^p) : (\boldsymbol{\sigma} - \mathbf{X})} - R(p) - \sigma_Y \leq 0 \]where the anisotropy tensor \( \mathbf{H} \) evolves according to:
\[\dot{\mathbf{H}} = f(\mathbf{H}, \boldsymbol{\sigma}, \dot{\boldsymbol{\varepsilon}}^p, \dot{p}) \]Directional Hardening:
The model tracks directional hardening through internal variables that remember the loading history orientation. This allows capturing:
Latent hardening: Increased yield stress in inactive slip systems
Texture evolution effects: Macroscopic manifestation of microstructural changes
Anisotropic damage accumulation: Direction-dependent material degradation
Applications:
Sheet metal forming with complex strain paths
Materials exhibiting strong cross-hardening (aluminum alloys, TWIP steels)
Multi-pass forming operations with changing strain directions
Accurate springback prediction in automotive stamping
State Variables (statev):
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2:7]
\( \boldsymbol{\varepsilon}^p \)
Plastic strain tensor (Voigt)
Strain
statev[8+6i:13+6i]
\( \mathbf{X}_i \)
Backstress i (Voigt)
Stress
statev[…]
\( H_{ij} \)
Evolving anisotropy components
-
References:
Barlat, F., et al. (2011). “An alternative to kinematic hardening in classical plasticity.” Int. J. Plasticity, 27(9), 1309-1327.
Teodosiu, C., & Hu, Z. (1998). “Microstructure in the continuum modeling of plastic anisotropy.” Proc. 19th Riso Int. Symp., 149-168.
Holmedal, B. (2019). “Bauschinger effect modelled by yield surface distortions.” Int. J. Plasticity, 123, 86-100.
See also
umat_plasticity_chaboche_CCP() for standard Chaboche without distortional hardening
See also
umat_ani_chaboche_CCP() for fixed anisotropy Chaboche
Note
Requires careful parameter identification from cross-hardening tests
Note
Computationally more expensive than standard Chaboche due to evolving anisotropy
Note
Useful for complex forming simulations with strain path changes
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector
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 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)
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_generic_chaboche_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Generic elastic-plastic framework with flexible yield criterion and Chaboche kinematic hardening.
This function implements a generic plasticity framework that allows for flexible configuration of the yield criterion while using Chaboche-type hardening. It serves as a template for implementing various plasticity models with different yield functions.
Key Features:
Configurable yield criterion through function pointers or template parameters
Multiple Armstrong-Frederick backstresses for nonlinear kinematic hardening
Optional Voce-type isotropic hardening
Convex Cutting Plane algorithm for return mapping
Consistent tangent modulus for implicit FE analysis
Generic Yield Function:
The yield function takes the general form:
\[\Phi(\boldsymbol{\sigma}, \mathbf{X}, p, \boldsymbol{\alpha}) = f(\boldsymbol{\sigma} - \mathbf{X}) - R(p) - \sigma_Y \leq 0 \]where:\( f(\boldsymbol{\eta}) \) is a general equivalent stress function (configurable)
\( \boldsymbol{\alpha} \) represents additional internal variables
Supported Yield Criteria:
The generic framework can accommodate:
von Mises: \( f = \sqrt{\frac{3}{2} \mathbf{s}:\mathbf{s}} \)
Hill (1948): Quadratic orthotropic
Barlat Yld2000-2d: Advanced anisotropic for sheet metals
Drucker-Prager: Pressure-dependent for geomaterials
Hosford: Non-quadratic isotropic
Custom user-defined: Through function interface
Armstrong-Frederick Backstress Evolution:
Each backstress evolves according to:
\[\dot{\mathbf{X}}_i = \frac{2}{3} C_i \dot{\boldsymbol{\varepsilon}}^p - D_i \mathbf{X}_i \dot{p} \]Isotropic Hardening (Voce Law):
\[R(p) = \sum_{j=1}^{N_{iso}} Q_j (1 - e^{-b_j p}) \]Framework Architecture:
The generic model separates:
Yield criterion evaluation: \( f(\boldsymbol{\eta}) \) and \( \partial f / \partial \boldsymbol{\eta} \)
Hardening laws: Evolution of \( \mathbf{X}_i \) and \( R \)
Return mapping: CCP algorithm for stress update
Consistent tangent: Algorithmic modulus computation
This allows easy extension to new yield criteria while reusing the hardening and integration framework.
State Variables (statev):
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2:7]
\( \boldsymbol{\varepsilon}^p \)
Plastic strain tensor (Voigt)
Strain
statev[8+6i:13+6i]
\( \mathbf{X}_i \)
Backstress i (Voigt)
Stress
statev[…]
\( \boldsymbol{\alpha} \)
Additional criterion-specific variables
-
References:
Chaboche, J. L. (2008). “A review of some plasticity and viscoplasticity constitutive theories.” Int. J. Plasticity, 24(10), 1642-1693.
Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.
See also
umat_plasticity_chaboche_CCP() for standard von Mises Chaboche
See also
umat_hill_chaboche_CCP() for Hill anisotropic Chaboche
See also
umat_ani_chaboche_CCP() for general anisotropic Chaboche
Note
Use this as a base for implementing new yield criteria
Note
Requires implementation of yield function and its derivatives
Note
See specialized models (Hill, Ani) for specific applications
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (criterion-dependent)
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 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)
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_hill_chaboche_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Elastic-plastic model combining Hill anisotropic yield criterion with Chaboche kinematic hardening.
This function implements an advanced plasticity model combining the Hill (1948) anisotropic yield criterion with Chaboche nonlinear kinematic hardening. This allows modeling of anisotropic materials under cyclic loading conditions. The model features:
Hill (1948) quadratic anisotropic yield criterion
Multiple Armstrong-Frederick backstresses for nonlinear kinematic hardening
Optional Voce-type isotropic hardening
Convex Cutting Plane algorithm for return mapping
Consistent tangent modulus for implicit FE analysis
Constitutive Equations:
The anisotropic yield function with kinematic hardening is defined as:
\[\Phi(\boldsymbol{\sigma}, \mathbf{X}, p) = \sigma_{eq}^{Hill}(\boldsymbol{\sigma} - \mathbf{X}) - R(p) - \sigma_Y \leq 0 \]where the Hill equivalent stress of the shifted stress tensor is:\[\sigma_{eq}^{Hill}(\boldsymbol{\eta}) = \sqrt{\boldsymbol{\eta} : \mathbf{P}^{Hill} : \boldsymbol{\eta}} \]with \( \boldsymbol{\eta} = \boldsymbol{\sigma} - \mathbf{X} \) being the effective (shifted) stress.Hill Anisotropic Yield Surface:
The Hill projection tensor \( \mathbf{P}^{Hill} \) is defined by six parameters \( (F, G, H, L, M, N) \):
\[(\sigma_{eq}^{Hill})^2 = F(\eta_{22} - \eta_{33})^2 + G(\eta_{33} - \eta_{11})^2 + H(\eta_{11} - \eta_{22})^2 + 2L\eta_{23}^2 + 2M\eta_{13}^2 + 2N\eta_{12}^2 \]Armstrong-Frederick Backstress Evolution:
Each backstress component evolves with dynamic recovery:
\[\dot{\mathbf{X}}_i = \frac{2}{3} C_i \dot{\boldsymbol{\varepsilon}}^p - D_i \mathbf{X}_i \dot{p} \]where the total backstress is: \( \mathbf{X} = \sum_{i=1}^{N_{kin}} \mathbf{X}_i \)Flow Rule:
The plastic strain rate follows the associative flow rule:
\[\dot{\boldsymbol{\varepsilon}}^p = \dot{p} \frac{\partial \Phi}{\partial \boldsymbol{\sigma}} = \dot{p} \frac{\mathbf{P}^{Hill} : \boldsymbol{\eta}}{\sigma_{eq}^{Hill}(\boldsymbol{\eta})} \]Applications:
This model is suited for:
Rolled sheet metals under cyclic loading
Textured polycrystalline materials with Bauschinger effect
Drawn tubes and wires with anisotropic yield and kinematic hardening
Any orthotropic material exhibiting cyclic plasticity
Material Parameters (props):
Index
Symbol
Description
Units
props[0]
\( E \)
Young’s modulus
Stress
props[1]
\( \nu \)
Poisson’s ratio
-
props[2]
\( \alpha \)
Thermal expansion coefficient
1/Temperature
props[3]
\( \sigma_Y \)
Initial yield stress
Stress
props[4]
\( N_{iso} \)
Number of isotropic hardening terms
-
props[5]
\( N_{kin} \)
Number of kinematic hardening terms
-
props[6]
\( F \)
Hill parameter F
1/Stress²
props[7]
\( G \)
Hill parameter G
1/Stress²
props[8]
\( H \)
Hill parameter H
1/Stress²
props[9]
\( L \)
Hill parameter L
1/Stress²
props[10]
\( M \)
Hill parameter M
1/Stress²
props[11]
\( N \)
Hill parameter N
1/Stress²
props[12+2j]
\( Q_j \)
Isotropic saturation stress (j-th term)
Stress
props[13+2j]
\( b_j \)
Isotropic hardening rate (j-th term)
1/Strain
props[12+2N_{iso}+2i]
\( C_i \)
Kinematic modulus (i-th backstress)
Stress
props[13+2N_{iso}+2i]
\( D_i \)
Dynamic recovery (i-th backstress)
-
State Variables (statev):
Total: \( n_{statev} = 1 + 1 + 6 + 6 \times N_{kin} \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2:7]
\( \boldsymbol{\varepsilon}^p \)
Plastic strain tensor (Voigt)
Strain
statev[8+6i:13+6i]
\( \mathbf{X}_i \)
Backstress i (Voigt)
Stress
References:
Hill, R. (1948). “A theory of the yielding and plastic flow of anisotropic metals.” Proc. Roy. Soc. A, 193(1033), 281-297.
Chaboche, J. L. (1986). “Time-independent constitutive theories for cyclic plasticity.” Int. J. Plasticity, 2(2), 149-188.
Barlat, F., et al. (2005). “Linear transformation-based anisotropic yield functions.” Int. J. Plasticity, 21(5), 1009-1039.
See also
umat_plasticity_hill_isoh_CCP() for Hill with isotropic hardening only
See also
umat_plasticity_chaboche_CCP() for isotropic (von Mises) Chaboche model
Note
Material axes must align with global coordinates or use rotation tensors
Note
For isotropic yield with Chaboche hardening, use umat_plasticity_chaboche_CCP
Note
Captures both anisotropic yielding and Bauschinger effect
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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)
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_hill_isoh_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, 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)
Elastic-plastic constitutive model with Hill anisotropic yield criterion and isotropic hardening solved by the Convex Cutting Plane (CCP) algorithm.
This function implements the Hill anisotropic plasticity model for small and finite strain analysis of orthotropic materials. The model features:
Hill (1948) quadratic anisotropic yield criterion
Isotropic hardening with power law
Associative flow rule
Convex Cutting Plane algorithm for return mapping
Thermal expansion effects
Consistent tangent modulus for implicit FE analysis
Constitutive Equations:
The Hill anisotropic yield function is defined as:
\[\Phi(\boldsymbol{\sigma}, p) = \sigma_{eq}^{Hill} - H_p(p) - \sigma_Y \leq 0 \]where:\[\sigma_{eq}^{Hill} = \sqrt{F(\sigma_{22} - \sigma_{33})^2 + G(\sigma_{33} - \sigma_{11})^2 + H(\sigma_{11} - \sigma_{22})^2 + 2L\sigma_{23}^2 + 2M\sigma_{13}^2 + 2N\sigma_{12}^2} \]Hill Anisotropy Parameters:
The six Hill parameters \( (F, G, H, L, M, N) \) define the material’s plastic anisotropy. For orthotropic symmetry with principal axes aligned with material axes:
\( F, G, H \) control yielding in normal stress components
\( L, M, N \) control yielding in shear stress components
Relationship to Yield Stress Ratios:
The Hill parameters can be related to yield stresses in different directions:
\[F = \frac{1}{2}\left(\frac{1}{\sigma_{Y22}^2} + \frac{1}{\sigma_{Y33}^2} - \frac{1}{\sigma_{Y11}^2}\right) \]\[G = \frac{1}{2}\left(\frac{1}{\sigma_{Y33}^2} + \frac{1}{\sigma_{Y11}^2} - \frac{1}{\sigma_{Y22}^2}\right) \]\[H = \frac{1}{2}\left(\frac{1}{\sigma_{Y11}^2} + \frac{1}{\sigma_{Y22}^2} - \frac{1}{\sigma_{Y33}^2}\right) \]\[L = \frac{3}{2\sigma_{Y23}^2}, \quad M = \frac{3}{2\sigma_{Y13}^2}, \quad N = \frac{3}{2\sigma_{Y12}^2} \]where \( \sigma_{Yii} \) is the yield stress in uniaxial loading along direction \( i \), and \( \sigma_{Yij} \) is the yield stress in pure shear in the \( ij \) plane.Special Case - von Mises (Isotropic):
For isotropic materials, the Hill criterion reduces to von Mises when:
\[F = G = H = \frac{1}{2}, \quad L = M = N = \frac{3}{2} \]Isotropic Hardening (Power Law):
The isotropic hardening follows a power law:
\[H_p(p) = k \cdot p^m \]where:\( k \) is the hardening coefficient
\( m \) is the hardening exponent
\( p = \int_0^t \dot{p} \, dt \) 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{\partial \sigma_{eq}^{Hill}}{\partial \boldsymbol{\sigma}} = \frac{1}{\sigma_{eq}^{Hill}} \mathbf{P}^{Hill} : \boldsymbol{\sigma} \]is the flow direction normal to the Hill yield surface, and \( \mathbf{P}^{Hill} \) is the Hill projection tensor.Hill Projection Tensor (Voigt Notation):
\[\begin{split}\mathbf{P}^{Hill} = \begin{bmatrix} G+H & -H & -G & 0 & 0 & 0 \\ -H & H+F & -F & 0 & 0 & 0 \\ -G & -F & F+G & 0 & 0 & 0 \\ 0 & 0 & 0 & 2N & 0 & 0 \\ 0 & 0 & 0 & 0 & 2M & 0 \\ 0 & 0 & 0 & 0 & 0 & 2L \end{bmatrix} \end{split}\]Incremental Form (CCP Algorithm):
For an increment \( \Delta p \), the stress is 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) \]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 is:
\[\mathbf{L}_t = \mathbf{L} - \frac{(\mathbf{L}:\mathbf{n}) \otimes (\mathbf{n}:\mathbf{L})}{\mathbf{n}:\mathbf{L}:\mathbf{n} + H'} \]where \( H' = \frac{dH_p}{dp} = k \cdot m \cdot p^{m-1} \) is the hardening modulus.Material Parameters (props):
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]
\( k \)
Hardening coefficient
Stress
100-2000 MPa
props[5]
\( m \)
Hardening exponent
-
0.05-0.5
props[6]
\( F \)
Hill parameter F
1/Stress²
0-10
props[7]
\( G \)
Hill parameter G
1/Stress²
0-10
props[8]
\( H \)
Hill parameter H
1/Stress²
0-10
props[9]
\( L \)
Hill parameter L
1/Stress²
0-10
props[10]
\( M \)
Hill parameter M
1/Stress²
0-10
props[11]
\( N \)
Hill parameter N
1/Stress²
0-10
Constraint on Hill Parameters:
For physical consistency: \( F + G + H > 0 \)
For von Mises isotropy: \( F = G = H = 0.5, L = M = N = 1.5 \)
For plane stress: Ensure appropriate ratios for the stress state
State Variables (statev):
Total state variables required: \( n_{statev} = 8 \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial/reference temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2]
\( \varepsilon^p_{11} \)
Plastic strain component 11
Strain
statev[3]
\( \varepsilon^p_{22} \)
Plastic strain component 22
Strain
statev[4]
\( \varepsilon^p_{33} \)
Plastic strain component 33
Strain
statev[5]
\( \varepsilon^p_{12} \)
Plastic strain component 12 (engineering)
Strain
statev[6]
\( \varepsilon^p_{13} \)
Plastic strain component 13 (engineering)
Strain
statev[7]
\( \varepsilon^p_{23} \)
Plastic strain component 23 (engineering)
Strain
// Example usage: Aluminum rolled sheet (transverse isotropy in 1-2 plane) vec props(12); props(0) = 70000; // E = 70 GPa props(1) = 0.33; // nu = 0.33 props(2) = 2.3e-5; // alpha = 23e-6 /K props(3) = 200; // sigma_Y = 200 MPa props(4) = 400; // k = 400 MPa props(5) = 0.15; // m = 0.15 // Hill parameters for rolled sheet (stronger in rolling direction) // Assume: sigma_Y11 = 200 MPa (rolling), sigma_Y22 = 220 MPa (transverse), sigma_Y33 = 210 MPa // sigma_Y12 = sigma_Y13 = sigma_Y23 = 115.5 MPa (shear, sqrt(3)*sigma_Y/3) props(6) = 0.00115; // F props(7) = 0.00116; // G props(8) = 0.00126; // H props(9) = 0.0130; // L = 1.5 for isotropy props(10) = 0.0130; // M = 1.5 for isotropy props(11) = 0.0130; // N = 1.5 for isotropy vec statev = zeros(8); statev(0) = 20.0; // Reference temperature 20°C vec Etot = {0.003, 0.0, 0.0, 0.0, 0.0, 0.0}; // 0.3% uniaxial strain vec DEtot = {0.0001, 0.0, 0.0, 0.0, 0.0, 0.0}; vec sigma = zeros(6); mat Lt = zeros(6,6); mat DR = eye(3,3); umat_plasticity_hill_isoh_CCP(Etot, DEtot, sigma, Lt, DR, 12, props, 8, statev, 20.0, 0.0, 0.0, 1.0, Wm, Wm_r, Wm_ir, Wm_d, 3, 3, false, tnew_dt); // Expected: Different yield stress depending on loading directionSee also
L_iso() for isotropic elastic stiffness construction
See also
Ireal() for real identity tensor
See also
Fischer_Burmeister() for complementarity solver
See also
Eq_stress_Hill() for Hill equivalent Stress Functions computation
See also
denom_FB_Hill() for CCP denominator with Hill criterion
References:
Hill, R. (1948). “A theory of the yielding and plastic flow of anisotropic metals.” Proceedings of the Royal Society of London A, 193(1033), 281-297.
Hill, R. (1950). The Mathematical Theory of Plasticity. Oxford University Press.
Barlat, F., & Lian, J. (1989). “Plastic behavior and stretchability of sheet metals. Part I: A yield function for orthotropic sheets under plane stress conditions.” International Journal of Plasticity, 5(1), 51-66.
Banabic, D. (2010). Sheet Metal Forming Processes: Constitutive Modelling and Numerical Simulation. Springer.
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
The Hill criterion is widely used for metals with crystallographic texture
Note
Common applications: rolled sheets, drawn wires, forged components
Note
Parameter identification requires yield stress measurements in multiple directions
Note
For fiber composites, consider more advanced criteria (Tsai-Wu, Hoffman)
Note
The model assumes plastic incompressibility (plastic volume change = 0)
Note
Material axes must align with the global coordinate system or use rotation
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus \( \mathbf{L}_t \) (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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)
tnew_dt – Suggested new time step size for adaptive time stepping [output]
-
void umat_plasticity_hill_isoh_CCP_N(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, 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)
Elastic-plastic model with Hill anisotropic criterion and N isotropic hardening terms.
This function implements the Hill anisotropic plasticity model with multiple isotropic hardening terms for enhanced flexibility in capturing complex hardening behavior. The model features:
Hill (1948) quadratic anisotropic yield criterion
Multiple Voce-type isotropic hardening terms: \( R(p) = \sum_{i=1}^{N} Q_i (1 - e^{-b_i p}) \)
Associative flow rule
Convex Cutting Plane algorithm for return mapping
Consistent tangent modulus for implicit FE analysis
Constitutive Equations:
The Hill anisotropic yield function is defined as:
\[\Phi(\boldsymbol{\sigma}, p) = \sigma_{eq}^{Hill} - R(p) - \sigma_Y \leq 0 \]where:\[\sigma_{eq}^{Hill} = \sqrt{F(\sigma_{22} - \sigma_{33})^2 + G(\sigma_{33} - \sigma_{11})^2 + H(\sigma_{11} - \sigma_{22})^2 + 2L\sigma_{23}^2 + 2M\sigma_{13}^2 + 2N\sigma_{12}^2} \]Multiple Isotropic Hardening (Voce Law):
The isotropic hardening is the sum of N exponential terms:
\[R(p) = \sum_{i=1}^{N_{iso}} Q_i \left( 1 - e^{-b_i p} \right) \]where:\( Q_i \) is the saturation stress of the i-th hardening term
\( b_i \) is the hardening rate parameter of the i-th term
\( p \) is the accumulated plastic strain
Hardening Modulus:
The derivative of the isotropic hardening function:
\[H_{iso} = \frac{dR}{dp} = \sum_{i=1}^{N_{iso}} Q_i b_i e^{-b_i p} \]Advantages of Multiple Hardening Terms:
Better fit to experimental stress-strain curves
Captures both rapid initial hardening and gradual saturation
Different terms can represent different physical mechanisms:
Fast term (high b): dislocation pile-up, initial work hardening
Slow term (low b): long-range backstress development, texture evolution
Material Parameters (props):
Index
Symbol
Description
Units
props[0]
\( E \)
Young’s modulus
Stress
props[1]
\( \nu \)
Poisson’s ratio
-
props[2]
\( \alpha \)
Thermal expansion coefficient
1/Temperature
props[3]
\( \sigma_Y \)
Initial yield stress
Stress
props[4]
\( N_{iso} \)
Number of isotropic hardening terms
-
props[5]
\( F \)
Hill parameter F
1/Stress²
props[6]
\( G \)
Hill parameter G
1/Stress²
props[7]
\( H \)
Hill parameter H
1/Stress²
props[8]
\( L \)
Hill parameter L
1/Stress²
props[9]
\( M \)
Hill parameter M
1/Stress²
props[10]
\( N \)
Hill parameter N
1/Stress²
props[11+2j]
\( Q_j \)
Saturation stress of j-th term
Stress
props[12+2j]
\( b_j \)
Hardening rate of j-th term
1/Strain
State Variables (statev):
Total state variables required: \( n_{statev} = 8 \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2]
\( \varepsilon^p_{11} \)
Plastic strain component 11
Strain
statev[3]
\( \varepsilon^p_{22} \)
Plastic strain component 22
Strain
statev[4]
\( \varepsilon^p_{33} \)
Plastic strain component 33
Strain
statev[5]
\( \varepsilon^p_{12} \)
Plastic strain component 12
Strain
statev[6]
\( \varepsilon^p_{13} \)
Plastic strain component 13
Strain
statev[7]
\( \varepsilon^p_{23} \)
Plastic strain component 23
Strain
References:
Hill, R. (1948). “A theory of the yielding and plastic flow of anisotropic metals.” Proc. Roy. Soc. A, 193(1033), 281-297.
Voce, E. (1948). “The relationship between stress and strain for homogeneous deformation.” J. Inst. Met., 74, 537-562.
Barlat, F., et al. (2003). “Plane stress yield function for aluminum alloy sheets.” Int. J. Plasticity, 19(9), 1297-1319.
See also
umat_plasticity_hill_isoh_CCP() for single power-law hardening version
See also
umat_hill_chaboche_CCP() for combined kinematic and isotropic hardening
Note
Typically 2-3 hardening terms are sufficient for most metals
Note
For single power-law hardening, use umat_plasticity_hill_isoh_CCP instead
Note
The Hill parameters must satisfy physical constraints (positive definite)
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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)
tnew_dt – Suggested new time step size for adaptive time stepping [output]
-
void umat_plasticity_chaboche_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
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} = \sum_{i=1}^{N_{kin}} \mathbf{X}_i \) is the total backstress (sum of individual backstresses)
\( 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:
\[R(p) = \sum_{j=1}^{N_{iso}} Q_j \left( 1 - e^{-b_j p} \right) \]where:\( Q_j \) is the saturation value of the j-th isotropic hardening component
\( b_j \) 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}^{N_{kin}} \frac{C_i}{1 + D_i \Delta p} + \sum_{j=1}^{N_{iso}} Q_j b_j e^{-b_j p} \]is the total hardening modulus combining kinematic and isotropic contributions.Material Parameters (props):
For \( N_{iso} \) isotropic hardening terms and \( N_{kin} \) kinematic hardening terms:
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]
\( N_{iso} \)
Number of isotropic hardening terms
-
0-3
props[5]
\( N_{kin} \)
Number of kinematic hardening terms
-
1-3
props[6+2j]
\( Q_j \)
Saturation stress of j-th isotropic term
Stress
0-500 MPa
props[7+2j]
\( b_j \)
Hardening rate of j-th isotropic term
1/Strain
1-100
props[6+2N_{iso}+2i]
\( C_i \)
Kinematic modulus of i-th backstress
Stress
10-500 GPa
props[7+2N_{iso}+2i]
\( D_i \)
Dynamic recovery parameter of i-th backstress
-
0-100
Notes on Parameter Selection:
For pure kinematic hardening, set \( N_{iso} = 0 \)
For pure isotropic hardening, set \( N_{kin} = 0 \) (not typical for Chaboche)
First backstress (i=0) typically has high \( C_1 \), low \( D_1 \) (long-range backstress)
Second backstress (i=1) typically has moderate \( C_2 \), moderate \( D_2 \)
Third backstress (i=2) typically has low \( C_3 \), high \( D_3 \) (short-range backstress)
State Variables (statev):
Total state variables: \( n_{statev} = 1 + 1 + 6 + 6 \times N_{kin} \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial/reference temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2]
\( \varepsilon^p_{11} \)
Plastic strain component 11
Strain
statev[3]
\( \varepsilon^p_{22} \)
Plastic strain component 22
Strain
statev[4]
\( \varepsilon^p_{33} \)
Plastic strain component 33
Strain
statev[5]
\( \varepsilon^p_{12} \)
Plastic strain component 12 (engineering)
Strain
statev[6]
\( \varepsilon^p_{13} \)
Plastic strain component 13 (engineering)
Strain
statev[7]
\( \varepsilon^p_{23} \)
Plastic strain component 23 (engineering)
Strain
statev[8+6i]
\( X_{i,11} \)
Backstress i, component 11
Stress
statev[9+6i]
\( X_{i,22} \)
Backstress i, component 22
Stress
statev[10+6i]
\( X_{i,33} \)
Backstress i, component 33
Stress
statev[11+6i]
\( X_{i,12} \)
Backstress i, component 12
Stress
statev[12+6i]
\( X_{i,13} \)
Backstress i, component 13
Stress
statev[13+6i]
\( X_{i,23} \)
Backstress i, component 23
Stress
For \( N_{kin} = 2 \) backstresses: \( n_{statev} = 1 + 1 + 6 + 12 = 20 \)
// Example usage: 316 stainless steel with 2 backstresses, 1 isotropic hardening int N_iso = 1; int N_kin = 2; vec props(6 + 2*N_iso + 2*N_kin); 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 props(4) = N_iso; // 1 isotropic hardening term props(5) = N_kin; // 2 kinematic hardening terms // Isotropic hardening (Voce) props(6) = 100; // Q1 = 100 MPa (saturation stress) props(7) = 10; // b1 = 10 (hardening rate) // First backstress (long-range) props(8) = 300000; // C1 = 300 GPa props(9) = 1000; // D1 = 1000 (moderate recovery) // Second backstress (short-range) props(10) = 50000; // C2 = 50 GPa props(11) = 100; // D2 = 100 (strong recovery) vec statev = zeros(1 + 1 + 6 + 6*N_kin); // 20 state variables 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 sigma = 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, sigma, 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 backstressSee also
Ireal() for real identity tensor (Voigt 6×6)
See also
Idev() for deviatoric projection tensor
See also
Fischer_Burmeister() for complementarity solver
See also
eta_stress() for shifted Stress Functions 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
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×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus \( \mathbf{L}_t \) (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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 arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
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 (×2 in Voigt)
-
statev[6]
\( \varepsilon^p_{13} \)
Plastic strain component 13 (×2 in Voigt)
-
statev[7]
\( \varepsilon^p_{23} \)
Plastic strain component 23 (×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 sigma = zeros(6); mat Lt = zeros(6,6); mat L = zeros(6,6); vec sigma_in = zeros(6); mat DR = eye(3,3); vec props = {70000, 0.3, 1e-5, 200, 500, 0.2}; vec statev = zeros(8); umat_plasticity_iso_CCP(Etot, DEtot, sigma, Lt, L, sigma_in, DR, 6, props, 8, statev, 20.0, 0.0, 0.0, 1.0, Wm, Wm_r, Wm_ir, Wm_d, 3, 3, true, 0, 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
Voigt notation convention: [11, 22, 33, 12, 13, 23] with engineering shear strains (γ = 2ε)
Note
The consistent tangent modulus Lt ensures quadratic convergence in implicit Newton-Raphson schemes
Note
For explicit solvers (solver_type=1), use sigma_in instead of Lt
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus \( \mathbf{L}_t = \frac{\partial \boldsymbol{\sigma}}{\partial \boldsymbol{\varepsilon}} \) (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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)
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_kin_iso_CCP(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, arma::mat &L, arma::vec &sigma_in, const arma::mat &DR, const int &nprops, const arma::vec &props, const int &nstatev, arma::vec &statev, const double &T, const double &DT, const double &Time, const double &DTime, double &Wm, double &Wm_r, double &Wm_ir, double &Wm_d, const int &ndi, const int &nshr, const bool &start, const int &solver_type, double &tnew_dt)
Elastic-plastic constitutive model with combined isotropic and linear kinematic hardening.
This function implements an elastic-plastic material model combining both isotropic and linear kinematic hardening mechanisms. The model features:
J2 (von Mises) plasticity with associative flow rule
Power law isotropic hardening: \( R(p) = k \cdot p^m \)
Linear (Prager) kinematic hardening: \( \dot{\mathbf{X}} = \frac{2}{3} H_{kin} \dot{\boldsymbol{\varepsilon}}^p \)
Convex Cutting Plane algorithm for return mapping
Consistent tangent modulus for implicit FE analysis
Constitutive Equations:
The yield function is defined as:
\[\Phi(\boldsymbol{\sigma}, \mathbf{X}, p) = \sigma_{eq}(\boldsymbol{\sigma} - \mathbf{X}) - R(p) - \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
\( \mathbf{X} \) is the backstress (kinematic hardening variable)
\( R(p) = k \cdot p^m \) is the isotropic hardening function
\( \sigma_Y \) is the initial yield stress
Kinematic Hardening (Prager Linear):
The backstress evolves according to linear (Prager) kinematic hardening:
\[\dot{\mathbf{X}} = \frac{2}{3} H_{kin} \dot{\boldsymbol{\varepsilon}}^p = \frac{2}{3} H_{kin} \dot{p} \mathbf{n} \]where:\( H_{kin} \) is the kinematic hardening modulus
\( \mathbf{n} = \frac{3}{2} \frac{\boldsymbol{\eta}_{dev}}{\sigma_{eq}} \) is the flow direction
Combined Hardening Effect:
The combined hardening provides:
Isotropic hardening: Expands the yield surface uniformly (captures strain hardening)
Kinematic hardening: Translates the yield surface center (captures Bauschinger effect)
Plastic Flow Rule:
The plastic strain rate follows the associative flow rule:
\[\dot{\boldsymbol{\varepsilon}}^p = \dot{p} \frac{\partial \Phi}{\partial \boldsymbol{\sigma}} = \dot{p} \mathbf{n} \]Incremental Update:
For an increment \( \Delta p \):
\[\boldsymbol{\sigma}_{n+1} = \boldsymbol{\sigma}^{trial} - \Delta p \cdot \mathbf{L} : \mathbf{n} \]\[\mathbf{X}_{n+1} = \mathbf{X}_n + \frac{2}{3} H_{kin} \Delta p \cdot \mathbf{n} \]Consistent Tangent Modulus:
The algorithmic tangent accounts for both hardening mechanisms:
\[\mathbf{L}_t = \mathbf{L} - \frac{(\mathbf{L}:\mathbf{n}) \otimes (\mathbf{n}:\mathbf{L})}{\mathbf{n}:\mathbf{L}:\mathbf{n} + H_{iso} + H_{kin}} \]where \( H_{iso} = \frac{dR}{dp} = k \cdot m \cdot p^{m-1} \) is the isotropic hardening modulus.Material Parameters (props):
Index
Symbol
Description
Units
props[0]
\( E \)
Young’s modulus
Stress
props[1]
\( \nu \)
Poisson’s ratio
-
props[2]
\( \alpha \)
Thermal expansion coefficient
1/Temperature
props[3]
\( \sigma_Y \)
Initial yield stress
Stress
props[4]
\( k \)
Isotropic hardening coefficient
Stress
props[5]
\( m \)
Isotropic hardening exponent
-
props[6]
\( H_{kin} \)
Kinematic hardening modulus
Stress
State Variables (statev):
Total state variables required: \( n_{statev} = 14 \)
Index
Symbol
Description
Units
statev[0]
\( T_{init} \)
Initial temperature
Temperature
statev[1]
\( p \)
Accumulated plastic strain
Strain
statev[2]
\( \varepsilon^p_{11} \)
Plastic strain component 11
Strain
statev[3]
\( \varepsilon^p_{22} \)
Plastic strain component 22
Strain
statev[4]
\( \varepsilon^p_{33} \)
Plastic strain component 33
Strain
statev[5]
\( \varepsilon^p_{12} \)
Plastic strain component 12
Strain
statev[6]
\( \varepsilon^p_{13} \)
Plastic strain component 13
Strain
statev[7]
\( \varepsilon^p_{23} \)
Plastic strain component 23
Strain
statev[8]
\( X_{11} \)
Backstress component 11
Stress
statev[9]
\( X_{22} \)
Backstress component 22
Stress
statev[10]
\( X_{33} \)
Backstress component 33
Stress
statev[11]
\( X_{12} \)
Backstress component 12
Stress
statev[12]
\( X_{13} \)
Backstress component 13
Stress
statev[13]
\( X_{23} \)
Backstress component 23
Stress
References:
Prager, W. (1956). “A new method of analyzing stresses and strains in work-hardening plastic solids.” J. Appl. Mech., 23, 493-496.
Ziegler, H. (1959). “A modification of Prager’s hardening rule.” Q. Appl. Math., 17, 55-65.
Lemaitre, J., & Chaboche, J. L. (1990). Mechanics of Solid Materials. Cambridge University Press.
Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.
See also
umat_plasticity_iso_CCP() for pure isotropic hardening
See also
umat_plasticity_chaboche_CCP() for nonlinear kinematic hardening
Note
Linear kinematic hardening cannot capture cyclic softening/hardening saturation
Note
For saturating kinematic hardening, use the Chaboche model (Armstrong-Frederick)
Note
The Bauschinger effect is proportional to the kinematic hardening modulus
Note
Setting \( H_{kin} = 0 \) recovers pure isotropic hardening
Note
Setting \( k = 0 \) (or \( m = 0 \)) recovers pure kinematic hardening
- Parameters:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
sigma_in – Internal stress contribution for explicit solvers (6×1 vector) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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)
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_sma_mono(const arma::vec &Etot, const arma::vec &DEtot, 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)
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.
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
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 → M_n):
\[\Phi_n^{fwd} = F_n - F_c^{fwd} \leq 0, \quad \dot{f}_n \geq 0 \]Reverse Transformation (M_n → 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 → Orthorhombic: N = 6 variants
Cubic → Monoclinic (NiTi): N = 12 or 24 variants
Cubic → Tetragonal: N = 3 variants
State Variables (statev):
Total state variables required: \( n_{statev} = 1 + N + 6 \) (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]
\( \varepsilon^{tr}_{11} \)
Macroscopic transformation strain component 11
Strain
statev[N+2]
\( \varepsilon^{tr}_{22} \)
Macroscopic transformation strain component 22
Strain
statev[N+3]
\( \varepsilon^{tr}_{33} \)
Macroscopic transformation strain component 33
Strain
statev[N+4]
\( \varepsilon^{tr}_{12} \)
Macroscopic transformation strain component 12
Strain
statev[N+5]
\( \varepsilon^{tr}_{13} \)
Macroscopic transformation strain component 13
Strain
statev[N+6]
\( \varepsilon^{tr}_{23} \)
Macroscopic transformation strain component 23
Strain
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.
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:
Etot – Total strain tensor at beginning of increment (Voigt notation: 6×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Cauchy stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
L – Elastic stiffness tensor (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector
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_prony_Nfast(const arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, 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)
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 sigma = zeros(6); mat Lt = zeros(6,6); mat DR = eye(3,3); umat_prony_Nfast(Etot, DEtot, sigma, 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
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×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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 arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, 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)
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×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
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×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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 arma::vec &Etot, const arma::vec &DEtot, arma::vec &sigma, arma::mat &Lt, 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)
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 NConstitutive 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
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×1 vector)
DEtot – Strain increment tensor (Voigt notation: 6×1 vector)
sigma – Stress tensor (Voigt notation: 6×1 vector) [output]
Lt – Consistent tangent modulus (6×6 matrix) [output]
DR – Rotation increment matrix (3×3) for objective integration
nprops – Number of material properties
props – Material properties vector (see table above)
nstatev – Number of state variables
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&)