OGS
LinearElasticTransverseIsotropic.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include "MechanicsBase.h"
8
9namespace MaterialLib
10{
11namespace Solids
12{
115template <int DisplacementDim>
116class LinearElasticTransverseIsotropic : public MechanicsBase<DisplacementDim>
117{
118public:
119 static int const KelvinVectorSize =
125
127
129 P const& E_i, P const& E_a, P const& nu_ii, P const& nu_ia,
130 P const& G_ia,
131 std::optional<ParameterLib::CoordinateSystem> const&
132 local_coordinate_system)
133 : E_i_p_(E_i),
134 E_a_p_(E_a),
135 nu_ii_p_(nu_ii),
136 nu_ia_p_(nu_ia),
137 G_ia_p_(G_ia),
138 local_coordinate_system_(local_coordinate_system)
139 {
140 }
141
143 double const /*t*/,
145 double const /*dt*/,
146 KelvinVector const& eps,
147 KelvinVector const& sigma,
149 MaterialStateVariables const& /* material_state_variables */)
150 const override
151 {
152 return eps.dot(sigma) / 2;
153 }
154
155 std::optional<
156 std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
157 std::unique_ptr<typename MechanicsBase<
158 DisplacementDim>::MaterialStateVariables>,
161 MaterialPropertyLib::VariableArray const& variable_array_prev,
162 MaterialPropertyLib::VariableArray const& variable_array,
163 double const t, ParameterLib::SpatialPosition const& x, double const dt,
165 material_state_variables) const override;
166
169 double const T) const;
170
171 double getBulkModulus(double const t,
173 KelvinMatrix const* const /*C*/) const override
174 {
175 const double E_i = E_i_p_(t, x)[0];
176 const double E_a = E_a_p_(t, x)[0];
177 const double nu_i = nu_ii_p_(t, x)[0];
178 const double nu_ia = nu_ia_p_(t, x)[0];
179
180 // Average Young's modulus
181 double const E_av = 2. * E_i / 3. + E_a / 3.;
182
183 // Poisson ratio in the plane of isotropy, due to the strain
184 // perpendicular to the plane of isotropy. nu_ai=nu_ia*E_a/E_i
185 const double nu_ai = nu_ia * E_a / E_i;
186
187 // Average Poisson ratio
188 // 12 13 21 23 31 32
189 // ai ai ia ii ia ii
190 const double nu_av = (nu_ai + nu_ia + nu_i) / 3.0;
191
192 return E_av / 3 / (1 - 2 * nu_av);
193 }
194
195protected:
197 P const& E_i_p_;
200 P const& E_a_p_;
202 P const& nu_ii_p_;
205 P const& nu_ia_p_;
208 P const& G_ia_p_;
209 std::optional<ParameterLib::CoordinateSystem> const&
211
212private:
214 double const t, ParameterLib::SpatialPosition const& x) const;
215};
216
217} // namespace Solids
218} // namespace MaterialLib
P const & nu_ii_p_
It is the in-plane Poisson’s ratio, .
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
KelvinMatrix getElasticTensorLeftTopCorner(double const t, ParameterLib::SpatialPosition const &x) const
LinearElasticTransverseIsotropic(P const &E_i, P const &E_a, P const &nu_ii, P const &nu_ia, P const &G_ia, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system)
double getBulkModulus(double const t, ParameterLib::SpatialPosition const &x, KelvinMatrix const *const) const override
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
P const & E_i_p_
It is the in-plane Young’s modulus, .
std::optional< ParameterLib::CoordinateSystem > const & local_coordinate_system_
KelvinMatrix getElasticTensor(double const t, ParameterLib::SpatialPosition const &x, double const T) const
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 dt, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
double computeFreeEnergyDensity(double const, ParameterLib::SpatialPosition const &, double const, KelvinVector const &eps, KelvinVector const &sigma, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &) const override
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix