OGS
LinearElasticIsotropic.cpp
Go to the documentation of this file.
1
11
13
14namespace MPL = MaterialPropertyLib;
15
16namespace MaterialLib
17{
18namespace Solids
19{
20template <int DisplacementDim>
21std::optional<std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
22 std::unique_ptr<typename MechanicsBase<
23 DisplacementDim>::MaterialStateVariables>,
26 MaterialPropertyLib::VariableArray const& variable_array_prev,
27 MaterialPropertyLib::VariableArray const& variable_array, double const t,
28 ParameterLib::SpatialPosition const& x, double const /*dt*/,
30 MaterialStateVariables const& /*material_state_variables*/) const
31{
32 auto const& eps_m = std::get<MPL::SymmetricTensor<DisplacementDim>>(
33 variable_array.mechanical_strain);
34 auto const& eps_m_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
35 variable_array_prev.mechanical_strain);
36 auto const& sigma_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
37 variable_array_prev.stress);
38 auto const T = variable_array_prev.temperature;
39
40 KelvinMatrix C = getElasticTensor(t, x, T);
41
42 KelvinVector sigma = sigma_prev + C * (eps_m - eps_m_prev);
43
44 return {std::make_tuple(
45 sigma,
46 std::make_unique<
48 C)};
49}
50
51template <int DisplacementDim>
54 double const t, ParameterLib::SpatialPosition const& x,
55 double const /*T*/) const
56{
57 return elasticTangentStiffness<DisplacementDim>(_mp.lambda(t, x),
58 _mp.mu(t, x));
59}
60
61template class LinearElasticIsotropic<2>;
62template class LinearElasticIsotropic<3>;
63
64} // namespace Solids
65} // namespace MaterialLib
std::optional< std::tuple< typename MechanicsBase< DisplacementDim >::KelvinVector, std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables >, typename MechanicsBase< DisplacementDim >::KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
KelvinMatrix getElasticTensor(double const t, ParameterLib::SpatialPosition const &x, double const T) const
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > mechanical_strain
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > stress
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix