25#ifndef DUMUX_H2O_AIR_SYSTEM_HH
26#define DUMUX_H2O_AIR_SYSTEM_HH
45namespace FluidSystems {
50template<
bool fastButSimplifiedRelations = false>
69template <
class Scalar,
71 class Policy = H2OAirDefaultPolicy<>,
72 bool useKelvinVaporPressure =
false>
74:
public Base<Scalar, H2OAir<Scalar, H2Otype, Policy> >
106 assert(0 <= phaseIdx && phaseIdx <
numPhases);
112 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
126 static constexpr bool isGas(
int phaseIdx)
128 assert(0 <= phaseIdx && phaseIdx <
numPhases);
148 assert(0 <= phaseIdx && phaseIdx <
numPhases);
166 assert(0 <= phaseIdx && phaseIdx <
numPhases);
171 return H2O::liquidIsCompressible();
182 assert(0 <= phaseIdx && phaseIdx <
numPhases);
202 case H2OIdx:
return H2O::name();
205 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
217 case H2OIdx:
return H2O::molarMass();
220 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
230 static const Scalar TCrit[] = {
231 H2O::criticalTemperature(),
236 return TCrit[compIdx];
246 static const Scalar pCrit[] = {
247 H2O::criticalPressure(),
252 return pCrit[compIdx];
261 template <
class Flu
idState>
266 const auto t = fluidState.temperature(
H2OIdx);
267 if (!useKelvinVaporPressure)
268 return H2O::vaporPressure(t);
271 const auto pc = (fluidState.wettingPhase() == (int)
H2OIdx)
272 ? fluidState.pressure(
AirIdx)-fluidState.pressure(
H2OIdx)
273 : fluidState.pressure(
H2OIdx)-fluidState.pressure(
AirIdx);
279 else if (compIdx ==
AirIdx)
281 DUNE_THROW(Dune::NotImplemented,
"Air::vaporPressure(t)");
283 DUNE_THROW(Dune::NotImplemented,
"Invalid component index " << compIdx);
293 DUNE_THROW(Dune::NotImplemented,
294 "H2OAirFluidSystem::criticalMolarVolume()");
304 static const Scalar accFac[] = {
305 H2O::acentricFactor(),
306 Air::acentricFactor()
310 return accFac[compIdx];
347 std::cout <<
"The H2O-air fluid system was configured with the following policy:\n";
348 std::cout <<
" - use H2O density as liquid mixture density: " << std::boolalpha << Policy::useH2ODensityAsLiquidMixtureDensity() <<
"\n";
349 std::cout <<
" - use ideal gas density: " << std::boolalpha << Policy::useIdealGasDensity() <<
"\n";
350 std::cout <<
" - use air viscosity as gas mixture viscosity: " << std::boolalpha << Policy::useAirViscosityAsGasMixtureViscosity() << std::endl;
352 if (H2O::isTabulated)
354 H2O::init(tempMin, tempMax, nTemp,
355 pressMin, pressMax, nPress);
373 template <
class Flu
idState>
377 assert(0 <= phaseIdx && phaseIdx <
numPhases);
379 const Scalar T = fluidState.temperature(phaseIdx);
380 const Scalar p = fluidState.pressure(phaseIdx);
384 if (Policy::useH2ODensityAsLiquidMixtureDensity())
386 return H2O::liquidDensity(T, p);
392 return H2O::liquidMolarDensity(T, p)
399 if (Policy::useIdealGasDensity())
409 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
422 template <
class Flu
idState>
425 assert(0 <= phaseIdx && phaseIdx <
numPhases);
427 const Scalar T = fluidState.temperature(phaseIdx);
428 const Scalar p = fluidState.pressure(phaseIdx);
434 return H2O::liquidMolarDensity(T, p);
438 if (Policy::useIdealGasDensity())
442 return H2O::gasMolarDensity(T, fluidState.partialPressure(
phase1Idx,
H2OIdx))
445 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
461 template <
class Flu
idState>
465 assert(0 <= phaseIdx && phaseIdx <
numPhases);
467 Scalar T = fluidState.temperature(phaseIdx);
468 Scalar p = fluidState.pressure(phaseIdx);
473 return H2O::liquidViscosity(T, p);
477 if(Policy::useAirViscosityAsGasMixtureViscosity()){
486 H2O::vaporPressure(T)),
503 Scalar phiIJ = 1 + sqrt(mu[i]/mu[j] * sqrt(M[j]/M[i]));
504 phiIJ = phiIJ * phiIJ / sqrt(8*(1 + M[i]/M[j]));
505 divisor += fluidState.moleFraction(phaseIdx, j)*phiIJ;
507 muResult += fluidState.moleFraction(phaseIdx, i)*mu[i] / divisor;
512 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
534 template <
class Flu
idState>
539 assert(0 <= phaseIdx && phaseIdx <
numPhases);
542 Scalar T = fluidState.temperature(phaseIdx);
543 Scalar p = fluidState.pressure(phaseIdx);
562 template <
class Flu
idState>
566 / H2O::vaporPressure(fluidState.temperature(
gasPhaseIdx));
570 template <
class Flu
idState>
575 DUNE_THROW(Dune::NotImplemented,
"FluidSystems::H2OAir::diffusionCoefficient()");
589 template <
class Flu
idState>
596 if (compIIdx > compJIdx)
597 swap(compIIdx, compJIdx);
599 Scalar T = fluidState.temperature(phaseIdx);
600 Scalar p = fluidState.pressure(phaseIdx);
608 DUNE_THROW(Dune::InvalidStateException,
609 "Binary diffusion coefficient of components "
610 << compIIdx <<
" and " << compJIdx
611 <<
" in phase " << phaseIdx <<
" is undefined!\n");
620 DUNE_THROW(Dune::InvalidStateException,
621 "Binary diffusion coefficient of components "
622 << compIIdx <<
" and " << compJIdx
623 <<
" in phase " << phaseIdx <<
" is undefined!\n");
626 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
647 template <
class Flu
idState>
651 Scalar T = fluidState.temperature(phaseIdx);
652 Scalar p = fluidState.pressure(phaseIdx);
658 return H2O::liquidEnthalpy(T, p);
665 H2O::gasEnthalpy(T, p) *
673 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
683 template <
class Flu
idState>
688 const Scalar T = fluidState.temperature(phaseIdx);
689 const Scalar p = fluidState.pressure(phaseIdx);
694 return H2O::liquidEnthalpy(T, p);
698 if (componentIdx ==
H2OIdx)
700 return H2O::gasEnthalpy(T, p);
702 else if (componentIdx ==
AirIdx)
706 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << componentIdx);
708 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
721 template <
class Flu
idState>
725 assert(0 <= phaseIdx && phaseIdx <
numPhases);
738 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
752 template <
class Flu
idState>
769 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
A collection of input/output field names for common physical quantities.
Material properties of pure water .
Tabulates all thermodynamic properties of a given untabulated chemical species.
A simple class for the air fluid properties.
Relations valid for an ideal gas.
Binary coefficients for water and air.
Some exceptions thrown in DuMux
Some templates to wrap the valgrind macros.
bool CheckDefined(const T &value)
Make valgrind complain if the object occupied by an object is undefined.
Definition: valgrind.hh:72
make the local view function available whenever we use the grid geometry
Definition: adapt.hh:29
std::string temperature() noexcept
I/O name of temperature for equilibrium models.
Definition: name.hh:51
std::string gaseousPhase() noexcept
I/O name of gaseous phase.
Definition: name.hh:123
std::string liquidPhase() noexcept
I/O name of liquid phase.
Definition: name.hh:119
std::string pressure(int phaseIdx) noexcept
I/O name of pressure for multiphase systems.
Definition: name.hh:34
static Scalar henry(Scalar temperature)
Henry coefficient for air in liquid water.
Definition: h2o_air.hh:48
static Scalar gasDiffCoeff(Scalar temperature, Scalar pressure)
Binary diffusion coefficient for molecular water and air.
Definition: h2o_air.hh:68
static Scalar liquidDiffCoeff(Scalar temperature, Scalar pressure)
Diffusion coefficient for molecular nitrogen in liquid water.
Definition: h2o_air.hh:101
A class for the air fluid properties.
Definition: air.hh:46
static Scalar gasDensity(Scalar temperature, Scalar pressure)
The density of Air at a given pressure and temperature.
Definition: air.hh:84
static constexpr Scalar molarMass()
The molar mass in of Air.
Definition: air.hh:61
static const Scalar gasHeatCapacity(Scalar temperature, Scalar pressure)
Specific isobaric heat capacity of pure air.
Definition: air.hh:305
static Scalar criticalPressure()
Returns the critical pressure of Air.
Definition: air.hh:73
static Scalar gasViscosity(Scalar temperature, Scalar pressure)
The dynamic viscosity of Air at a given pressure and temperature.
Definition: air.hh:186
static Scalar gasThermalConductivity(Scalar temperature, Scalar pressure)
Thermal conductivity of air.
Definition: air.hh:342
static constexpr bool gasIsIdeal()
Returns true, the gas phase is assumed to be ideal.
Definition: air.hh:108
static Scalar gasEnthalpy(Scalar temperature, Scalar pressure)
Specific enthalpy of Air with 273.15 as basis.
Definition: air.hh:268
static Scalar criticalTemperature()
Returns the critical temperature of Air.
Definition: air.hh:67
static std::string name()
A human readable name for Air.
Definition: air.hh:53
static Scalar gasMolarDensity(Scalar temperature, Scalar pressure)
The molar density of air in , depending on pressure and temperature.
Definition: air.hh:96
Tabulates all thermodynamic properties of a given untabulated chemical species.
Definition: tabulatedcomponent.hh:82
A central place for various physical constants occuring in some equations.
Definition: constants.hh:39
Fluid system base class.
Definition: fluidsystems/base.hh:45
Scalar Scalar
export the scalar type
Definition: fluidsystems/base.hh:48
static Scalar density(const FluidState &fluidState, int phaseIdx)
Calculate the density of a fluid phase.
Definition: fluidsystems/base.hh:134
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition: fluidsystems/base.hh:390
static Scalar fugacityCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Calculate the fugacity coefficient of an individual component in a fluid phase.
Definition: fluidsystems/base.hh:197
static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Calculate the binary molecular diffusion coefficient for a component in a fluid phase .
Definition: fluidsystems/base.hh:278
static Scalar binaryDiffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIIdx, int compJIdx)
Given a phase's composition, temperature and pressure, return the binary diffusion coefficient for c...
Definition: fluidsystems/base.hh:326
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature, pressure and density, calculate its specific enthalpy .
Definition: fluidsystems/base.hh:363
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx)
Calculate the molar density of a fluid phase.
Definition: fluidsystems/base.hh:160
static Scalar viscosity(const FluidState &fluidState, int phaseIdx)
Calculate the dynamic viscosity of a fluid phase .
Definition: fluidsystems/base.hh:236
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Specific isobaric heat capacity of a fluid phase .
Definition: fluidsystems/base.hh:424
Policy for the H2O-air fluid system.
Definition: h2oair.hh:52
static constexpr bool useAirViscosityAsGasMixtureViscosity()
Definition: h2oair.hh:55
static constexpr bool useIdealGasDensity()
Definition: h2oair.hh:54
static constexpr bool useH2ODensityAsLiquidMixtureDensity()
Definition: h2oair.hh:53
A compositional two-phase fluid system with water and air as components in both, the liquid and the g...
Definition: h2oair.hh:75
static Scalar viscosity(const FluidState &fluidState, int phaseIdx)
Calculate the dynamic viscosity of a fluid phase .
Definition: h2oair.hh:462
static constexpr bool isGas(int phaseIdx)
Return whether a phase is gaseous.
Definition: h2oair.hh:126
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature and pressure, return its specific enthalpy .
Definition: h2oair.hh:648
static Scalar criticalMolarVolume(int compIdx)
Molar volume of a component at the critical point .
Definition: h2oair.hh:291
static Scalar vaporPressure(const FluidState &fluidState, int compIdx)
Vapor pressure of a component .
Definition: h2oair.hh:262
static constexpr int comp1Idx
index of the second component
Definition: h2oair.hh:95
static constexpr bool isIdealGas(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition: h2oair.hh:180
static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, Scalar pressMin, Scalar pressMax, unsigned nPress)
Initialize the fluid system's static parameters using problem specific temperature and pressure range...
Definition: h2oair.hh:344
static std::string componentName(int compIdx)
Return the human readable name of a component.
Definition: h2oair.hh:198
static constexpr int numComponents
Number of components in the fluid system.
Definition: h2oair.hh:85
static constexpr int liquidPhaseIdx
index of the liquid phase
Definition: h2oair.hh:87
static constexpr int gasPhaseIdx
index of the gas phase
Definition: h2oair.hh:88
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Specific isobaric heat capacity of a fluid phase. .
Definition: h2oair.hh:753
static std::string phaseName(int phaseIdx)
Return the human readable name of a phase.
Definition: h2oair.hh:104
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition: h2oair.hh:722
static Scalar componentEnthalpy(const FluidState &fluidState, int phaseIdx, int componentIdx)
Returns the specific enthalpy of a component in a specific phase.
Definition: h2oair.hh:684
static constexpr bool isIdealMixture(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition: h2oair.hh:146
static Scalar criticalPressure(int compIdx)
Critical pressure of a component .
Definition: h2oair.hh:244
static constexpr int phase1Idx
index of the second phase
Definition: h2oair.hh:90
static constexpr int comp0Idx
index of the frist component
Definition: h2oair.hh:94
static constexpr int numPhases
Number of phases in the fluid system.
Definition: h2oair.hh:84
static constexpr bool isCompressible(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition: h2oair.hh:164
static constexpr int H2OIdx
index of the frist component
Definition: h2oair.hh:92
H2Otype H2O
Definition: h2oair.hh:81
static Scalar fugacityCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Returns the fugacity coefficient of a component in a phase.
Definition: h2oair.hh:535
static Scalar relativeHumidity(const FluidState &fluidState)
Returns the relative humidity of the gas phase.
Definition: h2oair.hh:563
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx)
The molar density of a fluid phase in .
Definition: h2oair.hh:423
static constexpr int liquidCompIdx
index of the liquid component
Definition: h2oair.hh:96
static void init()
Initialize the fluid system's static parameters generically.
Definition: h2oair.hh:323
static Scalar density(const FluidState &fluidState, const int phaseIdx)
Given a phase's composition, temperature, pressure, and the partial pressures of all components,...
Definition: h2oair.hh:374
static constexpr int AirIdx
index of the second component
Definition: h2oair.hh:93
static Scalar acentricFactor(int compIdx)
The acentric factor of a component .
Definition: h2oair.hh:302
static Scalar binaryDiffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIIdx, int compJIdx)
Given a phase's composition, temperature and pressure, return the binary diffusion coefficient for c...
Definition: h2oair.hh:590
static constexpr int phase0Idx
index of the first phase
Definition: h2oair.hh:89
static constexpr int gasCompIdx
index of the gas component
Definition: h2oair.hh:97
static constexpr bool isMiscible()
Returns whether the fluids are miscible.
Definition: h2oair.hh:118
static Scalar criticalTemperature(int compIdx)
Critical temperature of a component .
Definition: h2oair.hh:228
static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Definition: h2oair.hh:571
static Scalar molarMass(int compIdx)
Return the molar mass of a component .
Definition: h2oair.hh:213
Relations valid for an ideal gas.
Definition: idealgas.hh:37
static constexpr Scalar density(Scalar avgMolarMass, Scalar temperature, Scalar pressure)
The density of the gas in , depending on pressure, temperature and average molar mass of the gas.
Definition: idealgas.hh:49
static constexpr Scalar molarDensity(Scalar temperature, Scalar pressure)
The molar density of the gas , depending on pressure and temperature.
Definition: idealgas.hh:70