Black-oil fluid model

Overview

In the black-oil model three pseudo-components, oil (o), gas (g) and water (w) are considered. These are assumed to be partitioned across three fluid phases, named liquid (l), vapor (v) and aqueous (a).

Phase behavior is characterized by the following quantities which are used to relate properties of the fluids in the reservoir to their properties at surface conditions.

  • B_o: oil formation volume factor

  • B_g: gas formation volume factor

  • R_s: gas/oil ratio

  • R_v: oil/gas ratio

By tables, that tabulate saturated and undersaturated oil and gas properties as functions of pressure and solution ratios.

Dead oil

In dead-oil each component occupies only one phase. Thus, the following partition matrix determines the components distribution within the three phases:

\begin{bmatrix}
y_{gv} & y_{gl} & y_{ga}\\
y_{ov} & y_{ol} & y_{oa}\\
y_{wv} & y_{wl} & y_{wa}
\end{bmatrix}
= \begin{bmatrix}
1 & 0 & 0 \\
0  & 1 & 0 \\
0 & 0 & 1
\end{bmatrix}

and the phase densities are

\rho_{l} = & \, \frac{\rho_{o}^{STC}}{B_{o}} \\
\rho_{v} = & \, \frac{\rho_{g}^{STC}}{B_{g}}.

Live oil

The live oil fluid model make no assumptions about the partitioning of the hydrocarbon components and the following composition matrix can be used

\begin{bmatrix}
y_{gv} & y_{gl} & y_{ga}\\
\\
y_{ov} & y_{ol} & y_{oa}\\
\\
y_{wv} & y_{wl} & y_{wa}
\end{bmatrix}
= \begin{bmatrix}
\frac{\rho_{g}^{STC}}{\rho_{g}^{STC} + \rho_{o}^{STC} r_{s}} & \frac{\rho_{g}^{STC} R_{s}}{\rho_{o}^{STC} + \rho_{g}^{STC} R_{s}} & 0 \\
\\
\frac{\rho_{o}^{STC} r_{s}}{\rho_{g}^{STC} + \rho_{o}^{STC} r_{s}} & \frac{\rho_{o}^{STC}}{\rho_{o}^{STC} + \rho_{g}^{STC} R_{s}} & 0 \\
\\
0 & 0 & 1
\end{bmatrix}

whereas the densities of the two hydrocarbon phases are

\rho_{l} = & \, \frac{\rho_{o}^{STC} + \rho_{g}^{STC} R_{s}}{B_{o}} \\
\rho_{v} = & \, \frac{\rho_{g}^{STC} + \rho_{o}^{STC} R_{v}}{B_{g}}

See Petrowiki for more information.

Parameters

Both types are represented by <BlackOilFluid> node in the input. Under the hood this is a wrapper around PVTPackage library, which is included as a submodule. In order to use the model, GEOS must be built with -DENABLE_PVTPACKAGE=ON (default).

The following attributes are supported:

Name

Type

Default

Description

checkPVTTablesRanges

integer

1

Enable (1) or disable (0) an error when the input pressure or temperature of the PVT tables is out of range.

componentMolarWeight

real64_array

required

Component molar weights

componentNames

string_array

{}

List of component names

hydrocarbonFormationVolFactorTableNames

groupNameRef_array

{}

List of formation volume factor TableFunction names from the Functions block.
The user must provide one TableFunction per hydrocarbon phase, in the order provided in “phaseNames”.
For instance, if “oil” is before “gas” in “phaseNames”, the table order should be: oilTableName, gasTableName

hydrocarbonViscosityTableNames

groupNameRef_array

{}

List of viscosity TableFunction names from the Functions block.
The user must provide one TableFunction per hydrocarbon phase, in the order provided in “phaseNames”.
For instance, if “oil” is before “gas” in “phaseNames”, the table order should be: oilTableName, gasTableName

name

groupName

required

A name is required for any non-unique nodes

phaseNames

groupNameRef_array

required

List of fluid phases

surfaceDensities

real64_array

required

List of surface mass densities for each phase

tableFiles

path_array

{}

List of filenames with input PVT tables (one per phase)

waterCompressibility

real64

0

Water compressibility

waterFormationVolumeFactor

real64

0

Water formation volume factor

waterReferencePressure

real64

0

Water reference pressure

waterViscosity

real64

0

Water viscosity

Supported phase names are:

Value

Comment

oil

Oil phase

gas

Gas phase

water

Water phase

Example

<Constitutive>
  <BlackOilFluid name="fluid1"
                 fluidType="LiveOil"
                 phaseNames="{ oil, gas, water }"
                 surfaceDensities="{ 800.0, 0.9907, 1022.0 }"
                 componentMolarWeight="{ 114e-3, 16e-3, 18e-3 }"
                 tableFiles="{ pvto.txt, pvtg.txt, pvtw.txt }"/>
</Constitutive>