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.
saint_venant_kirchhoff_model.hpp
Go to the documentation of this file.
1 //
2 // Project Name: KratosConstitutiveModelsApplication $
3 // Created by: $Author: JMCarbonell $
4 // Last modified by: $Co-Author: $
5 // Date: $Date: April 2017 $
6 // Revision: $Revision: 0.0 $
7 //
8 //
9 
10 #if !defined(KRATOS_SAINT_VENANT_KIRCHHOFF_MODEL_H_INCLUDED )
11 #define KRATOS_SAINT_VENANT_KIRCHHOFF_MODEL_H_INCLUDED
12 
13 // System includes
14 
15 // External includes
16 
17 // Project includes
19 
20 namespace Kratos
21 {
24 
27 
31 
35 
39 
43 
45 
47  class KRATOS_API(CONSTITUTIVE_MODELS_APPLICATION) SaintVenantKirchhoffModel : public HyperElasticModel
48  {
49  public:
50 
53 
56 
60 
63 
66 
69  {
71  return *this;
72  }
73 
75  ConstitutiveModel::Pointer Clone() const override
76  {
77  return Kratos::make_shared<SaintVenantKirchhoffModel>(*this);
78  }
79 
82 
83 
87 
88 
92 
93 
94  void CalculateStrainEnergy(ModelDataType& rValues, double& rDensityFunction) override
95  {
97 
98  HyperElasticDataType Variables;
99  this->CalculateStrainData(rValues, Variables);
100 
101  //Calculate HyperElastic Saint Venant Kirchhoff density function
102  const MaterialDataType& rMaterial = rValues.GetMaterialParameters();
103 
104  // Lame constants
105  const double& rLameLambda = rMaterial.GetLameLambda();
106  const double& rLameMu = rMaterial.GetLameMu();
107 
108  double trace = (Variables.Strain.Matrix(0,0)+Variables.Strain.Matrix(1,1)+Variables.Strain.Matrix(2,2));
109 
110  rDensityFunction = 0.5*rLameLambda*trace;
111 
112  trace = Variables.Strain.Matrix(0,0)*Variables.Strain.Matrix(0,0)
113  + Variables.Strain.Matrix(0,1)*Variables.Strain.Matrix(1,0)
114  + Variables.Strain.Matrix(0,2)*Variables.Strain.Matrix(2,0)
115  + Variables.Strain.Matrix(1,0)*Variables.Strain.Matrix(0,1)
116  + Variables.Strain.Matrix(1,1)*Variables.Strain.Matrix(1,1)
117  + Variables.Strain.Matrix(1,2)*Variables.Strain.Matrix(2,1)
118  + Variables.Strain.Matrix(2,0)*Variables.Strain.Matrix(0,2)
119  + Variables.Strain.Matrix(2,1)*Variables.Strain.Matrix(1,2)
120  + Variables.Strain.Matrix(2,2)*Variables.Strain.Matrix(2,2);
121 
122  trace *= trace;
123 
124  rDensityFunction += rLameMu*trace;
125 
126  KRATOS_CATCH(" ")
127  }
128 
129 
130  void CalculateStressTensor(ModelDataType& rValues, MatrixType& rStressMatrix) override
131  {
132  KRATOS_TRY
133 
134  HyperElasticDataType Variables;
135  this->CalculateStrainData(rValues,Variables);
136 
137  // BoundedMatrix<double,6,6> ConstitutiveTensor;
138  // this->CalculateAndAddConstitutiveMatrix(Variables,ConstitutiveTensor);
139 
140  // VectorType StrainVector;
141  // ConstitutiveModelUtilities::StrainTensorToVector(Variables.Strain.Matrix,StrainVector);
142 
143  // VectorType StressVector;
144  // this->CalculateAndAddStressTensor(Variables,ConstitutiveTensor,StrainVector,StressVector);
145 
146  // rStressMatrix = ConstitutiveModelUtilities::VectorToSymmetricTensor(StressVector,rStressMatrix);
147 
148  this->CalculateAndAddStressTensor(Variables,rStressMatrix);
149 
150  const StressMeasureType& rStressMeasure = rValues.GetStressMeasure();
151 
153 
154  const MatrixType& rTotalDeformationMatrix = rValues.GetTotalDeformationMatrix();
155 
156  //Variables.Strain.InverseMatrix used as an auxiliar matrix (contravariant push forward)
157  noalias( Variables.Strain.InverseMatrix ) = prod( rTotalDeformationMatrix, rStressMatrix );
158  noalias( rStressMatrix ) = prod( Variables.Strain.InverseMatrix, trans(rTotalDeformationMatrix) );
159 
160  }
161 
162 
163  KRATOS_CATCH(" ")
164  }
165 
166  void CalculateConstitutiveTensor(ModelDataType& rValues, Matrix& rConstitutiveMatrix) override
167  {
168  KRATOS_TRY
169 
170  HyperElasticDataType Variables;
171  this->CalculateStrainData(rValues,Variables);
172 
173  BoundedMatrix<double,6,6> ConstitutiveTensor;
174  this->CalculateAndAddConstitutiveMatrix(Variables,ConstitutiveTensor);
175 
176  rConstitutiveMatrix = ConstitutiveModelUtilities::ConstitutiveTensorToMatrix(ConstitutiveTensor,rConstitutiveMatrix);
177 
178  // if StressMeasure_Kirchhoff, a push forward of the ConstitutiveMatrix must be done, but it is avoided
179  // it is computationally expensive but relevant for the convergence of the method
180  const StressMeasureType& rStressMeasure = rValues.GetStressMeasure();
181 
183  const MatrixType& rTotalDeformationMatrix = rValues.GetTotalDeformationMatrix();
184  ConstitutiveModelUtilities::PushForwardConstitutiveMatrix(rConstitutiveMatrix, rTotalDeformationMatrix);
185  }
186 
187  KRATOS_CATCH(" ")
188  }
189 
190 
191  void CalculateStressAndConstitutiveTensors(ModelDataType& rValues, MatrixType& rStressMatrix, Matrix& rConstitutiveMatrix) override
192  {
193  KRATOS_TRY
194 
195  HyperElasticDataType Variables;
196  this->CalculateStrainData(rValues,Variables);
197 
198  BoundedMatrix<double,6,6> ConstitutiveTensor;
199  this->CalculateAndAddConstitutiveMatrix(Variables,ConstitutiveTensor);
200 
201  // VectorType StrainVector;
202  // ConstitutiveModelUtilities::StrainTensorToVector(Variables.Strain.Matrix,StrainVector);
203 
204  // VectorType StressVector;
205  // this->CalculateAndAddStressTensor(Variables,ConstitutiveTensor,StrainVector,StressVector);
206  // rStressMatrix = ConstitutiveModelUtilities::VectorToSymmetricTensor(StressVector,rStressMatrix);
207 
208  this->CalculateAndAddStressTensor(Variables,rStressMatrix);
209 
210  rConstitutiveMatrix = ConstitutiveModelUtilities::ConstitutiveTensorToMatrix(ConstitutiveTensor,rConstitutiveMatrix);
211 
212  const StressMeasureType& rStressMeasure = rValues.GetStressMeasure();
213 
215 
216  const MatrixType& rTotalDeformationMatrix = rValues.GetTotalDeformationMatrix();
217 
218  //Variables.Strain.InverseMatrix used as an auxiliar matrix (contravariant push forward)
219  noalias( Variables.Strain.InverseMatrix ) = prod( rTotalDeformationMatrix, rStressMatrix );
220  noalias( rStressMatrix ) = prod( Variables.Strain.InverseMatrix, trans(rTotalDeformationMatrix) );
221 
222  // if StressMeasure_Kirchhoff, a push forward of the ConstitutiveMatrix must be done, but it is avoided
223  // it is computationally expensive but relevant for the convergence of the method
224  ConstitutiveModelUtilities::PushForwardConstitutiveMatrix(rConstitutiveMatrix, rTotalDeformationMatrix);
225  }
226 
227 
228  KRATOS_CATCH(" ")
229  }
230 
231 
235  int Check(const Properties& rProperties, const ProcessInfo& rCurrentProcessInfo) override
236  {
237  KRATOS_TRY
238 
239  if(YOUNG_MODULUS.Key() == 0 || rProperties[YOUNG_MODULUS] <= 0.00)
240  KRATOS_ERROR << "YOUNG_MODULUS has Key zero or invalid value" << std::endl;
241 
242  if(POISSON_RATIO.Key() == 0){
243  KRATOS_ERROR << "POISSON_RATIO has Key zero invalid value" << std::endl;
244  }
245  else{
246  const double& nu = rProperties[POISSON_RATIO];
247  if( (nu > 0.499 && nu < 0.501) || (nu < -0.999 && nu > -1.01) )
248  KRATOS_ERROR << "POISSON_RATIO has an invalid value" << std::endl;
249  }
250 
251  return 0;
252 
253 
254  KRATOS_CATCH(" ")
255  }
256 
260 
261 
265 
266 
270 
272  std::string Info() const override
273  {
274  std::stringstream buffer;
275  buffer << "SaintVenantKirchhoffModel";
276  return buffer.str();
277  }
278 
280  void PrintInfo(std::ostream& rOStream) const override
281  {
282  rOStream << "SaintVenantKirchhoffModel";
283  }
284 
286  void PrintData(std::ostream& rOStream) const override
287  {
288  rOStream << "SaintVenantKirchhoffModel Data";
289  }
290 
294 
295 
297 
298  protected:
299 
302 
303 
307 
308 
312 
313 
317 
318  void CalculateStrainData(ModelDataType& rValues, HyperElasticDataType& rVariables) override
319  {
320  KRATOS_TRY
321 
322  //set model data pointer
323  rVariables.SetModelData(rValues);
324  rVariables.SetState(rValues.State);
325 
326  //deformation gradient
327  const MatrixType& rDeltaDeformationMatrix = rValues.GetDeltaDeformationMatrix();
328  const MatrixType& rTotalDeformationMatrix = rValues.GetTotalDeformationMatrix();
329 
330  const StressMeasureType& rStressMeasure = rValues.GetStressMeasure();
331 
332  if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_PK2 ){ //Strain.Matrix = GreenLagrangeTensor
333 
334  //set working strain measure
336 
337  //historical strain matrix
338  rValues.StrainMatrix = ConstitutiveModelUtilities::VectorToSymmetricTensor(this->mHistoryVector,rValues.StrainMatrix);
339 
340  //current strain matrix b
341  noalias(rVariables.Strain.Matrix) = prod(rValues.StrainMatrix,trans(rDeltaDeformationMatrix));
342  noalias(rValues.StrainMatrix) = prod(rDeltaDeformationMatrix, rVariables.Strain.Matrix);
343 
344  //inverted total deformation gradient
345  double detF = 0;
346  ConstitutiveModelUtilities::InvertMatrix3( rTotalDeformationMatrix, rVariables.Strain.InverseMatrix, detF ); //InverseMatrix used as wildcard here (InverseMatrix = InverseTotalDeformationGradient)
347 
348  //strain measure C
349  noalias(rVariables.Strain.Matrix) = prod(rValues.StrainMatrix,trans(rVariables.Strain.InverseMatrix));
350  noalias(rVariables.Strain.InverseMatrix) = prod(trans(rTotalDeformationMatrix), rVariables.Strain.Matrix); //InverseMatrix used as a wildcard here (InverseMatrix = RightCauchyGreenMatrix )
351 
352 
354 
355  rValues.State.Set(ConstitutiveModelData::STRAIN_COMPUTED);
356 
357  }
358  else if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_Kirchhoff ){ //Strain.Matrix = GreenLagrangeTensor
359 
360  //set working strain measure
362 
363  //historical strain matrix
364  rValues.StrainMatrix = ConstitutiveModelUtilities::VectorToSymmetricTensor(this->mHistoryVector,rValues.StrainMatrix);
365 
366  //current strain matrix b
367  noalias(rVariables.Strain.Matrix) = prod(rValues.StrainMatrix,trans(rDeltaDeformationMatrix));
368  noalias(rValues.StrainMatrix) = prod(rDeltaDeformationMatrix, rVariables.Strain.Matrix);
369 
371 
372  //rVariables.Strain.InverseMatrix used as an auxiliar matrix (covariant pull back) to GreenLagrangeStrain
373  noalias( rVariables.Strain.InverseMatrix ) = prod( trans(rTotalDeformationMatrix), rVariables.Strain.Matrix );
374  noalias( rVariables.Strain.Matrix ) = prod( rVariables.Strain.InverseMatrix, rTotalDeformationMatrix );
375 
376  //set as the current strain
377  rValues.State.Set(ConstitutiveModelData::STRAIN_COMPUTED);
378 
379 
380  }
381  else{
382 
383  //set working strain measure
385  KRATOS_ERROR << "calling initialize SaintVenantKirchhoffModel .. StressMeasure is inconsistent" << std::endl;
386 
387  }
388 
389 
390  KRATOS_CATCH(" ")
391  }
392 
393 
394  void CalculateAndAddStressTensor(HyperElasticDataType& rVariables, BoundedMatrix<double,6,6>& rConstitutiveTensor, VectorType& rStrainVector, VectorType& rStressVector)
395  {
396  KRATOS_TRY
397 
398  noalias(rStressVector) = prod(rConstitutiveTensor,rStrainVector);
399 
400  rVariables.State().Set(ConstitutiveModelData::STRESS_COMPUTED);
401 
402  KRATOS_CATCH(" ")
403  }
404 
405 
406  void CalculateAndAddStressTensor(HyperElasticDataType& rVariables, MatrixType& rStressMatrix) override
407  {
408  KRATOS_TRY
409 
410  const ModelDataType& rModelData = rVariables.GetModelData();
411  const MaterialDataType& rMaterial = rModelData.GetMaterialParameters();
412 
413  // Lame constants
414  const double& rLameLambda = rMaterial.GetLameLambda();
415  const double& rLameMu = rMaterial.GetLameMu();
416 
417  rStressMatrix = rVariables.Strain.Matrix;
418  rStressMatrix *= 2.0 * rLameMu;
419 
420  double trace = (rVariables.Strain.Matrix(0,0)+rVariables.Strain.Matrix(1,1)+rVariables.Strain.Matrix(2,2));
421  trace *= rLameLambda;
422 
423  rStressMatrix(0,0) += trace;
424  rStressMatrix(1,1) += trace;
425  rStressMatrix(2,2) += trace;
426 
427  rVariables.State().Set(ConstitutiveModelData::STRESS_COMPUTED);
428 
429  KRATOS_CATCH(" ")
430  }
431 
432 
434  {
435  KRATOS_TRY
436 
437  //Calculate HyperElastic ConstitutiveMatrix
438  const ModelDataType& rModelData = rVariables.GetModelData();
439  const MaterialDataType& rMaterial = rModelData.GetMaterialParameters();
440 
441  rConstitutiveTensor.clear();
442 
443  // Lame constants
444  const double& rYoungModulus = rMaterial.GetYoungModulus();
445  const double& rPoissonCoefficient = rMaterial.GetPoissonCoefficient();
446 
447  double coefficient = (rYoungModulus)/((1.0+rPoissonCoefficient)*(1.0-2.0*rPoissonCoefficient));
448  double component_0 = coefficient*(1.0-rPoissonCoefficient);
449  double component_1 = coefficient*rPoissonCoefficient;
450  double component_2 = coefficient*(0.5-rPoissonCoefficient);
451 
452 
453  // 3D linear elastic constitutive matrix
454  rConstitutiveTensor ( 0 , 0 ) = component_0;
455  rConstitutiveTensor ( 1 , 1 ) = component_0;
456  rConstitutiveTensor ( 2 , 2 ) = component_0;
457 
458  rConstitutiveTensor ( 3 , 3 ) = component_2;
459  rConstitutiveTensor ( 4 , 4 ) = component_2;
460  rConstitutiveTensor ( 5 , 5 ) = component_2;
461 
462  rConstitutiveTensor ( 0 , 1 ) = component_1;
463  rConstitutiveTensor ( 1 , 0 ) = component_1;
464 
465  rConstitutiveTensor ( 0 , 2 ) = component_1;
466  rConstitutiveTensor ( 2 , 0 ) = component_1;
467 
468  rConstitutiveTensor ( 1 , 2 ) = component_1;
469  rConstitutiveTensor ( 2 , 1 ) = component_1;
470 
471 
472  rVariables.State().Set(ConstitutiveModelData::CONSTITUTIVE_MATRIX_COMPUTED);
473 
474 
475  KRATOS_CATCH(" ")
476  }
477 
481 
482 
486 
487 
491 
492 
494 
495  private:
496 
499 
500 
504 
505 
509 
510 
514 
515 
519 
520 
524  friend class Serializer;
525 
526 
527  void save(Serializer& rSerializer) const override
528  {
530  }
531 
532  void load(Serializer& rSerializer) override
533  {
535  }
536 
540 
541 
545 
547 
548  }; // Class SaintVenantKirchhoffModel
549 
551 
554 
555 
559 
560 
562 
564 
565 } // namespace Kratos.
566 
567 #endif // KRATOS_SAINT_VENANT_KIRCHHOFF_MODEL_H_INCLUDED defined
StressMeasureType
Definition: constitutive_model_data.hpp:83
static void RightCauchyToGreenLagrangeStrain(const MatrixType &rRightCauchyGreen, MatrixType &rStrainMatrix)
Definition: constitutive_model_utilities.hpp:196
static MatrixType & VectorToSymmetricTensor(const array_1d< double, 6 > &rVector, MatrixType &rMatrix)
Definition: constitutive_model_utilities.hpp:568
static void LeftCauchyToAlmansiStrain(const MatrixType &rLeftCauchyGreen, MatrixType &rStrainMatrix)
Definition: constitutive_model_utilities.hpp:214
static void InvertMatrix3(const MatrixType &InputMatrix, MatrixType &InvertedMatrix, double &InputMatrixDet)
Definition: constitutive_model_utilities.hpp:1043
static Matrix & ConstitutiveTensorToMatrix(const BoundedMatrix< double, 6, 6 > &rTensor, Matrix &rMatrix)
Definition: constitutive_model_utilities.hpp:423
static void PushForwardConstitutiveMatrix(Matrix &rConstitutiveMatrix, const Matrix &rF)
Definition: constitutive_model_utilities.hpp:1371
void Set(const Flags ThisFlag)
Definition: flags.cpp:33
Short class definition.
Definition: hyper_elastic_model.hpp:50
HyperElasticModel & operator=(HyperElasticModel const &rOther)
Assignment operator.
Definition: hyper_elastic_model.cpp:59
Definition: amatrix_interface.h:41
void clear()
Definition: amatrix_interface.h:284
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
Short class definition.
Definition: saint_venant_kirchhoff_model.hpp:48
void CalculateStrainData(ModelDataType &rValues, HyperElasticDataType &rVariables) override
Definition: saint_venant_kirchhoff_model.hpp:318
void CalculateStressTensor(ModelDataType &rValues, MatrixType &rStressMatrix) override
Definition: saint_venant_kirchhoff_model.hpp:130
ConstitutiveModel::Pointer Clone() const override
Clone.
Definition: saint_venant_kirchhoff_model.hpp:75
void CalculateStressAndConstitutiveTensors(ModelDataType &rValues, MatrixType &rStressMatrix, Matrix &rConstitutiveMatrix) override
Definition: saint_venant_kirchhoff_model.hpp:191
void CalculateAndAddStressTensor(HyperElasticDataType &rVariables, MatrixType &rStressMatrix) override
Definition: saint_venant_kirchhoff_model.hpp:406
void CalculateStrainEnergy(ModelDataType &rValues, double &rDensityFunction) override
Definition: saint_venant_kirchhoff_model.hpp:94
void CalculateAndAddConstitutiveMatrix(HyperElasticDataType &rVariables, BoundedMatrix< double, 6, 6 > &rConstitutiveTensor)
Definition: saint_venant_kirchhoff_model.hpp:433
void CalculateConstitutiveTensor(ModelDataType &rValues, Matrix &rConstitutiveMatrix) override
Definition: saint_venant_kirchhoff_model.hpp:166
SaintVenantKirchhoffModel & operator=(SaintVenantKirchhoffModel const &rOther)
Assignment operator.
Definition: saint_venant_kirchhoff_model.hpp:68
SaintVenantKirchhoffModel()
Default constructor.
Definition: saint_venant_kirchhoff_model.hpp:62
KRATOS_CLASS_POINTER_DEFINITION(SaintVenantKirchhoffModel)
Pointer definition of SaintVenantKirchhoffModel.
void CalculateAndAddStressTensor(HyperElasticDataType &rVariables, BoundedMatrix< double, 6, 6 > &rConstitutiveTensor, VectorType &rStrainVector, VectorType &rStressVector)
Definition: saint_venant_kirchhoff_model.hpp:394
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: saint_venant_kirchhoff_model.hpp:286
SaintVenantKirchhoffModel(SaintVenantKirchhoffModel const &rOther)
Copy constructor.
Definition: saint_venant_kirchhoff_model.hpp:65
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: saint_venant_kirchhoff_model.hpp:280
~SaintVenantKirchhoffModel() override
Destructor.
Definition: saint_venant_kirchhoff_model.hpp:81
std::string Info() const override
Turn back information as a string.
Definition: saint_venant_kirchhoff_model.hpp:272
int Check(const Properties &rProperties, const ProcessInfo &rCurrentProcessInfo) override
Definition: saint_venant_kirchhoff_model.hpp:235
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_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
#define KRATOS_ERROR
Definition: exception.h:161
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
AMatrix::MatrixProductExpression< TExpression1Type, TExpression2Type > prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:568
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
AMatrix::TransposeMatrix< const T > trans(const T &TheMatrix)
Definition: amatrix_interface.h:486
nu
Definition: isotropic_damage_automatic_differentiation.py:135
def load(f)
Definition: ode_solve.py:307
Definition: constitutive_model_data.hpp:92
const double & GetLameMu() const
Definition: constitutive_model_data.hpp:111
const double & GetYoungModulus() const
Definition: constitutive_model_data.hpp:110
const double & GetLameLambda() const
Definition: constitutive_model_data.hpp:113
const double & GetPoissonCoefficient() const
Definition: constitutive_model_data.hpp:109
Definition: constitutive_model_data.hpp:383
const MatrixType & GetDeltaDeformationMatrix() const
Definition: constitutive_model_data.hpp:455
void SetStrainMeasure(StrainMeasureType Measure)
Definition: constitutive_model_data.hpp:424
const MaterialData & GetMaterialParameters() const
Definition: constitutive_model_data.hpp:462
const StressMeasureType & GetStressMeasure() const
Definition: constitutive_model_data.hpp:452
const MatrixType & GetTotalDeformationMatrix() const
Definition: constitutive_model_data.hpp:456
Flags State
Definition: constitutive_model_data.hpp:399
MatrixType StrainMatrix
Definition: constitutive_model_data.hpp:402
Definition: hyper_elastic_model.hpp:108
StrainData Strain
Definition: hyper_elastic_model.hpp:117
Flags & State()
Definition: hyper_elastic_model.hpp:128
void SetState(Flags &rState)
Definition: hyper_elastic_model.hpp:120
void SetModelData(const ModelDataType &rModelData)
Definition: hyper_elastic_model.hpp:121
const ModelDataType & GetModelData() const
Definition: hyper_elastic_model.hpp:124
MatrixType InverseMatrix
Definition: hyper_elastic_model.hpp:102
MatrixType Matrix
Definition: hyper_elastic_model.hpp:101