|
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...
|
|
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<StrainTags tag, bool voigt = true, bool useNumeric = false, typename Derived >
requires CorrectStrainSize<MaterialImpl, Derived> |
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...
|
|
template<typename STO > |
auto | rebind () const |
| Rebind material to a different scalar type. More...
|
|
template<class MI>
struct Ikarus::Materials::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
-
MI | Type of the underlying material implementation. |
template<class MI >
template<
StrainTags tag, bool voigt = true, bool useNumeric = false, typename Derived >
requires CorrectStrainSize<
MaterialImpl, Derived>
auto Ikarus::Materials::Material< MI >::materialInversion |
( |
const Eigen::MatrixBase< Derived > & |
Sraw, |
|
|
const Eigen::MatrixBase< Derived > & |
EstartRaw = Derived::Zero().eval() , |
|
|
const double |
tol = 1e-12 , |
|
|
const int |
maxIter = 20 |
|
) |
| const |
|
inline |
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.
- Template Parameters
-
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 |
- Parameters
-
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). |
- Returns
- pair of inverse material tangent and strain tensor