Aquifer Boundary Condition
Overview
Aquifer boundary conditions allow simulating flow between the computational domain (the reservoir) and one or multiple aquifers. In GEOS, we use a Carter-Tracy aquifer model parameterized in Aquifer tags of the FieldSpecifications XML input file blocks.
Aquifer model
An aquifer is a source of volumetric flow rate , where is the index of a face connecting the aquifer and the reservoir. We use a Carter-Tracy model in GEOS to compute this volumetric flow rate.
Once is computed, the aquifer mass contribution is assembled and added to the mass conservation equations of the reservoir cell connected to face . The computation of depends on the sign of the volumetric flow rate .
The upwinding procedure is done as follows: if the sign of indicates that flow goes from the aquifer to the reservoir, the aquifer contribution to the conservation equation of component is:
where is the aquifer mass/molar water phase density and is the aquifer mass/molar fraction of component in the water phase. We assume that the aquifer is fully saturated with the water phase.
If the sign of indicates that flow goes from the reservoir into the aquifer, the aquifer contribution to the mass/molar conservation equation of component is computed as:
where is the number of fluid phases, is the reservoir cell mass/molar density of phase , is the reservoir cell saturation of phase , and is the reservoir cell mass/molar fraction of component in phase .
In the next section, we review the computation of the aquifer volumetric flow rate .
Carter-Tracy analytical aquifer
The Carter-Tracy aquifer model is a simplified approximation to a fully transient model (see R. D. Carter and G. W. Tracy, An improved method for calculating water influx, Transactions of the AIME, 1960).
Although the theory was developed for a radially symmetric reservoir surrounded by an annular aquifer, this method applies to any geometry where the dimensionless pressure can be expressed as a function of a dimensionless time.
The two main parameters that govern the behavior of the aquifer are the time constant and the influx constant. These two parameters are precomputed at the beginning of the simulation and are later used to compute the aquifer volumetric flow rate.
Time constant
The time constant, , has the dimension of time (in seconds).
It is computed as:
where is the aquifer water phase viscosity, is the aquifer porosity, is the aquifer total compressibility (fluid and rock), is the inner radius of the aquifer, and is the aquifer permeability.
The time constant is used to convert time (, in seconds) into dimensionless time, using the following expression:
Influx constant
The influx constant, , has the dimension of .
It is computed as:
where is the aquifer thickness, is the aquifer angle, is the aquifer porosity, is the aquifer total compressibility (fluid and rock), and is the inner radius of the aquifer.
Aquifer volumetric flow rate
Let us consider a reservoir cell connected to aquifer through face , and the corresponding aquifer volumetric flow rate over time interval .
The computation of proceeds as follows:
where is the area fraction of face f, and and are the pressures in cell at time and time , respectively.
The area fraction of face with area is computed as:
The coefficient is computed as:
and the coefficient is given by the formula:
where is the potential difference between the reservoir cell and the aquifer at time , is the dimensionless pressure evaluated at dimensionless time , is the derivative of the dimensionless pressure with respect to dimensionless time, evaluated at dimensionless time .
The functional relationship of dimensionless pressure, , as a function of dimensionless time is provided by the user. A default table is also available, as shown below. The cumulative aquifer flow rate, , is an explicit quantity evaluated at and updated at the end of each converged time step using the formula:
with .
Parameters
The main Carter-Tracy parameters and the expected units are listed below:
aquiferPorosity: the aquifer porosity .
aquiferPermeability: the aquifer permeability (in m2).
aquiferInitialPressure: the aquifer initial pressure (in Pa), used to compute .
aquiferWaterViscosity: the aquifer water viscosity (in Pa.s).
aquiferWaterDensity: the aquifer water mass/molar density (in kg/m3 or mole/m3).
aquiferWaterPhaseComponentNames: the name of the components in the water phase. These names must match the component names listed in the fluid model of the Constitutive block. This parameter is ignored in single-phase flow simulations.
aquiferWaterPhaseComponentFraction: the aquifer component fractions in the water phase, . The components must be listed in the order of the components in aquiferWaterPhaseComponentNames. This parameter is ignored in single-phase flow simulations.
aquiferTotalCompressibility: the aquifer total compressibility (for the fluid and the solid) (in 1/Pa).
aquiferElevation: the elevation of the aquifer (in m).
aquiferThickness: the thickness of the aquifer (in m).
aquiferInnerRadius: the aquifer inner radius (in m).
aquiferAngle: the angle subtended by the aquifer boundary from the center of reservoir (in degrees, must be between 0 and 360).
allowAllPhasesIntoAquifer: flag controlling the behavior of the aquifer when there is flow from the reservoir to the aquifer. If the flag is equal to 1, all phases can flow into the aquifer. If the flag is equal to 0, only the water phase can flow into the aquifer. The default value of this optional parameter is 0.
pressureInfluenceFunctionName: the name of the table providing the dimensionless pressure as a function of dimensionless time. This table must be defined as a TableFunction in the Functions block of the XML file. If this optional parameter is omitted, a default pressure influence table is used.
setNames: the names of the face sets on which the aquifer boundary condition is applied.
Note
Following the GEOS convention, the z-coordinate is increasing upward. This convention must be taken into account when providing the aquiferElevation. In other words, the z-value is not a depth.
The full list of parameters is provided below:
XML Element: Aquifer
Name |
Type |
Default |
Description |
---|---|---|---|
allowAllPhasesIntoAquifer |
integer |
0 |
Flag to allow all phases to flow into the aquifer.
This flag only matters for the configuration in which flow is from reservoir to aquifer.
- If the flag is equal to 1, then all phases, including non-aqueous phases, are allowed to flow into the aquifer.
- If the flag is equal to 0, then only the water phase is allowed to flow into the aquifer.
If you are in a configuration in which flow is from reservoir to aquifer and you expect non-aqueous phases to saturate the reservoir cells next to the aquifer, set this flag to 1.
This keyword is ignored for single-phase flow simulations
|
aquiferAngle |
real64 |
required |
Angle subtended by the aquifer boundary from the center of the reservoir [degress] |
aquiferElevation |
real64 |
required |
Aquifer elevation (positive going upward) [m] |
aquiferInitialPressure |
real64 |
required |
Aquifer initial pressure [Pa] |
aquiferInnerRadius |
real64 |
required |
Aquifer inner radius [m] |
aquiferPermeability |
real64 |
required |
Aquifer permeability [m^2] |
aquiferPorosity |
real64 |
required |
Aquifer porosity |
aquiferThickness |
real64 |
required |
Aquifer thickness [m] |
aquiferTotalCompressibility |
real64 |
required |
Aquifer total compressibility (rock and fluid) [Pa^-1] |
aquiferWaterDensity |
real64 |
required |
Aquifer water density [kg.m^-3] |
aquiferWaterPhaseComponentFraction |
real64_array |
{0} |
Aquifer water phase component fraction. This keyword is ignored for single-phase flow simulations. |
aquiferWaterPhaseComponentNames |
string_array |
{} |
Aquifer water phase component names. This keyword is ignored for single-phase flow simulations. |
aquiferWaterViscosity |
real64 |
required |
Aquifer water viscosity [Pa.s] |
bcApplicationTableName |
groupNameRef |
Name of table that specifies the on/off application of the boundary condition. |
|
beginTime |
real64 |
-1e+99 |
Time at which the boundary condition will start being applied. |
direction |
R1Tensor |
{0,0,0} |
Direction to apply boundary condition to. |
endTime |
real64 |
1e+99 |
Time at which the boundary condition will stop being applied. |
functionName |
groupNameRef |
Name of function that specifies variation of the boundary condition. |
|
initialCondition |
integer |
0 |
Boundary condition is applied as an initial condition. |
logLevel |
integer |
0 |
Log level |
name |
groupName |
required |
A name is required for any non-unique nodes |
pressureInfluenceFunctionName |
groupNameRef |
Name of the table describing the pressure influence function
. If not provided, we use a default pressure influence function
|
|
scale |
real64 |
0 |
Scale factor for value of the boundary condition. |
setNames |
groupNameRef_array |
required |
Name of sets that boundary condition is applied to. |
Examples
Setting up the Aquifer boundary condition requires two additional pieces of information in the XML input file: a set of faces to specify where the aquifer boundary conditions will apply, and an aquifer tag that specifies the physical characteristics of the aquifer and determines how the boundary condition is applied.
To specify a set of faces: on simple grids, in the Geometry block of the XML file, we can define a Box that selects and assigns a name to a set of faces. To be included in a set, the faces must be fully enclosed in the Box (all vertices of a face must be inside the box for the face to be included to the set). The name of this box is a user-defined string, and it will be used in the aquifer tag to locate the face set. Here is an example of XML code to create such a face set from a box:
<Geometry>
...
<Box
name="aquifer"
xMin="{ 999.99, 199.99, 3.99 }"
xMax="{ 1010.01, 201.01, 6.01 }"/>
...
</Geometry>
Note
This step captures faces, not cells. For now, the user must ensure that the box actually contains faces (GEOS will proceed even if the face set is empty).
For more complex meshes, sch as those imported using the VTKMesh, using a Box to perform a face selection is challenging.
We recommend using a surface in the vtk
file instead, which will be used to locate the face set.
To specify the aquifer characteristics: in the FieldSpecifications block of the XML file, we include an Aquifer tag. For single-phase flow, the aquifer definition looks like:
<FieldSpecifications>
...
<Aquifer
name="aquiferBC"
aquiferPorosity="2e-1"
aquiferPermeability="3e-13"
aquiferInitialPressure="9e6"
aquiferWaterViscosity="0.00089"
aquiferWaterDensity="962.81"
aquiferTotalCompressibility="1e-10"
aquiferElevation="4"
aquiferThickness="18"
aquiferInnerRadius="2000"
aquiferAngle="20"
setNames="{ aquifer }"/>
...
</FieldSpecifications>
For compositional multiphase flow, the user must include additional parameters to specify the water composition. We have additional influx controls over the aquifer with allowAllPhasesIntoAquifer
. This is illustrated below for the CO2-brine fluid model:
<FieldSpecifications>
...
<Aquifer
name="aquiferBC"
aquiferPorosity="2e-1"
aquiferPermeability="3e-13"
aquiferInitialPressure="9e6"
aquiferWaterViscosity="0.00089"
aquiferWaterDensity="962.81"
aquiferWaterPhaseComponentFraction="{ 0.0, 1.0 }"
aquiferWaterPhaseComponentNames="{ co2, water }"
aquiferTotalCompressibility="1e-10"
aquiferElevation="4"
aquiferThickness="18"
aquiferInnerRadius="2000"
aquiferAngle="20"
allowAllPhasesIntoAquifer="1"
setNames="{ aquifer }"/>
...
</FieldSpecifications>
Finally, for both single-phase and multiphase flow, if a pressureInfluenceFunctionName
attribute is specified in the Aquifer tag, a TableFunction must be included in the Functions block of the XML file as follows:
<Functions>
...
<TableFunction
name="pressureInfluenceFunction"
coordinates="{ 0.01, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.5,
2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 15.0, 20.0, 25.0, 30.0, 40.0,
50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 200.0, 800.0, 1600.0, 3200.0, 6400.0, 12800.0 }"
values="{ 0.112, 0.229, 0.315, 0.376, 0.424, 0.469, 0.503, 0.564, 0.616, 0.659, 0.702, 0.735, 0.772, 0.802,
0.927, 1.02, 1.101, 1.169, 1.275, 1.362, 1.436, 1.5, 1.556, 1.604, 1.651, 1.829, 1.96, 2.067, 2.147,
2.282, 2.388, 2.476, 2.55, 2.615, 2.672, 2.723, 3.0537, 3.7468, 4.0934, 4.44, 4.7866, 5.1331 }"/>
...
</Functions>
Note
The values provided in the table above are the default values used internally in GEOS when the user does not specify the pressure influence function in the XML file.