Skip to content

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

\[ \pmb{\sigma}_{\text{trial}} = \pmb{\sigma}_n + \mathbb{C} : \Delta\pmb{\varepsilon} \]

and the yield condition is checked via the flow potential

\[ f = \|\pmb{\sigma}'_{\text{trial}}\| - \sqrt{\tfrac{2}{3}} \, \sigma_f(q) \]

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

\[ \pmb{\sigma}_{n+1} = \pmb{\sigma}_{\text{trial}} - 2 G \, \Delta\gamma \, \mathbf{n}, \quad q_{n+1} = q_n + \sqrt{\tfrac{2}{3}} \, \Delta\gamma. \]

The consistent (algorithmic) tangent is

\[ \mathbb{C}^{\text{alg}} = \mathbb{C} - \frac{2 G}{1 + \frac{\sigma_f'}{3 G}} \, \mathbf{n} \otimes \mathbf{n} - \frac{4 G^2 \Delta\gamma} {\|\pmb{\sigma}'_{\text{trial}}\|} \left( \mathbb{I}^{\text{dev}} - \mathbf{n} \otimes \mathbf{n} \right) \]

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 as H_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).