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