Skip to content

Conversation

@ayush4874
Copy link

Issue:
As reported in Issue #2603, the 2D implementation of the Von Mises stress calculation in CFEAElasticity::VonMisesStress was mathematically incorrect.

The previous code implemented:
$$\sigma_{vm} = \sqrt{S_1^2 + S_2^2 - 2S_1S_2} = \sqrt{(S_1 - S_2)^2} = |S_1 - S_2|$$

This formula corresponds to the Tresca equivalent stress (twice the maximum shear stress), not the Von Mises stress.

Fix:
Updated the formula to the correct 2D Plane Stress Von Mises definition:
$$\sigma_{vm} = \sqrt{S_1^2 + S_2^2 - S_1S_2}$$

Verification:
Verified that the term -2*S1*S2 was the source of the discrepancy. The updated implementation now aligns with standard continuum mechanics definitions for plane stress.

Copy link
Member

@pcarruscag pcarruscag left a comment

Choose a reason for hiding this comment

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

Thanks. Can you look into the plain strain case too?

@pcarruscag pcarruscag changed the base branch from master to develop December 28, 2025 21:28
@ayush4874
Copy link
Author

@pcarruscag I have added support for Plane Strain as requested.

Implementation Details:

  1. Updated VonMisesStress (CFEAElasticity.hpp):

    • Modified the function signature to accept Nu (Poisson's Ratio) and isPlaneStrain.
    • Used default arguments (Nu=0.0, isPlaneStrain=false) to ensure backward compatibility with other classes (like CFEALinearElasticity) that do not need these inputs.
    • Math: For Plane Strain, we now calculate the out-of-plane stress $S_{zz}$ before the Von Mises calculation:
    /*--- In Plane Strain, Szz is not zero. It is determined by Poisson's ratio. ---*/
    su2double Szz = 0.0;
    if (isPlaneStrain) {
      Szz = Nu * (Sxx + Syy);
    }
    // ... followed by general 3D Von Mises formula using Szz
  2. Updated CFEASolver.cpp:

    • Now fetches the Poisson Ratio from the config (GetPoissonRatio(0)).
    • Checks the 2D formulation kind via GetElas2D_Formulation() to set the isPlaneStrain flag correctly.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants