68 static constexpr
double machine_tolerance = std::numeric_limits<double>::epsilon();
88 : mFiberVolumetricParticipation(FiberVolParticipation), mParallelDirections(rParallelDirections)
95 ConstitutiveLaw::Pointer
Clone()
const override
97 return Kratos::make_shared<SerialParallelRuleOfMixturesLaw>(*
this);
102 :
ConstitutiveLaw(rOther), mpMatrixConstitutiveLaw(rOther.mpMatrixConstitutiveLaw), mpFiberConstitutiveLaw(rOther.mpFiberConstitutiveLaw),
103 mFiberVolumetricParticipation(rOther.mFiberVolumetricParticipation), mParallelDirections(rOther.mParallelDirections) ,
104 mPreviousStrainVector(rOther.mPreviousStrainVector) , mPreviousSerialStrainMatrix(rOther.mPreviousSerialStrainMatrix) , mIsPrestressed(rOther.mIsPrestressed)
265 const double& rValue,
311 bool& CalculateValue(
314 bool& rValue)
override;
326 int& rValue)
override;
335 double& CalculateValue(
338 double& rValue)
override;
372 void InitializeMaterial(
375 const Vector& rShapeFunctionsValues)
override;
387 void IntegrateStrainSerialParallelBehaviour(
388 const Vector& rStrainVector,
389 Vector& FiberStressVector,
390 Vector& MatrixStressVector,
393 Vector& rSerialStrainMatrix,
401 void CalculateSerialParallelProjectionMatrices(
402 Matrix& rParallelProjector,
403 Matrix& rSerialProjector);
435 void CalculateGreenLagrangeStrain(
Parameters &rValues);
441 void CalculateAlmansiStrain(
Parameters &rValues);
453 void CalculateStrainsOnEachComponent(
454 const Vector& rStrainVector,
455 const Matrix& rParallelProjector,
456 const Matrix& rSerialProjector,
457 const Vector& rSerialStrainMatrix,
458 Vector& rStrainVectorMatrix,
459 Vector& rStrainVectorFiber,
461 const int Iteration = 1);
475 void CalculateInitialApproximationSerialStrainMatrix(
476 const Vector& rStrainVector,
477 const Vector& rPreviousStrainVector,
479 const Matrix& rParallelProjector,
480 const Matrix& rSerialProjector,
481 Matrix& rConstitutiveTensorMatrixSS,
482 Matrix& rConstitutiveTensorFiberSS,
483 Vector& rInitialApproximationSerialStrainMatrix,
494 void IntegrateStressesOfFiberAndMatrix(
496 Vector& rMatrixStrainVector,
497 Vector& rFiberStrainVector,
498 Vector& rMatrixStressVector,
499 Vector& rFiberStressVector,
513 void CheckStressEquilibrium(
515 const Vector& rStrainVector,
516 const Matrix& rSerialProjector,
517 const Vector& rMatrixStressVector,
518 const Vector& rFiberStressVector,
521 const Matrix& rConstitutiveTensorMatrixSS,
522 const Matrix& rConstitutiveTensorFiberSS);
531 void CorrectSerialStrainMatrix(
533 const Vector& rResidualStresses,
534 Vector& rSerialStrainMatrix,
535 const Matrix& rSerialProjector,
610 return mpMatrixConstitutiveLaw;
618 mpMatrixConstitutiveLaw = pMatrixConstitutiveLaw;
626 return mpFiberConstitutiveLaw;
634 mpFiberConstitutiveLaw = pFiberConstitutiveLaw;
643 const int parallel_components =
inner_prod(mParallelDirections, mParallelDirections);
644 return this->GetStrainSize() - parallel_components;
672 ConstitutiveLaw::Pointer mpMatrixConstitutiveLaw;
673 ConstitutiveLaw::Pointer mpFiberConstitutiveLaw;
674 double mFiberVolumetricParticipation;
677 Vector mPreviousSerialStrainMatrix =
ZeroVector(GetNumberOfSerialComponents());
678 bool mIsPrestressed =
false;
704 void save(
Serializer& rSerializer)
const override
707 rSerializer.
save(
"MatrixConstitutiveLaw", mpMatrixConstitutiveLaw);
708 rSerializer.
save(
"FiberConstitutiveLaw", mpFiberConstitutiveLaw);
709 rSerializer.
save(
"FiberVolumetricParticipation", mFiberVolumetricParticipation);
710 rSerializer.
save(
"ParallelDirections", mParallelDirections);
711 rSerializer.
save(
"PreviousStrainVector", mPreviousStrainVector);
712 rSerializer.
save(
"PreviousSerialStrainMatrix", mPreviousSerialStrainMatrix);
713 rSerializer.
save(
"IsPrestressed", mIsPrestressed);
719 rSerializer.
load(
"MatrixConstitutiveLaw", mpMatrixConstitutiveLaw);
720 rSerializer.
load(
"FiberConstitutiveLaw", mpFiberConstitutiveLaw);
721 rSerializer.
load(
"FiberVolumetricParticipation", mFiberVolumetricParticipation);
722 rSerializer.
load(
"ParallelDirections", mParallelDirections);
723 rSerializer.
load(
"PreviousStrainVector", mPreviousStrainVector);
724 rSerializer.
load(
"PreviousSerialStrainMatrix", mPreviousSerialStrainMatrix);
725 rSerializer.
load(
"IsPrestressed", mIsPrestressed);
Definition: constitutive_law.h:47
StressMeasure
Definition: constitutive_law.h:69
@ StressMeasure_Cauchy
Definition: constitutive_law.h:73
std::size_t SizeType
Definition: constitutive_law.h:82
Geometry base class.
Definition: geometry.h:71
This class defines the node.
Definition: node.h:65
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
This CL implements the serial-parallel rule of mixtures developed by F.Rastellini.
Definition: serial_parallel_rule_of_mixtures_law.h:56
void SetMatrixConstitutiveLaw(ConstitutiveLaw::Pointer pMatrixConstitutiveLaw)
This method sets the constitutive law of the matrix material.
Definition: serial_parallel_rule_of_mixtures_law.h:616
Node NodeType
The node definition.
Definition: serial_parallel_rule_of_mixtures_law.h:62
SizeType WorkingSpaceDimension() override
Dimension of the law:
Definition: serial_parallel_rule_of_mixtures_law.h:133
SerialParallelRuleOfMixturesLaw()
Definition: serial_parallel_rule_of_mixtures_law.h:80
bool RequiresInitializeMaterialResponse() override
If the CL requires to initialize the material response, called by the element in InitializeSolutionSt...
Definition: serial_parallel_rule_of_mixtures_law.h:548
Geometry< NodeType > GeometryType
The geometry definition.
Definition: serial_parallel_rule_of_mixtures_law.h:65
int GetNumberOfSerialComponents()
This method returns the number of directions with serial behaviour (iso-stress behaviour)
Definition: serial_parallel_rule_of_mixtures_law.h:641
bool RequiresFinalizeMaterialResponse() override
If the CL requires to initialize the material response, called by the element in InitializeSolutionSt...
Definition: serial_parallel_rule_of_mixtures_law.h:556
KRATOS_CLASS_POINTER_DEFINITION(SerialParallelRuleOfMixturesLaw)
Counted pointer of SerialParallelRuleOfMixturesLaw.
SizeType GetStrainSize() const override
Voigt tensor size:
Definition: serial_parallel_rule_of_mixtures_law.h:141
SerialParallelRuleOfMixturesLaw(double FiberVolParticipation, const Vector &rParallelDirections)
Definition: serial_parallel_rule_of_mixtures_law.h:87
~SerialParallelRuleOfMixturesLaw() override
Definition: serial_parallel_rule_of_mixtures_law.h:111
ConstitutiveLaw::Pointer Clone() const override
Definition: serial_parallel_rule_of_mixtures_law.h:95
ConstitutiveLaw::Pointer GetMatrixConstitutiveLaw()
This method the constitutive law of the matrix material.
Definition: serial_parallel_rule_of_mixtures_law.h:608
void SetFiberConstitutiveLaw(ConstitutiveLaw::Pointer pFiberConstitutiveLaw)
This method sets the constitutive law of the fiber material.
Definition: serial_parallel_rule_of_mixtures_law.h:632
ConstitutiveLaw::Pointer GetFiberConstitutiveLaw()
This method the constitutive law of the fiber material.
Definition: serial_parallel_rule_of_mixtures_law.h:624
SerialParallelRuleOfMixturesLaw(SerialParallelRuleOfMixturesLaw const &rOther)
Definition: serial_parallel_rule_of_mixtures_law.h:101
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
Modeler::Pointer Create(const std::string &ModelerName, Model &rModel, const Parameters ModelParameters)
Checks if the modeler is registered.
Definition: modeler_factory.cpp:30
bool Has(const std::string &ModelerName)
Checks if the modeler is registered.
Definition: modeler_factory.cpp:24
Parameters GetValue(Parameters &rParameters, const std::string &rEntry)
Definition: add_kratos_parameters_to_python.cpp:53
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
def SetValue(entity, variable, value)
Definition: coupling_interface_data.py:256
def load(f)
Definition: ode_solve.py:307
Definition: constitutive_law.h:189