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.
vectorize(n_elem)
¶
Returns a vectorized copy of the material for n_elem elements.
This function creates a batched version of the material properties. If the
material is already vectorized (self.is_vectorized == True), the function
simply returns self without modification.
Parameters:
-
n_elem(int) –Number of elements to vectorize the material for.
Returns:
-
IsotropicPlasticity3D(IsotropicPlasticity3D) –A new material instance with vectorized properties.
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 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:
-
tuple(tuple[Tensor, Tensor, Tensor]) –- 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).
- stress_new (Tensor): Updated Cauchy stress tensor after plastic
update. Shape: