Implementation of the Neo-Hookean material model.The energy is computed as. More...
#include <ikarus/finiteelements/mechanics/materials/hyperelastic/neohooke.hh>
Public Types | |
using | ScalarType = ST |
using | StrainMatrix = Eigen::Matrix< ScalarType, dim, dim > |
using | StressMatrix = StrainMatrix |
using | MaterialTensor = Eigen::TensorFixedSize< ScalarType, Eigen::Sizes< dim, dim, dim, dim > > |
using | MaterialParameters = LamesFirstParameterAndShearModulus |
using | MaterialImpl = NeoHookeT< ST > |
Type of material implementation. More... | |
Public Member Functions | |
NeoHookeT (const MaterialParameters &mpt) | |
Constructor for NeoHookeT. More... | |
MaterialParameters | materialParametersImpl () const |
Returns the material parameters stored in the material. More... | |
template<typename Derived > | |
ScalarType | storedEnergyImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the stored energy in the Neo-Hookean material model. More... | |
template<bool voigt, typename Derived > | |
StressMatrix | stressesImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the stresses in the Neo-Hookean material model. More... | |
template<bool voigt, typename Derived > | |
MaterialTensor | tangentModuliImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the tangent moduli in the Neo-Hookean material model. More... | |
template<typename STO > | |
auto | rebind () const |
Rebinds the material to a different scalar type. More... | |
template<typename Derived > | |
auto | materialInversionImpl (const Eigen::MatrixBase< Derived > &Sraw) const |
Computes the strain measure and inverse material tangent for a given stress state. More... | |
constexpr const MaterialImpl & | impl () const |
Const accessor to the underlying material (CRTP). More... | |
constexpr MaterialImpl & | impl () |
Accessor to the underlying material (CRTP). More... | |
auto | materialParameters () const |
Returns the material parameters stored in the implemented material. More... | |
auto | storedEnergy (const Eigen::MatrixBase< Derived > &Eraw) const |
Return the stored potential energy of the material. More... | |
auto | stresses (const Eigen::MatrixBase< Derived > &Eraw) const |
Get the stresses of the material. More... | |
auto | tangentModuli (const Eigen::MatrixBase< Derived > &Eraw) const |
Get the tangentModuli of the material. More... | |
auto | materialInversion (const Eigen::MatrixBase< Derived > &Sraw, const Eigen::MatrixBase< Derived > &EstartRaw=Derived::Zero().eval(), const double tol=1e-12, const int maxIter=20) const |
Computes the corresponding strain measure and inverse material tangent for a given stress state. More... | |
Static Public Member Functions | |
static constexpr std::string | nameImpl () noexcept |
static constexpr std::string | name () |
Get the name of the implemented material. More... | |
Static Public Attributes | |
static constexpr int | dim = 3 |
static constexpr auto | strainTag = StrainTags::rightCauchyGreenTensor |
static constexpr auto | stressTag = StressTags::PK2 |
static constexpr auto | tangentModuliTag = TangentModuliTags::Material |
static constexpr bool | energyAcceptsVoigt = false |
static constexpr bool | stressToVoigt = false |
static constexpr bool | stressAcceptsVoigt = false |
static constexpr bool | moduliToVoigt = false |
static constexpr bool | moduliAcceptsVoigt = false |
static constexpr double | derivativeFactorImpl = 2 |
static constexpr bool | isReduced |
Static constant for determining if the material has vanishing stress or strain components (is reduced). More... | |
static constexpr bool | isLinear |
static constexpr double | derivativeFactor |
This factor denotes the differences between the returned stresses and moduli and the passed strain. More... | |
\[ \psi(\BC) = \frac{\mu}{2} (\tr \BC-3- 2 \log \sqrt{\det \BC}) + \frac{\la}{2} (\log \sqrt{\det \BC})^2 ,\]
where \( \BC \) denotes the right Cauchy-Green strain tensor.
The second Piola-Kirchhoff stresses are computed as
\[ \BS(\BC) =\fracpt{\psi(\BC)}{\BC} = \mu (\BI-\BC^{-1}) + \la \log \sqrt{\det \BC} \BC^{-1},\]
and the material tangent moduli are computed as
\[ \BBC(\BC) =\fracpt{^2\psi(\BC)}{\BC^2} = \la \BC^{-1} \otimes \BC^{-1} + 2 (\mu- \la \log \sqrt{\det \BC} ) \CI,\]
where \( \CI_{IJKL} = \frac{1}{2}({(\BC^{-1})}^{IK}{(\BC^{-1})}^{JL}+{(\BC^{-1})}^{IL} {(\BC^{-1})}^{JK}).\)
ST | The underlying scalar type. |
|
inherited |
using Ikarus::Materials::NeoHookeT< ST >::MaterialParameters = LamesFirstParameterAndShearModulus |
using Ikarus::Materials::NeoHookeT< ST >::MaterialTensor = Eigen::TensorFixedSize<ScalarType, Eigen::Sizes<dim, dim, dim, dim> > |
using Ikarus::Materials::NeoHookeT< ST >::ScalarType = ST |
using Ikarus::Materials::NeoHookeT< ST >::StrainMatrix = Eigen::Matrix<ScalarType, dim, dim> |
using Ikarus::Materials::NeoHookeT< ST >::StressMatrix = StrainMatrix |
|
inlineexplicit |
mpt | The Lame's parameters (first parameter and shear modulus). |
|
inlineconstexprinherited |
|
inlineconstexprinherited |
|
inlineinherited |
This assumes the existence of a complementary stored energy function $\chi(\BS)$, such that $$ \partial_{\BS} \chi(\BS) := \BE$$. Except for linear materials, this is not just the inverse of the material tangent, but needs the inversion of the materials stored energy function. For SVK and Linear Elasticity, the inverse of $\BC$ is taken. For NeoHooke an analytical solution exists, and for the general hyperelastic framework (and for all materials that don't implement the material inversion, for that a strain energy function exists) a numerical approach is used.
tag | Strain tag indicating which strain tensor components are expected as result. |
voigt | Boolean indicating whether to return Voigt-shaped result. |
useNumeric | forces the function to use the generic numerical approach |
Derived | the type of the stress matrix |
Sraw | input stress matrix |
EstartRaw | optionally define a starting value for the numerical algorithm (applies only to numerical inversion) |
tol | tolerance for the Newton-Raphson solver (applies only to numerical inversion). |
maxIter | maximum number of iterations for the Newton-Raphson solver (applies only to numerical inversion). |
|
inline |
Analytical solution is taken from R. Pfefferkorn, S. Bieber, B. Oesterle, M. Bischoff, and P. Betsch, “Improving efficiency and robustness of enhanced assumed strain elements for nonlinear problems,” Numerical Meth Engineering, vol. 122, no. 8, pp. 1911–1939, Apr. 2021, doi: 10.1002/nme.6605.
Derived | The derived type of the input matrix. |
Sraw | the input stress matrix. |
|
inlineinherited |
|
inline |
|
inlinestaticconstexprinherited |
|
inlinestaticconstexprnoexcept |
|
inline |
STO | The target scalar type. |
|
inlineinherited |
This function return the free Helmholtz energy of the material
tag | Strain tag indicating which strain tensor components are passed. |
Derived | The underlying Eigen type. |
Eraw | The strain tensor components passed in Voigt notation or matrix notation. |
|
inline |
Derived | The derived type of the input matrix. |
C | The right Cauchy-Green tensor. |
|
inlineinherited |
tag | Strain tag indicating which strain tensor components are passed. |
voigt | Boolean indicating whether to return Voigt-shaped result. |
Derived | The underlying Eigen type. |
Eraw | The strain tensor components passed in Voigt notation or matrix notation. |
|
inline |
voigt | A boolean indicating whether to return stresses in Voigt notation. |
Derived | The derived type of the input matrix. |
C | The right Cauchy-Green tensor. |
|
inlineinherited |
tag | Strain tag indicating which strain tensor components are passed. |
voigt | Boolean indicating whether to return Voigt-shaped result. |
Derived | The underlying Eigen type. |
Eraw | The strain tensor components passed in Voigt notation or matrix notation. |
|
inline |
voigt | A boolean indicating whether to return tangent moduli in Voigt notation. |
Derived | The derived type of the input matrix. |
C | The right Cauchy-Green tensor. |
|
staticconstexprinherited |
For neoHooke the inserted quantity is $C$ the Green-Lagrangian strain tensor, the function relation between the energy and the stresses is $S = 1 \dfrac{\partial\psi(E)}{\partial E}$. This factor is the pre factor, which is the difference to the actual derivative, which is written here
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexprinherited |
|
staticconstexprinherited |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |