version 3.9
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-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
7#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
8#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
9
10#include <cmath>
11#include <algorithm>
12
13namespace Dumux {
14
43template<class Scalar>
45{
46public:
52 template<class VolumeVariables>
53 static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
54 {
55 using FluidSystem = typename VolumeVariables::FluidSystem;
56 static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
57 // TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
58
59 const Scalar sw = volVars.saturation(volVars.wettingPhase());
60 const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
61 const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
62 const Scalar lambdaSolid = volVars.solidThermalConductivity();
63 const Scalar porosity = volVars.porosity();
64 const Scalar rhoSolid = volVars.solidDensity();
65
66 return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
67 }
68
69private:
82 static Scalar effectiveThermalConductivity_(const Scalar Sw,
83 const Scalar lambdaW,
84 const Scalar lambdaN,
85 const Scalar lambdaSolid,
86 const Scalar porosity,
87 const Scalar rhoSolid)
88 {
89 using std::max;
90 const Scalar satW = max<Scalar>(0.0, Sw);
91
92 const Scalar kappa = 15.6; // fitted to medium quartz sand
93 const Scalar rhoBulk = rhoSolid*porosity;
94
95 using std::pow;
96
97 const Scalar lambdaSaturated = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
98 const Scalar lambdaDry = (0.135*rhoBulk + 64.7)/(rhoSolid - 0.947*rhoBulk);
99 const Scalar Ke = (kappa*satW)/(1+(kappa-1)*satW);// Kersten number, equation 13
100
101 return lambdaDry + Ke * (lambdaSaturated - lambdaDry); // equation 14
102 }
103};
104
105} // end namespace Dumux
106
107#endif
Relation for the saturation-dependent effective thermal conductivity.
Definition: johansen.hh:45
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
Effective thermal conductivity in for two phases.
Definition: johansen.hh:53
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:127
Definition: adapt.hh:17