Skip to content

Isotropic Damage 3D

Bases: IsotropicElasticity3D

Isotropic damage material model in 3D.

This class extends IsotropicElasticity3D to incorporate isotropic damage with a scalar damage variable \(D \in [0, 1]\).

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.

  • d (Callable) –

    Damage evolution function \(D(\kappa, l_c)\).

  • d_prime (Callable) –

    Derivative of the damage evolution \(D'(\kappa, l_c)\).

  • eq_strain (Literal['rankine', 'mises']) –

    Type of equivalent strain measure used for damage driving.

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

    Mass density. Default is 1.0.

Notes
  • Small-strain assumption.
  • Two internal state variables (n_state = 2): \(\kappa\) (damage driving variable) and \(D\) (damage variable).
  • Supports batched/vectorized material parameters.
  • \(\kappa\) never decreases, so "rankine" damages in tension alone, while "mises" also damages in shear and compression.
Isotropic damage model

The stress is degraded by a scalar damage variable \(D\) as

\[ \pmb{\sigma} = (1 - D) \, \mathbb{C} : \pmb{\varepsilon} \]

where \(\mathbb{C}\) is the undamaged elastic stiffness tensor.

The damage is driven by an equivalent strain measure \(\tilde{\varepsilon}\). For eq_strain="rankine", this is the principal strain largest in magnitude. For eq_strain="mises", it is the von Mises strain of the deviatoric part \(\pmb{e} = \pmb{\varepsilon} - \frac{1}{3} \mathrm{tr}(\pmb{\varepsilon}) \pmb{I}\),

\[ \tilde{\varepsilon} = \frac{1}{1 + \nu} \sqrt{\frac{3}{2} \pmb{e} : \pmb{e}}, \]

scaled to coincide with the axial strain of a uniaxial tension. It is never negative and ignores the hydrostatic part, so it drives damage in shear, where "rankine" may report a compressive principal strain that leaves \(\kappa\) untouched. Only the three-dimensional model offers it, as the plane variants do not carry the full strain tensor.

The history variable \(\kappa\) tracks the maximum equivalent strain ever reached:

\[ \kappa_{n+1} = \max(\kappa_n,\, \tilde{\varepsilon}_{n+1}) \]

and the damage evolves irreversibly as \(D = d(\kappa, l_c)\), where the characteristic length \(l_c\) is used for fracture energy regularization.

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.

cauchy(P, F, state)

Cauchy stress from the first Piola stress P at the deformation gradient F, which a finite_strain material is reported in.

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

Performs a strain increment with the isotropic damage model.

The stress is computed as \(\pmb{\sigma} = (1 - D) \, \mathbb{C} : \pmb{\varepsilon}\) and the algorithmic tangent stiffness is

\[ C^{\text{alg}}_{ijkl} = (1 - D) C_{ijkl} - D'(\kappa, l_c) \, \sigma^{\text{trial}}_{ij} \, \frac{\partial \tilde{\varepsilon}} {\partial \varepsilon_{kl}} \]

where the gradient of the equivalent strain is \(n_k n_l\) over the direction \(\mathbf{n}\) of the damage-driving principal strain for "rankine", and \(\frac{3}{2} e_{kl} / ((1 + \nu) \sqrt{\frac{3}{2} \pmb{e} : \pmb{e}})\) for "mises".

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) –

    Newton iteration.

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