J2 Plasticity
J2Plasticity implements small-strain von Mises (J2) plasticity with linear isotropic hardening (src/models/J2Plasticity.jl). The stress is integrated by radial return mapping, with a consistent algorithmic tangent [1, 2].
Mathematical formulation
The model is defined by the yield function $\Phi(\boldsymbol{\sigma}, k)$ as
\[\Phi(\boldsymbol{\sigma}, k) = \sigma_{\mathrm{eq}} - \left[\sigma_0 + H k\right] \le 0 \text{,}\]
where $\boldsymbol{\sigma}$ is the Cauchy stress, $\sigma_{\mathrm{eq}} = \sqrt{\frac{3}{2} \boldsymbol{s} : \boldsymbol{s}}$ the von Mises equivalent stress, $\boldsymbol{s} = \operatorname{dev}(\boldsymbol{\sigma})$ the deviatoric stress, $\sigma_0$ the initial yield stress, $H$ the linear isotropic hardening modulus, and $k$ the accumulated plastic strain.
The superscript $\mathrm{tr}$ denotes a trial value, and the subscript $n$ denotes the committed start-of-step state. Here, $\boldsymbol{D}^{\mathrm{e}}$ is the elastic stiffness tensor, $\boldsymbol{\epsilon}$ the total small-strain tensor, $\boldsymbol{\epsilon}^{\mathrm{p}}_n$ the start-of-step plastic strain, $G$ the shear modulus, and $\boldsymbol{D}$ the returned algorithmic tangent. Using this notation, the return mapping algorithm is evaluated as follows:
- Trial elastic state
\[\boldsymbol{\sigma}^{\mathrm{tr}} = \boldsymbol{D}^{\mathrm{e}} : \left[\boldsymbol{\epsilon} - \boldsymbol{\epsilon}^{\mathrm{p}}_n\right], \quad \Phi^{\mathrm{tr}} = \sigma^{\mathrm{tr}}_{\mathrm{eq}} - \left[\sigma_0 + H k_n\right]\]
with $\boldsymbol{s}^{\mathrm{tr}}=\operatorname{dev}(\boldsymbol{\sigma}^{\mathrm{tr}})$ and $\sigma^{\mathrm{tr}}_{\mathrm{eq}} = \sqrt{\frac{3}{2}\boldsymbol{s}^{\mathrm{tr}}:\boldsymbol{s}^{\mathrm{tr}}}$. - If $\Phi^{\mathrm{tr}} \le 0$ (elastic step)
\[\boldsymbol{\sigma} = \boldsymbol{\sigma}^{\mathrm{tr}}, \quad \boldsymbol{\epsilon}^{\mathrm{p}} = \boldsymbol{\epsilon}^{\mathrm{p}}_n, \quad k = k_n, \quad \boldsymbol{D} = \boldsymbol{D}^{\mathrm{e}}\]
- If $\Phi^{\mathrm{tr}} > 0$ (plastic step) The plastic multiplier increment $\mu$ is defined as
\[\mu = \frac{\Phi^{\mathrm{tr}}}{H + 3G} \text{;}\]
it scales the trial deviatoric stress by\[c_1 = 1 - \frac{3G\mu}{\sigma^{\mathrm{tr}}_{\mathrm{eq}}} \text{,} \qquad \boldsymbol{s} = c_1 \boldsymbol{s}^{\mathrm{tr}} \text{,} \qquad \boldsymbol{\sigma} = \boldsymbol{s} + \mathrm{vol}(\boldsymbol{\sigma}^{\mathrm{tr}}) \text{.}\]
Here, $c_1$ is the scalar return mapping scale factor and $\mathrm{vol}(\cdot)$ extracts the spherical stress part. The updated yield stress is $\sigma_{\mathrm{eq}} = \sigma_0 + H\left[k_n + \mu\right]$, and the state update follows\[\boldsymbol{\epsilon}^{\mathrm{p}} = \boldsymbol{\epsilon}^{\mathrm{p}}_n + \frac{3}{2}\frac{\mu}{\sigma_{\mathrm{eq}}}\boldsymbol{s} \text{,} \qquad k = k_n + \mu \text{.}\]
The plastic tangent returned bycompute_stress_tangentis\[\boldsymbol{D} = \boldsymbol{D}^{\mathrm{e}} - 2G\,b\,\boldsymbol{Q} - \frac{9G^2}{h\,\sigma_{\mathrm{eq}}^2}\boldsymbol{s}\otimes\boldsymbol{s} \text{,}\]
with\[h = H + 3G,\qquad b = \frac{3G\mu/\sigma_{\mathrm{eq}}}{1 + 3G\mu/\sigma_{\mathrm{eq}}}\]
and\[Q_{ijkl} = I^{\mathrm{dev}}_{\mathrm{sym},ijkl} - \frac{3}{2\sigma_{\mathrm{eq}}^2}s_{ij}s_{kl} \text{.}\]
Implementation details
J2PlasticityState holds the plastic strain ϵᵖ, Cauchy stress σ, and hardening variable k in a trial/commit pair. In the elastic regime, the analytical tangent returns Dᵉ; in the plastic regime, it returns the algorithmic tangent from the return mapping update. Hardening is further linear isotropic: σʸ = σ₀ + H k.
The generic 2D wrappers drive the model with the embedded 3D strain and reduce the σ and ∂σ/∂ε it returns.
Constructor
J2Plasticity(E, ν, σ₀, H)2D usage
material = PlaneStress(J2Plasticity(E, ν, σ₀, H)) # plane stress
material = PlaneStrain(J2Plasticity(E, ν, σ₀, H)) # plane strainFor wrapper mechanics, see Wrappers.
Model parameters
| Constructor argument | Symbol | Description |
|---|---|---|
E | $E$ | Young's modulus |
ν | $\nu$ | Poisson's ratio |
σ₀ | $\sigma_0$ | Initial yield stress |
H | $H$ | Linear isotropic hardening modulus |
Provenance
J2Plasticity, its constitutive driver implementation, and related documentation are adapted from the Ferrite.jl von Mises plasticity tutorial [3]. The upstream copyright/license notice is retained in the repository LICENSE. The Developer guide walks through the implementation as a worked example for new material authors.
References
[1] de Souza Neto, E. A., Perić, D., & Owen, D. R. J. (2008). Computational Methods for Plasticity: Theory and Applications. Wiley.
[2] Simo, J. C., & Hughes, T. J. R. (1998). Computational Inelasticity. Springer.
[3] Ferrite.jl documentation. Von Mises plasticity tutorial. https://ferrite-fem.github.io/Ferrite.jl/stable/tutorials/plasticity/