version 3.11-dev
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
somerton.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
13#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_TWO_P_HH
14#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_TWO_P_HH
15
16#include <algorithm>
17#include <cmath>
18
19namespace Dumux {
20
50template<class Scalar>
52{
53public:
59 template<class VolumeVariables>
60 static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
61 {
62 using FluidSystem = typename VolumeVariables::FluidSystem;
63 static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomertonTwoP only works for two-phase fluid systems!");
64 static_assert((FluidSystem::isGas(0) && !FluidSystem::isGas(1)) || (!FluidSystem::isGas(0) && FluidSystem::isGas(1)),
65 "ThermalConductivitySomertonTwoP only works if one phase is gaseous and one is liquid!");
66
67 constexpr int liquidPhaseIdx = FluidSystem::isGas(0) ? 1 : 0;
68 constexpr int gasPhaseIdx = FluidSystem::isGas(0) ? 0 : 1;
69
70 const Scalar satLiquid = volVars.saturation(liquidPhaseIdx);
71 const Scalar lambdaLiquid = volVars.fluidThermalConductivity(liquidPhaseIdx);
72 const Scalar lambdaGas = volVars.fluidThermalConductivity(gasPhaseIdx);
73 const Scalar lambdaSolid = volVars.solidThermalConductivity();
74 const Scalar porosity = volVars.porosity();
75
76 return effectiveThermalConductivity_(satLiquid, lambdaLiquid, lambdaGas, lambdaSolid, porosity);
77 }
78
79private:
91 static Scalar effectiveThermalConductivity_(const Scalar satLiquid,
92 const Scalar lambdaLiquid,
93 const Scalar lambdaGas,
94 const Scalar lambdaSolid,
95 const Scalar porosity)
96 {
97 using std::max;
98 using std::pow;
99 using std::sqrt;
100 const Scalar satLiquidPhysical = max<Scalar>(0.0, satLiquid);
101 // geometric mean, using ls^(1-p)*l^p = ls*(l/ls)^p
102 const Scalar lambdaSaturated = lambdaSolid * pow(lambdaLiquid / lambdaSolid, porosity);
103 const Scalar lambdaDry = lambdaSolid * pow(lambdaGas / lambdaSolid, porosity);
104
105 return lambdaDry + sqrt(satLiquidPhysical) * (lambdaSaturated - lambdaDry);
106 }
107};
108
109
110} // end namespace Dumux
111
112#endif
Effective thermal conductivity after Somerton.
Definition: somerton.hh:52
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
Effective thermal conductivity in for two phases.
Definition: somerton.hh:60
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:127
Definition: adapt.hh:17