v0.14.0
Public Types | Public Member Functions | Public Attributes | List of all members
NeoHookean< TYPE > Struct Template Reference

NeoHookan equation. More...

#include <users_modules/basic_finite_elements/nonlinear_elastic_materials/src/NeoHookean.hpp>

Inheritance diagram for NeoHookean< TYPE >:
[legend]
Collaboration diagram for NeoHookean< TYPE >:
[legend]

Public Types

using PiolaKirchoffI = NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
 

Public Member Functions

 NeoHookean ()
 
MoFEMErrorCode NeoHooke_PiolaKirchhoffII ()
 calculate second Piola Kirchhoff More...
 
virtual MoFEMErrorCode calculateP_PiolaKirchhoffI (const NonlinearElasticElement::BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Function overload to implement user material. More...
 
MoFEMErrorCode NeoHookean_ElasticEnergy ()
 calculate elastic energy density More...
 
MoFEMErrorCode calculateElasticEnergy (const NonlinearElasticElement::BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Calculate elastic energy density. More...
 
- Public Member Functions inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
 FunctionsToCalculatePiolaKirchhoffI ()
 
virtual ~FunctionsToCalculatePiolaKirchhoffI ()=default
 
MoFEMErrorCode calculateC_CauchyDeformationTensor ()
 
MoFEMErrorCode calculateE_GreenStrain ()
 
MoFEMErrorCode calculateS_PiolaKirchhoffII ()
 
virtual MoFEMErrorCode calculateCauchyStress (const BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Function overload to implement user material. More...
 
virtual MoFEMErrorCode setUserActiveVariables (int &nb_active_variables)
 add additional active variables More...
 
virtual MoFEMErrorCode setUserActiveVariables (VectorDouble &activeVariables)
 Add additional independent variables More complex physical models depend on gradient of defamation and some additional variables. For example can depend on temperature. This function adds additional independent variables to the model. More...
 
virtual MoFEMErrorCode calculatesIGma_EshelbyStress (const BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Calculate Eshelby stress. More...
 
virtual MoFEMErrorCode getDataOnPostProcessor (std::map< std::string, std::vector< VectorDouble >> &field_map, std::map< std::string, std::vector< MatrixDouble >> &grad_map)
 Do operations when pre-process. More...
 

Public Attributes

TYPE detC
 
TYPE logJ
 
MatrixBoundedArray< TYPE, 9 > invC
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invC
 
FTensor::Index< 'i', 3 > i
 
FTensor::Index< 'j', 3 > j
 
FTensor::Index< 'k', 3 > k
 
- Public Attributes inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
FTensor::Index< 'i', 3 > i
 
FTensor::Index< 'j', 3 > j
 
FTensor::Index< 'k', 3 > k
 
double lambda
 
double mu
 
MatrixBoundedArray< TYPE, 9 > F
 
MatrixBoundedArray< TYPE, 9 > C
 
MatrixBoundedArray< TYPE, 9 > E
 
MatrixBoundedArray< TYPE, 9 > S
 
MatrixBoundedArray< TYPE, 9 > invF
 
MatrixBoundedArray< TYPE, 9 > P
 
MatrixBoundedArray< TYPE, 9 > sIGma
 
MatrixBoundedArray< TYPE, 9 > h
 
MatrixBoundedArray< TYPE, 9 > H
 
MatrixBoundedArray< TYPE, 9 > invH
 
MatrixBoundedArray< TYPE, 9 > sigmaCauchy
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_F
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_C
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_E
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_S
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invF
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_P
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_sIGma
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_h
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_H
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invH
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_sigmaCauchy
 
TYPE J
 
TYPE eNergy
 
TYPE detH
 
TYPE detF
 
int gG
 Gauss point number. More...
 
CommonDatacommonDataPtr
 
MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperatoropPtr
 pointer to finite element tetrahedral operator More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
static auto resizeAndSet (MatrixBoundedArray< TYPE, 9 > &m)
 

Detailed Description

template<typename TYPE>
struct NeoHookean< TYPE >

NeoHookan equation.

Examples
NeoHookean.hpp.

Definition at line 16 of file NeoHookean.hpp.

Member Typedef Documentation

◆ PiolaKirchoffI

Examples
NeoHookean.hpp.

Definition at line 21 of file NeoHookean.hpp.

Constructor & Destructor Documentation

◆ NeoHookean()

template<typename TYPE >
NeoHookean< TYPE >::NeoHookean ( )
inline

Member Function Documentation

◆ calculateElasticEnergy()

template<typename TYPE >
MoFEMErrorCode NeoHookean< TYPE >::calculateElasticEnergy ( const NonlinearElasticElement::BlockData  block_data,
boost::shared_ptr< const NumeredEntFiniteElement >  fe_ptr 
)
inlinevirtual

Calculate elastic energy density.

\[\Psi = \frac{1}{2}\lambda(\textrm{tr}[\mathbf{E}])^2+\mu\mathbf{E}:\mathbf{E}\]

Reimplemented from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >.

Examples
NeoHookean.hpp.

Definition at line 94 of file NeoHookean.hpp.

96  {
98 
99  this->lambda = LAMBDA(block_data.E, block_data.PoissonRatio);
100  this->mu = MU(block_data.E, block_data.PoissonRatio);
102  this->J = determinantTensor3by3(this->F);
104 
106  }

◆ calculateP_PiolaKirchhoffI()

template<typename TYPE >
virtual MoFEMErrorCode NeoHookean< TYPE >::calculateP_PiolaKirchhoffI ( const NonlinearElasticElement::BlockData  block_data,
boost::shared_ptr< const NumeredEntFiniteElement >  fe_ptr 
)
inlinevirtual

Function overload to implement user material.

Calculation of Piola Kirchhoff I is implemented by user. Tangent matrix user implemented physical equation is calculated using automatic differentiation.

\(\mathbf{S} = \lambda\textrm{tr}[\mathbf{E}]\mathbf{I}+2\mu\mathbf{E}\)

Notes:
Number of actual Gauss point is accessed from variable gG.
Access to operator data structures is available by variable opPtr.
Access to common data is by commonDataPtr.

Parameters
block_dataused to give access to material parameters
fe_ptrpointer to element data structures

For details look to:
NONLINEAR CONTINUUM MECHANICS FOR FINITE ELEMENT ANALYSIS, Javier Bonet, Richard D. Wood

Reimplemented from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >.

Examples
NeoHookean.hpp.

Definition at line 62 of file NeoHookean.hpp.

64  {
66 
67  this->lambda = LAMBDA(block_data.E, block_data.PoissonRatio);
68  this->mu = MU(block_data.E, block_data.PoissonRatio);
71 
72  this->t_P(i, j) = this->t_F(i, k) * this->t_S(k, j);
73 
75  }

◆ NeoHooke_PiolaKirchhoffII()

template<typename TYPE >
MoFEMErrorCode NeoHookean< TYPE >::NeoHooke_PiolaKirchhoffII ( )
inline

calculate second Piola Kirchhoff

\(\mathbf{S} = \mu(\mathbf{I}-\mathbf{C}^{-1})+\lambda(\ln{J})\mathbf{C}^{-1}\)

For details look to:
NONLINEAR CONTINUUM MECHANICS FOR FINITE ELEMENT ANALYSIS, Javier Bonet, Richard D. Wood

Examples
NeoHookean.hpp.

Definition at line 46 of file NeoHookean.hpp.

46  {
48 
49  detC = determinantTensor3by3(this->C);
51  this->J = determinantTensor3by3(this->F);
52 
53  logJ = log(sqrt(this->J * this->J));
54  constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
55 
56  this->t_S(i, j) = this->mu * (t_kd(i, j) - t_invC(i, j)) +
57  (this->lambda * logJ) * t_invC(i, j);
58 
60  }

◆ NeoHookean_ElasticEnergy()

template<typename TYPE >
MoFEMErrorCode NeoHookean< TYPE >::NeoHookean_ElasticEnergy ( )
inline

calculate elastic energy density

For details look to:
NONLINEAR CONTINUUM MECHANICS FOR FINITE ELEMENT ANALYSIS, Javier Bonet, Richard D. Wood

Examples
NeoHookean.hpp.

Definition at line 85 of file NeoHookean.hpp.

85  {
87  this->eNergy = this->t_C(i, i);
88  this->eNergy = 0.5 * this->mu * (this->eNergy - 3);
89  logJ = log(sqrt(this->J * this->J));
90  this->eNergy += -this->mu * logJ + 0.5 * this->lambda * pow(logJ, 2);
92  }

Member Data Documentation

◆ detC

template<typename TYPE >
TYPE NeoHookean< TYPE >::detC
Examples
NeoHookean.hpp.

Definition at line 27 of file NeoHookean.hpp.

◆ i

template<typename TYPE >
FTensor::Index<'i', 3> NeoHookean< TYPE >::i
Examples
NeoHookean.hpp.

Definition at line 32 of file NeoHookean.hpp.

◆ invC

template<typename TYPE >
MatrixBoundedArray<TYPE, 9> NeoHookean< TYPE >::invC
Examples
NeoHookean.hpp.

Definition at line 29 of file NeoHookean.hpp.

◆ j

template<typename TYPE >
FTensor::Index<'j', 3> NeoHookean< TYPE >::j
Examples
NeoHookean.hpp.

Definition at line 33 of file NeoHookean.hpp.

◆ k

template<typename TYPE >
FTensor::Index<'k', 3> NeoHookean< TYPE >::k
Examples
NeoHookean.hpp.

Definition at line 34 of file NeoHookean.hpp.

◆ logJ

template<typename TYPE >
TYPE NeoHookean< TYPE >::logJ
Examples
NeoHookean.hpp.

Definition at line 28 of file NeoHookean.hpp.

◆ t_invC

template<typename TYPE >
FTensor::Tensor2<FTensor::PackPtr<TYPE *, 0>, 3, 3> NeoHookean< TYPE >::t_invC
Examples
NeoHookean.hpp.

Definition at line 30 of file NeoHookean.hpp.


The documentation for this struct was generated from the following file:
MoFEMFunctionReturnHot
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::eNergy
TYPE eNergy
Definition: NonLinearElasticElement.hpp:152
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::t_P
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_P
Definition: NonLinearElasticElement.hpp:150
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI
Implementation of elastic (non-linear) St. Kirchhoff equation.
Definition: NonLinearElasticElement.hpp:79
NeoHookean::NeoHooke_PiolaKirchhoffII
MoFEMErrorCode NeoHooke_PiolaKirchhoffII()
calculate second Piola Kirchhoff
Definition: NeoHookean.hpp:46
LAMBDA
#define LAMBDA(E, NU)
Definition: fem_tools.h:22
FTensor::Kronecker_Delta
Kronecker Delta class.
Definition: Kronecker_Delta.hpp:15
NeoHookean::logJ
TYPE logJ
Definition: NeoHookean.hpp:28
MoFEM::invertTensor3by3
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
Definition: Templates.hpp:1559
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:535
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::F
MatrixBoundedArray< TYPE, 9 > F
Definition: NonLinearElasticElement.hpp:147
NonlinearElasticElement::BlockData::E
double E
Definition: HookeElement.hpp:34
NeoHookean::j
FTensor::Index< 'j', 3 > j
Definition: NeoHookean.hpp:33
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::t_F
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_F
Definition: NonLinearElasticElement.hpp:149
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::t_S
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_S
Definition: NonLinearElasticElement.hpp:149
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::C
MatrixBoundedArray< TYPE, 9 > C
Definition: NonLinearElasticElement.hpp:147
t_kd
constexpr auto t_kd
Definition: free_surface.cpp:137
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::t_C
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_C
Definition: NonLinearElasticElement.hpp:149
NeoHookean::t_invC
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invC
Definition: NeoHookean.hpp:30
NonlinearElasticElement::BlockData::PoissonRatio
double PoissonRatio
Definition: HookeElement.hpp:35
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::J
TYPE J
Definition: NonLinearElasticElement.hpp:152
MoFEM::determinantTensor3by3
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
Definition: Templates.hpp:1511
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::mu
double mu
Definition: NonLinearElasticElement.hpp:146
NeoHookean::NeoHookean_ElasticEnergy
MoFEMErrorCode NeoHookean_ElasticEnergy()
calculate elastic energy density
Definition: NeoHookean.hpp:85
NeoHookean::k
FTensor::Index< 'k', 3 > k
Definition: NeoHookean.hpp:34
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::resizeAndSet
static auto resizeAndSet(MatrixBoundedArray< TYPE, 9 > &m)
Definition: NonLinearElasticElement.hpp:336
NeoHookean::i
FTensor::Index< 'i', 3 > i
Definition: NeoHookean.hpp:32
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::calculateC_CauchyDeformationTensor
MoFEMErrorCode calculateC_CauchyDeformationTensor()
Definition: NonLinearElasticElement.hpp:160
MoFEMFunctionBeginHot
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:440
NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI::lambda
double lambda
Definition: NonLinearElasticElement.hpp:146
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
NeoHookean::invC
MatrixBoundedArray< TYPE, 9 > invC
Definition: NeoHookean.hpp:29
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
MU
#define MU(E, NU)
Definition: fem_tools.h:23
NeoHookean::detC
TYPE detC
Definition: NeoHookean.hpp:27