32template <StressTags tag,
typename Derived>
33Derived
createPK2Stress(
const Eigen::MatrixBase<Derived>& sMB,
const Eigen::MatrixBase<Derived>& F) {
34 const auto& S = sMB.derived();
36 static_assert(Concepts::EigenMatrix33<Derived> or Concepts::EigenMatrix22<Derived>);
38 auto J = F.determinant();
39 auto invF = F.inverse().eval();
40 return (J * invF * S * invF.transpose()).eval();
42 auto invF = F.inverse().eval();
43 return (invF * S * invF.transpose()).eval();
45 return (F.inverse() * S).eval();
61template <StressTags tag,
typename Derived>
62Derived
createPK1Stress(
const Eigen::MatrixBase<Derived>& sMB,
const Eigen::MatrixBase<Derived>& F) {
63 const auto& S = sMB.derived();
65 static_assert(Concepts::EigenMatrix33<Derived> or Concepts::EigenMatrix22<Derived>);
67 return (F.determinant() * S * F.inverse().transpose()).eval();
69 return (S * F.inverse().transpose()).eval();
73 return (F * S).eval();
87template <StressTags tag,
typename Derived>
89 const auto& S = sMB.derived();
91 static_assert(Concepts::EigenMatrix33<Derived> or Concepts::EigenMatrix22<Derived>);
93 return (F.determinant() * S).eval();
97 return (S * F.transpose()).eval();
99 return (F * S * F.transpose()).eval();
113template <StressTags tag,
typename Derived>
114Derived
createCauchyStress(
const Eigen::MatrixBase<Derived>& sMB,
const Eigen::MatrixBase<Derived>& F) {
115 const auto& S = sMB.derived();
116 const auto invJ = 1.0 / F.determinant();
118 static_assert(Concepts::EigenMatrix33<Derived> or Concepts::EigenMatrix22<Derived>);
122 return (invJ * S).eval();
124 return (invJ * S * F.transpose()).eval();
126 return (invJ * F * S * F.transpose()).eval();
141template <StressTags from, StressTags to,
typename DerivedS,
typename DerivedF>
142auto transformStress(
const Eigen::MatrixBase<DerivedS>& sRaw,
const Eigen::MatrixBase<DerivedF>& F) {
144 "No useful transformation available for linear stresses.");
145 static_assert(Concepts::EigenMatrix33<DerivedF> or Concepts::EigenMatrix22<DerivedF>);
147 const auto S = Impl::maybeFromVoigt(sRaw.derived(),
false);
149 if constexpr (from == to)
152 return createPK2Stress<from>(S, F);
154 return createPK1Stress<from>(S, F);
156 return createKirchhoffStress<from>(S, F);
158 return createCauchyStress<from>(S, F);
Helper for the Eigen::Tensor types.
Definition of several material related enums.
helper functions used by material model implementations.
Definition: assemblermanipulatorbuildingblocks.hh:22
auto transformStress(const Eigen::MatrixBase< DerivedS > &sRaw, const Eigen::MatrixBase< DerivedF > &F)
Transform stress measures from one type to another.
Definition: stressconversions.hh:142
Derived createPK2Stress(const Eigen::MatrixBase< Derived > &sMB, const Eigen::MatrixBase< Derived > &F)
Create PK2 stress matrix based on the input.
Definition: stressconversions.hh:33
Derived createKirchhoffStress(const Eigen::MatrixBase< Derived > &sMB, const Eigen::MatrixBase< Derived > &F)
Create Kirchhoff stress matrix based on the input.
Definition: stressconversions.hh:88
Derived createPK1Stress(const Eigen::MatrixBase< Derived > &sMB, const Eigen::MatrixBase< Derived > &F)
Create PK1 stress matrix based on the input.
Definition: stressconversions.hh:62
Derived createCauchyStress(const Eigen::MatrixBase< Derived > &sMB, const Eigen::MatrixBase< Derived > &F)
Create Cauchy stress matrix based on the input.
Definition: stressconversions.hh:114