15template <
int DisplacementDim>
22 constexpr double E(
int const i)
const
24 assert(i == 1 || i == 2 || i == 3);
29 constexpr double G(
int const i,
int const j)
const
31 assert(i == 1 || i == 2 || i == 3);
32 assert(j == 1 || j == 2 || j == 3);
46 return std::numeric_limits<double>::quiet_NaN();
50 constexpr double nu(
int const i,
int const j)
const
52 assert(i == 1 || i == 2 || i == 3);
53 assert(j == 1 || j == 2 || j == 3);
82 return std::numeric_limits<double>::quiet_NaN();
97 P const& poissons_ratios_)
111 {E[0], E[1], E[2]}, {G[0], G[1], G[2]}, {nu[0], nu[1], nu[2]}};
129 std::optional<ParameterLib::CoordinateSystem>
const&
130 local_coordinate_system)
131 :
_mp(std::move(material_properties)),
146 return eps.dot(sigma) / 2;
150 std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
152 DisplacementDim>::MaterialStateVariables>,
160 material_state_variables)
const override;
164 double const T)
const;
172 auto const& mp =
_mp.evaluate(t, x);
173 auto const E = [&mp](
int const i) {
return mp.E(i); };
174 auto const nu = [&mp](
int const i,
int const j) {
return mp.nu(i, j); };
178 return E(1) * E(2) * E(3) /
179 (E(1) * E(2) + E(1) * E(3) * (1 - 2 * nu(2, 3)) +
180 E(2) * E(3) * (1 - 2 * nu(1, 2) * nu(1, 3)));
185 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.
ParameterLib::Parameter< double > P
EvaluatedMaterialProperties evaluate(double const t, ParameterLib::SpatialPosition const &x) const
MaterialProperties(P const &youngs_moduli_, P const &shear_moduli_, P const &poissons_ratios_)
ParameterLib::SpatialPosition X
P const & poissons_ratios
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix