Opm::ImmiscibleModel< TypeTag > Class Template Reference

A fully-implicit multi-phase flow model which assumes immiscibility of the phases. More...

#include <immisciblemodel.hh>

Inheritance diagram for Opm::ImmiscibleModel< TypeTag >:
Inheritance graph

Public Member Functions

 ImmiscibleModel (Simulator &simulator)
 
std::string primaryVarName (unsigned pvIdx) const
 Given an primary variable index, return a human readable name. More...
 
std::string eqName (unsigned eqIdx) const
 Given an equation index, return a human readable name. More...
 
void updateBegin ()
 Called by the update() method before it tries to apply the newton method. This is primary a hook which the actual model can overload. More...
 
Scalar primaryVarWeight (unsigned globalDofIdx, unsigned pvIdx) const
 
Scalar eqWeight (unsigned globalDofIdx, unsigned eqIdx) const
 
void registerOutputModules_ ()
 
bool phaseIsConsidered (unsigned) const
 Returns true iff a fluid phase is used by the model. More...
 
void globalPhaseStorage (EqVector &storage, unsigned phaseIdx)
 Compute the total storage inside one phase of all conservation quantities. More...
 

Static Public Member Functions

static void registerParameters ()
 Register all run-time parameters for the immiscible model. More...
 
static std::string name ()
 

Detailed Description

template<class TypeTag>
class Opm::ImmiscibleModel< TypeTag >

A fully-implicit multi-phase flow model which assumes immiscibility of the phases.

This model implements multi-phase flow of $M > 0$ immiscible fluids $\alpha$. By default, the standard multi-phase Darcy approach is used to determine the velocity, i.e.

\[
   \mathbf{v}_\alpha =
   - \frac{k_{r\alpha}}{\mu_\alpha}
   \mathbf{K}\left(\mathbf{grad}\, p_\alpha -
                   \varrho_{\alpha} \mathbf{g} \right) \;,
   \]

although the actual approach which is used can be specified via the FluxModule property. For example, the velocity model can by changed to the Forchheimer approach by

template<class TypeTag>
struct FluxModule<TypeTag, TTag::MyProblemTypeTag> { using type = Opm::ForchheimerFluxModule<TypeTag>; };
Specifies a flux module which uses the Forchheimer relation.
Definition: forchheimerfluxmodule.hh:62

The core of the model is the conservation mass of each component by means of the equation

\[
   \frac{\partial\;\phi S_\alpha \rho_\alpha }{\partial t}
   - \mathrm{div} \left\{ \rho_\alpha \mathbf{v}_\alpha  \right\}
   - q_\alpha = 0 \;.
   \]

The model uses the following primary variables:

  • The pressure $p_0$ in Pascal of the phase with the lowest index
  • The saturations $S_\alpha$ of the $M - 1$ phases that exhibit the lowest indices
  • The absolute temperature $T$ in Kelvin if energy is conserved via the energy equation

Constructor & Destructor Documentation

◆ ImmiscibleModel()

template<class TypeTag >
Opm::ImmiscibleModel< TypeTag >::ImmiscibleModel ( Simulator &  simulator)
inline

Member Function Documentation

◆ eqName()

template<class TypeTag >
std::string Opm::ImmiscibleModel< TypeTag >::eqName ( unsigned  eqIdx) const
inline

Given an equation index, return a human readable name.

Parameters
eqIdxThe index of the conservation equation of interest.

◆ eqWeight()

template<class TypeTag >
Scalar Opm::ImmiscibleModel< TypeTag >::eqWeight ( unsigned  globalDofIdx,
unsigned  eqIdx 
) const
inline
Parameters
globalVertexIdxThe global index of the vertex
eqIdxThe index of the equation

◆ globalPhaseStorage()

template<class TypeTag >
void Opm::MultiPhaseBaseModel< TypeTag >::globalPhaseStorage ( EqVector &  storage,
unsigned  phaseIdx 
)
inlineinherited

◆ name()

template<class TypeTag >
static std::string Opm::ImmiscibleModel< TypeTag >::name ( )
inlinestatic

◆ phaseIsConsidered()

template<class TypeTag >
bool Opm::MultiPhaseBaseModel< TypeTag >::phaseIsConsidered ( unsigned  ) const
inlineinherited

Returns true iff a fluid phase is used by the model.

Parameters
phaseIdxThe index of the fluid phase in question

◆ primaryVarName()

template<class TypeTag >
std::string Opm::ImmiscibleModel< TypeTag >::primaryVarName ( unsigned  pvIdx) const
inline

Given an primary variable index, return a human readable name.

Parameters
pvIdxThe index of the primary variable of interest.

◆ primaryVarWeight()

template<class TypeTag >
Scalar Opm::ImmiscibleModel< TypeTag >::primaryVarWeight ( unsigned  globalDofIdx,
unsigned  pvIdx 
) const
inline
Parameters
globalDofIdxThe global index of the degree of freedom
pvIdxThe index of the primary variable

◆ registerOutputModules_()

template<class TypeTag >
void Opm::ImmiscibleModel< TypeTag >::registerOutputModules_ ( )
inline

◆ registerParameters()

template<class TypeTag >
static void Opm::ImmiscibleModel< TypeTag >::registerParameters ( )
inlinestatic

◆ updateBegin()

template<class TypeTag >
void Opm::ImmiscibleModel< TypeTag >::updateBegin ( )
inline

Called by the update() method before it tries to apply the newton method. This is primary a hook which the actual model can overload.


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