version 3.11-dev
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
johansen.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_JOHANSEN_HH
14#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
15
16#include <cmath>
17#include <algorithm>
18
19namespace Dumux {
20
49template<class Scalar>
51{
52public:
58 template<class VolumeVariables>
59 static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
60 {
61 using FluidSystem = typename VolumeVariables::FluidSystem;
62 static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
63 // TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
64
65 const Scalar sw = volVars.saturation(volVars.wettingPhase());
66 const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
67 const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
68 const Scalar lambdaSolid = volVars.solidThermalConductivity();
69 const Scalar porosity = volVars.porosity();
70 const Scalar rhoSolid = volVars.solidDensity();
71
72 return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
73 }
74
75private:
88 static Scalar effectiveThermalConductivity_(const Scalar Sw,
89 const Scalar lambdaW,
90 const Scalar lambdaN,
91 const Scalar lambdaSolid,
92 const Scalar porosity,
93 const Scalar rhoSolid)
94 {
95 using std::max;
96 const Scalar satW = max<Scalar>(0.0, Sw);
97
98 const Scalar kappa = 15.6; // fitted to medium quartz sand
99 const Scalar rhoBulk = rhoSolid*porosity;
100
101 using std::pow;
102
103 const Scalar lambdaSaturated = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
104 const Scalar lambdaDry = (0.135*rhoBulk + 64.7)/(rhoSolid - 0.947*rhoBulk);
105 const Scalar Ke = (kappa*satW)/(1+(kappa-1)*satW);// Kersten number, equation 13
106
107 return lambdaDry + Ke * (lambdaSaturated - lambdaDry); // equation 14
108 }
109};
110
111} // end namespace Dumux
112
113#endif
Relation for the saturation-dependent effective thermal conductivity.
Definition: johansen.hh:51
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
Effective thermal conductivity in for two phases.
Definition: johansen.hh:59
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:127
Definition: adapt.hh:17