OGS
PorosityFromMassBalance.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
6#include <algorithm>
7#include <cmath>
8
10
11namespace MaterialPropertyLib
12{
14{
15 if (!std::holds_alternative<Medium*>(scale_))
16 {
18 "The property 'PorosityFromMassBalance' is "
19 "implemented on the 'medium' scales only.");
20 }
21}
22
24 VariableArray const& /*variable_array*/,
25 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
26 double const /*dt*/) const
27{
29 "PorosityFromMassBalance value call requires previous time step "
30 "values.");
31}
32
34 VariableArray const& variable_array,
35 VariableArray const& variable_array_prev,
36 ParameterLib::SpatialPosition const& pos, double const t,
37 double const dt) const
38{
39 double const beta_SR = variable_array.grain_compressibility;
40 auto const alpha_b =
41 std::get<Medium*>(scale_)
43 .template value<double>(variable_array, pos, t, dt);
44
45 double const e = variable_array.volumetric_strain;
46 double const e_prev = variable_array_prev.volumetric_strain;
47 double const delta_e = e - e_prev;
48
49 double const p_eff = variable_array.effective_pore_pressure;
50 double const p_eff_prev = variable_array_prev.effective_pore_pressure;
51 double const delta_p_eff = p_eff - p_eff_prev;
52
53 double const phi_prev = variable_array_prev.porosity;
54
55 double const w = delta_e + delta_p_eff * beta_SR;
56 return std::clamp((phi_prev + alpha_b * w) / (1 + w), phi_min_, phi_max_);
57}
58
60 VariableArray const& /*variable_array*/, Variable const /*variable*/,
61 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
62 double const /*dt*/) const
63{
64 OGS_FATAL("PorosityFromMassBalance derivatives are not implemented.");
65}
66
67} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
virtual PropertyDataType value() const
std::variant< Medium *, Phase *, Component * > scale_
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