3.3.0
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
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 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
24#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
25#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
26
27#include <cmath>
28#include <algorithm>
29
30namespace Dumux {
31
58template<class Scalar>
60{
61public:
77 template<class VolumeVariables>
78 static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
79 {
80 using FluidSystem = typename VolumeVariables::FluidSystem;
81 static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
82 // TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
83
84 const Scalar sw = volVars.saturation(volVars.wettingPhase());
85 const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
86 const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
87 const Scalar lambdaSolid = volVars.solidThermalConductivity();
88 const Scalar porosity = volVars.porosity();
89 const Scalar rhoSolid = volVars.solidDensity();
90
91 return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
92 }
93
94private:
107 static Scalar effectiveThermalConductivity_(const Scalar Sw,
108 const Scalar lambdaW,
109 const Scalar lambdaN,
110 const Scalar lambdaSolid,
111 const Scalar porosity,
112 const Scalar rhoSolid)
113 {
114 using std::max;
115 const Scalar satW = max<Scalar>(0.0, Sw);
116
117 const Scalar kappa = 15.6; // fitted to medium quartz sand
118 const Scalar rhoBulk = rhoSolid*porosity;
119
120 using std::pow;
121 const Scalar lSat = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
122 const Scalar lDry = (0.135*rhoBulk + 64.7)/(rhoSolid - 0.947*rhoBulk);
123 const Scalar Ke = (kappa*satW)/(1+(kappa-1)*satW);// Kersten number, equation 13
124
125 return lDry + Ke * (lSat - lDry); // equation 14
126 }
127};
128} // end namespace Dumux
129#endif
Definition: adapt.hh:29
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:139
Relation for the saturation-dependent effective thermal conductivity.
Definition: johansen.hh:60
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
Returns the effective thermal conductivity after Johansen (1975) .
Definition: johansen.hh:78