OGS
LinearElasticTransverseIsotropic.h
Go to the documentation of this file.
1
12#pragma once
13
14#include "MechanicsBase.h"
16
17namespace MaterialLib
18{
19namespace Solids
20{
123template <int DisplacementDim>
124class LinearElasticTransverseIsotropic : public MechanicsBase<DisplacementDim>
125{
126public:
127 static int const KelvinVectorSize =
133
135
137 P const& E_i, P const& E_a, P const& nu_ii, P const& nu_ia,
138 P const& G_ia,
139 std::optional<ParameterLib::CoordinateSystem> const&
140 local_coordinate_system)
141 : E_i_p_(E_i),
142 E_a_p_(E_a),
143 nu_ii_p_(nu_ii),
144 nu_ia_p_(nu_ia),
145 G_ia_p_(G_ia),
146 local_coordinate_system_(local_coordinate_system)
147 {
148 }
149
151 double const /*t*/,
153 double const /*dt*/,
154 KelvinVector const& eps,
155 KelvinVector const& sigma,
157 MaterialStateVariables const& /* material_state_variables */)
158 const override
159 {
160 return eps.dot(sigma) / 2;
161 }
162
163 std::optional<
164 std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
165 std::unique_ptr<typename MechanicsBase<
166 DisplacementDim>::MaterialStateVariables>,
169 MaterialPropertyLib::VariableArray const& variable_array_prev,
170 MaterialPropertyLib::VariableArray const& variable_array,
171 double const t, ParameterLib::SpatialPosition const& x, double const dt,
173 material_state_variables) const override;
174
177 double const T) const;
178
179 double getBulkModulus(double const t,
181 KelvinMatrix const* const /*C*/) const override
182 {
183 const double E_i = E_i_p_(t, x)[0];
184 const double E_a = E_a_p_(t, x)[0];
185 const double nu_i = nu_ii_p_(t, x)[0];
186 const double nu_ia = nu_ia_p_(t, x)[0];
187
188 // Average Young's modulus
189 double const E_av = 2. * E_i / 3. + E_a / 3.;
190
191 // Poisson ratio in the plane of isotropy, due to the strain
192 // perpendicular to the plane of isotropy. nu_ai=nu_ia*E_a/E_i
193 const double nu_ai = nu_ia * E_a / E_i;
194
195 // Average Poisson ratio
196 // 12 13 21 23 31 32
197 // ai ai ia ii ia ii
198 const double nu_av = (nu_ai + nu_ia + nu_i) / 3.0;
199
200 return E_av / 3 / (1 - 2 * nu_av);
201 }
202
203protected:
205 P const& E_i_p_;
208 P const& E_a_p_;
210 P const& nu_ii_p_;
213 P const& nu_ia_p_;
216 P const& G_ia_p_;
217 std::optional<ParameterLib::CoordinateSystem> const&
219
220private:
222 double const t, ParameterLib::SpatialPosition const& x) const;
223};
224
225} // namespace Solids
226} // 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