1 #if !defined(KRATOS_SHELL_3P_ELEMENT_H_INCLUDED )
2 #define KRATOS_SHELL_3P_ELEMENT_H_INCLUDED
129 GeometryType::Pointer pGeometry)
136 GeometryType::Pointer pGeometry,
137 PropertiesType::Pointer pProperties)
138 :
Element(NewId, pGeometry, pProperties)
156 GeometryType::Pointer pGeom,
157 PropertiesType::Pointer pProperties
160 return Kratos::make_intrusive<Shell3pElement>(
161 NewId, pGeom, pProperties);
168 PropertiesType::Pointer pProperties
171 return Kratos::make_intrusive< Shell3pElement >(
190 const SizeType mat_size = number_of_nodes * 3;
192 if (rRightHandSideVector.size() != mat_size)
193 rRightHandSideVector.
resize(mat_size);
198 CalculateAll(left_hand_side_matrix, rRightHandSideVector,
199 rCurrentProcessInfo,
false,
true);
213 const SizeType mat_size = number_of_nodes * 3;
217 if (rLeftHandSideMatrix.size1() != mat_size)
218 rLeftHandSideMatrix.
resize(mat_size, mat_size);
221 CalculateAll(rLeftHandSideMatrix, right_hand_side_vector,
222 rCurrentProcessInfo,
true,
false);
239 const SizeType mat_size = number_of_nodes * 3;
241 if (rRightHandSideVector.size() != mat_size)
242 rRightHandSideVector.
resize(mat_size);
245 if (rLeftHandSideMatrix.size1() != mat_size)
246 rLeftHandSideMatrix.
resize(mat_size, mat_size);
249 CalculateAll(rLeftHandSideMatrix, rRightHandSideVector,
250 rCurrentProcessInfo,
true,
true);
303 int Step)
const override;
307 int Step)
const override;
311 int Step)
const override;
321 std::vector<double>& rOutput,
355 std::string
Info()
const override
357 std::stringstream buffer;
358 buffer <<
"Kirchhoff-Love Shell3pElement #" <<
Id();
365 rOStream <<
"Kirchhoff-Love Shell3pElement #" <<
Id();
381 std::vector<array_1d<double, 3>> m_A_ab_covariant_vector;
383 std::vector<array_1d<double, 3>> m_B_ab_covariant_vector;
391 std::vector<Matrix> m_T_vector;
394 std::vector<ConstitutiveLaw::Pointer> mConstitutiveLawVector;
405 const bool CalculateStiffnessMatrixFlag,
406 const bool CalculateResidualVectorFlag
410 void InitializeMaterial();
412 void CalculateKinematics(
414 KinematicVariables& rKinematicVariables)
const;
417 void CalculateTransformation(
418 const KinematicVariables& rKinematicVariables,
422 void CalculateTransformationFromCovariantToCartesian(
423 const KinematicVariables& rKinematicVariables,
424 Matrix& rTCovToCar)
const;
426 void CalculateBMembrane(
429 const KinematicVariables& rActualKinematic)
const;
431 void CalculateBCurvature(
434 const KinematicVariables& rActualKinematic)
const;
436 void CalculateSecondVariationStrainCurvature(
438 SecondVariations& rSecondVariationsStrain,
439 SecondVariations& rSecondVariationsCurvature,
440 const KinematicVariables& rActualKinematic)
const;
449 void CalculateConstitutiveVariables(
451 KinematicVariables& rActualMetric,
452 ConstitutiveVariables& rThisConstitutiveVariablesMembrane,
453 ConstitutiveVariables& rThisConstitutiveVariablesCurvature,
458 inline void CalculateAndAddKm(
462 const double IntegrationWeight)
const;
464 inline void CalculateAndAddNonlinearKm(
465 Matrix& rLeftHandSideMatrix,
466 const SecondVariations& rSecondVariationsStrain,
468 const double IntegrationWeight)
const;
471 void CalculatePK2Stress(
478 void CalculateCauchyStress(
485 void CalculateShearForce(
490 void CalculateDerivativeOfCurvatureInitial(
494 const Matrix& rHessian)
const;
496 void CalculateDerivativeOfCurvatureActual(
501 const KinematicVariables& rKinematicVariables)
const;
503 void CalculateDerivativeTransformationMatrices(
505 std::vector<Matrix>& rDQ_Dalpha_init,
506 std::vector<Matrix>& rDTransCartToCov_Dalpha_init,
507 const Matrix& rHessian)
const;
516 template<
class TType>
517 void GetValueOnConstitutiveLaw(
519 std::vector<TType>& rOutput
524 for (IndexType point_number = 0; point_number < integration_points.size(); ++point_number) {
525 mConstitutiveLawVector[point_number]->GetValue(rVariable, rOutput[point_number]);
533 void CalculateHessian(
535 const Matrix& rDDN_DDe)
const;
537 void CalculateSecondDerivativesOfBaseVectors(
539 array_1d<double, 3>& rDDa1_DD11,
540 array_1d<double, 3>& rDDa1_DD12,
541 array_1d<double, 3>& rDDa2_DD21,
542 array_1d<double, 3>& rDDa2_DD22)
const;
550 void save(
Serializer& rSerializer)
const override
553 rSerializer.
save(
"A_ab_covariant_vector", m_A_ab_covariant_vector);
554 rSerializer.
save(
"B_ab_covariant_vector", m_B_ab_covariant_vector);
555 rSerializer.
save(
"dA_vector", m_dA_vector);
556 rSerializer.
save(
"T_vector", m_T_vector);
557 rSerializer.
save(
"constitutive_law_vector", mConstitutiveLawVector);
563 rSerializer.
load(
"A_ab_covariant_vector", m_A_ab_covariant_vector);
564 rSerializer.
load(
"B_ab_covariant_vector", m_B_ab_covariant_vector);
565 rSerializer.
load(
"dA_vector", m_dA_vector);
566 rSerializer.
load(
"T_vector", m_T_vector);
567 rSerializer.
load(
"constitutive_law_vector", mConstitutiveLawVector);
StressMeasure
Definition: constitutive_law.h:69
Base class for all Elements.
Definition: element.h:60
std::size_t SizeType
Definition: element.h:94
virtual IntegrationMethod GetIntegrationMethod() const
Definition: element.h:285
std::vector< DofType::Pointer > DofsVectorType
Definition: element.h:100
Matrix MatrixType
Definition: element.h:90
std::vector< std::size_t > EquationIdVectorType
Definition: element.h:98
std::size_t IndexType
Definition: flags.h:74
GeometryType::Pointer pGetGeometry()
Returns the pointer to the geometry.
Definition: geometrical_object.h:140
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
Geometry base class.
Definition: geometry.h:71
SizeType size() const
Definition: geometry.h:518
std::vector< IntegrationPointType > IntegrationPointsArrayType
Definition: geometry.h:161
const IntegrationPointsArrayType & IntegrationPoints() const
Definition: geometry.h:2284
IndexType Id() const
Definition: indexed_object.h:107
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
void load(std::string const &rTag, TDataType &rObject)
Definition: serializer.h:207
void save(std::string const &rTag, std::array< TDataType, TDataSize > const &rObject)
Definition: serializer.h:545
Definition: shell_3p_element.h:26
void Initialize(const ProcessInfo &rCurrentProcessInfo) override
Definition: shell_3p_element.cpp:28
Shell3pElement()
Default constructor necessary for serialization.
Definition: shell_3p_element.h:142
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: shell_3p_element.h:363
Shell3pElement(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties)
Constructor using an array of nodes with properties.
Definition: shell_3p_element.h:134
void FinalizeSolutionStep(const ProcessInfo &rCurrentProcessInfo) override
Definition: shell_3p_element.cpp:90
std::size_t IndexType
Definition: shell_3p_element.h:117
void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
This is called during the assembling process in order to calculate the condition right hand side matr...
Definition: shell_3p_element.h:185
void GetDofList(DofsVectorType &rElementalDofList, const ProcessInfo &rCurrentProcessInfo) const override
Sets on rConditionDofList the degrees of freedom of the considered element geometry.
Definition: shell_3p_element.cpp:1535
void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const override
Sets on rResult the ID's of the element degrees of freedom.
Definition: shell_3p_element.cpp:1511
void GetFirstDerivativesVector(Vector &rValues, int Step) const override
Definition: shell_3p_element.cpp:1471
std::size_t SizeType
Size types.
Definition: shell_3p_element.h:116
Shell3pElement(IndexType NewId, GeometryType::Pointer pGeometry)
Constructor using an array of nodes.
Definition: shell_3p_element.h:127
void GetValuesVector(Vector &rValues, int Step) const override
Definition: shell_3p_element.cpp:1450
void CalculateDampingMatrix(MatrixType &rDampingMatrix, const ProcessInfo &rCurrentProcessInfo) override
This is called during the assembling process in order to calculate the elemental damping matrix.
Definition: shell_3p_element.cpp:415
Element::Pointer Create(IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override
Create with Id, pointer to geometry and pointer to property.
Definition: shell_3p_element.h:154
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(Shell3pElement)
Counted pointer of Shell3pElement.
virtual ~Shell3pElement()=default
Destructor.
void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
This function provides a more general interface to the element.
Definition: shell_3p_element.h:233
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: shell_3p_element.h:369
void GetSecondDerivativesVector(Vector &rValues, int Step) const override
Definition: shell_3p_element.cpp:1491
void CalculateLeftHandSide(MatrixType &rLeftHandSideMatrix, const ProcessInfo &rCurrentProcessInfo) override
This is called during the assembling process in order to calculate the condition left hand side matri...
Definition: shell_3p_element.h:208
Geometry< Node > GeometryType
Definition: shell_3p_element.h:120
void CalculateOnIntegrationPoints(const Variable< double > &rVariable, std::vector< double > &rOutput, const ProcessInfo &rCurrentProcessInfo) override
Calculate a double Variable on the Element Constitutive Law.
Definition: shell_3p_element.cpp:105
std::string Info() const override
Turn back information as a string.
Definition: shell_3p_element.h:355
int Check(const ProcessInfo &rCurrentProcessInfo) const override
Definition: shell_3p_element.cpp:1560
void CalculateMassMatrix(MatrixType &rMassMatrix, const ProcessInfo &rCurrentProcessInfo) override
This is called during the assembling process in order to calculate the elemental mass matrix.
Definition: shell_3p_element.cpp:466
Element::Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const override
Create with Id, pointer to geometry and pointer to property.
Definition: shell_3p_element.h:165
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
std::size_t IndexType
The definition of the index type.
Definition: key_hash.h:35
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
KratosZeroMatrix< double > ZeroMatrix
Definition: amatrix_interface.h:559
Internals::Matrix< double, AMatrix::dynamic, AMatrix::dynamic > Matrix
Definition: amatrix_interface.h:470
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
def load(f)
Definition: ode_solve.py:307
B
Definition: sensitivityMatrix.py:76
Definition: constitutive_law.h:189
Definition: shell_3p_element.h:71
ConstitutiveVariables(SizeType StrainSize)
Definition: shell_3p_element.h:79
Vector StressVector
Definition: shell_3p_element.h:73
Matrix ConstitutiveMatrix
Definition: shell_3p_element.h:74
Vector StrainVector
Definition: shell_3p_element.h:72
Internal variables used for metric transformation.
Definition: shell_3p_element.h:31
KinematicVariables(SizeType Dimension)
Definition: shell_3p_element.h:52
array_1d< double, 3 > a3_tilde
Definition: shell_3p_element.h:43
double dA
Definition: shell_3p_element.h:46
array_1d< double, 3 > a_ab_covariant
Definition: shell_3p_element.h:33
array_1d< double, 3 > a1
Definition: shell_3p_element.h:37
array_1d< double, 3 > a3
Definition: shell_3p_element.h:41
array_1d< double, 3 > a2
Definition: shell_3p_element.h:39
array_1d< double, 3 > b_ab_covariant
Definition: shell_3p_element.h:34
Definition: shell_3p_element.h:91
SecondVariations(const int &mat_size)
Definition: shell_3p_element.h:100
Matrix B12
Definition: shell_3p_element.h:94
Matrix B22
Definition: shell_3p_element.h:93
Matrix B11
Definition: shell_3p_element.h:92