Isotropic Plasticity 3D¶
Bases: IsotropicElasticity3D
Isotropic elastoplastic material model in 3D.
This class extends IsotropicElasticity3D to incorporate isotropic
plasticity with a von Mises yield criterion and associative flow rule.
Parameters:
-
E(Tensor | float) –Young's modulus. Shape:
()for a scalar or(N,)for a batch of materials. -
nu(Tensor | float) –Poisson's ratio. Shape:
()for a scalar or(N,)for a batch of materials. -
sigma_f(Callable) –Yield stress function \(\sigma_f(q)\) of the equivalent plastic strain \(q\).
-
sigma_f_prime(Callable) –Derivative \(\sigma_f'(q)\).
-
tolerance(float, default:1e-05) –Convergence tolerance for the local Newton solver. Default is
1e-5. -
max_iter(int, default:10) –Maximum number of Newton iterations. Default is
10. -
rho(Tensor | float, default:1.0) –Mass density. Default is
1.0.
Notes
- Small-strain assumption.
- One internal state variable (
n_state = 1): equivalent plastic strain \(q\). - Supports batched/vectorized material parameters.
Von Mises plasticity
The elastic domain is bounded by the yield surface $$ f(\pmb{\sigma}, q) = |\pmb{\sigma}'| - \sqrt{\tfrac{2}{3}} \, \sigma_f(q) = 0 $$ with the deviatoric stress \(\pmb{\sigma}'\) and the yield stress \(\sigma_f(q)\), given as a function of the equivalent plastic strain \(q\). Linear hardening is \(\sigma_f(q) = \sigma_y + k q\) with the initial yield stress \(\sigma_y\) and the hardening modulus \(k\).
A state with \(f > 0\) is returned to the surface along the associative
flow direction \(\mathbf{n} = \pmb{\sigma}' /
\|\pmb{\sigma}'\|\), which is the radial return step(...)
carries out.
vectorize(n_elem)
¶
Returns the material batched over n_elem elements.
Parameters:
-
n_elem(int) –Number of elements to vectorize the material for.
Returns:
-
Material(T) –A material of the same type carrying one entry per element, or itself if it is vectorized already.
step(H_inc, F, stress, state, de0, cl, iter)
¶
Performs a strain increment with the radial return-mapping algorithm.
In each increment, a trial stress is computed as
and the yield condition is checked via the flow potential
where \(\pmb{\sigma}'\) denotes the deviatoric stress.
Elastic step (\(f \le 0\)): The trial stress is accepted.
Plastic step (\(f > 0\)): The plastic multiplier \(\Delta\gamma\)
that restores \(f = 0\) solves a nonlinear equation, found by a local
Newton iteration bounded by tolerance and max_iter, and reached in
one step for linear hardening. The flow direction is
\(\mathbf{n} = \pmb{\sigma}'_{\text{trial}}
/ \|\pmb{\sigma}'_{\text{trial}}\|\)
and the updates are
The consistent (algorithmic) tangent is
with \(\mathbb{I}^{\text{dev}}_{ijkl} = \frac{1}{2}( \delta_{ik}\delta_{jl} + \delta_{il}\delta_{jk}) - \frac{1}{3}\delta_{ij}\delta_{kl}\).
Parameters:
-
H_inc(Tensor) –Incremental displacement gradient. Shape:
(..., 3, 3), where...represents batch dimensions. -
F(Tensor) –Current deformation gradient. Shape:
(..., 3, 3), same asH_inc. -
stress(Tensor) –Current Cauchy stress tensor. Shape:
(..., 3, 3). -
state(Tensor) –Internal state variables, here: equivalent plastic strain. Shape:
(..., 1). -
de0(Tensor) –External small strain increment (e.g., thermal). Shape:
(..., 3, 3). -
cl(Tensor) –Characteristic lengths. Shape:
(..., 1). -
iter(int) –Current iteration number.
Returns:
-
stress_new(Tensor) –Updated Cauchy stress tensor after plastic update. Shape:
(..., 3, 3). -
state_new(Tensor) –Updated internal state with updated plastic strain. Shape: same as
state. -
ddsdde(Tensor) –Algorithmic tangent stiffness tensor. Shape:
(..., 3, 3, 3, 3).