24#ifndef DUMUX_BRINE_AIR_FLUID_SYSTEM_HH
25#define DUMUX_BRINE_AIR_FLUID_SYSTEM_HH
54template<
bool fastButSimplifiedRelations = false>
70template <
class Scalar,
72 class Policy = BrineAirDefaultPolicy<>>
74:
public Base<Scalar, BrineAir<Scalar, H2Otype, Policy>>
118 struct BrineAdapterPolicy
120 using FluidSystem =
Brine;
122 static constexpr int phaseIdx(
int brinePhaseIdx) {
return liquidPhaseIdx; }
123 static constexpr int compIdx(
int brineCompIdx)
125 switch (brineCompIdx)
134 template<
class Flu
idState>
149 assert(0 <= phaseIdx && phaseIdx <
numPhases);
155 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
168 static constexpr bool isGas(
int phaseIdx)
170 assert(0 <= phaseIdx && phaseIdx <
numPhases);
190 assert(0 <= phaseIdx && phaseIdx <
numPhases);
208 assert(0 <= phaseIdx && phaseIdx <
numPhases);
223 assert(0 <= phaseIdx && phaseIdx <
numPhases);
236 assert(0 <= phaseIdx && phaseIdx <
numPhases);
255 case H2OIdx:
return H2O::name();
259 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
271 case H2OIdx:
return H2O::molarMass();
275 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
284 template <
class Flu
idState>
291 if (!Policy::useKelvinVaporPressure())
297 const auto pc = (fluidState.wettingPhase() == (
int)
liquidPhaseIdx)
306 DUNE_THROW(Dune::NotImplemented,
"NaCl::vaporPressure(t)");
308 DUNE_THROW(Dune::NotImplemented,
"Invalid component index " << compIdx);
344 std::cout <<
"The brine-air fluid system was configured with the following policy:\n";
345 std::cout <<
" - use brine density as liquid mixture density: " << std::boolalpha << Policy::useBrineDensityAsLiquidMixtureDensity() <<
"\n";
346 std::cout <<
" - use ideal gas density: " << std::boolalpha << Policy::useIdealGasDensity() << std::endl;
348 if (H2O::isTabulated)
349 H2O::init(tempMin, tempMax, nTemp, pressMin, pressMax, nPress);
366 template <
class Flu
idState>
369 assert(0 <= phaseIdx && phaseIdx <
numPhases);
371 const auto T = fluidState.temperature(phaseIdx);
372 const auto p = fluidState.pressure(phaseIdx);
377 if (Policy::useBrineDensityAsLiquidMixtureDensity())
390 if (Policy::useIdealGasDensity())
395 return H2O::gasDensity(T, fluidState.partialPressure(
phase1Idx,
H2OIdx))
399 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
412 template <
class Flu
idState>
419 const Scalar T = fluidState.temperature(phaseIdx);
422 if (Policy::useIdealGasDensity())
427 return H2O::gasMolarDensity(T, fluidState.partialPressure(
phase1Idx,
H2OIdx))
431 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
445 template <
class Flu
idState>
448 assert(0 <= phaseIdx && phaseIdx <
numPhases);
453 return Air::gasViscosity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx));
478 template <
class Flu
idState>
481 assert(0 <= phaseIdx && phaseIdx <
numPhases);
484 Scalar T = fluidState.temperature(phaseIdx);
485 Scalar p = fluidState.pressure(phaseIdx);
499 return H2O::vaporPressure(T)/p;
501 else if (compIdx ==
AirIdx)
509 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
513 template <
class Flu
idState>
518 DUNE_THROW(Dune::NotImplemented,
"Diffusion coefficients");
532 template <
class Flu
idState>
538 assert(0 <= phaseIdx && phaseIdx <
numPhases);
542 const auto T = fluidState.temperature(phaseIdx);
543 const auto p = fluidState.pressure(phaseIdx);
545 if (compIIdx > compJIdx)
546 std::swap(compIIdx, compJIdx);
555 DUNE_THROW(Dune::NotImplemented,
"Binary diffusion coefficient of components "
556 << compIIdx <<
" and " << compJIdx
557 <<
" in phase " << phaseIdx);
571 DUNE_THROW(Dune::NotImplemented,
"Binary diffusion coefficient of components "
572 << compIIdx <<
" and " << compJIdx
573 <<
" in phase " << phaseIdx);
576 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
599 template <
class Flu
idState>
602 assert(0 <= phaseIdx && phaseIdx <
numPhases);
604 const Scalar T = fluidState.temperature(phaseIdx);
605 const Scalar p = fluidState.pressure(phaseIdx);
617 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
626 template <
class Flu
idState>
633 DUNE_THROW(Dune::NotImplemented,
"The component enthalpies in the liquid phase are not implemented.");
637 if (componentIdx ==
H2OIdx)
638 return H2O::gasEnthalpy(T, p);
639 else if (componentIdx ==
AirIdx)
641 else if (componentIdx ==
NaClIdx)
642 DUNE_THROW(Dune::InvalidStateException,
"Implementation assumes NaCl not to be present in gas phase");
643 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << componentIdx);
645 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
660 template <
class Flu
idState>
668 + H2O::gasThermalConductivity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)) * fluidState.massFraction(
gasPhaseIdx,
H2OIdx);
670 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
684 template <
class Flu
idState>
687 const Scalar T = fluidState.temperature(phaseIdx);
688 const Scalar p = fluidState.pressure(phaseIdx);
698 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
A collection of input/output field names for common physical quantities.
Some exceptions thrown in DuMux.
Binary coefficients for water and air.
Adapter class for fluid states with different indices.
Material properties of pure salt .
A simple class for the air fluid properties.
Material properties of pure water .
Tabulates all thermodynamic properties of a given untabulated chemical species.
Relations valid for an ideal gas.
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
Binary coefficients for water and air.
Definition h2o_air.hh:37
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:47
static Scalar gasDensity(Scalar temperature, Scalar pressure)
The density of Air at a given pressure and temperature.
Definition air.hh:85
static constexpr Scalar molarMass()
The molar mass in of Air.
Definition air.hh:62
static const Scalar gasHeatCapacity(Scalar temperature, Scalar pressure)
Specific isobaric heat capacity of pure air.
Definition air.hh:313
static Scalar gasViscosity(Scalar temperature, Scalar pressure)
The dynamic viscosity of Air at a given pressure and temperature.
Definition air.hh:193
static Scalar gasThermalConductivity(Scalar temperature, Scalar pressure)
Thermal conductivity of air.
Definition air.hh:351
static constexpr bool gasIsIdeal()
Returns true, the gas phase is assumed to be ideal.
Definition air.hh:109
static Scalar gasEnthalpy(Scalar temperature, Scalar pressure)
Specific enthalpy of Air with 273.15 as basis.
Definition air.hh:276
static std::string name()
A human readable name for Air.
Definition air.hh:54
static Scalar gasMolarDensity(Scalar temperature, Scalar pressure)
The molar density of air in , depending on pressure and temperature.
Definition air.hh:97
A class for the NaCl properties.
Definition nacl.hh:47
static std::string name()
A human readable name for the NaCl.
Definition nacl.hh:52
static constexpr Scalar molarMass()
The molar mass of NaCl in .
Definition nacl.hh:60
Tabulates all thermodynamic properties of a given untabulated chemical species.
Definition tabulatedcomponent.hh:82
static constexpr Scalar R
The ideal gas constant .
Definition constants.hh:44
Adapter class for fluid states with different indices.
Definition adapter.hh:44
Fluid system base class.
Definition fluidsystems/base.hh:45
ScalarType 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
A compositional single phase fluid system consisting of two components, which are H2O and NaCl.
Definition fluidsystems/brine.hh:47
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Definition fluidsystems/brine.hh:462
static Scalar viscosity(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
Definition fluidsystems/brine.hh:292
static constexpr int H2OIdx
Definition fluidsystems/brine.hh:62
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Definition fluidsystems/brine.hh:484
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Definition fluidsystems/brine.hh:352
static Scalar vaporPressure(const FluidState &fluidState, int compIdx)
Definition fluidsystems/brine.hh:323
static constexpr int NaClIdx
Definition fluidsystems/brine.hh:63
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
Definition fluidsystems/brine.hh:397
static constexpr int liquidPhaseIdx
Definition fluidsystems/brine.hh:60
static bool isCompressible(int phaseIdx=liquidPhaseIdx)
Definition fluidsystems/brine.hh:125
static Scalar density(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
Definition fluidsystems/brine.hh:230
static Scalar binaryDiffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIIdx, int compJIdx)
Definition fluidsystems/brine.hh:429
Policy for the brine-air fluid system.
Definition brineair.hh:56
static constexpr bool useIdealGasDensity()
Definition brineair.hh:58
static constexpr bool useKelvinVaporPressure()
Definition brineair.hh:59
static constexpr bool useBrineDensityAsLiquidMixtureDensity()
Definition brineair.hh:57
A compositional two-phase fluid system with a liquid and a gaseous phase and , and (dissolved miner...
Definition brineair.hh:75
static Scalar componentEnthalpy(const FluidState &fluidState, int phaseIdx, int componentIdx)
Returns the specific enthalpy of a component in a specific phase.
Definition brineair.hh:627
static Scalar density(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature, pressure, and the partial pressures of all components,...
Definition brineair.hh:367
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition brineair.hh:661
static constexpr int comp0Idx
Definition brineair.hh:113
static constexpr bool isCompressible(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition brineair.hh:206
static constexpr int liquidPhaseIdx
Definition brineair.hh:101
static constexpr int AirIdx
Definition brineair.hh:111
static constexpr int NaClIdx
Definition brineair.hh:112
static void init()
Initialize the fluid system's static parameters generically.
Definition brineair.hh:320
static constexpr int numPhases
Definition brineair.hh:98
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Definition brineair.hh:685
BinaryCoeff::H2O_Air H2O_Air
Definition brineair.hh:90
static constexpr int numComponents
Definition brineair.hh:99
NullParameterCache ParameterCache
Definition brineair.hh:93
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 brineair.hh:533
H2Otype H2O
Definition brineair.hh:82
static Scalar viscosity(const FluidState &fluidState, int phaseIdx)
Calculate the dynamic viscosity of a fluid phase .
Definition brineair.hh:446
static constexpr int comp2Idx
Definition brineair.hh:115
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature and pressure, return its specific enthalpy .
Definition brineair.hh:600
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx)
The molar density of a fluid phase in .
Definition brineair.hh:413
static constexpr int getMainComponent(int phaseIdx)
Get the main component of a given phase if possible.
Definition brineair.hh:234
Components::Air< Scalar > Air
Definition brineair.hh:83
static constexpr bool isGas(int phaseIdx)
Return whether a phase is gaseous.
Definition brineair.hh:168
static Scalar fugacityCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Returns the fugacity coefficient of a component in a phase.
Definition brineair.hh:479
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 brineair.hh:341
static Scalar molarMass(int compIdx)
Return the molar mass of a component in .
Definition brineair.hh:266
static Scalar vaporPressure(const FluidState &fluidState, int compIdx)
Vapor pressure of a component .
Definition brineair.hh:285
static std::string componentName(int compIdx)
Return the human readable name of a component.
Definition brineair.hh:250
static std::string phaseName(int phaseIdx)
Return the human readable name of a fluid phase.
Definition brineair.hh:147
static constexpr int comp1Idx
Definition brineair.hh:114
static constexpr int phase1Idx
Definition brineair.hh:105
static constexpr int phase0Idx
Definition brineair.hh:104
static constexpr bool isMiscible()
Returns whether the fluids are miscible.
Definition brineair.hh:161
static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Definition brineair.hh:514
static bool isIdealGas(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition brineair.hh:221
static constexpr int gasPhaseIdx
Definition brineair.hh:102
static bool isIdealMixture(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition brineair.hh:188
Components::NaCl< Scalar > NaCl
Definition brineair.hh:84
Dumux::FluidSystems::Brine< Scalar, H2Otype > Brine
Definition brineair.hh:87
static constexpr int H2OIdx
Definition brineair.hh:110
The a parameter cache which does nothing.
Definition nullparametercache.hh:34
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
A fluid system for brine, i.e. H2O with dissolved NaCl.