Skip to content

Isotropic Plasticity Plane Stress

Bases: IsotropicElasticityPlaneStress

Isotropic elastoplastic material for plane stress problems.

This class extends IsotropicElasticityPlaneStress to incorporate isotropic plasticity with a von Mises yield criterion under the plane stress constraint.

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)\).

  • sigma_f_prime (Callable) –

    Derivative \(\sigma_f'(q)\).

  • tolerance (float, default: 1e-05 ) –

    Convergence tolerance. Default is 1e-5.

  • max_iter (int, default: 10 ) –

    Maximum Newton iterations. Default is 10.

  • rho (Tensor | float, default: 1.0 ) –

    Mass density. Default is 1.0.

Notes
  • Small-strain assumption with plane stress condition.
  • One internal state variable (n_state = 1): equivalent plastic strain \(q\).
  • Implementation follows de Souza Neto et al. , Box 9.3-9.6.
References

de Souza Neto, E. A., Peri, D., Owen, D. R. J. Computational Methods for Plasticity, Chapter 9, https://doi.org/10.1002/9780470694626.ch9, 2008.

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:

step(H_inc, F, stress, state, de0, cl, iter)

Performs a strain increment with the plane stress return-mapping algorithm.

A trial stress is computed as \(\pmb{\sigma}_{\text{trial}} = \pmb{\sigma}_n + \mathbb{C} : \Delta\pmb{\varepsilon}\) and the squared flow potential in Voigt notation is evaluated as

\[ \Psi = \tfrac{1}{2} \pmb{\sigma}_{\text{trial}}^\top \mathbf{P} \, \pmb{\sigma}_{\text{trial}} - \tfrac{1}{3} \sigma_f(q)^2 \]

with

\[ \mathbf{P} = \frac{1}{3} \begin{bmatrix} 2 & -1 & 0 \\ -1 & 2 & 0 \\ 0 & 0 & 6 \end{bmatrix}. \]

If \(\Psi > 0\), the stress is updated via

\[ \pmb{\sigma}_{n+1} = [\mathbb{S} + \Delta\gamma \, \mathbf{P}]^{-1} \, \mathbb{S} \, \pmb{\sigma}_{\text{trial}} \]

and the algorithmic tangent is

\[ \mathbb{C}^{\text{alg}} = [\mathbb{S} + \Delta\gamma \, \mathbf{P}]^{-1} - \alpha \, \mathbf{n} \otimes \mathbf{n}. \]

Parameters:

  • H_inc (Tensor) –

    Incremental displacement gradient. Shape: (..., 2, 2), where ... represents batch dimensions.

  • F (Tensor) –

    Current deformation gradient. Shape: (..., 2, 2), same as H_inc.

  • stress (Tensor) –

    Current Cauchy stress tensor. Shape: (..., 2, 2).

  • state (Tensor) –

    Internal state variables, here: equivalent plastic strain. Shape: (..., 1).

  • de0 (Tensor) –

    External small strain increment (e.g., thermal). Shape: (..., 2, 2).

  • 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: (..., 2, 2).
    • state_new (Tensor): Updated internal state with updated plastic strain. Shape: same as state.
    • ddsdde (Tensor): Algorithmic tangent stiffness tensor. Shape: (..., 2, 2, 2, 2).