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
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:
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
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 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) –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).
- stress_new (Tensor): Updated Cauchy stress tensor after plastic
update. Shape: