Hydrostatic Equilibrium Initial Condition
Overview
The user can request an initialization procedure enforcing a hydrostatic equilibrium for flow simulations and for coupled flow and mechanics simulations. The hydrostatic initialization is done by placing one or more HydrostaticEquilibrium tag(s) in the FieldSpecifications block of the XML input file. This initialization procedure is described below in the context of single-phase and compositional multiphase flow. At the end of this document, we compare the hydrostatic equilibrium method to another initialization method, based on the input of x-y-z tables.
Single-phase flow parameters
For single-phase flow, the HydrostaticEquilibrium initialization procedure requires the following user input parameters:
datumElevation
: the elevation (in meters) at which the datum pressure is enforced. The user must ensure that the datum elevation is within the elevation range defined by the input mesh. GEOS issues a warning if this is not the case.datumPressure
: the pressure value (in Pascal) enforced by GEOS at the datum elevation.objectPath
: the path defining the groups on which the hydrostatic equilibrium is computed. We recommend usingElementRegions
to apply the hydrostatic equilibrium to all the cells in the mesh. Alternatively, the formatElementRegions/NameOfRegion/NameOfCellBlock
can be used to select only a cell block on which the hydrostatic equilibrium is computed.
Note
In GEOS, the z-axis is positive going upward, this is why the attributes listed in this page are expressed as a function of elevation, not depth.
Using these parameters and the pressure-density constitutive relationship, GEOS uses a fixed-point iteration scheme to populate a table of hydrostatic pressures as a function of elevation. The fixed-point iteration scheme uses two optional attributes: equilibriumTolerance
, the absolute tolerance to declare that the algorithm has converged, and maxNumberOfEquilibrationTolerance
, the maximum number of iterations for a given elevation in the fixed point iteration scheme.
In addition, the elevation spacing of the hydrostatic pressure table is set with the optional elevationIncrementInHydrostaticPressureTable
parameter (in meters), whose default value is 0.6096 meters.
Then, once the table is fully constructed, the hydrostatic pressure in each cell is obtained by interpolating in the hydrostatic pressure table using the elevation at the center of the cell.
Note
The initialization algorithm assumes that the gravityVector
(defined in the Solvers XML tag) is aligned with the z-axis. If this is not the case, GEOS terminates the simulation when the HydrostaticEquilibrium tag is detected in the XML file.
Compositional multiphase flow parameters
For compositional multiphase flow, the HydrostaticEquilibrium initialization procedure follows the same logic but requires more input parameters.
In addition to the required datumElevation
, datumPressure
, and objectPath
parameters listed above, the user must specify:
componentNames
: the names of the components present in the fluid model. This field is used to make sure that the components provided to HydrostaticEquilibrium are consistent with the components listed in the fluid model of the Constitutive block.componentFractionVsElevationTableNames
: the names of tables (where is the number of components) specifying the component fractions as a function of elevation. There must be one table name per component, and the table names must be listed in the same order as the components incomponentNames
.temperatureVsElevationTableName
: the names of the table specifying the temperature (in Kelvin) as a function of elevation.initialPhaseName
: the name of the phase initially saturating the domain. The other phases are assumed to be at residual saturation at the beginning of the simulation.
These parameters are used with the fluid density model (depending for compositional flow on pressure, component fractions, and in some cases, temperature) to populate the hydrostatic pressure table, and later initialize the pressure in each cell.
Note
The current initialization algorithm has an important limitation and does not support initial phase contacts (e.g., water-oil, gas-oil, or water-gas contacts). The implementation assumes only one mobile phase in the initial system, identified by the initialPhaseName
attribute. The other phases are assumed at residual saturation. As a result, the system may not be at equilibrium if there is initially more than one mobile phase in the system (for instance if the domain is saturated with gas at the top, and water at the bottom, for instance).
Note
As in the single-phase flow case, GEOS terminates the simulation if HydrostaticEquilibrium tag is present in an XML file defining a gravityVector
not aligned with the z-axis.
The full list of parameters is provided below:
XML Element: HydrostaticEquilibrium
Name |
Type |
Default |
Description |
---|---|---|---|
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. |
componentFractionVsElevationTableNames |
groupNameRef_array |
{} |
Names of the tables specifying the (component fraction vs elevation) relationship for each component |
componentNames |
string_array |
{} |
Names of the fluid components |
datumElevation |
real64 |
required |
Datum elevation [m] |
datumPressure |
real64 |
required |
Datum pressure [Pa] |
direction |
R1Tensor |
{0,0,0} |
Direction to apply boundary condition to. |
elevationIncrementInHydrostaticPressureTable |
real64 |
0.6096 |
Elevation increment [m] in the hydrostatic pressure table constructed internally |
endTime |
real64 |
1e+99 |
Time at which the boundary condition will stop being applied. |
equilibrationTolerance |
real64 |
0.001 |
Tolerance in the fixed-point iteration scheme used for hydrostatic initialization |
functionName |
groupNameRef |
Name of function that specifies variation of the boundary condition. |
|
initialPhaseName |
groupNameRef |
Name of the phase initially saturating the reservoir |
|
logLevel |
integer |
0 |
Log level |
maxNumberOfEquilibrationIterations |
integer |
5 |
Maximum number of equilibration iterations |
name |
groupName |
required |
A name is required for any non-unique nodes |
objectPath |
groupNameRef |
Path to the target field |
|
scale |
real64 |
0 |
Scale factor for value of the boundary condition. |
temperatureVsElevationTableName |
groupNameRef |
Name of the table specifying the (temperature [K] vs elevation) relationship |
Examples
For single-phase flow, a typical hydrostatic equilibrium input looks like:
<FieldSpecifications>
<HydrostaticEquilibrium
name="equil"
objectPath="ElementRegions"
datumElevation="5"
datumPressure="1e6"/>
</FieldSpecifications>
For compositional multiphase flow, using for instance the CO2-brine flow model, a typical hydrostatic equilibrium input looks like:
<FieldSpecifications>
<HydrostaticEquilibrium
name="equil"
objectPath="ElementRegions"
datumElevation="28.5"
datumPressure="1.1e7"
initialPhaseName="water"
componentNames="{ co2, water }"
componentFractionVsElevationTableNames="{ initCO2CompFracTable,
initWaterCompFracTable }"
temperatureVsElevationTableName="initTempTable"/>
</FieldSpecifications>
In this case, a possible way to provide the three required tables is:
<Functions>
<TableFunction
name="initCO2CompFracTable"
coordinates="{ 0.0, 10.0, 20.0, 30.0 }"
values="{ 0.04, 0.045, 0.05, 0.055 }"/>
<TableFunction
name="initWaterCompFracTable"
coordinates="{ 0.0, 10.0, 20.0, 30.0 }"
values="{ 0.96, 0.955, 0.95, 0.945 }"/>
<TableFunction
name="initTempTable"
coordinates="{ 0.0, 15.0, 30.0 }"
values="{ 358.15, 339.3, 333.03 }"/>
</Functions>
Note that the spacing of the two component fraction tables must be the same, but the spacing of the temperature table can be different.
Expected behavior and comparison with another initialization method
As illustrated in Tutorial 3: Regions and Property Specifications, users can also use multiple FieldSpecification tags to impose initial fields, such as the pressure, component fractions, and temperature fields. To help users select the initialization method that best meets their needs, we summarize and compare below the two possible ways to initialize complex, non-uniform initial fields for compositional multiphase simulations in GEOS.
Initialization using HydrostaticEquilibrium
This is the initialization procedure that we have described in the first sections of this page. In HydrostaticEquilibrium, the initial component fractions and temperatures are provided as a function of elevation only, and the hydrostatic pressure is computed internally before the simulation starts. The typical input was illustrated for a CO2-brine fluid model in the previous paragraph.
Expected behavior:
If FieldSpecification tags specifying initial pressure, component fractions, and/or temperature are included in an XML input file that also contains the HydrostaticEquilibrium tag, the FieldSpecification tags are ignored by GEOS. In other words, only the pressure, component fractions, and temperature fields defined with the HydrostaticEquilibrium tag as a function of elevation are taken into account.
In the absence of source/sink terms and wells, the initial flow residual should be smaller than . Similarly, in coupled simulations, the residual of the mechanical problem should be close to zero.