24#ifndef DUMUX_BRINE_AIR_FLUID_SYSTEM_HH
25#define DUMUX_BRINE_AIR_FLUID_SYSTEM_HH
49namespace FluidSystems {
55template<
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)
135 template<
class Flu
idState>
150 assert(0 <= phaseIdx && phaseIdx <
numPhases);
156 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
169 static constexpr bool isGas(
int phaseIdx)
171 assert(0 <= phaseIdx && phaseIdx <
numPhases);
191 assert(0 <= phaseIdx && phaseIdx <
numPhases);
209 assert(0 <= phaseIdx && phaseIdx <
numPhases);
224 assert(0 <= phaseIdx && phaseIdx <
numPhases);
237 assert(0 <= phaseIdx && phaseIdx <
numPhases);
256 case H2OIdx:
return H2O::name();
260 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
272 case H2OIdx:
return H2O::molarMass();
276 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << compIdx);
285 template <
class Flu
idState>
293 DUNE_THROW(Dune::NotImplemented,
"NaCl::vaporPressure(t)");
295 DUNE_THROW(Dune::NotImplemented,
"Invalid component index " << compIdx);
328 static void init(Scalar tempMin, Scalar tempMax,
unsigned nTemp,
329 Scalar pressMin, Scalar pressMax,
unsigned nPress)
331 std::cout <<
"The brine-air fluid system was configured with the following policy:\n";
332 std::cout <<
" - use brine density as liquid mixture density: " << std::boolalpha << Policy::useBrineDensityAsLiquidMixtureDensity() <<
"\n";
333 std::cout <<
" - use ideal gas density: " << std::boolalpha << Policy::useIdealGasDensity() << std::endl;
335 if (H2O::isTabulated)
336 H2O::init(tempMin, tempMax, nTemp, pressMin, pressMax, nPress);
353 template <
class Flu
idState>
354 static Scalar
density(
const FluidState &fluidState,
int phaseIdx)
356 assert(0 <= phaseIdx && phaseIdx <
numPhases);
358 const auto T = fluidState.temperature(phaseIdx);
359 const auto p = fluidState.pressure(phaseIdx);
364 if (Policy::useBrineDensityAsLiquidMixtureDensity())
377 if (Policy::useIdealGasDensity())
382 return H2O::gasDensity(T, fluidState.partialPressure(
phase1Idx,
H2OIdx))
386 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
399 template <
class Flu
idState>
406 const Scalar T = fluidState.temperature(phaseIdx);
409 if (Policy::useIdealGasDensity())
414 return H2O::gasMolarDensity(T, fluidState.partialPressure(
phase1Idx,
H2OIdx))
418 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
432 template <
class Flu
idState>
433 static Scalar
viscosity(
const FluidState& fluidState,
int phaseIdx)
435 assert(0 <= phaseIdx && phaseIdx <
numPhases);
440 return Air::gasViscosity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx));
465 template <
class Flu
idState>
468 assert(0 <= phaseIdx && phaseIdx <
numPhases);
471 Scalar T = fluidState.temperature(phaseIdx);
472 Scalar p = fluidState.pressure(phaseIdx);
486 return H2O::vaporPressure(T)/p;
488 else if (compIdx ==
AirIdx)
496 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
500 template <
class Flu
idState>
505 DUNE_THROW(Dune::NotImplemented,
"Diffusion coefficients");
519 template <
class Flu
idState>
525 assert(0 <= phaseIdx && phaseIdx <
numPhases);
529 const auto T = fluidState.temperature(phaseIdx);
530 const auto p = fluidState.pressure(phaseIdx);
532 if (compIIdx > compJIdx)
533 std::swap(compIIdx, compJIdx);
542 DUNE_THROW(Dune::NotImplemented,
"Binary diffusion coefficient of components "
543 << compIIdx <<
" and " << compJIdx
544 <<
" in phase " << phaseIdx);
558 DUNE_THROW(Dune::NotImplemented,
"Binary diffusion coefficient of components "
559 << compIIdx <<
" and " << compJIdx
560 <<
" in phase " << phaseIdx);
563 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
586 template <
class Flu
idState>
587 static Scalar
enthalpy(
const FluidState& fluidState,
int phaseIdx)
589 assert(0 <= phaseIdx && phaseIdx <
numPhases);
591 Scalar T = fluidState.temperature(phaseIdx);
592 Scalar p = fluidState.pressure(phaseIdx);
603 result += XH2O * H2O::gasEnthalpy(T, p);
616 template <
class Flu
idState>
619 const Scalar T = fluidState.temperature(
gasPhaseIdx);
623 DUNE_THROW(Dune::NotImplemented,
"The component enthalpies in the liquid phase are not implemented.");
627 if (componentIdx ==
H2OIdx)
628 return H2O::gasEnthalpy(T, p);
629 else if (componentIdx ==
AirIdx)
631 else if (componentIdx ==
NaClIdx)
632 DUNE_THROW(Dune::InvalidStateException,
"Implementation assumes NaCl not to be present in gas phase");
633 DUNE_THROW(Dune::InvalidStateException,
"Invalid component index " << componentIdx);
635 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
648 template <
class Flu
idState>
656 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
670 template <
class Flu
idState>
673 const Scalar T = fluidState.temperature(phaseIdx);
674 const Scalar p = fluidState.pressure(phaseIdx);
684 DUNE_THROW(Dune::InvalidStateException,
"Invalid phase index " << phaseIdx);
A collection of input/output field names for common physical quantities.
Material properties of pure salt .
Material properties of pure water .
Tabulates all thermodynamic properties of a given untabulated chemical species.
A simple class for the air fluid properties.
Adapter class for fluid states with different indices.
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 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: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 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 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
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
Adapter class for fluid states with different indices.
Definition: adapter.hh:44
Fluid system base class.
Definition: fluidsystems/base.hh:45
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:48
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition: fluidsystems/brine.hh:483
static Scalar viscosity(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
Return the viscosity of the phase.
Definition: fluidsystems/brine.hh:282
static constexpr int H2OIdx
index of the water component
Definition: fluidsystems/brine.hh:63
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Specific isobaric heat capacity of a fluid phase. .
Definition: fluidsystems/brine.hh:501
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature and pressure, return its specific enthalpy .
Definition: fluidsystems/brine.hh:337
static Scalar vaporPressure(const FluidState &fluidState, int compIdx)
Vapor pressure of a component .
Definition: fluidsystems/brine.hh:308
static constexpr int NaClIdx
index of the NaCl component
Definition: fluidsystems/brine.hh:64
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
The molar density of the fluid phase in .
Definition: fluidsystems/brine.hh:418
static constexpr int liquidPhaseIdx
The one considered phase is liquid.
Definition: fluidsystems/brine.hh:61
static bool isCompressible(int phaseIdx=liquidPhaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition: fluidsystems/brine.hh:126
static Scalar density(const FluidState &fluidState, int phaseIdx=liquidPhaseIdx)
Return the phase density [kg/m^3].
Definition: fluidsystems/brine.hh:226
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/brine.hh:445
Policy for the brine-air fluid system.
Definition: brineair.hh:57
static constexpr bool useIdealGasDensity()
Definition: brineair.hh:59
static constexpr bool useBrineDensityAsLiquidMixtureDensity()
Definition: brineair.hh:58
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:617
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:354
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition: brineair.hh:649
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:207
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:307
static constexpr int numPhases
Definition: brineair.hh:98
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Definition: brineair.hh:671
static constexpr int numComponents
Definition: brineair.hh:99
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:520
H2Otype H2O
export the involved components
Definition: brineair.hh:82
static Scalar viscosity(const FluidState &fluidState, int phaseIdx)
Calculate the dynamic viscosity of a fluid phase .
Definition: brineair.hh:433
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:587
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx)
The molar density of a fluid phase in .
Definition: brineair.hh:400
static constexpr int getMainComponent(int phaseIdx)
Get the main component of a given phase if possible.
Definition: brineair.hh:235
static constexpr bool isGas(int phaseIdx)
Return whether a phase is gaseous.
Definition: brineair.hh:169
static Scalar fugacityCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Returns the fugacity coefficient of a component in a phase.
Definition: brineair.hh:466
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:328
static Scalar molarMass(int compIdx)
Return the molar mass of a component in .
Definition: brineair.hh:267
static Scalar vaporPressure(const FluidState &fluidState, int compIdx)
Vapor pressure of a component .
Definition: brineair.hh:286
static std::string componentName(int compIdx)
Return the human readable name of a component.
Definition: brineair.hh:251
static std::string phaseName(int phaseIdx)
Return the human readable name of a fluid phase.
Definition: brineair.hh:148
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:162
static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Definition: brineair.hh:501
static bool isIdealGas(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition: brineair.hh:222
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:189
Dumux::FluidSystems::Brine< Scalar, H2Otype > Brine
export the underlying brine fluid system for the liquid phase
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.