[SMApp] Reimplementing the thick shell element of 4 nodes#14284
[SMApp] Reimplementing the thick shell element of 4 nodes#14284AlejandroCornejo wants to merge 74 commits intomasterfrom
Conversation
rickyaristio
left a comment
There was a problem hiding this comment.
Hi @AlejandroCornejo , sorry for the delay.
Overall, this is very nice. Nothing in particular from my side, I just have a few questions about the drilling part that you may answer.
| return 0.2 * (rConstitutiveMatrix(0, 0) - 2.0 * rConstitutiveMatrix(0, 1) + rConstitutiveMatrix(1, 1) + rConstitutiveMatrix(2, 2)); | ||
| } |
There was a problem hiding this comment.
Could you clarify the 0.2 factor here? Also, is this derived from a specific formulation?
There was a problem hiding this comment.
This is a relationship used in: https://www.sciencedirect.com/science/article/abs/pii/S0045782521000372 @RiccardoRossi
|
|
||
| // multiply the section tangent matrices and stress resultants by 'dA' | ||
| D *= dA; | ||
| double Ddrilling = CalculateEquivalentShearModulus(D) * (r_props.Has(STABILIZATION_FACTOR) ? r_props[STABILIZATION_FACTOR] : drilling_factor); // drilling stiffness |
There was a problem hiding this comment.
What is this STABILIZATION_FACTOR?
There was a problem hiding this comment.
That is a good question. In the original implementation it was 1 by default. Reading literature, it seems that this drilling energy can be tuned to better adapt your necessities. In elasticity, a value close to 1 gives good results, and 0.1 mainly the same ones.
However, in plasticity, the value=1 induces spurious oscillations and totally wrong results... With 0.1 I found a good compromise in both situations. In any case, I exposed this value to be tuned in the StructuralMaterials.json in case is needed.
| const auto& r_props = GetProperties(); | ||
| const auto& r_geom = GetGeometry(); | ||
| const Matrix& shapeFunctions = r_geom.ShapeFunctionsValues(); | ||
| const double thickness = r_props[THICKNESS]; |
There was a problem hiding this comment.
| const double thickness = r_props[THICKNESS]; |
| const auto& r_props = GetProperties(); | ||
| const auto& r_geom = GetGeometry(); | ||
| const Matrix& shapeFunctions = r_geom.ShapeFunctionsValues(); | ||
| const double thickness = r_props[THICKNESS]; |
There was a problem hiding this comment.
| const double thickness = r_props[THICKNESS]; |
| const auto& r_props = GetProperties(); | ||
| const auto& r_geom = GetGeometry(); | ||
| const Matrix& shapeFunctions = r_geom.ShapeFunctionsValues(); | ||
| const double thickness = r_props[THICKNESS]; |
There was a problem hiding this comment.
| const double thickness = r_props[THICKNESS]; |
📝 Description
This PR adds a new reimplementation of the old "ShellThickElement3D4N", now named:
MITCThickShellElement3D4NandMITCThickShellCorotationalElement3D4N.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
ReissnerMindlinShellElasticConstitutiveLawor theThicknessIntegratedIsotropicConstitutiveLawfor 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).
TO DO:
Note that I will not merge this PR until we reach a positive consensus.