Commit bcebe83d authored by Kilian Weishaupt's avatar Kilian Weishaupt
Browse files

Merge branch 'cleanup/new-folder-2p-material-thermalcond' into 'master'

[material][2p] Move thermalconductivity laws to their own folder

See merge request !2249
parents ac792442 63fb38b5
add_subdirectory(thermalconductivity)
install(FILES
brookscorey.hh
brookscoreyparams.hh
......
install(FILES
johansen.hh
simplefluidlumping.hh
somerton.hh
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/material/fluidmatrixinteractions/2p/thermalconductivity)
// -*- 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 3 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
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_JOHANSEN_HH
#include <cmath>
#include <algorithm>
namespace Dumux {
/*!
* \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 Scalar>
class ThermalConductivityJohansen
{
public:
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
*
* \param volVars volume variables
* \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 <BR>
*
* 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
* Corps of Eng., Cold Regions Res. and Eng. Lab., Hanover, NH.) \cite johansen1977
*/
template<class VolumeVariables>
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
{
using FluidSystem = typename VolumeVariables::FluidSystem;
static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
// TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
const Scalar sw = volVars.saturation(volVars.wettingPhase());
const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
const Scalar lambdaSolid = volVars.solidThermalConductivity();
const Scalar porosity = volVars.porosity();
const Scalar rhoSolid = volVars.solidDensity();
return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
}
private:
/*!
* \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<Scalar>(0.0, Sw);
const Scalar kappa = 15.6; // fitted to medium quartz sand
const Scalar rhoBulk = rhoSolid*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
}
};
} // end namespace Dumux
#endif
// -*- 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 3 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
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SIMPLE_FLUID_LUMPING_HH
#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SIMPLE_FLUID_LUMPING_HH
#include <assert.h>
#include <algorithm>
namespace Dumux {
/*!
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
template<class Scalar>
class ThermalConductivitySimpleFluidLumping
{
public:
/*!
* \brief Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$
*
* \param volVars volume variables
* \return effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$
*/
template<class VolumeVariables>
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
{
using FluidSystem = typename VolumeVariables::FluidSystem;
const Scalar sw = volVars.saturation(FluidSystem::phase0Idx);
const Scalar lambdaW = volVars.fluidThermalConductivity(FluidSystem::phase0Idx);
const Scalar lambdaN = volVars.fluidThermalConductivity(FluidSystem::phase1Idx);
const Scalar lambdaSolid = volVars.solidThermalConductivity();
const Scalar porosity = volVars.porosity();
return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity);
}
private:
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$.
*
* \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
*
* \return Effective thermal conductivity of the fluid phases
*/
static Scalar effectiveThermalConductivity_(const Scalar sw,
const Scalar lambdaW,
const Scalar lambdaN,
const Scalar lambdaSolid,
const Scalar porosity)
{
// Franz Lindner / Shi & Wang 2011
using std::max;
const Scalar satW = max<Scalar>(0.0, sw);
return porosity * ( (1. - satW) * lambdaN + satW * lambdaW ) + (1.0 - porosity) * lambdaSolid ; ; // arithmetic
}
};
} // end namespace Dumux
#endif
// -*- 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 3 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
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_HH
#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_HH
#include <algorithm>
#include <cmath>
namespace Dumux {
/*!
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*
* The Somerton method 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
*
* \f$\mathrm{
\lambda_\text{dry} = \lambda_{solid}^{\left(1-\phi\right)}*\lambda_n^\phi.
}\f$
*
*/
template<class Scalar>
class ThermalConductivitySomerton
{
public:
/*!
* \brief effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Somerton (1974) \cite somerton1974 <BR>
*
* \param volVars volume variables
* \return effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Somerton (1974) \cite somerton1974 <BR>
*
* 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 square root of the wetting saturation.
* See f.e. Ebigbo, A.: Thermal Effects of Carbon Dioxide Sequestration in the Subsurface, Diploma thesis \cite ebigbo2005 .
*/
template<class VolumeVariables>
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
{
using FluidSystem = typename VolumeVariables::FluidSystem;
static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
static_assert((FluidSystem::isGas(0) && !FluidSystem::isGas(1)) || (!FluidSystem::isGas(0) && FluidSystem::isGas(1)),
"ThermalConductivitySomerton only works if one phase is gaseous and one is liquid!");
constexpr int liquidPhaseIdx = FluidSystem::isGas(0) ? 1 : 0;
constexpr int gasPhaseIdx = FluidSystem::isGas(0) ? 0 : 1;
const Scalar satLiquid = volVars.saturation(liquidPhaseIdx);
const Scalar lambdaLiquid = volVars.fluidThermalConductivity(liquidPhaseIdx);
const Scalar lambdaGas = volVars.fluidThermalConductivity(gasPhaseIdx);
const Scalar lambdaSolid = volVars.solidThermalConductivity();
const Scalar porosity = volVars.porosity();
return effectiveThermalConductivity_(satLiquid, lambdaLiquid, lambdaGas, lambdaSolid, porosity);
}
private:
/*!
* \brief effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Somerton (1974) \cite somerton1974 <BR>
*
* \param satLiquid The saturation of the liquid phase
* \param lambdaLiquid The thermal conductivity of the liquid phase in \f$\mathrm{[W/(m K)]}\f$
* \param lambdaGas The thermal conductivity of the gas 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 Somerton (1974) \cite somerton1974
*/
static Scalar effectiveThermalConductivity_(const Scalar satLiquid,
const Scalar lambdaLiquid,
const Scalar lambdaGas,
const Scalar lambdaSolid,
const Scalar porosity,
const Scalar rhoSolid = 0.0 /*unused*/)
{
using std::max;
using std::pow;
using std::sqrt;
const Scalar satLiquidPhysical = max<Scalar>(0.0, satLiquid);
// geometric mean, using ls^(1-p)*l^p = ls*(l/ls)^p
const Scalar lSat = lambdaSolid * pow(lambdaLiquid / lambdaSolid, porosity);
const Scalar lDry = lambdaSolid * pow(lambdaGas / lambdaSolid, porosity);
return lDry + sqrt(satLiquidPhysical) * (lSat - lDry);
}
};
} // end namespace Dumux
#endif
// -*- 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 3 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
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef DUMUX_MATERIAL_THERMALCONDUCTIVITY_JOHANSEN_HH
#define DUMUX_MATERIAL_THERMALCONDUCTIVITY_JOHANSEN_HH
#include <cmath>
#include <algorithm>
#include <dumux/material/fluidmatrixinteractions/2p/thermalconductivity/johansen.hh>
#warning "This header has been moved (will be removed after 3.3). Use thermalconductivity/johansen.hh"
namespace Dumux {
/*!
* \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 Scalar>
class ThermalConductivityJohansen
{
public:
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 .
*
* \param volVars volume variables
* \return Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$ after Johansen (1975) \cite johansen1977 <BR>
*
* 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
* Corps of Eng., Cold Regions Res. and Eng. Lab., Hanover, NH.) \cite johansen1977
*/
template<class VolumeVariables>
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
{
using FluidSystem = typename VolumeVariables::FluidSystem;
static_assert(FluidSystem::numPhases == 2, "ThermalConductivitySomerton only works for two-phase fluid systems!");
// TODO: there should be an assertion that the indices are correct and 0 is actually the wetting phase!
const Scalar sw = volVars.saturation(volVars.wettingPhase());
const Scalar lambdaW = volVars.fluidThermalConductivity(volVars.wettingPhase());
const Scalar lambdaN = volVars.fluidThermalConductivity(1-volVars.wettingPhase());
const Scalar lambdaSolid = volVars.solidThermalConductivity();
const Scalar porosity = volVars.porosity();
const Scalar rhoSolid = volVars.solidDensity();
return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity, rhoSolid);
}
private:
/*!
* \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<Scalar>(0.0, Sw);
const Scalar kappa = 15.6; // fitted to medium quartz sand
const Scalar rhoBulk = rhoSolid*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
}
};
} // end namespace Dumux
#endif
// -*- 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 3 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
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
#ifndef DUMUX_MATERIAL_THERMALCONDUCTIVITY_SIMPLE_FLUID_LUMPING_HH
#define DUMUX_MATERIAL_THERMALCONDUCTIVITY_SIMPLE_FLUID_LUMPING_HH
#include <assert.h>
#include <algorithm>
#include <dumux/material/fluidmatrixinteractions/2p/thermalconductivity/simplefluidlumping.hh>
#warning "This header has been moved (will be removed after 3.3). Use thermalconductivity/simplefluidlumping.hh"
namespace Dumux {
/*!
* \ingroup Fluidmatrixinteractions
* \brief Relation for the saturation-dependent effective thermal conductivity
*/
template<class Scalar>
class ThermalConductivitySimpleFluidLumping
{
public:
/*!
* \brief Effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$
*
* \param volVars volume variables
* \return effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$
*/
template<class VolumeVariables>
static Scalar effectiveThermalConductivity(const VolumeVariables& volVars)
{
using FluidSystem = typename VolumeVariables::FluidSystem;
const Scalar sw = volVars.saturation(FluidSystem::phase0Idx);
const Scalar lambdaW = volVars.fluidThermalConductivity(FluidSystem::phase0Idx);
const Scalar lambdaN = volVars.fluidThermalConductivity(FluidSystem::phase1Idx);
const Scalar lambdaSolid = volVars.solidThermalConductivity();
const Scalar porosity = volVars.porosity();
return effectiveThermalConductivity_(sw, lambdaW, lambdaN, lambdaSolid, porosity);
}
private:
/*!
* \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m K)]}\f$.
*
* \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
*
* \return Effective thermal conductivity of the fluid phases
*/
static Scalar effectiveThermalConductivity_(const Scalar sw,
const Scalar lambdaW,
const Scalar lambdaN,
const Scalar lambdaSolid,
const Scalar porosity)
{
// Franz Lindner / Shi & Wang 2011
using std::max;
const Scalar satW = max<Scalar>(0.0, sw);
return porosity * ( (1. - satW) * lambdaN + satW * lambdaW ) + (1.0 - porosity) * lambdaSolid ; ; // arithmetic
}
};
} // end namespace Dumux
#endif
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-