Skip to content

[ConstitutiveLawsApplication] Double Exponential Hardening Curve for Isotropic Damage Constitutive Law#14280

Open
aslan1372-droid wants to merge 9 commits intomasterfrom
DoubleExponentialHardCurveIsoDamCL
Open

[ConstitutiveLawsApplication] Double Exponential Hardening Curve for Isotropic Damage Constitutive Law#14280
aslan1372-droid wants to merge 9 commits intomasterfrom
DoubleExponentialHardCurveIsoDamCL

Conversation

@aslan1372-droid
Copy link
Copy Markdown

📝 Description

This PR introduces a new Double Exponential Hardening Damage model within the damage framework of the ConstitutiveLawsApplication.

The implementation extends the existing damage integration scheme by adding a new softening type that allows representing damage evolution using a double exponential formulation.

The following modifications were implemented:

  • Added a new softening type DoubleExponentialHardeningDamage to the SofteningType enumeration.
  • Implemented the damage evaluation function CalculateDoubleExponentialHardeningDamage in the damage integrator.
  • Integrated the new model into GenericConstitutiveLawIntegratorDamage.
  • Added and registered new variables required for the formulation:
    • MAXIMUM_STRESS
    • SATISFY_MAXIMUM_STRESS
  • Registered the variables in:
    • application variable definitions
    • Kratos variable registry
    • Python interface

The new formulation enables improved representation of nonlinear softening responses and allows better calibration of damage evolution for materials exhibiting complex fracture behavior.

@aslan1372-droid aslan1372-droid self-assigned this Mar 11, 2026
@aslan1372-droid aslan1372-droid requested a review from a team as a code owner March 11, 2026 16:48
@aslan1372-droid aslan1372-droid added FastPR This Pr is simple and / or has been already tested and the revision should be fast StructuralMechanicsApplication labels Mar 11, 2026
const double max_stress = r_mat_props[MAXIMUM_STRESS];
const double Gf = r_mat_props[FRACTURE_ENERGY];
const double E = r_mat_props[YOUNG_MODULUS];
const bool Max_Stress_Satisfied =r_mat_props[SATISFY_MAXIMUM_STRESS];
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can check if this variable is present in the properties and assign a default if it is not, more convenient. Something like:

const bool satisfy_max_stress = r_mat_props.Has(SATISFY_MAXIMUM_STRESS) ? r_mat_props[SATISFY_MAXIMUM_STRESS] : true;


const double A = ((3.0*X+1.0)*initial_threshold*(UniaxialStress-initial_threshold))/((X+1.0)*(0.5*initial_threshold*initial_threshold-E*Gf));

rDamage = 1-initial_threshold/(UniaxialStress*(X+1.0)) * (2.0*X*std::exp(A/2.0)+(1.0-X)*std::exp(A));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please make sure of format the code so you add all spaces between operations, it improves readability. besides better use 1.0.


double X = 0.0;
if (Max_Stress_Satisfied) {
X = -std::sqrt(max_stress/(max_stress - initial_threshold));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we must check in advance that the denominator is not 0 to avoid nan

@loumalouomega loumalouomega changed the title Double Exponential Hardening Curve for Isotropic Damage Constitutive Law [ConstitutiveLawsApplication] Double Exponential Hardening Curve for Isotropic Damage Constitutive Law Mar 11, 2026
@loumalouomega
Copy link
Copy Markdown
Member


Double exponential hardening!

const double max_stress = r_mat_props[MAXIMUM_STRESS];
const double Gf = r_mat_props[FRACTURE_ENERGY];
const double E = r_mat_props[YOUNG_MODULUS];
const bool Max_Stress_Satisfied =r_mat_props[SATISFY_MAXIMUM_STRESS];
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const bool Max_Stress_Satisfied =r_mat_props[SATISFY_MAXIMUM_STRESS];
const bool max_stress_satisfied =r_mat_props[SATISFY_MAXIMUM_STRESS];

To follow the style

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FastPR This Pr is simple and / or has been already tested and the revision should be fast StructuralMechanicsApplication

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants