Skip to content

Conversation

@AlejandroCornejo
Copy link
Member

@AlejandroCornejo AlejandroCornejo commented Oct 27, 2025

📝 Description
In this PR I am adding:

  1. An improved triangular shell element to the StructuralMechanicsApp. The shell is compatible with linear and finite displacements (corotational). This shell employs the ANDES formulation for membrane and CS-DSG for shear+bending formulation.
  2. A set of shell constitutive laws: plain elasticity and thickness integrated for isotropic plane stress CLs.

The shell has been tested in several examples, improving the behaviour of the current 3 noded thick shell in all cases.

TO-DO's:

  • add some tests
  • add printing of variables via CalculateOnIntegrationPoints
  • add dynamics
  • add a new shell CL for composite material modelling

This PR needs the Predict issue (#13350) to be merged since I have merged that branch.

FYI @RiccardoRossi @rickyaristio

@loumalouomega
Copy link
Member

@AlejandroCornejo take a look at conflicts, many files not involved look like modified

@loumalouomega
Copy link
Member

Ah, okay yiou are merging the Predict. This makes difficult the review.

// \____/\___/|_| |_|___/\__|_|\__|\__,_|\__|_| \_/ \___\____/\__,_| \_/\_/ |___/\_/ \_/ .__/| .__/
// |_| |_|
//
// License: BSD License
Copy link
Member

Choose a reason for hiding this comment

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

TABS!

Comment on lines +543 to +546




Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
///@}

@loumalouomega
Copy link
Member

Just one question, do you have a reference or this is your own work?

@RiccardoRossi
Copy link
Member

@rickyaristio can you take a look at this PR? eventually this shell should replace the existing triangular thick shell..

Copy link
Contributor

@rickyaristio rickyaristio left a comment

Choose a reason for hiding this comment

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

I went through most of the CSDSG and ANDES formulation, and everything seems correct. Overall, everything looks good. I only left a few minor comments.

TTu(8, 2) = A4;
TTu *= (1.0 / A4);

const double beta0 = 0.5 * (1.0 - 4.0 * std::pow(GetMaterialProperty<double>(POISSON_RATIO, GetProperties()), 2));
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this is the only difference when comparing the pure membrane case with the other thin shells. Before beta0 is assumed equal to 1. Nice addition!

const double alpha = 0.1;
const double thickness = r_material_properties[THICKNESS];
const double t_square = thickness * thickness;
const double stenberg_stabilization = (5.0 / 6.0) * t_square / (t_square + alpha * h_max * h_max);
Copy link
Contributor

Choose a reason for hiding this comment

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

This is the one which comes from the shell (here). With this stabilization, the shells perform better in case of thin problems.

/***********************************************************************************/

template <bool IS_COROTATIONAL>
void CSDSG3ThickShellElement3D3N<IS_COROTATIONAL>::CalculateLocalSystem(
Copy link
Contributor

Choose a reason for hiding this comment

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

Just out of curiosity, why don't you use CalculateAll() and calculation flags, e.g., calculate_stiffness_matrix_flag and calculate_residual_vector_flag for the CalculateLocalSystem(), CalculateLeftHandSide(), and CalculateRightHandSide(), to reduce repetition and keep everything in one place?

}
}

// Generate locations (from top to bottom: +t/2 -> -t/2)
Copy link
Contributor

Choose a reason for hiding this comment

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

I may have missed it, but how about SHELL_OFFSET? I think the old Section class defines this one.

Copy link
Member Author

Choose a reason for hiding this comment

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

TO-DO! thank you

@rickyaristio
Copy link
Contributor

Just one question, do you have a reference or this is your own work?

This shell combines some parts already implemented from other existing shells in Kratos, as far as I know (correct me if I am wrong, @AlejandroCornejo).

@AlejandroCornejo
Copy link
Member Author

Just one question, do you have a reference or this is your own work?

Hi Vicente, thank you for taking your time to read the PR. I had to merge the predict thing in my branch to properly test if the corotational implementation is OK. Hence we'll wait until the predict is merged to add this PR.

Besides, I have added the 3 main references to implement the 3 noded shell element, regarding the membrane (Felippa), shear+bending (Bletzinger, Rama) and corotational (Haugen and Felippa).

There is nothing "new" regarding the formulation, just a nice combination of different strain-displacement matrices from 2 papers.

@loumalouomega
Copy link
Member

Just one question, do you have a reference or this is your own work?

Hi Vicente, thank you for taking your time to read the PR. I had to merge the predict thing in my branch to properly test if the corotational implementation is OK. Hence we'll wait until the predict is merged to add this PR.

Besides, I have added the 3 main references to implement the 3 noded shell element, regarding the membrane (Felippa), shear+bending (Bletzinger, Rama) and corotational (Haugen and Felippa).

There is nothing "new" regarding the formulation, just a nice combination of different strain-displacement matrices from 2 papers.

Okay, I think I am not blocking so I will let other to review and if everything OK I will approve (well until predict is not merged this should not be merged)

@AlejandroCornejo
Copy link
Member Author

Just one question, do you have a reference or this is your own work?

This shell combines some parts already implemented from other existing shells in Kratos, as far as I know (correct me if I am wrong, @AlejandroCornejo).

* membrane+drilling part:  https://doi.org/10.1016/S0045-7825(03)00253-6, https://doi.org/10.1002/nme.3109

* shear part: https://doi.org/10.1016/S0045-7949(99)00140-6,  https://doi.org/10.1002/nme.4506

That is right, @rickyaristio. Additionally, this new shell (and the subsequent 4 noded one) will be fully compatible with al the constitutive power available in the ConstitutiveLawsApplication via subproperties. This is a "game changer" in many situations (e.g. composite layered with rule of mixtures and not orthotropic elasticity).

@AlejandroCornejo
Copy link
Member Author

AlejandroCornejo commented Nov 14, 2025

@rickyaristio I'd like to know your opinion about where to place the k=5/6 reduction factor multiplication. Currently I have implemented this operation in the Constitutive Law. @RiccardoRossi thinks that since this factor is a result of the FE formulation (I agree), this operation must be placed in the element and the CL to be agnostic from this.

However, it seems that if we use a layered composite shell this k should be recomputed somehow (if you have any hint, it would be highly appreciated). But this goes against the idea of "the element should know" because it does depend on the constitutive law to be used!

What do you guys think?

BTW, the Stenberg factor I'll definitely move it to the element since it does not depend on the CL to be used (AFAIK).

@AlejandroCornejo
Copy link
Member Author

@rickyaristio I'd like to know your opinion about where to place the k=5/6 reduction factor multiplication. Currently I have implemented this operation in the Constitutive Law. @RiccardoRossi thinks that since this factor is a result of the FE formulation (I agree), this operation must be placed in the element and the CL to be agnostic from this.

However, it seems that if we use a layered composite shell this k should be recomputed somehow (if you have any hint, it would be highly appreciated). But this goes against the idea of "the element should know" because it does depend on the constitutive law to be used!

What do you guys think?

BTW, the Stenberg factor I'll definitely move it to the element since it does not depend on the CL to be used (AFAIK).

For now we have agreed to maintain the addition of k in the constituive law.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants