version 3.11-dev
Loading...
Searching...
No Matches

Two-phase (immiscible) Darcy flow in vertical equilibrium. More...

Description

Two-phase flow in vertical equilibrium, solved on a coarse grid of vertical columns.

This model describes immiscible two-phase flow of a wetting phase \(w\) and a less dense nonwetting phase \(n\) in a formation of height \(H\), for instance the injection of CO2 into a saline aquifer. The phases are assumed to be segregated by gravity and in hydrostatic equilibrium in the vertical direction (vertical equilibrium) [79]. The mass balance equations are solved on a horizontal grid of dimension one lower than the formation. Each coarse cell represents a vertical column on a separate full-dimensional fine grid, and the vertical distribution of the saturations, pressures and mobilities is reconstructed in each column on the fine grid. See [23] for a detailed description of the model.

On the coarse level, the mass balance of each phase \(\alpha \in \{ w, n \}\) reads

\[\frac{\partial (\Phi \varrho_\alpha \bar S_\alpha)}{\partial t} - \nabla_h \cdot \left\{ \varrho_\alpha \bar\lambda_\alpha K_I \nabla_h P_\alpha \right\} - q_\alpha = 0, \]

where:

  • \( z \) is the height above the bottom of the formation,
  • \( \Phi = \int_0^H \phi \, \mathrm{d}z \) is the vertical integral of the porosity \(\phi\),
  • \( K_I = \int_0^H k \, \mathrm{d}z \) is the vertical integral of the scalar permeability \(k\),
  • \( \bar S_\alpha \) is the porosity-weighted vertical average of the saturation of phase \(\alpha\),
  • \( \bar\lambda_\alpha = \int_0^H k \lambda_\alpha \, \mathrm{d}z \big/ \int_0^H k \, \mathrm{d}z \) is the permeability-weighted vertical average of the mobility \( \lambda_\alpha = k_{r\alpha}/\mu_\alpha \) of phase \(\alpha\), with the relative permeability \( k_{r\alpha} \) and the dynamic viscosity \( \mu_\alpha \),
  • \( \varrho_\alpha \) is the mass density of phase \(\alpha\),
  • \( P_\alpha \) is the pressure of phase \(\alpha\) at the bottom of the column,
  • \( q_\alpha \) is a vertically integrated source or sink per horizontal measure.

Coarse cell volumes and face areas are horizontal measures, and the column height \( H \) is the extrusion factor of storage, fluxes and sources. The problem therefore returns height averages: source returns \( q_\alpha / H \), the source per unit volume of the formation, and neumann returns the boundary flux integrated over the column height divided by \( H \), the flux per unit area of the vertical boundary face. Accordingly, the volume variables return the column averages \( \Phi / H \) and \( K_I / H \) as porosity() and permeability(), and the integrals as porosityIntegral() and permeabilityIntegral(). No solid state or energy equation is used; the prescribed temperature determines the fluid properties. The velocity output is the column-average Darcy velocity in m/s.

The coarse grid has only horizontal coordinates, so its gravity vector is zero. Vertical gravity is supplied by the fine-level spatial parameters and enters through the reconstruction. The primary variables are \( P_w \) and \( \bar S_n \). Extrapolating the hydrostatic nonwetting-phase pressure to the bottom of the column gives the coarse-level capillary pressure

\[P_n - P_w = p_e - (\varrho_w - \varrho_n) g z_p, \]

where \( p_e \) is the entry pressure, \( g \) the norm of the gravitational acceleration and \( z_p \) the gas plume distance, the height of the lower boundary of the mobile nonwetting phase. If the mobile nonwetting phase fills the column down to its bottom, the capillary fringe extends below the column and \( z_p < 0 \).

Above the gas plume distance, the wetting-phase saturation follows from the Brooks-Corey capillary pressure [21] in hydrostatic equilibrium,

\[S_w(z) = S_{wr} + (1 - S_{wr} - S_{nr}) \left( 1 + \frac{(\varrho_w - \varrho_n) g (z - z_p)}{p_e} \right)^{-\lambda}, \]

with the residual saturations \( S_{wr} \) and \( S_{nr} \) and the Brooks-Corey parameter \( \lambda \). Between the minimum gas plume distance of all previous time steps \( z_{p,\min} \) and \( z_p \), the nonwetting phase is residually trapped and \( S_w = 1 - S_{nr} \) [38]. Below \( z_{p,\min} \), \( S_w = 1 \). The gas plume distance is the height for which the vertical integral of this saturation profile equals \( H \bar S_w \). The fine-level mobilities are the cell averages of the Brooks-Corey relative permeabilities for this profile divided by the viscosities.

The current implementation has the following restrictions:

  • the fine grid is two- or three-dimensional and the coarse grid is one- or two-dimensional, respectively. Both are structured and axis-aligned
  • the fine grid must be uniform in the vertical direction
  • the coarse domain bounds and cell subdivisions must match the horizontal projection of the fine grid
  • each coarse cell must map to the same number of vertically stacked fine cells
  • each horizontally projected fine-cell center must be contained unambiguously in exactly one coarse cell
  • gravity must be nonzero and aligned with the vertical coordinate axis
  • the first fluid phase must be the wetting phase, and it must be denser than the nonwetting phase
  • the reconstruction uses a Brooks-Corey material law
  • the material law parameters, the densities and the viscosities are constant within a column, the densities and viscosities are evaluated at the coarse-level wetting-phase pressure
  • the porosity must be uniform within a column
  • the permeability must be a scalar
  • only the \( P_w - \bar S_n \) primary-variable formulation is supported
  • only the cell-centered two-point flux approximation is supported
  • only isothermal flow is supported

These are restrictions of the current implementation and are not general restrictions of vertical-equilibrium models.

A problem using this model has to provide fineLevelView(), returning the Dumux::TwoPVEFineLevelView that connects the coarse level to the fine level, and spatial parameters deriving from Dumux::TwoPVESpatialParams. After each time step, the fine-level solution and the history of the columns have to be updated with Dumux::TwoPVEFineLevelView::updateSol, and cached coarse-level volume variables have to be updated afterwards.

Classes

class  Dumux::TwoPVEColumnMapping< CoarseGridGeometry, FineGridGeometry, Scalar >
 Maps horizontal coarse cells to vertically stacked fine cells using horizontal projection. More...
struct  Dumux::TwoPVEColumnState< Scalar >
 The state of a coarse-level column from which the fine-level quantities are reconstructed. More...
class  Dumux::TwoPVEFineLevelElementState< GridGeometry, Scalar, FluidSystem >
 The quantities of a fine-level element reconstructed from the state of its coarse-level column. More...
struct  Dumux::TwoPVEFineLevelFieldStorage< GridGeometry, Scalar, FluidSystem >
 Stores the reconstructed quantities of all fine-level elements for output. More...
struct  Dumux::TwoPVEColumnHistory< Scalar >
 The gas plume distance of a coarse-level column at the last time step and its minimum over all previous time steps. More...
class  Dumux::TwoPVEFineLevelView< CoarseGridGeometry, FineGridGeometry, Scalar, FluidSystem, Indices, SolutionVector, SpatialParamsFine >
 Connects the coarse level of the two-phase VE model to its fine level. More...
struct  Dumux::TwoPVE::GasPlumeDistancesData< Scalar >
 The gas plume distance of a column and its minimum over all previous time steps. More...
struct  Dumux::TwoPVE::PhaseDensitiesData< Scalar >
 The densities of the wetting and the nonwetting phase. More...
struct  Dumux::TwoPVE::PhaseViscositiesData< Scalar >
 The viscosities of the wetting and the nonwetting phase. More...
struct  Dumux::TwoPVE::ResidualSaturationsData< Scalar >
 The residual saturations of the wetting and the nonwetting phase. More...
struct  Dumux::TwoPVE::BrooksCoreyParametersData< Scalar >
 The parameters of the Brooks-Corey material law. More...
class  Dumux::TwoPVEQuantityReconstruction< Scalar, FluidSystem >
 Reconstructs the fine-level quantities of a column from its coarse-level quantities assuming vertical equilibrium. More...
class  Dumux::TwoPVESpatialParams< GridGeometry, FineGridGeometry, Scalar, SpatialParamsFine, Implementation >
 The base class for the coarse-level spatial parameters of the two-phase VE model. More...
class  Dumux::TwoPVEVolumeVariables< Traits >
 Contains the quantities which are constant within a coarse-level finite volume in the two-phase VE model. More...

Files

file  columnmapping.hh
 Manages the maps between the coarse and fine level.
file  elementstatefine.hh
 Mimics the volume variables structure of DuMux applied to the fine level of the VE scheme.
file  fieldstoragefine.hh
 I/O container for storing fine-level quantities, used for vtk output.
file  finelevelview.hh
 Provides access to all fine-level concepts and containers.
file  model.hh
 Two-phase flow in vertical equilibrium, solved on a coarse grid of vertical columns.
file  quantityreconstruction.hh
 Reconstructs quantities from the coarse to the fine level of the VE scheme.
file  spatialparams.hh
 The base class for the coarse-level spatial parameters of the two-phase VE model.
file  volumevariables.hh
 Contains the quantities which are constant within a finite volume in the two-phase VE model.