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.
isochoric_mooney_rivlin_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_ISOCHORIC_MOONEY_RIVLIN_MODEL_H_INCLUDED )
11 #define KRATOS_ISOCHORIC_MOONEY_RIVLIN_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) IsochoricMooneyRivlinModel : public MooneyRivlinModel
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<IsochoricMooneyRivlinModel>(*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  rDensityFunction = 0;
102  this->CalculateAndAddIsochoricStrainEnergy( Variables, rDensityFunction );
103  this->CalculateAndAddVolumetricStrainEnergy( Variables, rDensityFunction );
104 
105 
106  KRATOS_CATCH(" ")
107  }
108 
109 
110  void CalculateStressTensor(ModelDataType& rValues, MatrixType& rStressMatrix) override
111  {
112  KRATOS_TRY
113 
114  HyperElasticDataType Variables;
115  this->CalculateStrainData(rValues,Variables);
116 
117  this->CalculateAndAddIsochoricStressTensor(Variables, rStressMatrix);
118 
119  rValues.StressMatrix = rStressMatrix; //store isochoric stress matrix as StressMatrix
120 
121  this->CalculateAndAddVolumetricStressTensor(Variables, rStressMatrix);
122 
123  Variables.State().Set(ConstitutiveModelData::STRESS_COMPUTED);
124 
125  KRATOS_CATCH(" ")
126  }
127 
128 
129  void CalculateStressAndConstitutiveTensors(ModelDataType& rValues, MatrixType& rStressMatrix, Matrix& rConstitutiveMatrix) override
130  {
131  KRATOS_TRY
132 
133  HyperElasticDataType Variables;
134  this->CalculateStrainData(rValues,Variables);
135 
136  //Calculate Stress Matrix
137  this->CalculateAndAddIsochoricStressTensor(Variables, rStressMatrix);
138 
139  rValues.StressMatrix = rStressMatrix; //store isochoric stress matrix as StressMatrix
140 
141  this->CalculateAndAddVolumetricStressTensor(Variables, rStressMatrix);
142 
143  //Calculate Constitutive Matrix
144  this->CalculateAndAddConstitutiveTensor(Variables,rConstitutiveMatrix);
145 
146  KRATOS_CATCH(" ")
147  }
148 
152 
153 
157 
158 
162 
164  std::string Info() const override
165  {
166  std::stringstream buffer;
167  buffer << "IsochoricMooneyRivlinModel";
168  return buffer.str();
169  }
170 
172  void PrintInfo(std::ostream& rOStream) const override
173  {
174  rOStream << "IsochoricMooneyRivlinModel";
175  }
176 
178  void PrintData(std::ostream& rOStream) const override
179  {
180  rOStream << "IsochoricMooneyRivlinModel Data";
181  }
182 
186 
187 
189 
190  protected:
191 
194 
195 
199 
200 
204 
205 
209 
210 
211  void CalculateAndAddIsochoricStressTensor(HyperElasticDataType& rVariables, MatrixType& rStressMatrix) override
212  {
213  KRATOS_TRY
214 
215  const ModelDataType& rModelData = rVariables.GetModelData();
216  const StressMeasureType& rStressMeasure = rModelData.GetStressMeasure();
217 
218  MatrixType StressPartMatrix;
219  MatrixType StressMatrix;
220 
221  if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_PK2 ){ //Variables.Strain.Matrix = RightCauchyGreen (C)
222 
223  StressPartMatrix = GetI1RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
224  noalias(StressMatrix) = rVariables.Factors.Alpha1 * StressPartMatrix;
225 
226  StressPartMatrix = GetI2RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
227  noalias(StressMatrix) += rVariables.Factors.Alpha2 * StressPartMatrix;
228 
229  StressPartMatrix = GetI3RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
230  noalias(StressMatrix) += rVariables.Factors.Alpha3 * StressPartMatrix;
231 
232  //option a:
233  StressPartMatrix = GetIsochoricRightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
234  StressMatrix = prod(StressMatrix, StressPartMatrix);
235 
236  //option b:
237  // StressPartMatrix = StressMatrix;
238  // StressMatrix.clear();
239  // double Derivative = 0;
240  // for (unsigned int i = 0; i < 3; i++) {
241  // for (unsigned int j = 0; j < 3; j++) {
242  // for (unsigned int k = 0; k < 3; k++) {
243  // for (unsigned int l = 0; l < 3; l++) {
244  // Derivative = GetIsochoricRightCauchyGreenDerivative( rVariables.Strain, Derivative, i, j, k, l);
245  // StressMatrix(i,j) += Derivative * StressPartMatrix(k, l);
246  // }
247  // }
248  // }
249  // }
250 
251  StressMatrix *= 2.0;
252 
253  rStressMatrix += StressMatrix;
254 
255  }
256  else if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_Kirchhoff ){ //Variables.Strain.Matrix = LeftCauchyGreen (b)
257 
258  StressPartMatrix = GetI1LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
259  noalias(StressMatrix) = rVariables.Factors.Alpha1 * StressPartMatrix;
260 
261  StressPartMatrix = GetI2LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
262  noalias(StressMatrix) += rVariables.Factors.Alpha2 * StressPartMatrix;
263 
264  StressPartMatrix = GetI3LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
265  noalias(StressMatrix) += rVariables.Factors.Alpha3 * StressPartMatrix;
266 
267  //option a:
268  StressPartMatrix = GetIsochoricLeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
269  StressMatrix = prod(StressMatrix, StressPartMatrix);
270 
271  //option b:
272  // StressPartMatrix = StressMatrix;
273  // StressMatrix.clear();
274  // double Derivative = 0;
275  // for (unsigned int i = 0; i < 3; i++) {
276  // for (unsigned int j = 0; j < 3; j++) {
277  // for (unsigned int k = 0; k < 3; k++) {
278  // for (unsigned int l = 0; l < 3; l++) {
279  // Derivative = GetIsochoricLeftCauchyGreenDerivative( rVariables.Strain, Derivative, i, j, k, l);
280  // StressMatrix(i,j) += Derivative * StressPartMatrix(k, l);
281  // }
282  // }
283  // }
284  // }
285 
286  StressMatrix *= 2.0;
287 
288  rStressMatrix += StressMatrix;
289  }
290 
291 
292  KRATOS_CATCH(" ")
293  }
294 
295 
296  void CalculateAndAddVolumetricStressTensor(HyperElasticDataType& rVariables, MatrixType& rStressMatrix) override
297  {
298  KRATOS_TRY
299 
300  const ModelDataType& rModelData = rVariables.GetModelData();
301  const StressMeasureType& rStressMeasure = rModelData.GetStressMeasure();
302 
303  MatrixType StressMatrix;
304 
305  if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_PK2 ){ //Variables.Strain.Matrix = RightCauchyGreen (C)
306 
307  StressMatrix = GetJRightCauchyGreenDerivative(rVariables.Strain,StressMatrix);
308  StressMatrix *= rVariables.Factors.Alpha4;
309 
310  StressMatrix *= 2.0;
311 
312  noalias(rStressMatrix) += StressMatrix;
313  }
314  else if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_Kirchhoff ){ //Variables.Strain.Matrix = LeftCauchyGreen (b)
315 
316  StressMatrix = GetJLeftCauchyGreenDerivative(rVariables.Strain,StressMatrix);
317  StressMatrix *= rVariables.Factors.Alpha4;
318 
319  StressMatrix *= 2.0;
320 
321  noalias(rStressMatrix) += StressMatrix;
322  }
323 
324 
325  KRATOS_CATCH(" ")
326  }
327 
328 
329 
330  double& AddConstitutiveComponent(HyperElasticDataType& rVariables, double &rCabcd,
331  const unsigned int& a, const unsigned int& b,
332  const unsigned int& c, const unsigned int& d) override
333  {
334  KRATOS_TRY
335 
336  rCabcd = this->AddIsochoricConstitutiveComponent(rVariables,rCabcd,a,b,c,d);
337 
338  rCabcd = this->AddVolumetricConstitutiveComponent(rVariables,rCabcd,a,b,c,d);
339 
340  //std::cout<<" Cabcd ["<<a<<","<<b<<","<<c<<","<<d<<"] :"<<rCabcd<<std::endl;
341 
342  return rCabcd;
343 
344  KRATOS_CATCH(" ")
345  }
346 
347 
348 
349 
350  double& AddIsochoricConstitutiveComponent(HyperElasticDataType& rVariables, double &rCabcd,
351  const unsigned int& a, const unsigned int& b,
352  const unsigned int& c, const unsigned int& d) override
353  {
354  KRATOS_TRY
355 
356  const ModelDataType& rModelData = rVariables.GetModelData();
357  const StressMeasureType& rStressMeasure = rModelData.GetStressMeasure();
358 
359  double Dabcd = 0;
360  double Cabef = 0;
361  double Ccdef = 0;
362  //double Cabcd = 0;
363  //double Cefmn = 0;
364  //double Ccdmn = 0;
365 
366  MatrixType StressMatrix;
367  MatrixType StressPartMatrix;
368 
369 
370  if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_PK2 ){ //Variables.Strain.CauchyGreenMatrix = RightCauchyGreen (C)
371 
372  //constitutive tensor for PK2 still not giving the correct numbers in the 4 and 5 row, something is wrong
373 
374  StressPartMatrix = GetI1RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
375  noalias(StressMatrix) = rVariables.Factors.Alpha1 * StressPartMatrix;
376 
377  StressPartMatrix = GetI2RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
378  noalias(StressMatrix) += rVariables.Factors.Alpha2 * StressPartMatrix;
379 
380  StressPartMatrix = GetI3RightCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
381  noalias(StressMatrix) += rVariables.Factors.Alpha3 * StressPartMatrix;
382 
383  StressMatrix *= 2.0;
384 
385  Dabcd = ( rVariables.Strain.Invariants.J_13 * rVariables.Strain.Invariants.J_13 * ( (rVariables.Strain.InverseMatrix(a,b)*rVariables.Strain.InverseMatrix(d,c)/3.0) - 0.5 * (rVariables.Strain.InverseMatrix(a,c)*rVariables.Strain.InverseMatrix(b,d)+rVariables.Strain.InverseMatrix(a,d)*rVariables.Strain.InverseMatrix(b,c)) ) );
386 
387 
388  for(unsigned int e=0; e<3; e++)
389  {
390  for(unsigned int f=0; f<3; f++)
391  {
392 
393  Cabef = GetIsochoricRightCauchyGreenDerivative(rVariables.Strain,Cabef,a,b,e,f);
394  Ccdef = GetIsochoricRightCauchyGreenDerivative(rVariables.Strain,Ccdef,c,d,e,f);
395 
396  rCabcd += ( rVariables.Strain.InverseMatrix(c,d) * Cabef + rVariables.Strain.InverseMatrix(a,b) * Ccdef + Dabcd * rVariables.Strain.Matrix(e,f) ) * (-2.0/3.0) * StressMatrix(e,f);
397 
398  // splitted option:
399  //rCabcd += ( rVariables.Strain.InverseMatrix(c,d) * Cabef + rVariables.Strain.InverseMatrix(a,b) * Ccdef ) * (-2.0/3.0) * StressMatrix(e,f);
400  //rCabcd += ( Dabcd * rVariables.Strain.Matrix(e,f) ) * (-2.0/3.0) * StressMatrix(e,f);
401 
402  //some terms are not included in the ddW/dCdC: (generally it is not needed)
403  // for(unsigned int m=0; m<3; m++)
404  // {
405  // for(unsigned int n=0; n<3; n++)
406  // {
407  // Ccdmn = GetIsochoricRightCauchyGreenDerivative( rVariables.Strain, Ccdmn,c,d,m,n);
408 
409  // //2nd derivatives
410  // Cabcd = GetI1RightCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
411  // Cefmn += rVariables.Factors.Alpha1 * Cabcd * Cabef * Ccdmn;
412 
413  // Cabcd = GetI2RightCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
414  // Cefmn += rVariables.Factors.Alpha2 * Cabcd * Cabef * Ccdmn;
415 
416  // Cabcd = GetI3RightCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
417  // Cefmn += rVariables.Factors.Alpha3 * Cabcd * Cabef * Ccdmn;
418 
419  // //1st derivatives
420  // Cabcd = GetI1RightCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
421  // Cefmn += rVariables.Factors.Beta1 * Cabcd * Cabef * Ccdmn;
422 
423  // Cabcd = GetI2RightCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
424  // Cefmn += rVariables.Factors.Beta2 * Cabcd * Cabef * Ccdmn;
425 
426  // Cabcd = GetI3RightCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
427  // Cefmn += rVariables.Factors.Beta3 * Cabcd * Cabef * Ccdmn;
428 
429  // }
430  // }
431 
432  }
433  }
434 
435  //rCabcd += Cefmn * 4;
436 
437  }
438  else if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_Kirchhoff ){ //Variables.Strain.Matrix = LeftCauchyGreen (b)
439 
440  //constitutive tensor for kirchhoff still not giving the correct numbers, something is wrong
441 
442  StressPartMatrix = GetI1LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
443  noalias(StressMatrix) = rVariables.Factors.Alpha1 * StressPartMatrix;
444 
445  StressPartMatrix = GetI2LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
446  noalias(StressMatrix) += rVariables.Factors.Alpha2 * StressPartMatrix;
447 
448  StressPartMatrix = GetI3LeftCauchyGreenDerivative(rVariables.Strain,StressPartMatrix);
449  noalias(StressMatrix) += rVariables.Factors.Alpha3 * StressPartMatrix;
450 
451  StressMatrix *= 2.0;
452 
453  Dabcd = ( rVariables.Strain.Invariants.J_13 * rVariables.Strain.Invariants.J_13 * ( (msIdentityMatrix(a,b)*msIdentityMatrix(d,c)/3.0) - 0.5 * (msIdentityMatrix(a,c)*msIdentityMatrix(b,d)+msIdentityMatrix(a,d)*msIdentityMatrix(b,c)) ) );
454 
455  for(unsigned int e=0; e<3; e++)
456  {
457  for(unsigned int f=0; f<3; f++)
458  {
459 
460  Cabef = GetIsochoricLeftCauchyGreenDerivative(rVariables.Strain,Cabef,a,b,e,f);
461  Ccdef = GetIsochoricLeftCauchyGreenDerivative(rVariables.Strain,Ccdef,c,d,e,f);
462 
463  rCabcd += ( msIdentityMatrix(c,d) * Cabef + msIdentityMatrix(a,b) * Ccdef + Dabcd * msIdentityMatrix(e,f) ) * (-2.0/3.0) * StressMatrix(e,f);
464 
465  // splitted option:
466  //rCabcd += ( msIdentityMatrix(c,d) * Cabef + msIdentityMatrix(a,b) * Ccdef ) * (-2.0/3.0) * StressMatrix(e,f);
467  //rCabcd += ( Dabcd * msIdentityMatrix(e,f) ) * (-2.0/3.0) * StressMatrix(e,f);
468 
469 
470  // some terms are not included in the ddW/dbdb: (generally it is not needed)
471  // for(unsigned int m=0; m<3; m++)
472  // {
473  // for(unsigned int n=0; n<3; n++)
474  // {
475  // Ccdmn = GetIsochoricLeftCauchyGreenDerivative( rVariables.Strain, Ccdmn,c,d,m,n);
476 
477  // //2nd derivatives
478  // //check why this term is not needed
479  // //Cabcd = GetI1LeftCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
480  // //Cefmn += rVariables.Factors.Alpha1 * Cabcd * Cabef * Ccdmn;
481 
482  // Cabcd = GetI2LeftCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
483  // Cefmn += rVariables.Factors.Alpha2 * Cabcd * Cabef * Ccdmn;
484 
485  // Cabcd = GetI3LeftCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,e,f,m,n);
486  // Cefmn += rVariables.Factors.Alpha3 * Cabcd * Cabef * Ccdmn;
487 
488  // //1st derivatives
489  // Cabcd = GetI1LeftCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
490  // Cefmn += rVariables.Factors.Beta1 * Cabcd * Cabef * Ccdmn;
491 
492  // Cabcd = GetI2LeftCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
493  // Cefmn += rVariables.Factors.Beta2 * Cabcd * Cabef * Ccdmn;
494 
495  // Cabcd = GetI3LeftCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,e,f,m,n);
496  // Cefmn += rVariables.Factors.Beta3 * Cabcd * Cabef * Ccdmn;
497 
498  // }
499  // }
500 
501  }
502  }
503 
504  //rCabcd += Cefmn * 4;
505 
506  }
507 
508  return rCabcd;
509 
510  KRATOS_CATCH(" ")
511  }
512 
513 
514  double& AddVolumetricConstitutiveComponent(HyperElasticDataType& rVariables, double &rCabcd,
515  const unsigned int& a, const unsigned int& b,
516  const unsigned int& c, const unsigned int& d) override
517  {
518  KRATOS_TRY
519 
520  const ModelDataType& rModelData = rVariables.GetModelData();
521  const StressMeasureType& rStressMeasure = rModelData.GetStressMeasure();
522 
523  double Cabcd = 0;
524  double nCabcd = 0;
525 
526  if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_PK2 ){ //Variables.Strain.Matrix = RightCauchyGreen (C)
527 
528  //2nd derivatives
529  Cabcd = GetJRightCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,a,b,c,d);
530  nCabcd += rVariables.Factors.Alpha4 * Cabcd;
531 
532  //1st derivatives
533  Cabcd = GetJRightCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,a,b,c,d);
534  nCabcd += rVariables.Factors.Beta4 * Cabcd;
535 
536  nCabcd *= 4.0;
537 
538  rCabcd += nCabcd;
539  }
540  else if( rStressMeasure == ConstitutiveModelData::StressMeasureType::StressMeasure_Kirchhoff ){ //Variables.Strain.Matrix = LeftCauchyGreen (b)
541  //2nd derivatives
542  Cabcd = GetJLeftCauchyGreen2ndDerivative(rVariables.Strain,Cabcd,a,b,c,d);
543  nCabcd += rVariables.Factors.Alpha4 * Cabcd;
544 
545  //1st derivatives
546  Cabcd = GetJLeftCauchyGreenSquare1stDerivative(rVariables.Strain,Cabcd,a,b,c,d);
547  nCabcd += rVariables.Factors.Beta4 * Cabcd;
548 
549  nCabcd *= 4.0;
550 
551  rCabcd += nCabcd;
552  }
553 
554  return rCabcd;
555 
556  KRATOS_CATCH(" ")
557  }
558 
559  // set the default volumetric function for the incompressible case
560 
561  void CalculateAndAddVolumetricStrainEnergy(HyperElasticDataType& rVariables, double& rVolumetricDensityFunction) override
562  {
563  KRATOS_TRY
564 
565  const ModelDataType& rValues = rVariables.GetModelData();
566 
567  rVolumetricDensityFunction += rValues.GetPressure() * rVariables.Strain.Invariants.J;
568 
569  KRATOS_CATCH(" ")
570  }
571 
572 
574  {
575  KRATOS_TRY
576 
578 
579  rVariables.Factors.Alpha4 = this->GetVolumetricFunction1stJDerivative(rVariables,rVariables.Factors.Alpha4);
580  rVariables.Factors.Beta4 = this->GetVolumetricFunction2ndJDerivative(rVariables,rVariables.Factors.Beta4);
581 
582  KRATOS_CATCH(" ")
583  }
584 
585  // set the default volumetric function for the incompressible case
586 
587  double& GetVolumetricFunction1stJDerivative(HyperElasticDataType& rVariables, double& rDerivative) override //dU/dJ
588  {
589  KRATOS_TRY
590 
591  const ModelDataType& rValues = rVariables.GetModelData();
592 
593  rDerivative = rValues.GetPressure();
594 
595  return rDerivative;
596 
597  KRATOS_CATCH(" ")
598  };
599 
600 
601  double& GetVolumetricFunction2ndJDerivative(HyperElasticDataType& rVariables, double& rDerivative) override //ddU/dJdJ
602  {
603  KRATOS_TRY
604 
605  rDerivative = 0.0;
606 
607  return rDerivative;
608 
609  KRATOS_CATCH(" ")
610  };
611 
615 
616 
620 
621 
625 
626 
628 
629  private:
630 
633 
634 
638 
639 
643 
644 
648 
649 
653 
654 
658  friend class Serializer;
659 
660 
661  void save(Serializer& rSerializer) const override
662  {
664  }
665 
666  void load(Serializer& rSerializer) override
667  {
669  }
670 
674 
675 
679 
681 
682  }; // Class IsochoricMooneyRivlinModel
683 
685 
688 
689 
693 
694 
696 
698 
699 } // namespace Kratos.
700 
701 #endif // KRATOS_ISOCHORIC_MOONEY_RIVLIN_MODEL_H_INCLUDED defined
StressMeasureType
Definition: constitutive_model_data.hpp:83
Definition: amatrix_interface.h:41
Short class definition.
Definition: isochoric_mooney_rivlin_model.hpp:48
KRATOS_CLASS_POINTER_DEFINITION(IsochoricMooneyRivlinModel)
Pointer definition of IsochoricMooneyRivlinModel.
double & AddVolumetricConstitutiveComponent(HyperElasticDataType &rVariables, double &rCabcd, const unsigned int &a, const unsigned int &b, const unsigned int &c, const unsigned int &d) override
Definition: isochoric_mooney_rivlin_model.hpp:514
void CalculateAndAddIsochoricStressTensor(HyperElasticDataType &rVariables, MatrixType &rStressMatrix) override
Definition: isochoric_mooney_rivlin_model.hpp:211
void CalculateStressAndConstitutiveTensors(ModelDataType &rValues, MatrixType &rStressMatrix, Matrix &rConstitutiveMatrix) override
Definition: isochoric_mooney_rivlin_model.hpp:129
void CalculateAndAddVolumetricStrainEnergy(HyperElasticDataType &rVariables, double &rVolumetricDensityFunction) override
Definition: isochoric_mooney_rivlin_model.hpp:561
void CalculateStrainEnergy(ModelDataType &rValues, double &rDensityFunction) override
Definition: isochoric_mooney_rivlin_model.hpp:94
IsochoricMooneyRivlinModel(IsochoricMooneyRivlinModel const &rOther)
Copy constructor.
Definition: isochoric_mooney_rivlin_model.hpp:65
double & AddIsochoricConstitutiveComponent(HyperElasticDataType &rVariables, double &rCabcd, const unsigned int &a, const unsigned int &b, const unsigned int &c, const unsigned int &d) override
Definition: isochoric_mooney_rivlin_model.hpp:350
~IsochoricMooneyRivlinModel() override
Destructor.
Definition: isochoric_mooney_rivlin_model.hpp:81
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: isochoric_mooney_rivlin_model.hpp:172
ConstitutiveModel::Pointer Clone() const override
Clone.
Definition: isochoric_mooney_rivlin_model.hpp:75
void CalculateStressTensor(ModelDataType &rValues, MatrixType &rStressMatrix) override
Definition: isochoric_mooney_rivlin_model.hpp:110
IsochoricMooneyRivlinModel & operator=(IsochoricMooneyRivlinModel const &rOther)
Assignment operator.
Definition: isochoric_mooney_rivlin_model.hpp:68
void CalculateAndAddVolumetricStressTensor(HyperElasticDataType &rVariables, MatrixType &rStressMatrix) override
Definition: isochoric_mooney_rivlin_model.hpp:296
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: isochoric_mooney_rivlin_model.hpp:178
IsochoricMooneyRivlinModel()
Default constructor.
Definition: isochoric_mooney_rivlin_model.hpp:62
double & AddConstitutiveComponent(HyperElasticDataType &rVariables, double &rCabcd, const unsigned int &a, const unsigned int &b, const unsigned int &c, const unsigned int &d) override
Definition: isochoric_mooney_rivlin_model.hpp:330
double & GetVolumetricFunction2ndJDerivative(HyperElasticDataType &rVariables, double &rDerivative) override
Definition: isochoric_mooney_rivlin_model.hpp:601
double & GetVolumetricFunction1stJDerivative(HyperElasticDataType &rVariables, double &rDerivative) override
Definition: isochoric_mooney_rivlin_model.hpp:587
std::string Info() const override
Turn back information as a string.
Definition: isochoric_mooney_rivlin_model.hpp:164
void CalculateScalingFactors(HyperElasticDataType &rVariables) override
Definition: isochoric_mooney_rivlin_model.hpp:573
Short class definition.
Definition: mooney_rivlin_model.hpp:50
void CalculateScalingFactors(HyperElasticDataType &rVariables) override
Definition: mooney_rivlin_model.cpp:284
MooneyRivlinModel & operator=(MooneyRivlinModel const &rOther)
Assignment operator.
Definition: mooney_rivlin_model.cpp:47
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
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
f
Definition: generate_convection_diffusion_explicit_element.py:112
a
Definition: generate_stokes_twofluid_element.py:77
b
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:31
c
Definition: generate_weakly_compressible_navier_stokes_element.py:108
def load(f)
Definition: ode_solve.py:307
int d
Definition: ode_solve.py:397
e
Definition: run_cpp_mpi_tests.py:31
Definition: constitutive_model_data.hpp:383
const double & GetPressure() const
Definition: constitutive_model_data.hpp:446
const StressMeasureType & GetStressMeasure() const
Definition: constitutive_model_data.hpp:452
MatrixType StressMatrix
Definition: constitutive_model_data.hpp:401
double Alpha3
Definition: hyper_elastic_model.hpp:70
double Alpha1
Definition: hyper_elastic_model.hpp:68
double Alpha4
Definition: hyper_elastic_model.hpp:71
double Beta4
Definition: hyper_elastic_model.hpp:76
double Alpha2
Definition: hyper_elastic_model.hpp:69
Definition: hyper_elastic_model.hpp:108
StrainData Strain
Definition: hyper_elastic_model.hpp:117
HyperElasticFactors Factors
Definition: hyper_elastic_model.hpp:116
const ModelDataType & GetModelData() const
Definition: hyper_elastic_model.hpp:124
MatrixType InverseMatrix
Definition: hyper_elastic_model.hpp:102
StrainInvariants Invariants
Definition: hyper_elastic_model.hpp:98
MatrixType Matrix
Definition: hyper_elastic_model.hpp:101
double J
Definition: hyper_elastic_model.hpp:60
double J_13
Definition: hyper_elastic_model.hpp:61