38 [[nodiscard]]
constexpr std::string
nameImpl()
const {
return "StVenantKirchhoff"; }
45 : materialParameter_{mpt} {}
49 using StrainMatrix = Eigen::Matrix<ScalarType, worldDimension, worldDimension>;
72 template <
typename Derived>
74 static_assert(Concepts::EigenMatrixOrVoigtNotation3<Derived>);
76 const ScalarType traceE = E.template segment<3>(0).sum();
78 E.template segment<3>(0).squaredNorm() + E.template segment<3>(3).squaredNorm() /
ScalarType(2.0);
79 return materialParameter_.
lambda /
ScalarType(2.0) * traceE * traceE + materialParameter_.
mu * squaredNorm;
81 const auto traceE = E.trace();
82 return materialParameter_.
lambda /
ScalarType(2.0) * traceE * traceE + materialParameter_.
mu * E.squaredNorm();
93 template <
bool voigt,
typename Derived>
95 static_assert(Concepts::EigenMatrixOrVoigtNotation3<
decltype(E.eval())>);
96 const auto& Ed = E.derived();
97 if constexpr (!voigt) {
99 static_assert(Concepts::EigenVector6<Derived>);
100 Eigen::Matrix<ScalarType, 3, 3> S;
101 const ScalarType traceE = Ed.template segment<3>(0).sum();
102 S.diagonal().array() =
103 materialParameter_.
lambda * traceE + 2 * materialParameter_.
mu * Ed.template segment<3>(0).array();
104 S(1, 2) = S(2, 1) = materialParameter_.
mu * Ed(3);
105 S(0, 2) = S(2, 0) = materialParameter_.
mu * Ed(4);
106 S(0, 1) = S(1, 0) = materialParameter_.
mu * Ed(5);
109 static_assert(Concepts::EigenMatrix33<Derived>);
110 return (materialParameter_.
lambda * Ed.trace() * StrainMatrix::Identity() + 2 * materialParameter_.
mu * Ed)
115 static_assert(Concepts::EigenVector6<Derived>);
116 Eigen::Matrix<ScalarType, 6, 1> S;
117 const ScalarType traceE = Ed.template segment<3>(0).sum();
118 S.template segment<3>(0).array() = traceE * materialParameter_.
lambda;
119 S.template segment<3>(0) += materialParameter_.
mu * 2 * Ed.template segment<3>(0);
120 S.template segment<3>(3) =
121 materialParameter_.
mu * Ed.template segment<3>(3);
124 Eigen::Matrix<ScalarType, 6, 1> S;
125 S.template segment<3>(0).array() = Ed.trace() * materialParameter_.
lambda;
126 S.template segment<3>(0) += 2 * materialParameter_.
mu * Ed.diagonal();
127 S(3) = 2 * materialParameter_.
mu * Ed(1, 2);
128 S(4) = 2 * materialParameter_.
mu * Ed(0, 2);
129 S(5) = 2 * materialParameter_.
mu * Ed(0, 1);
142 template <
bool voigt,
typename Derived>
144 static_assert(Concepts::EigenMatrixOrVoigtNotation3<Derived>);
145 if constexpr (!voigt) {
146 Eigen::TensorFixedSize<ScalarType, Eigen::Sizes<3, 3, 3, 3>> moduli;
151 Eigen::Matrix<ScalarType, 6, 6> moduli;
153 moduli.template block<3, 3>(0, 0).array() = materialParameter_.
lambda;
154 moduli.template block<3, 3>(0, 0).diagonal().array() += 2 * materialParameter_.
mu;
155 moduli.template block<3, 3>(3, 3).diagonal().array() = materialParameter_.
mu;
165 template <
typename ScalarTypeOther>
Helper for the Eigen::Tensor types.
Contains the Material interface class and related template functions for material properties.
auto symmetricIdentityFourthOrder()
Generates a symmetric identity fourth-order tensor.
Definition: tensorutils.hh:60
auto identityFourthOrder()
Generates an identity fourth-order tensor.
Definition: tensorutils.hh:101
Definition: simpleassemblers.hh:22
Interface classf or materials.
Definition: interface.hh:77
Implementation of the Saint Venant-Kirchhoff material model.The energy is computed as.
Definition: svk.hh:37
ScalarType storedEnergyImpl(const Eigen::MatrixBase< Derived > &E) const
Computes the stored energy in the Saint Venant-Kirchhoff material model.
Definition: svk.hh:73
static constexpr int worldDimension
Definition: svk.hh:48
static constexpr bool moduliAcceptsVoigt
Definition: svk.hh:59
static constexpr bool stressAcceptsVoigt
Definition: svk.hh:57
Eigen::Matrix< ScalarType, worldDimension, worldDimension > StrainMatrix
Definition: svk.hh:49
auto rebind() const
Rebinds the material to a different scalar type.
Definition: svk.hh:166
static constexpr bool moduliToVoigt
Definition: svk.hh:58
static constexpr auto strainTag
Definition: svk.hh:52
constexpr std::string nameImpl() const
Definition: svk.hh:38
auto stressesImpl(const Eigen::MatrixBase< Derived > &E) const
Computes the stresses in the Saint Venant-Kirchhoff material model.
Definition: svk.hh:94
auto tangentModuliImpl(const Eigen::MatrixBase< Derived > &E) const
Computes the tangent moduli in the Saint Venant-Kirchhoff material model.
Definition: svk.hh:143
static constexpr bool stressToVoigt
Definition: svk.hh:56
static constexpr auto stressTag
Definition: svk.hh:53
static constexpr double derivativeFactor
Definition: svk.hh:64
StVenantKirchhoffT(const LamesFirstParameterAndShearModulus &mpt)
Constructor for StVenantKirchhoffT.
Definition: svk.hh:44
static constexpr auto tangentModuliTag
Definition: svk.hh:54
static constexpr bool energyAcceptsVoigt
Definition: svk.hh:55
StrainMatrix StressMatrix
Definition: svk.hh:50
ST ScalarType
Definition: svk.hh:47
Definition: physicshelper.hh:88
double lambda
Definition: physicshelper.hh:89
double mu
Definition: physicshelper.hh:90
Concept defining the requirements for Eigen vectors.
Definition: concepts.hh:353