Opm::NcpFlash< Scalar, FluidSystem > Class Template Reference

Determines the phase compositions, pressures and saturations given the total mass of all components. More...

#include <NcpFlash.hpp>

Static Public Member Functions

template<class FluidState , class Evaluation = typename FluidState::Scalar>
static void guessInitial (FluidState &fluidState, const Dune::FieldVector< Evaluation, numComponents > &globalMolarities)
 Guess initial values for all quantities. More...
 
template<class MaterialLaw , class FluidState >
static void solve (FluidState &fluidState, const typename MaterialLaw::Params &matParams, typename FluidSystem::template ParameterCache< typename FluidState::Scalar > &paramCache, const Dune::FieldVector< typename FluidState::Scalar, numComponents > &globalMolarities, Scalar tolerance=-1.0)
 Calculates the chemical equilibrium from the component fugacities in a phase. More...
 
template<class FluidState , class ComponentVector >
static void solve (FluidState &fluidState, const ComponentVector &globalMolarities, Scalar tolerance=0.0)
 Calculates the chemical equilibrium from the component fugacities in a phase. More...
 

Static Protected Member Functions

template<class FluidState >
static void printFluidState_ (const FluidState &fluidState)
 
template<class MaterialLaw , class InputFluidState , class FlashFluidState >
static void assignFlashFluidState_ (const InputFluidState &inputFluidState, FlashFluidState &flashFluidState, const typename MaterialLaw::Params &matParams, typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &flashParamCache)
 
template<class FlashFluidState , class OutputFluidState >
static void assignOutputFluidState_ (const FlashFluidState &flashFluidState, OutputFluidState &outputFluidState)
 
template<class FlashFluidState , class FlashDefectVector , class FlashComponentVector >
static void evalDefect_ (FlashDefectVector &b, const FlashFluidState &fluidState, const FlashComponentVector &globalMolarities)
 
template<class MaterialLaw , class FlashFluidState , class EvalVector >
static Scalar update_ (FlashFluidState &fluidState, const typename MaterialLaw::Params &matParams, typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &paramCache, const EvalVector &deltaX)
 
template<class MaterialLaw , class FlashFluidState >
static void completeFluidState_ (FlashFluidState &flashFluidState, typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &paramCache, const typename MaterialLaw::Params &matParams)
 
static bool isPressureIdx_ (unsigned pvIdx)
 
static bool isSaturationIdx_ (unsigned pvIdx)
 
static bool isMoleFracIdx_ (unsigned pvIdx)
 
template<class FluidState >
static const FluidState::Scalar & getQuantity_ (const FluidState &fluidState, unsigned pvIdx)
 
template<class FluidState >
static void setQuantity_ (FluidState &fluidState, unsigned pvIdx, const typename FluidState::Scalar &value)
 
template<class FluidState >
static Scalar quantityWeight_ (const FluidState &, unsigned pvIdx)
 

Detailed Description

template<class Scalar, class FluidSystem>
class Opm::NcpFlash< Scalar, FluidSystem >

Determines the phase compositions, pressures and saturations given the total mass of all components.

In a M-phase, N-component context, we have the following unknowns:

  • M pressures
  • M saturations
  • M*N mole fractions

This sums up to M*(N + 2). On the equations side of things, we have:

  • (M - 1)*N equations stemming from the fact that the fugacity of any component is the same in all phases: $\forall \alpha, \beta, \kappa: f_\alpha^\kappa = f_\beta^\kappa$
  • 1 equation from the closure condition of all saturations: $\sum_\alpha S_\alpha = 1$
  • M - 1 constraints from the capillary pressures: $p_\beta = p_\alpha + p_c\alpha,\beta$
  • N constraints from the fact that the total mass of each component is given: $sum_\alpha rhoMolar_\alpha x_\alpha^\kappa = const$
  • M model constraints. Here, we use the NCP constraints: $ 0 = \mathrm{min}{S_\alpha, 1 - \sum_\kappa x_\alpha^\kappa}$

This also sums up to M*(N + 2).

The following assumptions apply: Capillary pressures are taken into account explicitly, so only the pressure of the first phase is implicitly solved for. Also, the closure condition for the saturations is taken into account explicitly, i.e., we don't need to implicitly solve for the last saturation. These two assumptions reduce the number of unknowns to the following M*(N + 1):

  • 1 pressure
  • M - 1 saturations
  • M*N mole fractions

Member Function Documentation

◆ assignFlashFluidState_()

template<class Scalar , class FluidSystem >
template<class MaterialLaw , class InputFluidState , class FlashFluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::assignFlashFluidState_ ( const InputFluidState &  inputFluidState,
FlashFluidState &  flashFluidState,
const typename MaterialLaw::Params &  matParams,
typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &  flashParamCache 
)
inlinestaticprotected

◆ assignOutputFluidState_()

template<class Scalar , class FluidSystem >
template<class FlashFluidState , class OutputFluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::assignOutputFluidState_ ( const FlashFluidState &  flashFluidState,
OutputFluidState &  outputFluidState 
)
inlinestaticprotected

◆ completeFluidState_()

template<class Scalar , class FluidSystem >
template<class MaterialLaw , class FlashFluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::completeFluidState_ ( FlashFluidState &  flashFluidState,
typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &  paramCache,
const typename MaterialLaw::Params &  matParams 
)
inlinestaticprotected

◆ evalDefect_()

template<class Scalar , class FluidSystem >
template<class FlashFluidState , class FlashDefectVector , class FlashComponentVector >
static void Opm::NcpFlash< Scalar, FluidSystem >::evalDefect_ ( FlashDefectVector &  b,
const FlashFluidState &  fluidState,
const FlashComponentVector &  globalMolarities 
)
inlinestaticprotected

◆ getQuantity_()

template<class Scalar , class FluidSystem >
template<class FluidState >
static const FluidState::Scalar & Opm::NcpFlash< Scalar, FluidSystem >::getQuantity_ ( const FluidState &  fluidState,
unsigned  pvIdx 
)
inlinestaticprotected

◆ guessInitial()

template<class Scalar , class FluidSystem >
template<class FluidState , class Evaluation = typename FluidState::Scalar>
static void Opm::NcpFlash< Scalar, FluidSystem >::guessInitial ( FluidState &  fluidState,
const Dune::FieldVector< Evaluation, numComponents > &  globalMolarities 
)
inlinestatic

Guess initial values for all quantities.

◆ isMoleFracIdx_()

template<class Scalar , class FluidSystem >
static bool Opm::NcpFlash< Scalar, FluidSystem >::isMoleFracIdx_ ( unsigned  pvIdx)
inlinestaticprotected

◆ isPressureIdx_()

template<class Scalar , class FluidSystem >
static bool Opm::NcpFlash< Scalar, FluidSystem >::isPressureIdx_ ( unsigned  pvIdx)
inlinestaticprotected

◆ isSaturationIdx_()

template<class Scalar , class FluidSystem >
static bool Opm::NcpFlash< Scalar, FluidSystem >::isSaturationIdx_ ( unsigned  pvIdx)
inlinestaticprotected

◆ printFluidState_()

template<class Scalar , class FluidSystem >
template<class FluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::printFluidState_ ( const FluidState &  fluidState)
inlinestaticprotected

◆ quantityWeight_()

template<class Scalar , class FluidSystem >
template<class FluidState >
static Scalar Opm::NcpFlash< Scalar, FluidSystem >::quantityWeight_ ( const FluidState &  ,
unsigned  pvIdx 
)
inlinestaticprotected

◆ setQuantity_()

template<class Scalar , class FluidSystem >
template<class FluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::setQuantity_ ( FluidState &  fluidState,
unsigned  pvIdx,
const typename FluidState::Scalar &  value 
)
inlinestaticprotected

◆ solve() [1/2]

template<class Scalar , class FluidSystem >
template<class FluidState , class ComponentVector >
static void Opm::NcpFlash< Scalar, FluidSystem >::solve ( FluidState &  fluidState,
const ComponentVector &  globalMolarities,
Scalar  tolerance = 0.0 
)
inlinestatic

Calculates the chemical equilibrium from the component fugacities in a phase.

This is a convenience method which assumes that the capillary pressure is zero...

◆ solve() [2/2]

template<class Scalar , class FluidSystem >
template<class MaterialLaw , class FluidState >
static void Opm::NcpFlash< Scalar, FluidSystem >::solve ( FluidState &  fluidState,
const typename MaterialLaw::Params &  matParams,
typename FluidSystem::template ParameterCache< typename FluidState::Scalar > &  paramCache,
const Dune::FieldVector< typename FluidState::Scalar, numComponents > &  globalMolarities,
Scalar  tolerance = -1.0 
)
inlinestatic

Calculates the chemical equilibrium from the component fugacities in a phase.

The phase's fugacities must already be set.

References Opm::NcpFlash< Scalar, FluidSystem >::assignOutputFluidState_(), Opm::Valgrind::CheckDefined(), Opm::NcpFlash< Scalar, FluidSystem >::evalDefect_(), and Opm::Valgrind::SetUndefined().

◆ update_()

template<class Scalar , class FluidSystem >
template<class MaterialLaw , class FlashFluidState , class EvalVector >
static Scalar Opm::NcpFlash< Scalar, FluidSystem >::update_ ( FlashFluidState &  fluidState,
const typename MaterialLaw::Params &  matParams,
typename FluidSystem::template ParameterCache< typename FlashFluidState::Scalar > &  paramCache,
const EvalVector &  deltaX 
)
inlinestaticprotected

The documentation for this class was generated from the following file: