White box / Physical formulations / Material and section laws

Small-strain J2 plasticity

Physical formulation · assumptions, essential equations, full derivation, algorithm, code and verification references.

Browse another sheet Physical formulations / Material and section laws
Physical formulationsMaterial and section lawsSheet 3 / 6
Physical formulationQUALIFIED_BOUNDED · use exact registry rows

Associative von Mises plasticity with isotropic hardening and local radial return for declared cases.

01 Model and scope

At each integration point, the total infinitesimal strain is split into elastic and plastic parts. An elastic predictor tests the deviatoric stress against a von Mises yield surface. If yielding occurs, an associative radial return restores consistency and advances the accumulated equivalent plastic strain.

Route assumptions and calculation checks

  1. The elastic predictor uses accepted plastic strain and checks fᵗʳ; the local radial return only runs when fᵗʳ>0.
  2. The material returns a trial state and algorithmic tangent. History is committed only after the global equilibrium increment converges.
  3. Material-point verification is marked experimental and is separate from structural convergence. Use exact registry rows; this does not imply finite-strain plasticity, contact coupling, or nonlinear dynamics.

02 Essential equations and symbols

str=dev⁡(σtr),qtr=32str:str\mathbf s^{tr}=\operatorname{dev}(\boldsymbol{\sigma}^{tr}),\quad q^{tr}=\sqrt{\frac32\mathbf s^{tr}:\mathbf s^{tr}}ftr=qtr−(σy0+Hαn)f^{tr}=q^{tr}-(\sigma_{y0}+H\alpha_n)ftr>0:Δγ=ftr3μ+H,αn+1=αn+Δγf^{tr}>0:\quad\Delta\gamma=\frac{f^{tr}}{3\mu+H},\quad\alpha_{n+1}=\alpha_n+\Delta\gammasn+1=(1−3μΔγqtr)str,qn+1=σy0+Hαn+1\mathbf s_{n+1}=\left(1-\frac{3\mu\Delta\gamma}{q^{tr}}\right)\mathbf s^{tr},\quad q_{n+1}=\sigma_{y0}+H\alpha_{n+1}

Definitions and conventions

s=dev(σ)s = dev(\sigma{})
Deviatoric Cauchy stress; hydrostatic pressure is removed.
q=(3/2s:s)q = \sqrt{}(3/2 s:s)
von Mises equivalent stress.
σy0,H\sigma{}y0, H
Initial yield stress and linear isotropic hardening modulus.
αn\alpha{}_{n}
Accumulated equivalent plastic strain at the last committed step.
Δγ=Δα\Delta{}\gamma{} = \Delta{}\alpha{}
Plastic multiplier / equivalent plastic strain increment for this flow normalization.
CalgC_alg
Derivative of updated stress with respect to strain used by the equilibrium Newton iteration.
trialreturneds₁s₂deviatoric plane · q = σᵧ(α) on the surfaceYield check → plastic correction → tangentInside yield surface: elastic trial is acceptedOutside: scale deviator back to f = 0Use the algorithmic tangent in global Newton
Elastic predictor and radial return in deviatoric stress spaceHydrostatic stress is unchanged by the local return. Only after the global load increment converges may its trial plastic history become the committed state.
7 detailed steps

03 Step by step derivation

Follow the assumptions, equations and discrete operations in order. The full explanation stays visible.

The displayed update is for rate-independent, small-strain J2 plasticity with linear isotropic hardening. It keeps hydrostatic stress unchanged during the plastic correction, scales the deviator radially, and returns a route-specific algorithmic tangent to the global Newton solve.

1 · Separate elastic strain and plastic history

Plastic deformation is stored as a tensor at each material point, together with accumulated equivalent plastic strain and other state outputs. The current strain increment is measured from the accepted history. The solver must evaluate temporary trial states without overwriting the last converged state.

ε=εe+εp\boldsymbol{\varepsilon}=\boldsymbol{\varepsilon}^{e}+\boldsymbol{\varepsilon}^{p}σ=C:(ε−εp)\boldsymbol{\sigma}=\mathbb C:\left(\boldsymbol{\varepsilon}-\boldsymbol{\varepsilon}^{p}\right)αn+1≥αn,εn+1p is stored as a symmetric tensor\alpha_{n+1}\ge\alpha_n,\qquad \boldsymbol{\varepsilon}^{p}_{n+1}\text{ is stored as a symmetric tensor}

The notation α is used in the derivation; QF Solver stores it as equivalent_plastic_strain. It is not a plastic-strain tensor component.

2 · Compute an elastic predictor from the accepted state

Assume the entire strain increment were elastic. This gives the trial stress σᵗʳ. Its hydrostatic part is the mean normal stress; its deviator sᵗʳ contains the shear and distortional content that drives J2 yielding.

σn+1tr=C:(εn+1−εnp)\boldsymbol{\sigma}^{tr}_{n+1}=\mathbb C:\left(\boldsymbol{\varepsilon}_{n+1}-\boldsymbol{\varepsilon}^{p}_n\right)ptr=13tr⁡(σtr),str=σtr−ptrIp^{tr}=\frac13\operatorname{tr}(\boldsymbol{\sigma}^{tr}),\qquad \mathbf s^{tr}=\boldsymbol{\sigma}^{tr}-p^{tr}\mathbf Iqtr=32str:str,ftr=qtr−(σy0+Hαn)q^{tr}=\sqrt{\frac32\mathbf s^{tr}:\mathbf s^{tr}},\qquad f^{tr}=q^{tr}-\left(\sigma_{y0}+H\alpha_n\right)

A hydrostatic trial stress has sᵗʳ=0 and qᵗʳ=0, so it cannot trigger this J2 yield function regardless of its mean pressure.

3 · Branch on the yield condition

If fᵗʳ≤0, the predictor is admissible: retain σᵗʳ, set the plastic increment to zero, and leave α and εᵖ unchanged. If fᵗʳ>0, project back to the current yield surface. This conditional is local to a Gauss point; the structure may still fail global equilibrium convergence.

ftr≤0  ⟹  Δγ=0,σn+1=σn+1trf^{tr}\le0\;\Longrightarrow\;\Delta\gamma=0,\quad \boldsymbol{\sigma}_{n+1}=\boldsymbol{\sigma}^{tr}_{n+1}ftr>0  ⟹  Δγ>0,fn+1=0f^{tr}>0\;\Longrightarrow\;\Delta\gamma>0,\quad f_{n+1}=0f(σ,α)=q−(σy0+Hα)f(\boldsymbol{\sigma},\alpha)=q-(\sigma_{y0}+H\alpha)

The yield surface is pressure-insensitive: its size depends on α, not on hydrostatic stress. This differs from pressure-sensitive soil, concrete, or crushable-foam models.

4 · Solve the radial-return scalar equation

Associative flow points in the normal direction to the von Mises surface. For linear isotropic hardening, consistency reduces the local tensor update to one scalar division. The denominator contains elastic deviatoric stiffness 3μ plus hardening H; the result is non-negative on the plastic branch.

ntr=32strqtr,Δεp=Δγ ntr\mathbf n^{tr}=\frac32\frac{\mathbf s^{tr}}{q^{tr}},\qquad \Delta\boldsymbol{\varepsilon}^{p}=\Delta\gamma\,\mathbf n^{tr}Δγ=ftr3μ+H,αn+1=αn+Δγ\Delta\gamma=\frac{f^{tr}}{3\mu+H},\qquad \alpha_{n+1}=\alpha_n+\Delta\gammasn+1=(1−3μΔγqtr)str\mathbf s_{n+1}=\left(1-\frac{3\mu\Delta\gamma}{q^{tr}}\right)\mathbf s^{tr}σn+1=ptrI+sn+1,qn+1=σy0+Hαn+1\boldsymbol{\sigma}_{n+1}=p^{tr}\mathbf I+\mathbf s_{n+1},\qquad q_{n+1}=\sigma_{y0}+H\alpha_{n+1}

The plastic increment has zero trace, so volumetric elastic strain and hydrostatic stress do not change in this local return. The scalar equation assumes a constant elastic shear modulus and linear isotropic hardening.

5 · Check a numerical material-point update

For illustration only, take μ=80.77 GPa, H=1.00 GPa, σy0+Hαₙ=250 MPa, and qᵗʳ=310 MPa. The return increment is approximately 2.466×10⁻⁴. The returned equivalent stress is approximately 250.247 MPa, matching the increased yield stress after hardening.

Δγ=310−2503(80 770)+1 000=2.466×10−4\Delta\gamma=\frac{310-250}{3(80\,770)+1\,000}=2.466\times10^{-4}qn+1=qtr−3μΔγ≈250.247  MPaq_{n+1}=q^{tr}-3\mu\Delta\gamma\approx250.247\;\text{MPa}σy0+Hαn+1=250+1 000(2.466×10−4)≈250.247  MPa\sigma_{y0}+H\alpha_{n+1}=250+1\,000(2.466\times10^{-4})\approx250.247\;\text{MPa}

This arithmetic illustrates the local return formula; qᵗʳ is a chosen equivalent trial stress, not a measured QF Solver benchmark result.

6 · Return the algorithmic tangent to global Newton

The updated stress changes direction and magnitude when the nodal displacement changes. Newton therefore needs C_alg=∂σₙ₊₁/∂εₙ₊₁, not the purely elastic D. The code differentiates the radial scaling with respect to trial equivalent stress and assembles the resulting tensor response in the declared engineering-Voigt order.

ρ=qn+1qtr,sn+1=ρstr\rho=\frac{q_{n+1}}{q^{tr}},\qquad \mathbf s_{n+1}=\rho\mathbf s^{tr}dσn+1=dptrI+ρ dstr+dρdqtr dqtr str\mathrm d\boldsymbol{\sigma}_{n+1}=\mathrm d p^{tr}\mathbf I+\rho\,\mathrm d\mathbf s^{tr}+\frac{\mathrm d\rho}{\mathrm d q^{tr}}\,\mathrm d q^{tr}\,\mathbf s^{tr}dqtr=32qtrstr:dstr,Calg=∂σn+1∂εn+1\mathrm d q^{tr}=\frac{3}{2q^{tr}}\mathbf s^{tr}:\mathrm d\mathbf s^{tr},\qquad \mathbb C_{alg}=\frac{\partial\boldsymbol{\sigma}_{n+1}}{\partial\boldsymbol{\varepsilon}_{n+1}}KT=∫ΩeBTCalgB dΩ\mathbf K_T=\int_{\Omega_e}\mathbf B^T\mathbb C_{alg}\mathbf B\,\mathrm d\Omega

The element and global solver still determine convergence. The local tangent check does not prove that every load step, mesh, or element/material combination converges.

7 · Read the verification and qualification boundary

The v0.2.11 source includes a material-point campaign checking elastic/plastic tangents, hardening, perfect plasticity, non-proportional paths, hydrostatic loading, and an analytic uniaxial path. Its record labels this campaign experimental and explicitly separates material-point evidence from structural convergence. The 140-element demonstration bar returns WARNING by design.

material-point tangent check: max⁡  relative error=2.01×10−11(recorded cases)\text{material-point tangent check: }\max\;\text{relative error}=2.01\times10^{-11}\quad(\text{recorded cases})uniaxial path: 81 stress levels, maximum total-strain error<10−10\text{uniaxial path: }81\text{ stress levels, maximum total-strain error}<10^{-10}scope: small strain + von Mises + isotropic hardening\text{scope: small strain + von Mises + isotropic hardening}

Use the exact registry row for the requested element/analysis combination. Do not infer kinematic hardening, finite-strain plasticity, damage, contact coupling, dynamics, or a general structural qualification from this local material verification.

04 Algorithm and implementation

Source excerpt · v0.2.11

This excerpt is the local elastic predictor and linear-hardening radial return. The full file also forms the algorithmic tangent and trial material-state record.

Code
trial = self.elasticity_matrix @ (strain - old_plastic)
mean = float(np.trace(tensor) / 3.0)
deviator = tensor - mean * np.eye(3)
q_trial = _von_mises_from_deviator(deviator)
current_yield = self.yield_stress + self.hardening_modulus * old_equivalent
yield_value = q_trial - current_yield
if yield_value <= 0.0:
    return trial, self.elasticity_matrix, elastic_trial_state
delta_gamma = yield_value / (3.0 * self.shear_modulus + self.hardening_modulus)
equivalent = old_equivalent + delta_gamma
q_updated = self.yield_stress + self.hardening_modulus * equivalent
updated_deviator = (q_updated / q_trial) * deviator
Read the complete versioned implementation →

05 Verification and limitations

QUALIFIED_BOUNDED · use exact registry rows

The multi-element bar has 140 elements and deliberately returns WARNING under its engineering profile.

Each reference supports its own model, observable and analysis route. Read the original contract and limitations before transferring a conclusion.

06 Sources and related sheets

Continue the reasoning

Back to sheet contents ↑