25 template <
int DisplacementDim>
29 double const a1,
double const a2,
double const pressure_threshold,
30 double const minimum_permeability,
double const maximum_permeability,
35 pressure_threshold_(pressure_threshold),
36 minimum_permeability_(minimum_permeability),
37 maximum_permeability_(maximum_permeability),
38 local_coordinate_system_(local_coordinate_system)
43 template <
int DisplacementDim>
46 if (!std::holds_alternative<Medium*>(scale_))
49 "The property 'GasPressureDependentPermeability' is implemented on "
50 "the 'medium' scale only.");
54 template <
int DisplacementDim>
60 double const gas_pressure = std::get<double>(
63 auto k_data = k0_(t, pos);
66 (gas_pressure <= pressure_threshold_)
67 ? (1.0 + a1_ * gas_pressure / 1.0e6)
68 : (a2_ * (gas_pressure - pressure_threshold_) / 1.0e6 + 1.0 +
69 a1_ * pressure_threshold_ / 1.0e6);
71 for (
auto& k_i : k_data)
73 k_i = std::clamp(k_i * factor, minimum_permeability_,
74 maximum_permeability_);
79 if (local_coordinate_system_ && (k_data.size() == DisplacementDim))
81 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const e =
82 local_coordinate_system_->transformation<DisplacementDim>(pos);
83 Eigen::Matrix<double, DisplacementDim, DisplacementDim> k =
84 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
86 for (
int i = 0; i < DisplacementDim; ++i)
88 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const
89 ei_otimes_ei = e.col(i) * e.col(i).transpose();
91 k += k_data[i] * ei_otimes_ei;
99 template <
int DisplacementDim>
106 "The derivative of the intrinsic permeability of "
107 "GasPressureDependentPermeability"
108 "is not implemented.");
A gas pressure dependent intrinsic permeability model.
GasPressureDependentPermeability(std::string name, ParameterLib::Parameter< double > const &k0, double const a1, double const a2, double const pressure_threshold, double const minimum_permeability, double const maximum_permeability, 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
void checkScale() const override
virtual PropertyDataType value() const
PropertyDataType fromVector(std::vector< double > const &values)
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 > > PropertyDataType
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray