clsName.def( \
#functionname, \
[](materialName& self, const std::string& straintag, Eigen::Ref<const Eigen::Vector<double, vecSize>> eVoigt_) { \
if constexpr (not Concepts::IsMaterial<LinearElasticityT, materialName>) { \
Eigen::Vector<double, vecSize> eVoigt = eVoigt_; \
if (straintag ==
toString(StrainTags::rightCauchyGreenTensor)) \
return self.template functionname<StrainTags::rightCauchyGreenTensor>(eVoigt); \
else
if (straintag ==
toString(StrainTags::greenLagrangian)) \
return self.template functionname<StrainTags::greenLagrangian>(eVoigt); \
else
if (straintag ==
toString(StrainTags::linear)) \
DUNE_THROW(Dune::MathError, "Passing linear strain to " + std::string(#materialName) \
+ " does not makes sense use LinearElastic class"); \
else
if (straintag ==
toString(StrainTags::displacementGradient)) \
DUNE_THROW(Dune::MathError, \
"Passing displacementGradient strain in 6d Voigt notation does not make any sense!"); \
else
if (straintag ==
toString(StrainTags::deformationGradient)) \
DUNE_THROW(Dune::MathError, \
"Passing deformationGradient strain in 6d Voigt notation does not make any sense!"); \
else \
DUNE_THROW(Dune::MathError, straintag + "is not a valid strain tag."); \
} else { \
Eigen::Vector<double, vecSize> eVoigt = eVoigt_; \
if (straintag ==
toString(StrainTags::linear)) \
return self.template functionname<StrainTags::linear>(eVoigt); \
else \
DUNE_THROW(Dune::MathError, "Linear elastic material only accepts linear strains!"); \
} \
__builtin_unreachable(); \
}, \
"StrainName"_a, "strainVector"_a);
constexpr std::string toString(ScalarAffordances _e)
Definition: ferequirements.hh:34