This model implements a variant of the Richards equation for quasi-twophase flow. More...

#include <richardsmodel.hh>

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

Public Member Functions

 RichardsModel (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...
 
Scalar primaryVarWeight (unsigned, unsigned pvIdx) const
 Returns the relative weight of a primary variable for calculating relative errors. More...
 
Scalar eqWeight (unsigned, unsigned eqIdx) const
 Returns the relative weight of an equation. 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...
 
bool phaseIsConsidered (unsigned phaseIdx) const
 
void registerOutputModules_ ()
 
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 model. More...
 
static std::string name ()
 

Public Attributes

Scalar referencePressure_
 

Detailed Description

template<class TypeTag>
class Opm::RichardsModel< TypeTag >

This model implements a variant of the Richards equation for quasi-twophase flow.

In the unsaturated zone, Richards' equation is frequently used to approximate the water distribution above the groundwater level. It can be derived from the two-phase equations, i.e.

\[
\frac{\partial\;\phi S_\alpha \rho_\alpha}{\partial t}
-
\mathrm{div} \left\{
\rho_\alpha \frac{k_{r\alpha}}{\mu_\alpha}\; \mathbf{K}\;
\mathbf{grad}\left[
p_\alpha - g\rho_\alpha
\right]
\right\}
=
q_\alpha,
\]

where $\alpha \in \{w, n\}$ is the index of the fluid phase, $\rho_\alpha$ is the fluid density, $S_\alpha$ is the fluid saturation, $\phi$ is the porosity of the soil, $k_{r\alpha}$ is the relative permeability for the fluid, $\mu_\alpha$ is the fluid's dynamic viscosity, $\mathbf{K}$ is the intrinsic permeability tensor, $p_\alpha$ is the fluid phase pressure and $g$ is the potential of the gravity field.

In contrast to the "full" two-phase model, the Richards model assumes that the non-wetting fluid is gas and that it thus exhibits a much lower viscosity than the (liquid) wetting phase. (This assumption is quite realistic in many applications: For example, at atmospheric pressure and at room temperature, the viscosity of air is only about $1\%$ of the viscosity of liquid water.) As a consequence, the $\frac{k_{r\alpha}}{\mu_\alpha}$ term typically is much larger for the gas phase than for the wetting phase. Using this reasoning, the Richards model assumes that $\frac{k_{rn}}{\mu_n}$ is infinitely large compared to the same term of the liquid phase. This implies that the pressure of the gas phase is equivalent to the static pressure distribution and that therefore, mass conservation only needs to be considered for the liquid phase.

The model thus choses the absolute pressure of the wetting phase $p_w$ as its only primary variable. The wetting phase saturation is calculated using the inverse of the capillary pressure, i.e.

\[
S_w = p_c^{-1}(p_n - p_w)
\]

holds, where $p_n$ is a reference pressure given by the problem's referencePressure() method. Nota bene, that the last step assumes that the capillary pressure-saturation curve can be uniquely inverted, i.e. it is not possible to set the capillary pressure to zero if the Richards model ought to be used!

Constructor & Destructor Documentation

◆ RichardsModel()

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

Member Function Documentation

◆ eqName()

template<class TypeTag >
std::string Opm::RichardsModel< 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::RichardsModel< TypeTag >::eqWeight ( unsigned  ,
unsigned  eqIdx 
) const
inline

Returns the relative weight of an equation.

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

Compute the total storage inside one phase of all conservation quantities.

Parameters
storageStores the total amount of each conserved quantity inside the domain.
phaseIdxThe index of the fluid phase of interest.

References Opm::ThreadedEntityIterator< GridView, codim >::beginParallel(), Opm::ThreadedEntityIterator< GridView, codim >::increment(), Opm::ThreadedEntityIterator< GridView, codim >::isFinished(), and Opm::ThreadManager< TypeTag >::threadId().

◆ name()

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

◆ phaseIsConsidered()

template<class TypeTag >
bool Opm::RichardsModel< TypeTag >::phaseIsConsidered ( unsigned  phaseIdx) const
inline

◆ primaryVarName()

template<class TypeTag >
std::string Opm::RichardsModel< 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::RichardsModel< TypeTag >::primaryVarWeight ( unsigned  ,
unsigned  pvIdx 
) const
inline

Returns the relative weight of a primary variable for calculating relative errors.

Parameters
globalDofIdxThe global index of the degree of freedom
pvIdxThe index of the primary variable

References Opm::RichardsModel< TypeTag >::referencePressure_.

◆ registerOutputModules_()

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

◆ registerParameters()

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

Register all run-time parameters for the model.

References Opm::MultiPhaseBaseModel< TypeTag >::registerParameters().

◆ updateBegin()

template<class TypeTag >
void Opm::RichardsModel< 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.

References Opm::RichardsModel< TypeTag >::referencePressure_.

Member Data Documentation

◆ referencePressure_

template<class TypeTag >
Scalar Opm::RichardsModel< TypeTag >::referencePressure_
mutable

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