// -*- 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 . *
*****************************************************************************/
/*!
* \file
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef THERMALCONDUCTIVITY_JOHANSEN_HH
#define THERMALCONDUCTIVITY_JOHANSEN_HH
#include
#include
namespace Dumux
{
struct JohansenIndices
{
static const int wPhaseIdx = 0;
static const int nPhaseIdx = 1;
};
/*!
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*
* The Johansen method (Johansen 1975 \cite johansen1977 ) computes the thermal conductivity of dry and the
* 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:
* \f$\mathrm{[
\lambda_\text{eff} = \lambda_{\text{dry}} + \sqrt{(S_w)} \left(\lambda_\text{wet} - \lambda_\text{dry}\right)
}\f$
*
* with
* \f$\mathrm{
\lambda_\text{wet} = \lambda_{solid}^{\left(1-\phi\right)}*\lambda_w^\phi
}\f$
* and the semi-empirical relation
*
* \f$\mathrm{
\lambda_\text{dry} = \frac{0.135*\rho_s*\phi + 64.7}{\rho_s - 0.947 \rho_s*\phi}.
}\f$
*
* Source: Phdthesis (Johansen1975) Johansen, O. Thermal conductivity of soils Norw. Univ. of Sci. Technol., Trondheim, Norway, 1975 \cite johansen1977
*/
template
class ThermalConductivityJohansen
{
public:
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
*
* \param volVars volume variables
* \param spatialParams spatial parameters
* \param element element (to be passed to spatialParams)
* \param fvGeometry fvGeometry (to be passed to spatialParams)
* \param scv the sub control volume (to be passed to spatialParams)
*
* \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977
*
* 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.
* Johansen, O. 1975. Thermal conductivity of soils. Ph.D. diss. Norwegian Univ.
* of Sci. and Technol., Trondheim. (Draft Transl. 637. 1977. U.S. Army
* Corps of Eng., Cold Regions Res. and Eng. Lab., Hanover, NH.) \cite johansen1977
*/
template
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars,
const SpatialParams& spatialParams,
const Element& element,
const FVGeometry& fvGeometry,
const SubControlVolume& scv)
{
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();
return effectiveThermalConductivity(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
}
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
*
* \param Sw The saturation of the wetting phase
* \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$
* \param porosity The porosity
* \param rhoSolid The density of solid phase in \f$\mathrm{[kg/m^3]}\f$
*
* \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977
*/
static Scalar effectiveThermalConductivity(const Scalar Sw,
const Scalar lambdaW,
const Scalar lambdaN,
const Scalar lambdaSolid,
const Scalar porosity,
const Scalar rhoSolid)
{
using std::max;
const Scalar satW = max(0.0, Sw);
const Scalar kappa = 15.6; // fitted to medium quartz sand
const Scalar rhoBulk = rhoSolid*porosity;
// lambdaSolid^(1-porosity) * lambdaW^porosity =
using std::pow;
const Scalar lSat = lambdaSolid * pow(lambdaW / lambdaSolid, porosity);
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