OGS
SolidModels/LinearElasticIsotropic.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
7
8namespace MPL = MaterialPropertyLib;
9
10namespace MaterialLib
11{
12namespace Solids
13{
14template <int DisplacementDim>
15std::optional<std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
16 std::unique_ptr<typename MechanicsBase<
17 DisplacementDim>::MaterialStateVariables>,
20 MaterialPropertyLib::VariableArray const& variable_array_prev,
21 MaterialPropertyLib::VariableArray const& variable_array, double const t,
22 ParameterLib::SpatialPosition const& x, double const /*dt*/,
24 MaterialStateVariables const& /*material_state_variables*/) const
25{
26 auto const& eps_m = std::get<MPL::SymmetricTensor<DisplacementDim>>(
27 variable_array.mechanical_strain);
28 auto const& eps_m_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
29 variable_array_prev.mechanical_strain);
30 auto const& sigma_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
31 variable_array_prev.stress);
32 auto const T = variable_array_prev.temperature;
33
34 KelvinMatrix C = getElasticTensor(t, x, T);
35
36 KelvinVector sigma = sigma_prev + C * (eps_m - eps_m_prev);
37
38 return {std::make_tuple(
39 sigma,
40 std::make_unique<
42 C)};
43}
44
45template <int DisplacementDim>
48 double const t, ParameterLib::SpatialPosition const& x,
49 double const /*T*/) const
50{
52 _mp.mu(t, x));
53}
54
55template class LinearElasticIsotropic<2>;
56template class LinearElasticIsotropic<3>;
57
58} // namespace Solids
59} // 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
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > elasticTangentStiffness(double const first_lame_parameter, double const shear_modulus)
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix