pub struct CdmDamage {
pub d: f64,
pub eps0: f64,
pub eps_f: f64,
pub param: f64,
pub law: DamageEvolutionLaw,
pub kappa: f64,
}Expand description
General CDM model with selectable damage evolution law.
Tracks a scalar damage variable D that degrades effective stress and stiffness according to the principle of strain equivalence.
Fields§
§d: f64Current damage variable D ∈ [0, 1].
eps0: f64Damage initiation strain ε_0.
eps_f: f64Failure strain ε_f (used in linear and power-law).
param: f64Evolution rate parameter (exponential: a, power-law: n).
law: DamageEvolutionLawThe damage evolution law to use.
kappa: f64Maximum historical equivalent strain (for irreversibility).
Implementations§
Source§impl CdmDamage
impl CdmDamage
Sourcepub fn new(eps0: f64, eps_f: f64, param: f64, law: DamageEvolutionLaw) -> Self
pub fn new(eps0: f64, eps_f: f64, param: f64, law: DamageEvolutionLaw) -> Self
Create a new CDM damage model.
§Arguments
eps0- Damage initiation straineps_f- Failure strain (for Linear/PowerLaw)param- Rate parameter (exponential: a, power-law exponent: n)law- Which evolution law to use
Sourcepub fn update(&mut self, equivalent_strain: f64)
pub fn update(&mut self, equivalent_strain: f64)
Update damage based on current equivalent strain.
Damage only increases (irreversibility via internal variable κ).
Sourcepub fn effective_stiffness(&self, young_modulus: f64) -> f64
pub fn effective_stiffness(&self, young_modulus: f64) -> f64
Effective stiffness: E_eff = (1 - D) * E.
Sourcepub fn effective_stress(&self, nominal_stress: f64) -> f64
pub fn effective_stress(&self, nominal_stress: f64) -> f64
Effective stress: σ_eff = σ / (1 - D).
Sourcepub fn compute_localization_indicator(
&self,
young_modulus: f64,
poisson_ratio: f64,
) -> f64
pub fn compute_localization_indicator( &self, young_modulus: f64, poisson_ratio: f64, ) -> f64
Compute the strain localization indicator based on acoustic tensor analysis.
In continuum damage mechanics, strain localization (shear band initiation) occurs when the acoustic tensor Q(n) becomes singular. The indicator is:
L = D * E / ((1-D)² * (1 - 2ν) * (1 + ν) / (3*(1-ν)))
or more precisely the determinant-like measure derived from the damaged tangent modulus. Here we use a practical scalar indicator:
L = D / ((1-D)² + ε_reg)
scaled by the ratio of shear to bulk modulus terms for 3D isotropy.
§Arguments
young_modulus- Undamaged Young’s modulus E [Pa]poisson_ratio- Poisson’s ratio ν (0 ≤ ν < 0.5)
§Returns
Localization indicator L (dimensionless, positive; → ∞ near full damage)