OGS
TRMStorage.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 "TRMStorage.h"
5
7{
8template <int DisplacementDim>
10 SpaceTimeData const& x_t, BiotData const& biot_data,
11 PorosityData const& poro_data, LiquidDensityData const& rho_L_data,
12 SaturationData const& S_L_data, SaturationDataDeriv const& dS_L_data,
13 PrevState<SaturationData> const& S_L_prev_data,
15 SolidCompressibilityData const& solid_compressibility_data,
16 TRMStorageData& out) const
17{
18 double const p_cap = p_cap_data.p_cap;
19 double const p_cap_prev = p_cap_data.p_cap_prev;
20
21 double const phi = poro_data.phi;
22 double const alphaB_minus_phi = biot_data() - phi;
23
24 double const beta_LR = rho_L_data.drho_LR_dp / rho_L_data.rho_LR;
25
26 double const a0 = alphaB_minus_phi * solid_compressibility_data.beta_SR;
27 double const specific_storage_a_p =
28 S_L_data.S_L * (phi * beta_LR + S_L_data.S_L * a0);
29 double const specific_storage_a_S = phi - p_cap * S_L_data.S_L * a0;
30
31 // Note: d beta_LR/d p is omitted because it is a small value.
32 double const dspecific_storage_a_p_dp_cap =
33 dS_L_data.dS_L_dp_cap * (phi * beta_LR + 2 * S_L_data.S_L * a0);
34 double const dspecific_storage_a_S_dp_cap =
35 -a0 * (S_L_data.S_L + p_cap * dS_L_data.dS_L_dp_cap);
36
37 // secant derivative from time discretization for storage
38 // use tangent, if secant is not available
39 double const DeltaS_L_Deltap_cap =
40 (p_cap == p_cap_prev)
41 ? dS_L_data.dS_L_dp_cap
42 : (S_L_data.S_L - S_L_prev_data->S_L) / (p_cap - p_cap_prev);
43
44 out.storage_p_a_p = rho_L_data.rho_LR * specific_storage_a_p;
46 -rho_L_data.rho_LR * specific_storage_a_S * DeltaS_L_Deltap_cap;
47 out.J_pp_X_NTN = (p_cap - p_cap_prev) / x_t.dt * rho_L_data.rho_LR *
48 dspecific_storage_a_p_dp_cap;
50 -rho_L_data.rho_LR *
51 ((S_L_data.S_L - S_L_prev_data->S_L) * dspecific_storage_a_S_dp_cap +
52 specific_storage_a_S * dS_L_data.dS_L_dp_cap) /
53 x_t.dt;
54}
55
56template struct TRMStorageModel<2>;
57template struct TRMStorageModel<3>;
58} // namespace ProcessLib::ThermoRichardsMechanics
BaseLib::StrongType< double, struct BiotTag > BiotData
void eval(SpaceTimeData const &x_t, BiotData const &biot_data, PorosityData const &poro_data, LiquidDensityData const &rho_L_data, SaturationData const &S_L_data, SaturationDataDeriv const &dS_L_data, PrevState< SaturationData > const &S_L_prev_data, CapillaryPressureData< DisplacementDim > const &p_cap_data, SolidCompressibilityData const &solid_compressibility_data, TRMStorageData &out) const
Definition TRMStorage.cpp:9