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.
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 largest principal strain. 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 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:

  • IsotropicDamage3D ( IsotropicDamage3D ) –

    A new material instance with vectorized properties.

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} \, n_k \, n_l \]

where \(\mathbf{n}\) is the direction of the damage-driving principal strain.

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:

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