Skip to content

[SMApp] Reimplementing the thick shell element of 4 nodes#14284

Open
AlejandroCornejo wants to merge 114 commits intomasterfrom
CLApp/adding-new-4N-shell
Open

[SMApp] Reimplementing the thick shell element of 4 nodes#14284
AlejandroCornejo wants to merge 114 commits intomasterfrom
CLApp/adding-new-4N-shell

Conversation

@AlejandroCornejo
Copy link
Copy Markdown
Member

@AlejandroCornejo AlejandroCornejo commented Mar 12, 2026

📝 Description

This PR adds a new reimplementation of the old "ShellThickElement3D4N", now named:

  • MITCThickShellElement3D4N and MITCThickShellCorotationalElement3D4N.

These new shells substitute the older ones -> @rickyaristio @rolandwuechner @RiccardoRossi @matekelemen so it WILL break the old cases. These new shells are fully compatible with all the constitutive laws present in the ConstitutiveLawsApp.

In order to update the cases:

For elasticity you may use the ReissnerMindlinShellElasticConstitutiveLaw or the ThicknessIntegratedIsotropicConstitutiveLaw for nonlinear ones (e.g. damage, plasticity).

I have updated a few tests but I am working on it right now. Since a few changes/improvements have been done to the old shell, we may expect noticeable differences of the results. IMO all changes have been done to improve its performance, especially in the nonlinear cases with plasticity (the result was horrible before).

Beside the developments described above:

I have added a new composite stacking shell constitutive law for modelling laminate composites together with the new thick shells.

These can be used by:

{
"properties" : [{
	"model_part_name" : "Structure.shell",
	"properties_id"   : 1,
	"Material"        : {
		"constitutive_law" : {
			"name" : "ThicknessIntegratedCompositeConstitutiveLaw",
			"z_layer_coordinate_vector" : [-0.045, 0.0, 0.045], // z of thecentroid w.r.t bending axis
			"Euler_angle_layer_vector"  : [0.0, 0.0, 0.0], // rotation along the local Z axis (positive counter clock)
			"thickness_layer_vector"    : [0.01, 0.08, 0.01] //  thickness of each layer
		},
		"Variables"        : {
			"THICKNESS"     : 0.1, // good for verification
			"DENSITY"       : 7850.0 // TODO we can compute this internally
		}
	},
	"sub_properties" : [ // subprop start
	{
		"properties_id"   : 11,
			"Material"        : {
				"constitutive_law" : {
					"name" : "GenericAnisotropicPlaneStress2DLaw"
				},
				"Variables"        : {
					"ORTHOTROPIC_ELASTIC_CONSTANTS" : [3.4156e9, 1.7931e9, 3.4156e9, 0.44, 0.0, 0.0],
					"SHEAR_MODULUS_XY" : 1.0e9,
					"SHEAR_MODULUS_YZ" : 1.015e9,
					"SHEAR_MODULUS_XZ" : 0.608e9,
					"EULER_ANGLES"     : [0.0,0.0,0.0],
					"ISOTROPIC_ANISOTROPIC_YIELD_RATIO"  : [1,1,1,1,1,1]
				},
				"Tables"           : {}
			},
			"sub_properties" : [{
				"properties_id"   : 111,
				"Material"        : {
					"constitutive_law" : {
						"name" : "LinearElasticPlaneStress2DLaw"
					},
					"Variables"        : {
						"DENSITY"         : 2400.0,
						"YOUNG_MODULUS"   : 1e6,
						"POISSON_RATIO"   : 0.3
					}
				}
			}]
	} //
	,
	{
		"properties_id"   : 12,
			"Material"        : {
				"constitutive_law" : {
					"name" : "GenericAnisotropicPlaneStress2DLaw"
				},
				"Variables"        : {
					"ORTHOTROPIC_ELASTIC_CONSTANTS" : [3.4156e8, 1.7931e8, 3.4156e8, 0.44, 0.0, 0.0],
					"SHEAR_MODULUS_XY" : 1.0e8,
					"SHEAR_MODULUS_YZ" : 1.015e8,
					"SHEAR_MODULUS_XZ" : 0.608e8,
					"EULER_ANGLES"     : [0.0,0.0,0.0],
					"ISOTROPIC_ANISOTROPIC_YIELD_RATIO"  : [1,1,1,1,1,1]
				}
			},
			"sub_properties" : [{
				"properties_id"   : 121,
				"Material"        : {
					"constitutive_law" : {
						"name" : "LinearElasticPlaneStress2DLaw"
					},
					"Variables"        : {
						"DENSITY"         : 2400.0,
						"YOUNG_MODULUS"   : 1e6,
						"POISSON_RATIO"   : 0.0
					}
				}
			}]
	} //
	,
	{
		"properties_id"   : 13,
			"Material"        : {
				"constitutive_law" : {
					"name" : "GenericAnisotropicPlaneStress2DLaw"
				},
				"Variables"        : {
					"ORTHOTROPIC_ELASTIC_CONSTANTS" : [3.4156e9, 1.7931e9, 3.4156e9, 0.44, 0.0, 0.0],
					"SHEAR_MODULUS_XY" : 1.0e9,
					"SHEAR_MODULUS_YZ" : 1.015e9,
					"SHEAR_MODULUS_XZ" : 0.608e9,
					"EULER_ANGLES"     : [0.0,0.0,0.0],
					"ISOTROPIC_ANISOTROPIC_YIELD_RATIO"  : [1,1,1,1,1,1]
				}
			},
			"sub_properties" : [{
				"properties_id"   : 131,
				"Material"        : {
					"constitutive_law" : {
						"name" : "LinearElasticPlaneStress2DLaw"
					},
					"Variables"        : {
						"DENSITY"         : 2400.0,
						"YOUNG_MODULUS"   : 1e6,
						"POISSON_RATIO"   : 0.3
					}
				}
			}]
	} //
	] // end subprops
}]
}
~~

@AlejandroCornejo
Copy link
Copy Markdown
Member Author

@RiccardoRossi @rickyaristio @singerTUM I have finished the implementation and validation of the 4 noded MITC thick shell and the laminate composite CL for shells. An old test of the shell has been updated and another one has been added to test the composite thickness integration CL.

@AlejandroCornejo
Copy link
Copy Markdown
Member Author

I think that now is ready @RiccardoRossi @philbucher @rolandwuechner @rickyaristio

I solved/updated the old tests.

@rickyaristio
Copy link
Copy Markdown
Contributor

It’s very nice. Thanks @AlejandroCornejo.

Before going into the details, I want to verify one thing. The deviation we see from the test results (e.g., here) comes from the different drilling factor compared to the existing shell-thick element. Or are there any more differences from the existing one? I think this is worth noting.

@AlejandroCornejo
Copy link
Copy Markdown
Member Author

It’s very nice. Thanks @AlejandroCornejo.

Before going into the details, I want to verify one thing. The deviation we see from the test results (e.g., here) comes from the different drilling factor compared to the existing shell-thick element. Or are there any more differences from the existing one? I think this is worth noting.

Hi Ricky, that si right, the underlying formulation is the same, I just did a deep clean and make ir compatible with the current structure of the constitutive laws. Besides, I had to dampen a bit the drilling contribution to make it more accurate and stable in nonlinear cases.

Comment on lines -591 to -592
KRATOS_REGISTER_ELEMENT("ShellThickElement3D4N", mShellThickElement3D4N)
KRATOS_REGISTER_ELEMENT("ShellThickElementCorotational3D4N", mShellThickCorotationalElement3D4N)
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.

consider that this will break every existing case with a strange error

I suggest to either:

  • keep a dummy-impl with this name, that issues a proper error
  • leave the old shells for some time (with deprecation warning)
  • register the new shells with the same name

Comment on lines -357 to -358
class ShellQ4ThickOrthotropicLaminateLinearStaticTests(StructuralMechanicsTestFactory):
file_name = "shell_test/Shell_Q4_Thick_orthotropic_laminate_linear_static_test"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why was this example removed?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I created a brand new test verifying the composite case against an analytical solution

@AlejandroCornejo
Copy link
Copy Markdown
Member Author

Now I have registered the old names with the current implementation of the element. Besides, it throws a proper error message that will help the user to identify the problem and how to solve it in a simple and direct way

@RiccardoRossi

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.

6 participants