24#ifndef DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_HH
25#define DUMUX_MATERIAL_FLUIDMATRIX_THERMALCONDUCTIVITY_SOMERTON_HH
74 template<
class VolumeVariables>
77 using FluidSystem =
typename VolumeVariables::FluidSystem;
78 static_assert(FluidSystem::numPhases == 2,
"ThermalConductivitySomerton only works for two-phase fluid systems!");
79 static_assert((FluidSystem::isGas(0) && !FluidSystem::isGas(1)) || (!FluidSystem::isGas(0) && FluidSystem::isGas(1)),
80 "ThermalConductivitySomerton only works if one phase is gaseous and one is liquid!");
82 constexpr int liquidPhaseIdx = FluidSystem::isGas(0) ? 1 : 0;
83 constexpr int gasPhaseIdx = FluidSystem::isGas(0) ? 0 : 1;
85 const Scalar satLiquid = volVars.saturation(liquidPhaseIdx);
86 const Scalar lambdaLiquid = volVars.fluidThermalConductivity(liquidPhaseIdx);
87 const Scalar lambdaGas = volVars.fluidThermalConductivity(gasPhaseIdx);
88 const Scalar lambdaSolid = volVars.solidThermalConductivity();
89 const Scalar
porosity = volVars.porosity();
91 return effectiveThermalConductivity_(satLiquid, lambdaLiquid, lambdaGas, lambdaSolid,
porosity);
107 static Scalar effectiveThermalConductivity_(
const Scalar satLiquid,
108 const Scalar lambdaLiquid,
109 const Scalar lambdaGas,
110 const Scalar lambdaSolid,
112 const Scalar rhoSolid = 0.0 )
117 const Scalar satLiquidPhysical = max<Scalar>(0.0, satLiquid);
119 const Scalar lSat = lambdaSolid * pow(lambdaLiquid / lambdaSolid,
porosity);
120 const Scalar lDry = lambdaSolid * pow(lambdaGas / lambdaSolid,
porosity);
122 return lDry + sqrt(satLiquidPhysical) * (lSat - lDry);
std::string porosity() noexcept
I/O name of porosity.
Definition: name.hh:139
Relation for the saturation-dependent effective thermal conductivity.
Definition: somerton.hh:60
static Scalar effectiveThermalConductivity(const VolumeVariables &volVars)
effective thermal conductivity after Somerton (1974)
Definition: somerton.hh:75