version 3.8
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//
12#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
13#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
14
15#include <cmath>
16#include <algorithm>
17
18namespace Dumux {
19
46template<class Scalar>
48{
49public:
65 template<class VolumeVariables>
66 static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
67 {
68 using FluidSystem = typename VolumeVariables::FluidSystem;
69 static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
70 // TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
71
72 const Scalar sw = volVars.saturation(volVars.wettingPhase());
73 const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
74 const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
75 const Scalar lambdaSolid = volVars.solidThermalConductivity();
76 const Scalar porosity = volVars.porosity();
77 const Scalar rhoSolid = volVars.solidDensity();
78
79 return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
80 }
81
82private:
95 static Scalar effectiveThermalConductivity_(const Scalar Sw,
96 const Scalar lambdaW,
97 const Scalar lambdaN,
98 const Scalar lambdaSolid,
99 const Scalar porosity,
100 const Scalar rhoSolid)
101 {
102 using std::max;
103 const Scalar satW = max<Scalar>(0.0, Sw);
104
105 const Scalar kappa = 15.6; // fitted to medium quartz sand
106 const Scalar rhoBulk = rhoSolid*porosity;
107
108 using std::pow;
109 const Scalar lambdaSaturated = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
110 const Scalar lambdaDry = (0.135*rhoBulk + 64.7)/(rhoSolid - 0.947*rhoBulk);
111 const Scalar Ke = (kappa*satW)/(1+(kappa-1)*satW);// Kersten number, equation 13
112
113 return lambdaDry + Ke * (lambdaSaturated - lambdaDry); // equation 14
114 }
115};
116} // end namespace Dumux
117#endif
Relation for the saturation-dependent effective thermal conductivity.
Definition: johansen.hh:48
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
Returns the effective thermal conductivity after Johansen (1975) .
Definition: johansen.hh:66
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:127
Definition: adapt.hh:17