21template <
int DisplacementDim>
28 constexpr double E(
int const i)
const
30 assert(i == 1 || i == 2 || i == 3);
35 constexpr double G(
int const i,
int const j)
const
37 assert(i == 1 || i == 2 || i == 3);
38 assert(j == 1 || j == 2 || j == 3);
52 return std::numeric_limits<double>::quiet_NaN();
56 constexpr double nu(
int const i,
int const j)
const
58 assert(i == 1 || i == 2 || i == 3);
59 assert(j == 1 || j == 2 || j == 3);
88 return std::numeric_limits<double>::quiet_NaN();
103 P const& poissons_ratios_)
117 {E[0], E[1], E[2]}, {G[0], G[1], G[2]}, {nu[0], nu[1], nu[2]}};
135 std::optional<ParameterLib::CoordinateSystem>
const&
136 local_coordinate_system)
137 :
_mp(std::move(material_properties)),
152 return eps.dot(sigma) / 2;
156 std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
158 DisplacementDim>::MaterialStateVariables>,
166 material_state_variables)
const override;
170 double const T)
const;
179 auto const E = [&mp](
int const i) {
return mp.E(i); };
180 auto const nu = [&mp](
int const i,
int const j) {
return mp.nu(i, j); };
184 return E(1) * E(2) * E(3) /
185 (E(1) * E(2) + E(1) * E(3) * (1 - 2 * nu(2, 3)) +
186 E(2) * E(3) * (1 - 2 * nu(1, 2) * nu(1, 3)));
191 std::optional<ParameterLib::CoordinateSystem>
const&
double getBulkModulus(double const t, ParameterLib::SpatialPosition const &x, KelvinMatrix const *const) const override
LinearElasticOrthotropic(MaterialProperties material_properties, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system)
MaterialProperties getMaterialProperties() const
double computeFreeEnergyDensity(double const, ParameterLib::SpatialPosition const &, double const, KelvinVector const &eps, KelvinVector const &sigma, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &) const override
std::optional< ParameterLib::CoordinateSystem > const & _local_coordinate_system
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
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
static int const KelvinVectorSize
KelvinMatrix getElasticTensor(double const t, ParameterLib::SpatialPosition const &x, double const T) const
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
constexpr double G(int const i, int const j) const
Shear moduli for 1-based indices.
std::array< double, 3 > youngs_moduli
std::array< double, 3 > shear_moduli
constexpr double E(int const i) const
Youngs moduli for 1-based indices.
constexpr double nu(int const i, int const j) const
Poisson's ratios for 1-based indices.
std::array< double, 3 > poissons_ratios
Variables specific to the material model.
EvaluatedMaterialProperties evaluate(double const t, ParameterLib::SpatialPosition const &x) const
MaterialProperties(P const &youngs_moduli_, P const &shear_moduli_, P const &poissons_ratios_)
P const & poissons_ratios
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix