12#ifndef DUMUX_2P_IMMISCIBLE_FLUID_SYSTEM_HH
13#define DUMUX_2P_IMMISCIBLE_FLUID_SYSTEM_HH
18#include <dune/common/exceptions.hh>
43template <
class Scalar,
class Flu
id0,
class Flu
id1>
45:
public Base<Scalar, TwoPImmiscible<Scalar, Fluid0, Fluid1> >
47 static_assert((Fluid0::numPhases == 1),
"Fluid0 has more than one phase");
48 static_assert((Fluid1::numPhases == 1),
"Fluid1 has more than one phase");
49 static_assert((Fluid0::numComponents == 1),
"Fluid0 has more than one component");
50 static_assert((Fluid1::numComponents == 1),
"Fluid1 has more than one component");
52 static_assert(!Fluid0::isGas() || !Fluid1::isGas(),
"One phase has to be a liquid!");
74 assert(0 <= phaseIdx && phaseIdx <
numPhases);
76 if (!Fluid0::isGas() && !Fluid1::isGas())
82 return (phaseIdx ==
phase0Idx) ? name0 : name1;
84 return (phaseIdx ==
phase0Idx) ? name0 +
"_0" : name1 +
"_1";
105 static constexpr bool isGas(
int phaseIdx)
107 assert(0 <= phaseIdx && phaseIdx <
numPhases);
110 return Fluid0::isGas();
111 return Fluid1::isGas();
129 assert(0 <= phaseIdx && phaseIdx <
numPhases);
143 assert(0 <= phaseIdx && phaseIdx <
numPhases);
147 return Fluid0::isIdealGas();
148 return Fluid1::isIdealGas();
162 assert(0 <= phaseIdx && phaseIdx <
numPhases);
166 return Fluid0::isCompressible();
167 return Fluid1::isCompressible();
177 assert(0 <= phaseIdx && phaseIdx <
numPhases);
181 return Fluid0::viscosityIsConstant();
182 return Fluid1::viscosityIsConstant();
193 assert(0 <= phaseIdx && phaseIdx <
numPhases);
197 return Fluid0::isIdealFluid1();
198 return Fluid1::isIdealFluid1();
214 return Fluid0::name();
215 return Fluid1::name();
227 return Fluid0::molarMass();
228 return Fluid1::molarMass();
240 return Fluid0::criticalTemperature();
241 return Fluid1::criticalTemperature();
253 return Fluid0::criticalPressure();
254 return Fluid1::criticalPressure();
266 return Fluid0::acentricFactor();
267 return Fluid1::acentricFactor();
280 init(273.15, 623.15, 100,
298 if (Fluid0::Component::isTabulated)
299 Fluid0::Component::init(tempMin, tempMax, nTemp, pressMin, pressMax, nPress);
301 if (Fluid1::Component::isTabulated)
302 Fluid1::Component::init(tempMin, tempMax, nTemp, pressMin, pressMax, nPress);
307 template <
class Flu
idState>
311 assert(0 <= phaseIdx && phaseIdx <
numPhases);
313 Scalar temperature = fluidState.temperature(phaseIdx);
314 Scalar pressure = fluidState.pressure(phaseIdx);
316 return Fluid0::density(temperature, pressure);
317 return Fluid1::density(temperature, pressure);
322 template <
class Flu
idState>
325 Scalar temperature = fluidState.temperature(phaseIdx);
326 Scalar pressure = fluidState.pressure(phaseIdx);
328 return Fluid0::molarDensity(temperature, pressure);
329 return Fluid1::molarDensity(temperature, pressure);
334 template <
class Flu
idState>
338 assert(0 <= phaseIdx && phaseIdx <
numPhases);
340 Scalar temperature = fluidState.temperature(phaseIdx);
341 Scalar pressure = fluidState.pressure(phaseIdx);
343 return Fluid0::viscosity(temperature, pressure);
344 return Fluid1::viscosity(temperature, pressure);
349 template <
class Flu
idState>
354 assert(0 <= phaseIdx && phaseIdx <
numPhases);
357 if (phaseIdx == compIdx)
363 return std::numeric_limits<Scalar>::infinity();
368 template <
class Flu
idState>
373 DUNE_THROW(Dune::InvalidStateException,
374 "Diffusion coefficients of components are meaningless if"
375 " immiscibility is assumed");
380 template <
class Flu
idState>
387 DUNE_THROW(Dune::InvalidStateException,
388 "Binary diffusion coefficients of components are meaningless if"
389 " immiscibility is assumed");
394 template <
class Flu
idState>
398 assert(0 <= phaseIdx && phaseIdx <
numPhases);
400 Scalar temperature = fluidState.temperature(phaseIdx);
401 Scalar pressure = fluidState.pressure(phaseIdx);
403 return Fluid0::enthalpy(temperature, pressure);
404 return Fluid1::enthalpy(temperature, pressure);
409 template <
class Flu
idState>
413 assert(0 <= phaseIdx && phaseIdx <
numPhases);
415 Scalar temperature = fluidState.temperature(phaseIdx);
416 Scalar pressure = fluidState.pressure(phaseIdx);
418 return Fluid0::thermalConductivity(temperature, pressure);
419 return Fluid1::thermalConductivity(temperature, pressure);
424 template <
class Flu
idState>
428 assert(0 <= phaseIdx && phaseIdx <
numPhases);
430 Scalar temperature = fluidState.temperature(phaseIdx);
431 Scalar pressure = fluidState.pressure(phaseIdx);
433 return Fluid0::heatCapacity(temperature, pressure);
434 return Fluid1::heatCapacity(temperature, pressure);
A gaseous phase consisting of a single component.
A liquid phase consisting of a single component.
Fluid system base class.
Definition fluidsystems/base.hh:32
Scalar Scalar
Definition fluidsystems/base.hh:35
A fluid system for two-phase models assuming immiscibility and thermodynamic equilibrium.
Definition 2pimmiscible.hh:46
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 2pimmiscible.hh:381
static std::string phaseName(int phaseIdx)
Return the human readable name of a fluid phase.
Definition 2pimmiscible.hh:72
static std::string componentName(int compIdx)
Return the human readable name of a component.
Definition 2pimmiscible.hh:209
static constexpr bool isCompressible(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition 2pimmiscible.hh:160
static Scalar acentricFactor(int compIdx)
The acentric factor of a component .
Definition 2pimmiscible.hh:261
static Scalar enthalpy(const FluidState &fluidState, int phaseIdx)
Given a phase's composition, temperature, pressure and density, calculate its specific enthalpy .
Definition 2pimmiscible.hh:395
static constexpr bool isMiscible()
Returns whether the fluids are miscible.
Definition 2pimmiscible.hh:98
static bool isIdealFluid1(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition 2pimmiscible.hh:191
static Scalar thermalConductivity(const FluidState &fluidState, int phaseIdx)
Thermal conductivity of a fluid phase .
Definition 2pimmiscible.hh:410
static bool isIdealMixture(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition 2pimmiscible.hh:127
static void init(Scalar tempMin, Scalar tempMax, std::size_t nTemp, Scalar pressMin, Scalar pressMax, std::size_t nPress)
Initialize the fluid system's static parameters using problem specific temperature and pressure range...
Definition 2pimmiscible.hh:295
static Scalar viscosity(const FluidState &fluidState, int phaseIdx)
Calculate the dynamic viscosity of a fluid phase .
Definition 2pimmiscible.hh:335
static Scalar fugacityCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Calculate the fugacity coefficient of an individual component in a fluid phase.
Definition 2pimmiscible.hh:350
static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx)
Calculate the binary molecular diffusion coefficient for a component in a fluid phase .
Definition 2pimmiscible.hh:369
static constexpr bool isIdealGas(int phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition 2pimmiscible.hh:141
static constexpr int comp0Idx
index of the first component
Definition 2pimmiscible.hh:62
static Scalar heatCapacity(const FluidState &fluidState, int phaseIdx)
Specific isobaric heat capacity of a fluid phase .
Definition 2pimmiscible.hh:425
static constexpr int phase0Idx
index of the first phase
Definition 2pimmiscible.hh:60
static Scalar density(const FluidState &fluidState, int phaseIdx)
Calculate the density of a fluid phase.
Definition 2pimmiscible.hh:308
static constexpr bool viscosityIsConstant(int phaseIdx)
Returns true if the liquid phase viscostiy is constant.
Definition 2pimmiscible.hh:175
static constexpr int numPhases
Number of phases in the fluid system.
Definition 2pimmiscible.hh:57
static Scalar molarDensity(const FluidState &fluidState, int phaseIdx)
Calculate the molar density of a fluid phase.
Definition 2pimmiscible.hh:323
static void init()
Initialize the fluid system's static parameters.
Definition 2pimmiscible.hh:277
static Scalar criticalPressure(int compIdx)
Critical pressure of a component .
Definition 2pimmiscible.hh:248
static Scalar criticalTemperature(int compIdx)
Critical temperature of a component .
Definition 2pimmiscible.hh:235
static constexpr bool isGas(int phaseIdx)
Return whether a phase is gaseous.
Definition 2pimmiscible.hh:105
static constexpr int comp1Idx
index of the second component
Definition 2pimmiscible.hh:63
static Scalar molarMass(int compIdx)
Return the molar mass of a component in .
Definition 2pimmiscible.hh:222
static constexpr int numComponents
Number of components in the fluid system.
Definition 2pimmiscible.hh:58
static constexpr int phase1Idx
index of the second phase
Definition 2pimmiscible.hh:61
Base class for all components Components provide the thermodynamic relations for the liquid,...
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
A collection of input/output field names for common physical quantities.
std::string gaseousPhase() noexcept
I/O name of gaseous phase.
Definition name.hh:111
std::string naplPhase() noexcept
I/O name of napl phase.
Definition name.hh:119
std::string liquidPhase() noexcept
I/O name of liquid phase.
Definition name.hh:107
std::string aqueousPhase() noexcept
I/O name of aqueous phase.
Definition name.hh:115
IsAqueous struct.
Definition components/base.hh:34