KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
isotropic_damage_cohesive_3D_law.hpp
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main authors: Danilo Cavalcanti and Ignasi de Pouplana
11 //
12 
13 #if !defined (KRATOS_ISOTROPIC_DAMAGE_COHESIVE_3D_LAW_H_INCLUDED)
14 #define KRATOS_ISOTROPIC_DAMAGE_COHESIVE_3D_LAW_H_INCLUDED
15 
16 // System includes
17 #include <cmath>
18 
19 // Project includes
20 #include "utilities/math_utils.h"
21 #include "includes/serializer.h"
22 #include "includes/checks.h"
24 
25 // Application includes
27 
28 namespace Kratos
29 {
30 
31 class KRATOS_API(POROMECHANICS_APPLICATION) IsotropicDamageCohesive3DLaw : public ConstitutiveLaw
32 {
33 
34 public:
35 
37 
38 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
39 
40  // Default Constructor
42  {
43  }
44 
45  ConstitutiveLaw::Pointer Clone() const override
46  {
47  return Kratos::make_shared<IsotropicDamageCohesive3DLaw>(IsotropicDamageCohesive3DLaw(*this));
48  }
49 
50  // Copy Constructor
52  {
53  }
54 
55  // Destructor
57  {
58  }
59 
60 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
61 
62  void GetLawFeatures(Features& rFeatures) override;
63 
64  int Check(const Properties& rMaterialProperties, const GeometryType& rElementGeometry, const ProcessInfo& rCurrentProcessInfo) const override;
65 
66  void InitializeMaterial( const Properties& rMaterialProperties,const GeometryType& rElementGeometry,const Vector& rShapeFunctionsValues ) override;
67 
68 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
69 
70  void CalculateMaterialResponseCauchy(Parameters & rValues) override;
71 
72  void FinalizeMaterialResponseCauchy(Parameters & rValues) override;
73 
74 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
75  double& GetValue( const Variable<double>& rThisVariable, double& rValue ) override;
76 
77  void SetValue( const Variable<Vector>& rThisVariable,
78  const Vector& rValue,
79  const ProcessInfo& rCurrentProcessInfo ) override;
80 
81 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
82 
83 protected:
84 
86  {
87  // Material parameters
95 
96  // Material parameter computed based on others
98 
99  // Variables dependent on the state variables
100  double DerivativeSDV; // derivative of the scalar damage variable
101 
102  // Auxiliary variables
108  };
109 
110  // Member Variables
111  double mDamageVariable = 0.0; // scalar damage variable
112  Vector mStateVariable = ZeroVector(2); // [max(|delta_shear|) max(<delta_normal>)]
113  Vector mOldStateVariable = ZeroVector(2);
114 
115 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
116 
117  virtual void InitializeConstitutiveLawVariables(ConstitutiveLawVariables& rVariables,
118  Parameters& rValues);
119 
120  virtual void ComputeEquivalentStrain(ConstitutiveLawVariables& rVariables,
121  Parameters& rValues);
122 
123  virtual void ComputeStressVector(Vector& rStressVector, Vector& EffectiveStressVector,
124  ConstitutiveLawVariables& rVariables, Parameters& rValues);
125 
126  virtual void ComputeTangentConstitutiveMatrix(Matrix& rConstitutiveMatrix, Matrix& ElasticConstitutiveMatrix, Vector& EffectiveStressVector, ConstitutiveLawVariables& rVariables, Parameters& rValues);
127 
128  virtual void CheckLoadingFunction(ConstitutiveLawVariables& rVariables,
129  Parameters& rValues);
130 
131  virtual void ComputeScalarDamage(ConstitutiveLawVariables& rVariables,
132  Parameters& rValues);
133 
134  virtual void DamageLaw(ConstitutiveLawVariables& rVariables, Parameters& rValues, bool needsDerivative);
135 
136  virtual void GetElasticConstitutiveMatrix(Matrix& rElasticConstitutiveMatrix,
137  ConstitutiveLawVariables& rVariables,
138  Parameters& rValues);
139 
140  virtual void ComputeDamageConstitutiveMatrix(Matrix& rDamageConstitutiveMatrix,Vector& EffectiveStressVector,
141  ConstitutiveLawVariables& rVariables,
142  Parameters& rValues);
143 
144 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
145 
146 private:
147 
148  // Serialization
149 
150  friend class Serializer;
151 
152  void save(Serializer& rSerializer) const override
153  {
155  }
156 
157  void load(Serializer& rSerializer) override
158  {
160  }
161 
162 }; // Class IsotropicDamageCohesive3DLaw
163 } // namespace Kratos.
164 #endif // KRATOS_ISOTROPIC_DAMAGE_COHESIVE_3D_LAW_H_INCLUDED defined
Definition: constitutive_law.h:47
Geometry base class.
Definition: geometry.h:71
Definition: isotropic_damage_cohesive_3D_law.hpp:32
IsotropicDamageCohesive3DLaw()
Definition: isotropic_damage_cohesive_3D_law.hpp:41
KRATOS_CLASS_POINTER_DEFINITION(IsotropicDamageCohesive3DLaw)
IsotropicDamageCohesive3DLaw(const IsotropicDamageCohesive3DLaw &rOther)
Definition: isotropic_damage_cohesive_3D_law.hpp:51
ConstitutiveLaw::Pointer Clone() const override
Clone function (has to be implemented by any derived class)
Definition: isotropic_damage_cohesive_3D_law.hpp:45
~IsotropicDamageCohesive3DLaw() override
Definition: isotropic_damage_cohesive_3D_law.hpp:56
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
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
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
def SetValue(entity, variable, value)
Definition: coupling_interface_data.py:256
def load(f)
Definition: ode_solve.py:307
Definition: constitutive_law.h:189
Definition: isotropic_damage_cohesive_3D_law.hpp:86
double DerivativeSDV
Definition: isotropic_damage_cohesive_3D_law.hpp:100
int DamageEvolutionLaw
Definition: isotropic_damage_cohesive_3D_law.hpp:94
double NormalStiffness
Definition: isotropic_damage_cohesive_3D_law.hpp:88
double MaxTensileStress
Definition: isotropic_damage_cohesive_3D_law.hpp:91
double OldEquivalentStrain
Definition: isotropic_damage_cohesive_3D_law.hpp:105
double ShearStiffness
Definition: isotropic_damage_cohesive_3D_law.hpp:89
double PenaltyStiffness
Definition: isotropic_damage_cohesive_3D_law.hpp:90
double BetaEqStrainShearFactor
Definition: isotropic_damage_cohesive_3D_law.hpp:93
Vector DerivativeEquivalentStrain
Definition: isotropic_damage_cohesive_3D_law.hpp:104
double EquivalentStrain
Definition: isotropic_damage_cohesive_3D_law.hpp:103
bool LoadingFlag
Definition: isotropic_damage_cohesive_3D_law.hpp:106
double DamageThreshold
Definition: isotropic_damage_cohesive_3D_law.hpp:97
double LoadingFunction
Definition: isotropic_damage_cohesive_3D_law.hpp:107
double FractureEnergy
Definition: isotropic_damage_cohesive_3D_law.hpp:92