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
- The elastic predictor uses accepted plastic strain and checks fᵗʳ; the local radial return only runs when fᵗʳ>0.
- The material returns a trial state and algorithmic tangent. History is committed only after the global equilibrium increment converges.
- 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.
Useful foundations and prerequisites
02 Essential equations and symbols
Definitions and conventions
- Deviatoric Cauchy stress; hydrostatic pressure is removed.
- von Mises equivalent stress.
- Initial yield stress and linear isotropic hardening modulus.
- Accumulated equivalent plastic strain at the last committed step.
- Plastic multiplier / equivalent plastic strain increment for this flow normalization.
- Derivative of updated stress with respect to strain used by the equilibrium Newton iteration.
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.
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.
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.
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.
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.
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.
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.
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.
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) * deviator05 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.