version 0.4.1
Ikarus::Materials::Hyperelastic< DEV, VOL > Struct Template Reference

Implementation of a general Hyperelastic Material material model. More...

#include <ikarus/finiteelements/mechanics/materials/hyperelastic/interface.hh>

Inheritance diagram for Ikarus::Materials::Hyperelastic< DEV, VOL >:
[legend]

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 MaterialImplimpl () const
 Const accessor to the underlying material (CRTP). More...
 
constexpr MaterialImplimpl ()
 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...
 

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 double derivativeFactor
 This factor denotes the differences between the returned stresses and moduli and the passed strain. More...
 

Detailed Description

template<typename DEV, typename VOL = NoVolumetricPart>
struct Ikarus::Materials::Hyperelastic< DEV, VOL >

\(\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.

Member Typedef Documentation

◆ MaterialImpl

using Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::MaterialImpl = Hyperelastic< DEV, NoVolumetricPart >
inherited

◆ MaterialParameters

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParameters = std::conditional_t<hasVolumetricPart, std::pair<MaterialParametersDEV, MaterialParametersVOL>, MaterialParametersDEV>

◆ MaterialParametersDEV

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParametersDEV = typename DEV::MaterialParameters

◆ MaterialParametersVOL

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialParametersVOL = typename VOL::MaterialParameter

◆ MaterialTensor

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::MaterialTensor = Eigen::TensorFixedSize<ScalarType, Eigen::Sizes<dim, dim, dim, dim> >

◆ ScalarType

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::ScalarType = typename DEV::ScalarType

◆ StrainMatrix

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::StrainMatrix = Eigen::Matrix<ScalarType, dim, dim>

◆ StressMatrix

template<typename DEV , typename VOL = NoVolumetricPart>
using Ikarus::Materials::Hyperelastic< DEV, VOL >::StressMatrix = StrainMatrix

Constructor & Destructor Documentation

◆ Hyperelastic() [1/2]

template<typename DEV , typename VOL = NoVolumetricPart>
Ikarus::Materials::Hyperelastic< DEV, VOL >::Hyperelastic ( const DEV &  dev)
inlineexplicit

◆ Hyperelastic() [2/2]

template<typename DEV , typename VOL = NoVolumetricPart>
Ikarus::Materials::Hyperelastic< DEV, VOL >::Hyperelastic ( const DEV &  dev,
const VOL &  vol 
)
inline

Member Function Documentation

◆ deviatoricFunction()

template<typename DEV , typename VOL = NoVolumetricPart>
const DEV & Ikarus::Materials::Hyperelastic< DEV, VOL >::deviatoricFunction ( ) const
inline

◆ impl() [1/2]

constexpr MaterialImpl & Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::impl ( )
inlineconstexprinherited
Returns
Reference to the underlying material.

◆ impl() [2/2]

constexpr const MaterialImpl & Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::impl ( ) const
inlineconstexprinherited
Returns
Const reference to the underlying material.

◆ materialParameters()

auto Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::materialParameters ( ) const
inlineinherited
Returns
Material parameter.

◆ materialParametersImpl()

template<typename DEV , typename VOL = NoVolumetricPart>
const MaterialParameters Ikarus::Materials::Hyperelastic< DEV, VOL >::materialParametersImpl ( ) const
inline

◆ name()

static constexpr std::string Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::name ( )
inlinestaticconstexprinherited
Returns
Name of the material.

◆ nameImpl()

template<typename DEV , typename VOL = NoVolumetricPart>
static constexpr std::string Ikarus::Materials::Hyperelastic< DEV, VOL >::nameImpl ( )
inlinestaticconstexprnoexcept

◆ rebind()

template<typename DEV , typename VOL = NoVolumetricPart>
template<typename STO >
auto Ikarus::Materials::Hyperelastic< DEV, VOL >::rebind ( ) const
inline
Template Parameters
STOThe target scalar type.
Returns
Hyperelastic<ScalarTypeOther> The rebound Hyperelastic material.

◆ storedEnergy()

auto Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::storedEnergy ( const Eigen::MatrixBase< Derived > &  Eraw) const
inlineinherited

This function return the free Helmholtz energy of the material

Template Parameters
tagStrain tag indicating which strain tensor components are passed.
DerivedThe underlying Eigen type.
Parameters
ErawThe strain tensor components passed in Voigt notation or matrix notation.
Returns
Scalar return of stored energy.

◆ storedEnergyImpl()

template<typename DEV , typename VOL = NoVolumetricPart>
template<typename Derived >
ScalarType Ikarus::Materials::Hyperelastic< DEV, VOL >::storedEnergyImpl ( const Eigen::MatrixBase< Derived > &  C) const
inline
Template Parameters
DerivedThe derived type of the input matrix.
Parameters
CThe right Cauchy-Green tensor.
Returns
ScalarType The stored energy.

◆ stresses()

auto Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::stresses ( const Eigen::MatrixBase< Derived > &  Eraw) const
inlineinherited
Template Parameters
tagStrain tag indicating which strain tensor components are passed.
voigtBoolean indicating whether to return Voigt-shaped result.
DerivedThe underlying Eigen type.
Parameters
ErawThe strain tensor components passed in Voigt notation or matrix notation.
Returns
Vectorial or Matrix return of stresses.

◆ stressesImpl()

template<typename DEV , typename VOL = NoVolumetricPart>
template<bool voigt, typename Derived >
StressMatrix Ikarus::Materials::Hyperelastic< DEV, VOL >::stressesImpl ( const Eigen::MatrixBase< Derived > &  C) const
inline
Template Parameters
voigtA boolean indicating whether to return stresses in Voigt notation.
DerivedThe derived type of the input matrix.
Parameters
CThe right Cauchy-Green tensor.
Returns
StressMatrix The stresses.

◆ tangentModuli()

auto Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::tangentModuli ( const Eigen::MatrixBase< Derived > &  Eraw) const
inlineinherited
Template Parameters
tagStrain tag indicating which strain tensor components are passed.
voigtBoolean indicating whether to return Voigt-shaped result.
DerivedThe underlying Eigen type.
Parameters
ErawThe strain tensor components passed in Voigt notation or matrix notation.
Returns
Tangent moduli in Voigt notation or as fourth-order tensor.

◆ tangentModuliImpl()

template<typename DEV , typename VOL = NoVolumetricPart>
template<bool voigt, typename Derived >
MaterialTensor Ikarus::Materials::Hyperelastic< DEV, VOL >::tangentModuliImpl ( const Eigen::MatrixBase< Derived > &  C) const
inline
Template Parameters
voigtA boolean indicating whether to return tangent moduli in Voigt notation.
DerivedThe derived type of the input matrix.
Parameters
CThe right Cauchy-Green tensor.
Returns
MaterialTensor The tangent moduli.

◆ volumetricFunction()

template<typename DEV , typename VOL = NoVolumetricPart>
const VOL & Ikarus::Materials::Hyperelastic< DEV, VOL >::volumetricFunction ( ) const
inline

Member Data Documentation

◆ derivativeFactor

constexpr double Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::derivativeFactor
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

◆ derivativeFactorImpl

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr double Ikarus::Materials::Hyperelastic< DEV, VOL >::derivativeFactorImpl = 2
staticconstexpr

◆ dim

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr int Ikarus::Materials::Hyperelastic< DEV, VOL >::dim = 3
staticconstexpr

◆ energyAcceptsVoigt

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::energyAcceptsVoigt = false
staticconstexpr

◆ hasVolumetricPart

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::hasVolumetricPart = not std::same_as<VOL, NoVolumetricPart>
staticconstexpr

◆ isAutoDiff

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::isAutoDiff = Concepts::AutodiffScalar<ScalarType>
staticconstexpr

◆ isReduced

constexpr bool Ikarus::Materials::Material< Hyperelastic< DEV, NoVolumetricPart > >::isReduced
staticconstexprinherited

◆ moduliAcceptsVoigt

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::moduliAcceptsVoigt = false
staticconstexpr

◆ moduliToVoigt

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::moduliToVoigt = false
staticconstexpr

◆ strainTag

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr auto Ikarus::Materials::Hyperelastic< DEV, VOL >::strainTag = StrainTags::rightCauchyGreenTensor
staticconstexpr

◆ stressAcceptsVoigt

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::stressAcceptsVoigt = false
staticconstexpr

◆ stressTag

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr auto Ikarus::Materials::Hyperelastic< DEV, VOL >::stressTag = StressTags::PK2
staticconstexpr

◆ stressToVoigt

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr bool Ikarus::Materials::Hyperelastic< DEV, VOL >::stressToVoigt = false
staticconstexpr

◆ tangentModuliTag

template<typename DEV , typename VOL = NoVolumetricPart>
constexpr auto Ikarus::Materials::Hyperelastic< DEV, VOL >::tangentModuliTag = TangentModuliTags::Material
staticconstexpr

The documentation for this struct was generated from the following file: