Implementation of a general Hyperelastic Material material model. More...
#include <ikarus/finiteelements/mechanics/materials/hyperelastic/interface.hh>
Public Types | |
using | ScalarType = typename DEV::ScalarType |
using | StrainMatrix = Eigen::Matrix< ScalarType, dim, dim > |
using | StressMatrix = StrainMatrix |
using | MaterialTensor = Eigen::TensorFixedSize< ScalarType, Eigen::Sizes< dim, dim, dim, dim > > |
using | MaterialParametersDEV = typename DEV::MaterialParameters |
using | MaterialParametersVOL = typename VOL::MaterialParameter |
using | MaterialParameters = std::conditional_t< hasVolumetricPart, std::pair< MaterialParametersDEV, MaterialParametersVOL >, MaterialParametersDEV > |
using | MaterialImpl = Hyperelastic< DEV, NoVolumetricPart > |
Type of material implementation. More... | |
Public Member Functions | |
Hyperelastic (const DEV &dev) | |
Hyperelastic (const DEV &dev, const VOL &vol) | |
const DEV & | deviatoricFunction () const |
Returns the deviatoric function. More... | |
const VOL & | volumetricFunction () const |
Returns the volumetric function. More... | |
const MaterialParameters | materialParametersImpl () const |
Returns the material parameters stored in the deviatoric part of the material. More... | |
template<typename Derived > | |
ScalarType | storedEnergyImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the total stored energy in the Hyperelastic material model. More... | |
template<bool voigt, typename Derived > | |
StressMatrix | stressesImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the stresses in the Hyperelastic material model. More... | |
template<bool voigt, typename Derived > | |
MaterialTensor | tangentModuliImpl (const Eigen::MatrixBase< Derived > &C) const |
Computes the tangent moduli in the Hyperelastic material model. More... | |
template<typename STO > | |
auto | rebind () const |
Rebinds the material to a different scalar type. 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 bool | hasVolumetricPart = not std::same_as<VOL, NoVolumetricPart> |
static constexpr bool | isAutoDiff = Concepts::AutodiffScalar<ScalarType> |
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) = \hat{\Psi}(\la_1, \la_2, \la_3) + U(J)\) with \(\hat{\Psi}\) being the deviatoric part of the strain energy function and \( U(J) \) being the volumetric part. After calling the underlying deviatoric and volumetric function, the transformation to cartesian coordinate system is implemented in this interface.
|
inherited |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParameters = std::conditional_t<hasVolumetricPart, std::pair<MaterialParametersDEV, MaterialParametersVOL>, MaterialParametersDEV> |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParametersDEV = typename DEV::MaterialParameters |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParametersVOL = typename VOL::MaterialParameter |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialTensor = Eigen::TensorFixedSize<ScalarType, Eigen::Sizes<dim, dim, dim, dim> > |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::ScalarType = typename DEV::ScalarType |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::StrainMatrix = Eigen::Matrix<ScalarType, dim, dim> |
using Ikarus::Materials::Hyperelastic< DEV, VOL >::StressMatrix = StrainMatrix |
|
inlineexplicit |
|
inline |
|
inline |
|
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). |
|
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. |
|
inline |
|
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 |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexprinherited |
|
staticconstexprinherited |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |