thermalconductivityjohansen.hh 6.84 KB
Newer Older
Thomas Fetzer's avatar
Thomas Fetzer committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 // -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
/*****************************************************************************
 *   See the file COPYING for full copying permissions.                      *
 *                                                                           *
 *   This program is free software: you can redistribute it and/or modify    *
 *   it under the terms of the GNU General Public License as published by    *
 *   the Free Software Foundation, either version 2 of the License, or       *
 *   (at your option) any later version.                                     *
 *                                                                           *
 *   This program is distributed in the hope that it will be useful,         *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
 *****************************************************************************/
/*!
 * \file
21
 * \ingroup Fluidmatrixinteractions
Thomas Fetzer's avatar
Thomas Fetzer committed
22
23
24
25
26
 * \brief   Relation for the saturation-dependent effective thermal conductivity
 */
#ifndef THERMALCONDUCTIVITY_JOHANSEN_HH
#define THERMALCONDUCTIVITY_JOHANSEN_HH

27
#include <cmath>
28
#include <algorithm>
Thomas Fetzer's avatar
Thomas Fetzer committed
29
30
31
32
33
34
35
36
37
38
39

namespace Dumux
{

struct JohansenIndices
{
    static const int wPhaseIdx = 0;
    static const int nPhaseIdx = 1;
};

/*!
40
 * \ingroup Fluidmatrixinteractions
Thomas Fetzer's avatar
Thomas Fetzer committed
41
42
 * \brief Relation for the saturation-dependent effective thermal conductivity
 *
43
 * The Johansen method (Johansen 1975 \cite johansen1977 ) computes the thermal conductivity of dry and the
Thomas Fetzer's avatar
Thomas Fetzer committed
44
45
46
47
48
 * wet soil material and uses a root function of the wetting saturation to compute the
 * effective thermal conductivity for a two-phase fluidsystem. The individual thermal
 * conductivities are calculated as geometric mean of the thermal conductivity of the porous
 * material and of the respective fluid phase.
 * The material law is:
Alexander Kissinger's avatar
Alexander Kissinger committed
49
 * \f$\mathrm{[
Thomas Fetzer's avatar
Thomas Fetzer committed
50
 \lambda_\text{eff} = \lambda_{\text{dry}} + \sqrt{(S_w)} \left(\lambda_\text{wet} - \lambda_\text{dry}\right)
Alexander Kissinger's avatar
Alexander Kissinger committed
51
 }\f$
Thomas Fetzer's avatar
Thomas Fetzer committed
52
53
 *
 * with
Alexander Kissinger's avatar
Alexander Kissinger committed
54
 * \f$\mathrm{
Thomas Fetzer's avatar
Thomas Fetzer committed
55
 \lambda_\text{wet} = \lambda_{solid}^{\left(1-\phi\right)}*\lambda_w^\phi
Alexander Kissinger's avatar
Alexander Kissinger committed
56
 }\f$
Thomas Fetzer's avatar
Thomas Fetzer committed
57
58
 * and the semi-empirical relation
 *
Alexander Kissinger's avatar
Alexander Kissinger committed
59
 * \f$\mathrm{
Thomas Fetzer's avatar
Thomas Fetzer committed
60
 \lambda_\text{dry} = \frac{0.135*\rho_s*\phi + 64.7}{\rho_s - 0.947 \rho_s*\phi}.
Alexander Kissinger's avatar
Alexander Kissinger committed
61
 }\f$
Thomas Fetzer's avatar
Thomas Fetzer committed
62
 *
63
 * Source: Phdthesis (Johansen1975) Johansen, O. Thermal conductivity of soils Norw. Univ. of Sci. Technol., Trondheim, Norway, 1975 \cite johansen1977
Thomas Fetzer's avatar
Thomas Fetzer committed
64
65
66
67
68
69
 */
template<class Scalar, class Indices = JohansenIndices>
class ThermalConductivityJohansen
{
public:
    /*!
70
     * \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
Thomas Fetzer's avatar
Thomas Fetzer committed
71
72
73
74
75
     *
     * \param volVars volume variables
     * \param spatialParams spatial parameters
     * \param element element (to be passed to spatialParams)
     * \param fvGeometry fvGeometry (to be passed to spatialParams)
76
     * \param scv the sub control volume (to be passed to spatialParams)
Thomas Fetzer's avatar
Thomas Fetzer committed
77
     *
78
     * \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 <BR>
Thomas Fetzer's avatar
Thomas Fetzer committed
79
80
81
82
83
84
85
86
     *
     * This formulation is semi-empirical and fitted to quartz sand.
     * This gives an interpolation of the effective thermal conductivities of a porous medium
     * filled with the non-wetting phase and a porous medium filled with the wetting phase.
     * These two effective conductivities are computed as geometric mean of the solid and the
     * fluid conductivities and interpolated with the Kersten number.<br>
     * Johansen, O. 1975. Thermal conductivity of soils. Ph.D. diss. Norwegian Univ.
     *                    of Sci. and Technol., Trondheim. (Draft Transl. 637. 1977. U.S. Army
87
     *                    Corps of Eng., Cold Regions Res. and Eng. Lab., Hanover, NH.) \cite johansen1977
Thomas Fetzer's avatar
Thomas Fetzer committed
88
     */
89
    template<class VolumeVariables, class SpatialParams, class Element, class FVGeometry, class SubControlVolume>
Thomas Fetzer's avatar
Thomas Fetzer committed
90
91
92
93
    static Scalar effectiveThermalConductivity(const VolumeVariables& volVars,
                                               const SpatialParams& spatialParams,
                                               const Element& element,
                                               const FVGeometry& fvGeometry,
94
                                               const SubControlVolume& scv)
Thomas Fetzer's avatar
Thomas Fetzer committed
95
    {
96
97
98
99
100
101
        const Scalar sw = volVars.saturation(Indices::wPhaseIdx);
        const Scalar lambdaW = volVars.fluidThermalConductivity(Indices::wPhaseIdx);
        const Scalar lambdaN = volVars.fluidThermalConductivity(Indices::nPhaseIdx);
        const Scalar lambdaSolid = volVars.solidThermalConductivity();
        const Scalar porosity = volVars.porosity();
        const Scalar rhoSolid = volVars.solidDensity();
Thomas Fetzer's avatar
Thomas Fetzer committed
102
103
104
105
106

        return effectiveThermalConductivity(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
    }

    /*!
107
     * \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
Thomas Fetzer's avatar
Thomas Fetzer committed
108
     *
Thomas Fetzer's avatar
Thomas Fetzer committed
109
     * \param Sw The saturation of the wetting phase
110
111
112
     * \param lambdaW The thermal conductivity of the wetting phase in \f$\mathrm{[W/(m K)]}\f$
     * \param lambdaN The thermal conductivity of the non-wetting phase in \f$\mathrm{[W/(m K)]}\f$
     * \param lambdaSolid The thermal conductivity of the solid phase in \f$\mathrm{[W/(m K)]}\f$
Thomas Fetzer's avatar
Thomas Fetzer committed
113
     * \param porosity The porosity
114
     * \param rhoSolid The density of solid phase in \f$\mathrm{[kg/m^3]}\f$
Thomas Fetzer's avatar
Thomas Fetzer committed
115
     *
116
     * \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977
Thomas Fetzer's avatar
Thomas Fetzer committed
117
118
119
120
121
122
123
124
     */
    static Scalar effectiveThermalConductivity(const Scalar Sw,
                                               const Scalar lambdaW,
                                               const Scalar lambdaN,
                                               const Scalar lambdaSolid,
                                               const Scalar porosity,
                                               const Scalar rhoSolid)
    {
125
126
        using std::max;
        const Scalar satW = max<Scalar>(0.0, Sw);
Thomas Fetzer's avatar
Thomas Fetzer committed
127
128
129

        const Scalar kappa = 15.6; // fitted to medium quartz sand
        const Scalar rhoBulk = rhoSolid*porosity;
130
        // lambdaSolid^(1-porosity) * lambdaW^porosity =
131
132
133

        using std::pow;
        const Scalar lSat = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
Thomas Fetzer's avatar
Thomas Fetzer committed
134
135
136
137
138
139
140
141
        const Scalar lDry = (0.135*rhoBulk + 64.7)/(rhoSolid - 0.947*rhoBulk);
        const Scalar Ke = (kappa*satW)/(1+(kappa-1)*satW);// Kersten number, equation 13

        return lDry + Ke * (lSat - lDry); // equation 14
    }
};
}
#endif