OGS
DupuitPermeability.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
7{
9 std::string name, ParameterLib::Parameter<double> const& parameter)
10 : parameter_(parameter)
11{
12 name_ = std::move(name);
13}
14
16 MaterialPropertyLib::VariableArray const& variable_array,
17 ParameterLib::SpatialPosition const& pos, double const t,
18 double const /*dt*/) const
19{
20 double const pressure = variable_array.liquid_phase_pressure;
21 auto const& permeability_values = parameter_(t, pos);
22
23 auto const& permeability_variant = fromVector(permeability_values);
24 PropertyDataType dupuit_permeability = std::visit(
25 [&pressure](auto const& permeability_variant) -> PropertyDataType
26 {
27 using T = std::decay_t<decltype(permeability_variant)>;
28 if constexpr (std::is_same_v<T, double>)
29 {
30 return pressure * permeability_variant;
31 }
32 else
33 {
34 return (pressure * permeability_variant).eval();
35 }
36 },
37 permeability_variant);
38
39 return dupuit_permeability;
40}
41
42} // 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
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 >, Eigen::MatrixXd > PropertyDataType