version 0.4.1
Ikarus::Material< MI > Struct Template Reference

Interface classf or materials. More...

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

Inheritance diagram for Ikarus::Material< MI >:
[legend]

Public Types

using MaterialImpl = MI
 Type of material implementation. More...
 

Public Member Functions

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...
 
template<StrainTags tag, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto storedEnergy (const Eigen::MatrixBase< Derived > &Eraw) const
 Return the stored potential energy of the material. More...
 
template<StrainTags tag, bool voigt = true, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto stresses (const Eigen::MatrixBase< Derived > &Eraw) const
 Get the stresses of the material. More...
 
template<StrainTags tag, bool voigt = true, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto tangentModuli (const Eigen::MatrixBase< Derived > &Eraw) const
 Get the tangentModuli of the material. More...
 
template<typename STO >
auto rebind () const
 Rebind material to a different scalar type. More...
 

Static Public Member Functions

static constexpr std::string name ()
 Get the name of the implemented material. More...
 

Static Public Attributes

static constexpr bool isReduced
 Static constant for determining if the material has vanishing stress or strain components (is reduced). More...
 
static constexpr double derivativeFactor = MI::derivativeFactorImpl
 This factor denotes the differences between the returned stresses and moduli and the passed strain. More...
 

Detailed Description

template<class MI>
struct Ikarus::Material< MI >

Consider a hyper elastic material with the free Helmholtz energy

\[\require{cases}\psi: \begin{cases}\mathbb{R}^{3\times 3} &\rightarrow \mathbb{R} \\ \BC &\mapsto \psi(\BC) \end{cases}.\]

Then, the value of this potential energy is return by storedEnergy and its first derivative (the stresses) by stresses and the second derivatives (the tangent moduli) by tangentModuli .

The passed strains can be in several formats, i.e., \(\BC\) can be the right Cauchy-Green tensor, the deformation gradient \(\mathbf{F}\) or linear strains. The current supported tags are given by Ikarus::StrainTags.

Template Parameters
MIType of the underlying material implementation.

Member Typedef Documentation

◆ MaterialImpl

template<class MI >
using Ikarus::Material< MI >::MaterialImpl = MI

Member Function Documentation

◆ impl() [1/2]

template<class MI >
constexpr MaterialImpl & Ikarus::Material< MI >::impl ( )
inlineconstexpr
Returns
Reference to the underlying material.

◆ impl() [2/2]

template<class MI >
constexpr const MaterialImpl & Ikarus::Material< MI >::impl ( ) const
inlineconstexpr
Returns
Const reference to the underlying material.
Here is the caller graph for this function:

◆ materialParameters()

template<class MI >
auto Ikarus::Material< MI >::materialParameters ( ) const
inline
Returns
Material parameter.

◆ name()

template<class MI >
static constexpr std::string Ikarus::Material< MI >::name ( )
inlinestaticconstexpr
Returns
Name of the material.

◆ rebind()

template<class MI >
template<typename STO >
auto Ikarus::Material< MI >::rebind ( ) const
inline

Useful for using automatic differentiation.

Template Parameters
STOThe scalar type to rebind to.
Returns
Rebound material.

◆ storedEnergy()

template<class MI >
template<StrainTags tag, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto Ikarus::Material< MI >::storedEnergy ( const Eigen::MatrixBase< Derived > &  Eraw) const
inline

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.

◆ stresses()

template<class MI >
template<StrainTags tag, bool voigt = true, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto Ikarus::Material< MI >::stresses ( const Eigen::MatrixBase< Derived > &  Eraw) const
inline
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.

◆ tangentModuli()

template<class MI >
template<StrainTags tag, bool voigt = true, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived>
auto Ikarus::Material< MI >::tangentModuli ( const Eigen::MatrixBase< Derived > &  Eraw) const
inline
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.

Member Data Documentation

◆ derivativeFactor

template<class MI >
constexpr double Ikarus::Material< MI >::derivativeFactor = MI::derivativeFactorImpl
staticconstexpr

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

◆ isReduced

template<class MI >
constexpr bool Ikarus::Material< MI >::isReduced
staticconstexpr
Initial value:
= traits::isSpecializationNonTypeAndTypes<VanishingStress, MaterialImpl>::value or
traits::isSpecializationNonTypeAndTypes<VanishingStrain, MaterialImpl>::value

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