OGS
ThermalConductivity.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
8namespace ProcessLib::TH2M
9{
11{
12template <int DisplacementDim>
14 SpaceTimeData const& x_t, MediaData const& media_data,
15 TemperatureData const& T_data, PorosityData const& porosity_data,
16 SaturationData const& S_L_data,
17 ThermalConductivityData<DisplacementDim>& thermal_conductivity_data) const
18{
19 namespace MPL = MaterialPropertyLib;
20 MPL::VariableArray variables;
21 variables.temperature = T_data.T;
22 variables.porosity = porosity_data.phi;
23 variables.liquid_saturation = S_L_data.S_L;
24
25 auto const& mpl_thermal_conductivity =
27
28 thermal_conductivity_data.lambda = MPL::formEigenTensor<DisplacementDim>(
29 mpl_thermal_conductivity.value(variables, x_t.x, x_t.t, x_t.dt));
30}
31
32template <int DisplacementDim>
34 SpaceTimeData const& x_t, MediaData const& media_data,
35 TemperatureData const& T_data, PorosityData const& porosity_data,
36 PorosityDerivativeData const& porosity_d_data,
37 SaturationData const& S_L_data,
39 thermal_conductivity_d_data) const
40{
41 namespace MPL = MaterialPropertyLib;
42 MPL::VariableArray variables;
43 variables.temperature = T_data.T;
44 variables.porosity = porosity_data.phi;
45 variables.liquid_saturation = S_L_data.S_L;
46
47 // Derivatives computed here and not in the MPL property because various
48 // derivatives are not available in the VariableArray.
49
50 auto const lambdaGR =
54 variables, x_t.x, x_t.t, x_t.dt))
56
57 auto const dlambda_GR_dT =
61 .dValue(variables, MPL::Variable::temperature, x_t.x,
62 x_t.t, x_t.dt))
64
65 auto const lambdaLR =
69 .value(variables, x_t.x, x_t.t, x_t.dt))
71
72 auto const dlambda_LR_dT =
76 .dValue(variables, MPL::Variable::temperature, x_t.x,
77 x_t.t, x_t.dt))
79
80 auto const lambdaSR =
84 .value(variables, x_t.x, x_t.t, x_t.dt))
86
87 auto const dlambda_SR_dT =
91 .dValue(variables, MPL::Variable::temperature, x_t.x,
92 x_t.t, x_t.dt))
94
95 thermal_conductivity_d_data.dlambda_dp_cap =
96 -porosity_d_data.dphi_L_dp_cap * lambdaGR +
97 porosity_d_data.dphi_L_dp_cap * lambdaLR;
98
99 double const phi_L = S_L_data.S_L * porosity_data.phi;
100 double const phi_G = (1. - S_L_data.S_L) * porosity_data.phi;
101 double const phi_S = 1. - porosity_data.phi;
102
103 // Assuming dS_L/dT = 0, then:
104 // dphi_G_dT = -dS_L/dT * phi + (1 - S_L) * dphi_dT = (1 - S_L) * dphi_dT
105 // dphi_L_dT = dS_L/dT * phi + S_L * dphi_dT S_L * dphi_dT
106 // dphi_S_dT = -dphi_dT -dphi_dT
107 thermal_conductivity_d_data.dlambda_dT =
108 (1 - S_L_data.S_L) * porosity_d_data.dphi_dT * lambdaGR +
109 phi_G * dlambda_GR_dT +
110 S_L_data.S_L * porosity_d_data.dphi_dT * lambdaLR +
111 +phi_L * dlambda_LR_dT - porosity_d_data.dphi_dT * lambdaSR +
112 phi_S * dlambda_SR_dT;
113}
114
115template struct ThermalConductivityModel<2>;
116template struct ThermalConductivityModel<3>;
117} // namespace ConstitutiveRelations
118} // namespace ProcessLib::TH2M
bool hasProperty(PropertyType const &p) const
Definition Phase.cpp:60
constexpr Eigen::Matrix< double, GlobalDim, GlobalDim > formEigenTensor(MaterialPropertyLib::PropertyDataType const &values)
void dEval(SpaceTimeData const &x_t, MediaData const &media_data, TemperatureData const &T_data, PorosityData const &porosity_data, PorosityDerivativeData const &porosity_d_data, SaturationData const &S_L_data, ThermalConductivityDerivativeData< DisplacementDim > &thermal_conductivity_d_data) const
void eval(SpaceTimeData const &x_t, MediaData const &media_data, TemperatureData const &T_data, PorosityData const &porosity_data, SaturationData const &S_L_data, ThermalConductivityData< DisplacementDim > &thermal_conductivity_data) const