21template <
int DisplacementDim>
25 std::array<double, DisplacementDim>
26 intrinsic_permeabilities,
27 std::array<double, DisplacementDim>
30 :
k_(std::move(intrinsic_permeabilities)),
37template <
int DisplacementDim>
40 if (!std::holds_alternative<Medium*>(
scale_))
43 "The property 'PermeabilityOrthotropicPowerLaw' is implemented on "
44 "the 'medium' scales only.");
47template <
int DisplacementDim>
57 auto const medium = std::get<Medium*>(
scale_);
62 pos, std::numeric_limits<double>::quiet_NaN())
65 pos, std::numeric_limits<double>::quiet_NaN());
67 Eigen::Matrix<double, DisplacementDim, DisplacementDim> k =
68 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
70 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const e =
72 ? Eigen::Matrix<double, DisplacementDim,
73 DisplacementDim>::Identity()
78 for (
int i = 0; i < DisplacementDim; ++i)
80 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const
81 ei_otimes_ei = e.col(i) * e.col(i).transpose();
83 k +=
k_[i] * std::pow(phi / phi_0,
lambda_[i]) * ei_otimes_ei;
87template <
int DisplacementDim>
93 OGS_FATAL(
"PermeabilityOrthotropicPowerLaw::dValue is not implemented.");
PermeabilityOrthotropicPowerLaw(std::string name, std::array< double, DisplacementDim > intrinsic_permeabilities, std::array< double, DisplacementDim > exponents, ParameterLib::CoordinateSystem const *const local_coordinate_system)
ParameterLib::CoordinateSystem const *const local_coordinate_system_
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
std::array< double, DisplacementDim > const lambda_
Exponents, one for each spatial dimension.
std::array< double, DisplacementDim > const k_
Intrinsic permeabilities, one for each spatial dimension.
void checkScale() const override
virtual PropertyDataType value() const
std::variant< Medium *, Phase *, Component * > scale_
virtual PropertyDataType initialValue(ParameterLib::SpatialPosition const &pos, double const t) const
double transport_porosity
std::variant< double, Eigen::Matrix< double, 2, 1 >, Eigen::Matrix< double, 3, 1 >, Eigen::Matrix< double, 2, 2 >, Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 >, Eigen::MatrixXd > PropertyDataType
A local coordinate system used for tensor transformations.