22 #include "custom_constitutive/elastic_isotropic_3d.h"
83 static constexpr
double tolerance = std::numeric_limits<double>::epsilon();
86 double DamageTension = 0.0;
87 double DamageCompression = 0.0;
88 double ThresholdTension = 0.0;
89 double ThresholdCompression = 0.0;
92 double UniaxialTensionStress = 0.0;
93 double UniaxialCompressionStress = 0.0;
108 ConstitutiveLaw::Pointer
Clone()
const override
110 return Kratos::make_shared<DamageDPlusDMinusMasonry3DLaw>(*
this);
133 mTensionDamage(rOther.mTensionDamage),
134 mTensionThreshold(rOther.mTensionThreshold),
135 mNonConvTensionDamage(rOther.mNonConvTensionDamage),
136 mNonConvTensionThreshold(rOther.mNonConvTensionThreshold),
137 mCompressionDamage(rOther.mCompressionDamage),
138 mCompressionThreshold(rOther.mCompressionThreshold),
139 mNonConvCompressionDamage(rOther.mNonConvCompressionDamage),
140 mNonConvCompressionThreshold(rOther.mNonConvCompressionThreshold)
179 bool IntegrateStressTensionIfNecessary(
180 const double F_tension,
191 bool IntegrateStressCompressionIfNecessary(
192 const double F_compression,
202 void CalculateIntegratedStressVector(
203 Vector& IntegratedStressVectorTension,
215 void InitializeMaterial(
218 const Vector& rShapeFunctionsValues
229 void FinalizeSolutionStep(
232 const Vector& rShapeFunctionsValues,
288 const double& rValue,
344 double& CalculateValue(
347 double& rValue)
override;
471 double mTensionDamage = 0.0;
472 double mTensionThreshold = 0.0;
475 double mNonConvTensionDamage = 0.0;
476 double mNonConvTensionThreshold = 0.0;
478 double mCompressionDamage = 0.0;
479 double mCompressionThreshold = 0.0;
483 double mNonConvCompressionDamage = 0.0;
484 double mNonConvCompressionThreshold = 0.0;
486 double mTensionUniaxialStress = 0.0;
487 double mCompressionUniaxialStress = 0.0;
513 void save(
Serializer &rSerializer)
const override
516 rSerializer.
save(
"TensionDamage", mTensionDamage);
517 rSerializer.
save(
"TensionThreshold", mTensionThreshold);
518 rSerializer.
save(
"NonConvTensionDamage", mNonConvTensionDamage);
519 rSerializer.
save(
"NonConvTensionThreshold", mNonConvTensionThreshold);
520 rSerializer.
save(
"CompressionDamage", mCompressionDamage);
521 rSerializer.
save(
"CompressionThreshold", mCompressionThreshold);
522 rSerializer.
save(
"NonConvCompressionnDamage", mNonConvCompressionDamage);
523 rSerializer.
save(
"NonConvCompressionThreshold", mNonConvCompressionThreshold);
529 rSerializer.
load(
"TensionDamage", mTensionDamage);
530 rSerializer.
load(
"TensionThreshold", mTensionThreshold);
531 rSerializer.
load(
"NonConvTensionDamage", mNonConvTensionDamage);
532 rSerializer.
load(
"NonConvTensionThreshold", mNonConvTensionThreshold);
533 rSerializer.
load(
"CompressionDamage", mCompressionDamage);
534 rSerializer.
load(
"CompressionThreshold", mCompressionThreshold);
535 rSerializer.
load(
"NonConvCompressionnDamage", mNonConvCompressionDamage);
536 rSerializer.
load(
"NonConvCompressionThreshold", mNonConvCompressionThreshold);
545 void CalculateEquivalentStressTension(
546 array_1d<double, VoigtSize>& rPredictiveStressVector,
547 double& rEquivalentStress,
548 ConstitutiveLaw::Parameters& rValues);
556 void CalculateEquivalentStressCompression(
557 array_1d<double, VoigtSize>& rPredictiveStressVector,
558 double& rEquivalentStress,
559 ConstitutiveLaw::Parameters& rValues);
570 void IntegrateStressVectorTension(
571 array_1d<double,VoigtSize>& rPredictiveStressVector,
572 const double UniaxialStress,
575 ConstitutiveLaw::Parameters& rValues,
576 const double CharacteristicLength);
584 void CalculateDamageParameterTension(
585 ConstitutiveLaw::Parameters& rValues,
587 const double CharacteristicLength);
599 void CalculateExponentialDamageTension(
600 const double UniaxialStress,
601 const double Threshold,
602 const double DamageParameter,
603 const double CharacteristicLength,
604 ConstitutiveLaw::Parameters& rValues,
616 void IntegrateStressVectorCompression(
617 array_1d<double,VoigtSize>& rPredictiveStressVector,
618 const double UniaxialStress,
621 ConstitutiveLaw::Parameters& rValues,
622 const double CharacteristicLength);
671 void CalculateBezier3DamageCompression(
672 const double UniaxialStress,
675 const double CharacteristicLength,
676 ConstitutiveLaw::Parameters& rValues);
685 void RegulateBezierDeterminators(
686 const double specific_dissipated_fracture_energy,
687 const double sp,
const double sk,
const double sr,
const double ep,
688 double& ej,
double& ek,
double& er,
double& eu);
695 void ComputeBezierEnergy(
697 const double x1,
const double x2,
const double x3,
698 const double y1,
const double y2,
const double y3);
706 double EvaluateBezierCurve(
708 const double x1,
double x2,
const double x3,
709 const double y1,
const double y2,
const double y3);
Definition: constitutive_law.h:47
Definition: d_plus_d_minus_damage_masonry_3d.h:54
DamageDPlusDMinusMasonry3DLaw(const DamageDPlusDMinusMasonry3DLaw &rOther)
Definition: d_plus_d_minus_damage_masonry_3d.h:131
void SetCompressionThreshold(const double toThreshold)
Definition: d_plus_d_minus_damage_masonry_3d.h:440
double & GetNonConvTensionDamage()
Definition: d_plus_d_minus_damage_masonry_3d.h:427
void SetNonConvTensionDamage(const double toDamage)
Definition: d_plus_d_minus_damage_masonry_3d.h:432
void SetCompressionStress(const double toS)
Definition: d_plus_d_minus_damage_masonry_3d.h:446
double & GetTensionDamage()
Definition: d_plus_d_minus_damage_masonry_3d.h:425
void SetTensionDamage(const double toDamage)
Definition: d_plus_d_minus_damage_masonry_3d.h:430
double & GetNonConvCompressionThreshold()
Definition: d_plus_d_minus_damage_masonry_3d.h:437
double & GetNonConvCompressionDamage()
Definition: d_plus_d_minus_damage_masonry_3d.h:438
double & GetCompressionDamage()
Definition: d_plus_d_minus_damage_masonry_3d.h:436
void SetTensionThreshold(const double toThreshold)
Definition: d_plus_d_minus_damage_masonry_3d.h:429
void SetNonConvCompressionThreshold(const double toThreshold)
Definition: d_plus_d_minus_damage_masonry_3d.h:442
double & GetTensionThreshold()
Definition: d_plus_d_minus_damage_masonry_3d.h:424
void SetNonConvCompressionDamage(const double toDamage)
Definition: d_plus_d_minus_damage_masonry_3d.h:443
void SetCompressionDamage(const double toDamage)
Definition: d_plus_d_minus_damage_masonry_3d.h:441
void SetTensionStress(const double toS)
Definition: d_plus_d_minus_damage_masonry_3d.h:445
double & GetNonConvTensionThreshold()
Definition: d_plus_d_minus_damage_masonry_3d.h:426
SizeType GetStrainSize() const override
Voigt tensor size:
Definition: d_plus_d_minus_damage_masonry_3d.h:123
ElasticIsotropic3D BaseType
Definition of the base class.
Definition: d_plus_d_minus_damage_masonry_3d.h:67
Node NodeType
The node definition.
Definition: d_plus_d_minus_damage_masonry_3d.h:77
KRATOS_CLASS_POINTER_DEFINITION(DamageDPlusDMinusMasonry3DLaw)
Counted pointer of GenericYieldSurface.
void SetNonConvTensionThreshold(const double toThreshold)
Definition: d_plus_d_minus_damage_masonry_3d.h:431
double & GetCompressionThreshold()
Definition: d_plus_d_minus_damage_masonry_3d.h:435
Geometry< NodeType > GeometryType
The geometry definition.
Definition: d_plus_d_minus_damage_masonry_3d.h:80
SizeType WorkingSpaceDimension() override
Dimension of the law:
Definition: d_plus_d_minus_damage_masonry_3d.h:115
ConstitutiveLaw::Pointer Clone() const override
Definition: d_plus_d_minus_damage_masonry_3d.h:108
~DamageDPlusDMinusMasonry3DLaw() override
Definition: d_plus_d_minus_damage_masonry_3d.h:147
Definition: elastic_isotropic_3d.h:53
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
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
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
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
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
def SetValue(entity, variable, value)
Definition: coupling_interface_data.py:256
x2
Definition: generate_frictional_mortar_condition.py:122
x1
Definition: generate_frictional_mortar_condition.py:121
def load(f)
Definition: ode_solve.py:307
Definition: constitutive_law.h:189
Definition: d_plus_d_minus_damage_masonry_3d.h:85
array_1d< double, VoigtSize > TensionStressVector
Definition: d_plus_d_minus_damage_masonry_3d.h:90
array_1d< double, VoigtSize > CompressionStressVector
Definition: d_plus_d_minus_damage_masonry_3d.h:91