1 #if !defined(KRATOS_IGA_MEMBRANE_ELEMENT_H_INCLUDED )
2 #define KRATOS_IGA_MEMBRANE_ELEMENT_H_INCLUDED
81 ConstitutiveMatrix =
ZeroMatrix(StrainSize, StrainSize);
133 GeometryType::Pointer pGeometry)
140 GeometryType::Pointer pGeometry,
141 PropertiesType::Pointer pProperties)
142 :
Element(NewId, pGeometry, pProperties)
160 GeometryType::Pointer pGeom,
161 PropertiesType::Pointer pProperties
164 return Kratos::make_intrusive<IgaMembraneElement>(
165 NewId, pGeom, pProperties);
172 PropertiesType::Pointer pProperties
175 return Kratos::make_intrusive< IgaMembraneElement >(
176 NewId, GetGeometry().
Create(ThisNodes), pProperties);
193 const SizeType number_of_nodes = GetGeometry().size();
194 const SizeType mat_size = number_of_nodes * 3;
196 if (rRightHandSideVector.size() != mat_size)
197 rRightHandSideVector.
resize(mat_size);
202 CalculateAll(left_hand_side_matrix, rRightHandSideVector,
203 rCurrentProcessInfo,
false,
true);
216 const SizeType number_of_nodes = GetGeometry().size();
217 const SizeType mat_size = number_of_nodes * 3;
221 if (rLeftHandSideMatrix.size1() != mat_size)
222 rLeftHandSideMatrix.
resize(mat_size, mat_size);
225 CalculateAll(rLeftHandSideMatrix, right_hand_side_vector,
226 rCurrentProcessInfo,
true,
false);
242 const SizeType number_of_nodes = GetGeometry().size();
243 const SizeType mat_size = number_of_nodes * 3;
245 if (rRightHandSideVector.size() != mat_size)
246 rRightHandSideVector.
resize(mat_size);
249 if (rLeftHandSideMatrix.size1() != mat_size)
250 rLeftHandSideMatrix.
resize(mat_size, mat_size);
253 CalculateAll(rLeftHandSideMatrix, rRightHandSideVector,
254 rCurrentProcessInfo,
true,
true);
262 void CalculateMassMatrix(
272 void CalculateDampingMatrix(
288 std::vector<double>& rValues,
300 std::vector<Vector>& rValues,
309 void EquationIdVector(
310 EquationIdVectorType& rResult,
320 DofsVectorType& rElementalDofList,
328 void Initialize(
const ProcessInfo& rCurrentProcessInfo)
override;
330 void GetValuesVector(
332 int Step = 0)
const override;
334 void GetFirstDerivativesVector(
336 int Step = 0)
const override;
338 void GetSecondDerivativesVector(
340 int Step = 0)
const override;
354 int Check(
const ProcessInfo& rCurrentProcessInfo)
const override;
361 std::string
Info()
const override
363 std::stringstream buffer;
364 buffer <<
"IgaMembraneElement #" << Id();
371 rOStream <<
"IgaMembraneElement #" << Id();
377 pGetGeometry()->PrintData(rOStream);
387 std::vector<array_1d<double, 3>> m_A_ab_covariant_vector;
395 std::vector<Matrix> m_T_vector;
399 std::vector<Matrix> m_T_hat_vector;
402 std::vector<array_1d< array_1d<double, 3>,2>> m_reference_contravariant_base;
405 std::vector<ConstitutiveLaw::Pointer> mConstitutiveLawVector;
416 const bool CalculateStiffnessMatrixFlag,
417 const bool CalculateResidualVectorFlag
421 void InitializeMaterial();
423 void CalculateKinematics(
425 KinematicVariables& rKinematicVariables,
426 const Matrix& rShapeFunctionGradientValues,
const ConfigurationType& rConfiguration);
429 void CalculateTransformation(
430 const KinematicVariables& rKinematicVariables,
433 void CalculateBMembrane(
436 const KinematicVariables& rActualKinematic);
438 void CalculateSecondVariationStrain(
440 SecondVariations& rSecondVariationsStrain,
441 const KinematicVariables& rActualKinematic);
450 void CalculateConstitutiveVariables(
452 KinematicVariables& rActualMetric,
453 ConstitutiveVariables& rThisConstitutiveVariablesMembrane,
463 void CalculateTransformationPrestress(
464 Matrix& rTransformationPrestress,
465 const KinematicVariables& rActualKinematic
468 inline void CalculateAndAddKm(
472 const double IntegrationWeight);
474 inline void CalculateAndAddNonlinearKm(
475 Matrix& rLeftHandSideMatrix,
476 const SecondVariations& rSecondVariationsStrain,
478 const double IntegrationWeight);
480 void CalculatePK2Stresses(
483 KinematicVariables& rKinematicVariables,
484 const Matrix& rShapeFunctionGradientValues,
487 void CalculateCauchyStresses(
490 KinematicVariables& rKinematicVariables,
491 const Matrix& rShapeFunctionGradientValues,
500 void save(
Serializer& rSerializer)
const override
503 rSerializer.
save(
"A_ab_covariant_vector", m_A_ab_covariant_vector);
504 rSerializer.
save(
"dA_vector", m_dA_vector);
505 rSerializer.
save(
"T_vector", m_T_vector);
506 rSerializer.
save(
"T_hat_vector", m_T_hat_vector);
507 rSerializer.
save(
"reference_contravariant_base", m_reference_contravariant_base);
508 rSerializer.
save(
"constitutive_law_vector", mConstitutiveLawVector);
514 rSerializer.
load(
"A_ab_covariant_vector", m_A_ab_covariant_vector);
515 rSerializer.
load(
"dA_vector", m_dA_vector);
516 rSerializer.
load(
"T_vector", m_T_vector);
517 rSerializer.
load(
"T_hat_vector", m_T_hat_vector);
518 rSerializer.
load(
"reference_contravariant_base", m_reference_contravariant_base);
519 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
std::size_t IndexType
Definition: flags.h:74
Geometry base class.
Definition: geometry.h:71
Definition: iga_membrane_element.h:26
Element::Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const override
Create with Id, pointer to geometry and pointer to property.
Definition: iga_membrane_element.h:169
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: iga_membrane_element.h:375
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(IgaMembraneElement)
Counted pointer of IgaMembraneElement.
IgaMembraneElement(IndexType NewId, GeometryType::Pointer pGeometry)
Constructor using an array of nodes.
Definition: iga_membrane_element.h:131
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: iga_membrane_element.h:189
IgaMembraneElement(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties)
Constructor using an array of nodes with properties.
Definition: iga_membrane_element.h:138
std::string Info() const override
Turn back information as a string.
Definition: iga_membrane_element.h:361
ConfigurationType
Internal flags used for calculate reference or current kinematic.
Definition: iga_membrane_element.h:107
std::size_t IndexType
Definition: iga_membrane_element.h:121
IgaMembraneElement()
Default constructor necessary for serialization.
Definition: iga_membrane_element.h:146
Element::Pointer Create(IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override
Create with Id, pointer to geometry and pointer to property.
Definition: iga_membrane_element.h:158
virtual ~IgaMembraneElement()=default
Destructor.
void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
This function provides a more general interface to the element.
Definition: iga_membrane_element.h:237
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: iga_membrane_element.h:369
Geometry< Node > GeometryType
Definition: iga_membrane_element.h:124
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: iga_membrane_element.h:212
std::size_t SizeType
Size types.
Definition: iga_membrane_element.h:120
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
Variable class contains all information needed to store and retrive data from a data container.
Definition: variable.h:63
#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
Modeler::Pointer Create(const std::string &ModelerName, Model &rModel, const Parameters ModelParameters)
Checks if the modeler is registered.
Definition: modeler_factory.cpp:30
pybind11::list CalculateOnIntegrationPoints(TObject &dummy, const Variable< TDataType > &rVariable, const ProcessInfo &rProcessInfo)
Definition: add_mesh_to_python.cpp:142
TDataType Calculate(GeometryType &dummy, const Variable< TDataType > &rVariable)
Definition: add_geometries_to_python.cpp:103
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
@ Current
Definition: structural_mechanics_math_utilities.hpp:30
KratosZeroMatrix< double > ZeroMatrix
Definition: amatrix_interface.h:559
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: iga_membrane_element.h:69
ConstitutiveVariables(SizeType StrainSize)
Definition: iga_membrane_element.h:77
Vector StrainVector
Definition: iga_membrane_element.h:70
Vector StressVector
Definition: iga_membrane_element.h:71
Matrix ConstitutiveMatrix
Definition: iga_membrane_element.h:72
Internal variables used for metric transformation.
Definition: iga_membrane_element.h:31
double dA
Definition: iga_membrane_element.h:45
array_1d< double, 3 > a2
Definition: iga_membrane_element.h:38
array_1d< double, 3 > a3
Definition: iga_membrane_element.h:40
array_1d< double, 3 > a_ab_covariant
Definition: iga_membrane_element.h:33
array_1d< double, 3 > a1
Definition: iga_membrane_element.h:36
array_1d< double, 3 > a3_tilde
Definition: iga_membrane_element.h:42
KinematicVariables(SizeType Dimension)
Definition: iga_membrane_element.h:51
Definition: iga_membrane_element.h:89
Matrix B11
Definition: iga_membrane_element.h:90
Matrix B22
Definition: iga_membrane_element.h:91
SecondVariations(SizeType mat_size)
Definition: iga_membrane_element.h:98
Matrix B12
Definition: iga_membrane_element.h:92