OGS
VermaPruessModel.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
4#include "VermaPruessModel.h"
5
6#include <algorithm>
7#include <cmath>
8#include <functional>
9
10namespace MaterialPropertyLib
11{
13 MaterialPropertyLib::VariableArray const& variable_array,
14 ParameterLib::SpatialPosition const& pos, double const t,
15 double const /*dt*/) const
16{
17 double const phi = variable_array.porosity;
18
19 // ratio of permeability to initial permeability
20 auto const var_k = std::pow(std::max(0., phi - _phi_c(t, pos)[0]) /
21 (_phi0(t, pos)[0] - _phi_c(t, pos)[0]),
22 _n(t, pos)[0]);
23
24 auto const& k0 = _k0(t, pos);
25 std::vector<double> k;
26 k.reserve(k0.size());
27 std::transform(
28 k0.cbegin(), k0.cend(), std::back_inserter(k),
29 std::bind(std::multiplies<double>(), std::placeholders::_1, var_k));
30
31 return fromVector(k);
32}
33
34} // namespace MaterialPropertyLib
virtual PropertyDataType value() const
ParameterLib::Parameter< double > const & _n
Exponent.
ParameterLib::Parameter< double > const & _phi0
Initial porosity.
ParameterLib::Parameter< double > const & _phi_c
Critical porosity.
ParameterLib::Parameter< double > const & _k0
Initial medium permeability.
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