OGS
DupuitPermeability.cpp
Go to the documentation of this file.
1 
12 
13 namespace MaterialPropertyLib
14 {
16  std::string name, ParameterLib::Parameter<double> const& parameter)
17  : parameter_(parameter)
18 {
19  name_ = std::move(name);
20 }
21 
23  MaterialPropertyLib::VariableArray const& variable_array,
24  ParameterLib::SpatialPosition const& pos, double const t,
25  double const /*dt*/) const
26 {
27  double const pressure = std::get<double>(variable_array[static_cast<int>(
29  auto const& permeability_values = parameter_(t, pos);
30 
31  auto const& permeability_variant = fromVector(permeability_values);
32  PropertyDataType dupuit_permeability = std::visit(
33  [&pressure](auto const& permeability_variant) -> PropertyDataType
34  {
35  using T = std::decay_t<decltype(permeability_variant)>;
36  if constexpr (std::is_same_v<T, double>)
37  {
38  return pressure * permeability_variant;
39  }
40  else
41  {
42  return (pressure * permeability_variant).eval();
43  }
44  },
45  permeability_variant);
46 
47  return dupuit_permeability;
48 }
49 
50 } // namespace MaterialPropertyLib
ParameterLib::Parameter< double > const & parameter_
DupuitPermeability(std::string name, ParameterLib::Parameter< double > const &parameter)
This constructor accepts two parameters.
virtual PropertyDataType value() const
Definition: Property.cpp:72
PropertyDataType fromVector(std::vector< double > const &values)
Definition: Property.cpp:23
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
Definition: Property.h:35
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108