OGS
TransportPorosityFromMassBalance.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 'TransportPorosityFromMassBalance' is "
19 "implemented on the 'medium' scales only.");
20 }
21}
22
24 VariableArray const& variable_array,
25 VariableArray const& variable_array_prev,
26 ParameterLib::SpatialPosition const& pos, double const t,
27 double const dt) const
28{
29 double const beta_SR = variable_array.grain_compressibility;
30 auto const alpha_b =
31 std::get<Medium*>(scale_)
33 .template value<double>(variable_array, pos, t, dt);
34
35 double const e = variable_array.volumetric_mechanical_strain;
36 double const e_prev = variable_array_prev.volumetric_mechanical_strain;
37 double const delta_e = e - e_prev;
38
39 double const p_eff = variable_array.effective_pore_pressure;
40 double const p_eff_prev = variable_array_prev.effective_pore_pressure;
41 double const delta_p_eff = p_eff - p_eff_prev;
42
43 double const phi = variable_array.porosity;
44
45 double const phi_tr_prev = variable_array_prev.transport_porosity;
46
47 double const w = delta_e + delta_p_eff * beta_SR;
48 return std::clamp(phi_tr_prev + (alpha_b - phi) * w, phi_min_, phi_max_);
49}
50
52 VariableArray const& /*variable_array*/,
53 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
54 double const /*dt*/) const
55{
57 "TransportPorosityFromMassBalance value call requires previous time "
58 "step values.");
59}
60
62 VariableArray const& /*variable_array*/, Variable const /*variable*/,
63 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
64 double const /*dt*/) const
65{
67 "TransportPorosityFromMassBalance derivatives are not implemented.");
68}
69
70} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
virtual PropertyDataType value() const
std::variant< Medium *, Phase *, Component * > scale_
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
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