OGS
ThermalConductivity.cpp
Go to the documentation of this file.
1
10#include "ThermalConductivity.h"
11
13
14namespace ProcessLib::TH2M
15{
16namespace ConstitutiveRelations
17{
18template <int DisplacementDim>
20 SpaceTimeData const& x_t, MediaData const& media_data,
21 TemperatureData const& T_data, PorosityData const& porosity_data,
22 PorosityDerivativeData const& porosity_d_data,
23 SaturationData const& S_L_data, SaturationDataDeriv const& dS_L_dp_cap,
24 ThermalConductivityData<DisplacementDim>& thermal_conductivity_data) const
25{
26 namespace MPL = MaterialPropertyLib;
27 MPL::VariableArray variables;
28 variables.temperature = T_data.T;
29 variables.porosity = porosity_data.phi;
30 variables.liquid_saturation = S_L_data.S_L;
31
32 auto const& mpl_thermal_conductivity =
33 media_data.medium[MPL::PropertyType::thermal_conductivity];
34
35 thermal_conductivity_data.lambda = MPL::formEigenTensor<DisplacementDim>(
36 mpl_thermal_conductivity.value(variables, x_t.x, x_t.t, x_t.dt));
37
38 // Derivatives computed here and not in the MPL property because various
39 // derivatives are not available in the VariableArray.
40
41 auto const lambdaGR =
42 media_data.gas.hasProperty(MPL::PropertyType::thermal_conductivity)
43 ? MPL::formEigenTensor<DisplacementDim>(
44 media_data.gas[MPL::PropertyType::thermal_conductivity].value(
45 variables, x_t.x, x_t.t, x_t.dt))
46 : MPL::formEigenTensor<DisplacementDim>(0.);
47
48 auto const dlambda_GR_dT =
49 media_data.gas.hasProperty(MPL::PropertyType::thermal_conductivity)
50 ? MPL::formEigenTensor<DisplacementDim>(
51 media_data.gas[MPL::PropertyType::thermal_conductivity]
52 .dValue(variables, MPL::Variable::temperature, x_t.x,
53 x_t.t, x_t.dt))
54 : MPL::formEigenTensor<DisplacementDim>(0.);
55
56 auto const lambdaLR =
57 media_data.liquid.hasProperty(MPL::PropertyType::thermal_conductivity)
58 ? MPL::formEigenTensor<DisplacementDim>(
59 media_data.liquid[MPL::PropertyType::thermal_conductivity]
60 .value(variables, x_t.x, x_t.t, x_t.dt))
61 : MPL::formEigenTensor<DisplacementDim>(0.);
62
63 auto const dlambda_LR_dT =
64 media_data.liquid.hasProperty(MPL::PropertyType::thermal_conductivity)
65 ? MPL::formEigenTensor<DisplacementDim>(
66 media_data.liquid[MPL::PropertyType::thermal_conductivity]
67 .dValue(variables, MPL::Variable::temperature, x_t.x,
68 x_t.t, x_t.dt))
69 : MPL::formEigenTensor<DisplacementDim>(0.);
70
71 auto const lambdaSR =
72 media_data.solid.hasProperty(MPL::PropertyType::thermal_conductivity)
73 ? MPL::formEigenTensor<DisplacementDim>(
74 media_data.solid[MPL::PropertyType::thermal_conductivity]
75 .value(variables, x_t.x, x_t.t, x_t.dt))
76 : MPL::formEigenTensor<DisplacementDim>(0.);
77
78 auto const dlambda_SR_dT =
79 media_data.solid.hasProperty(MPL::PropertyType::thermal_conductivity)
80 ? MPL::formEigenTensor<DisplacementDim>(
81 media_data.solid[MPL::PropertyType::thermal_conductivity]
82 .dValue(variables, MPL::Variable::temperature, x_t.x,
83 x_t.t, x_t.dt))
84 : MPL::formEigenTensor<DisplacementDim>(0.);
85
86 // dphi_G_dp_GR = -ds_L_dp_GR * phi = 0;
87 double const dphi_G_dp_cap = -dS_L_dp_cap() * porosity_data.phi;
88 // dphi_L_dp_GR = ds_L_dp_GR * phi = 0;
89 double const dphi_L_dp_cap = dS_L_dp_cap() * porosity_data.phi;
90
91 thermal_conductivity_data.dlambda_dp_cap =
92 dphi_G_dp_cap * lambdaGR + dphi_L_dp_cap * lambdaLR;
93
94 double const phi_L = S_L_data.S_L * porosity_data.phi;
95 double const phi_G = (1. - S_L_data.S_L) * porosity_data.phi;
96 double const phi_S = 1. - porosity_data.phi;
97
98 // Assuming dS_L/dT = 0, then:
99 // dphi_G_dT = -dS_L/dT * phi + (1 - S_L) * dphi_dT = (1 - S_L) * dphi_dT
100 // dphi_L_dT = dS_L/dT * phi + S_L * dphi_dT S_L * dphi_dT
101 // dphi_S_dT = -dphi_dT -dphi_dT
102 thermal_conductivity_data.dlambda_dT =
103 (1 - S_L_data.S_L) * porosity_d_data.dphi_dT * lambdaGR +
104 phi_G * dlambda_GR_dT +
105 S_L_data.S_L * porosity_d_data.dphi_dT * lambdaLR +
106 +phi_L * dlambda_LR_dT - porosity_d_data.dphi_dT * lambdaSR +
107 phi_S * dlambda_SR_dT;
108}
109template struct ThermalConductivityModel<2>;
110template struct ThermalConductivityModel<3>;
111} // namespace ConstitutiveRelations
112} // namespace ProcessLib::TH2M
bool hasProperty(PropertyType const &p) const
Definition Phase.cpp:69
ParameterLib::SpatialPosition x
Definition Base.h:74
MaterialPropertyLib::Medium const & medium
Definition Base.h:45
MaterialPropertyLib::Phase const & solid
Definition Base.h:46
MaterialPropertyLib::Phase const & liquid
Definition Base.h:47
MaterialPropertyLib::Phase const & gas
Definition Base.h:48
void eval(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, SaturationDataDeriv const &dS_L_dp_cap, ThermalConductivityData< DisplacementDim > &thermal_conductivity_data) const