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.
hyper_elastic_isotropic_neo_hookean_3d.h
Go to the documentation of this file.
1 // KRATOS ___ _ _ _ _ _ __ _
2 // / __\___ _ __ ___| |_(_) |_ _ _| |_(_)_ _____ / / __ ___ _____ /_\ _ __ _ __
3 // / / / _ \| '_ \/ __| __| | __| | | | __| \ \ / / _ \/ / / _` \ \ /\ / / __| //_\\| '_ \| '_ |
4 // / /__| (_) | | | \__ \ |_| | |_| |_| | |_| |\ V / __/ /__| (_| |\ V V /\__ \/ _ \ |_) | |_) |
5 // \____/\___/|_| |_|___/\__|_|\__|\__,_|\__|_| \_/ \___\____/\__,_| \_/\_/ |___/\_/ \_/ .__/| .__/
6 // |_| |_|
7 //
8 // License: BSD License
9 // license: structural_mechanics_application/license.txt
10 //
11 // Main authors: Vicente Mataix Ferrandiz
12 //
13 
14 #pragma once
15 
16 // System includes
17 
18 // External includes
19 
20 // Project includes
22 
23 namespace Kratos
24 {
27 
31 
35 
39 
43 
51 class KRATOS_API(CONSTITUTIVE_LAWS_APPLICATION) HyperElasticIsotropicNeoHookean3D
52  : public ConstitutiveLaw
53 {
54 public:
55 
58 
61 
64 
66  typedef std::size_t SizeType;
67 
69  typedef std::size_t IndexType;
70 
72  static constexpr SizeType Dimension = 3;
73 
75  static constexpr SizeType VoigtSize = 6;
76 
79 
82 
87 
92 
97 
101 
105 
109  ConstitutiveLaw::Pointer Clone() const override;
110 
115  void GetLawFeatures(Features& rFeatures) override;
116 
121  {
122  return Dimension;
123  };
124 
128  SizeType GetStrainSize() const override
129  {
130  return VoigtSize;
131  };
132 
138  {
139  return StrainMeasure_GreenLagrange;
140  }
141 
147  {
148  return StressMeasure_PK2;
149  }
150 
156  void CalculateMaterialResponsePK1 (ConstitutiveLaw::Parameters & rValues) override;
157 
163  void CalculateMaterialResponsePK2 (ConstitutiveLaw::Parameters & rValues) override;
164 
170  void CalculateMaterialResponseKirchhoff (ConstitutiveLaw::Parameters & rValues) override;
171 
177  void CalculateMaterialResponseCauchy (ConstitutiveLaw::Parameters & rValues) override;
178 
183  void InitializeMaterialResponsePK1 (ConstitutiveLaw::Parameters& rValues) override;
184 
189  void InitializeMaterialResponsePK2 (ConstitutiveLaw::Parameters& rValues) override;
190 
195  void InitializeMaterialResponseKirchhoff (ConstitutiveLaw::Parameters& rValues) override;
196 
201  void InitializeMaterialResponseCauchy (ConstitutiveLaw::Parameters& rValues) override;
202 
208  void FinalizeMaterialResponsePK1 (ConstitutiveLaw::Parameters & rValues) override;
209 
215  void FinalizeMaterialResponsePK2 (ConstitutiveLaw::Parameters & rValues) override;
216 
222  void FinalizeMaterialResponseKirchhoff (ConstitutiveLaw::Parameters & rValues) override;
223 
229  void FinalizeMaterialResponseCauchy (ConstitutiveLaw::Parameters & rValues) override;
230 
235  {
236  return false;
237  }
238 
243  {
244  return false;
245  }
246 
254  double& CalculateValue(
255  ConstitutiveLaw::Parameters& rParameterValues,
256  const Variable<double>& rThisVariable,
257  double& rValue
258  ) override;
259 
267  Vector& CalculateValue(
268  ConstitutiveLaw::Parameters& rParameterValues,
269  const Variable<Vector>& rThisVariable,
270  Vector& rValue
271  ) override;
272 
280  Matrix& CalculateValue(
281  ConstitutiveLaw::Parameters& rParameterValues,
282  const Variable<Matrix>& rThisVariable,
283  Matrix& rValue
284  ) override;
285 
295  int Check(
296  const Properties& rMaterialProperties,
297  const GeometryType& rElementGeometry,
298  const ProcessInfo& rCurrentProcessInfo
299  ) const override;
300 
306  virtual void CalculateGreenLagrangianStrain(
308  Vector& rStrainVector
309  );
310 
316  virtual void CalculateAlmansiStrain(
318  Vector& rStrainVector
319  );
320 
321 protected:
322 
325 
329 
333 
337 
339 
340 private:
341 
344 
348 
352 
361  virtual void CalculateConstitutiveMatrixPK2(
362  Matrix& rConstitutiveMatrix,
363  const Matrix& rInverseCTensor,
364  const double DeterminantF,
365  const double LameLambda,
366  const double LameMu
367  );
368 
376  virtual void CalculateConstitutiveMatrixKirchhoff(
377  Matrix& rConstitutiveMatrix,
378  const double DeterminantF,
379  const double LameLambda,
380  const double LameMu
381  );
382 
391  virtual void CalculatePK2Stress(
392  const Matrix& rInvCTensor,
393  Vector& rStressVector,
394  const double DeterminantF,
395  const double LameLambda,
396  const double LameMu
397  );
398 
403  virtual void CalculateKirchhoffStress(ConstitutiveLaw::Parameters& rValues);
404 
409 
414 
418  friend class Serializer;
419 
420  void save(Serializer& rSerializer) const override
421  {
423  }
424 
425  void load(Serializer& rSerializer) override
426  {
428  }
429 
430 
431 }; // Class HyperElasticIsotropicNeoHookean3D
432 } // namespace Kratos.
Definition: constitutive_law.h:47
StrainMeasure
Definition: constitutive_law.h:52
StressMeasure
Definition: constitutive_law.h:69
Geometry base class.
Definition: geometry.h:71
This law defines an hyperelastic material according to the NeoHookean formulation for 3D cases.
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:53
std::size_t IndexType
The definition of the index type.
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:69
SizeType WorkingSpaceDimension() override
Dimension of the law:
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:120
KRATOS_CLASS_POINTER_DEFINITION(HyperElasticIsotropicNeoHookean3D)
Pointer definition of HyperElasticIsotropicNeoHookean3D.
bool RequiresInitializeMaterialResponse() override
If the CL requires to initialize the material response, called by the element in InitializeSolutionSt...
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:234
SizeType GetStrainSize() const override
Voigt tensor size:
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:128
StrainMeasure GetStrainMeasure() override
Returns the expected strain measure of this constitutive law (by default Green-Lagrange)
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:137
std::size_t SizeType
The definition of the size type.
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:66
ProcessInfo ProcessInfoType
The definition of the process info.
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:60
StressMeasure GetStressMeasure() override
Returns the stress measure of this constitutive law (by default 2st Piola-Kirchhoff stress in voigt n...
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:146
bool RequiresFinalizeMaterialResponse() override
If the CL requires to initialize the material response, called by the element in InitializeSolutionSt...
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:242
ConstitutiveLaw BaseType
The definition of the CL base class.
Definition: hyper_elastic_isotropic_neo_hookean_3d.h:63
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
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
def load(f)
Definition: ode_solve.py:307
Definition: constitutive_law.h:137
Definition: constitutive_law.h:189