ST 200810 en
ST 200810 en
ST 200810 en
STARS
Advanced Process and Thermal
Reservoir Simulator
Version 2007
This publication and the application described in it are furnished under license
exclusively to the licensee, for internal use only, and are subject to a confidentiality
agreement. They may be used only in accordance with the terms and conditions of
that agreement.
All rights reserved. No part of this publication may be reproduced or transmitted in any
form or by any means, electronic, mechanical, or otherwise, including photocopying,
recording, or by any information storage/retrieval system, to any party other than the
licensee, without the written permission of Computer Modelling Group.
The information in this publication is believed to be accurate in all respects.
However, Computer Modelling Group makes no warranty as to accuracy or
suitability, and does not assume responsibility for any consequences resulting from
the use thereof. The information contained herein is subject to change without notice.
E-mail: cmgl@cmgl.ca
Preface
STARS is CMG's new generation advanced processes reservoir simulator which
includes options such as chemical/polymer flooding, thermal applications, steam
injection, horizontal wells, dual porosity/permeability, directional permeabilities,
flexible grids, fireflood, and many more. STARS was developed to simulate steam
flood, steam cycling, steam-with-additives, dry and wet combustion, along with many
types of chemical additive processes, using a wide range of grid and porosity models in
both field and laboratory scale.
This User's Guide details data entry for simulating the above processes. It requires
some knowledge of reservoir engineering and some rudimentary exposure to
reservoir simulation. This User's Guide provides a step-by-step procedure for
preparation of input data for this program. A tutorial section is provided as well as a
set of appendices.
Every attempt has been made in the preparation of this User's Guide to provide the
user with all the necessary details. If questions arise, please contact:
Computer Modelling Group Ltd.
#150, 3553 31 Street N.W.
Calgary, Canada
T2L 2K7
Telephone: (403) 531-1300 Fax: (403) 289-8502 E-mail: cmgl@cmgl.ca
Limited Liability: CMG does not warrant the accuracy or usefulness of the technology
and software - Refer to your license.
Contents
Introduction
Overview.......................................................................................................................1
Important Changes between STARS 2007.10 and 2006.10..........................................2
Data Incompatibilities with Previous Versions of STARS ...........................................3
New Keywords Added to STARS 2007.10 ..................................................................4
Enhancements to Existing Keywords ...........................................................................7
New and Changed Template Data Sets.........................................................................9
Introduction to STARS ...............................................................................................11
Tutorial
15
Introduction.................................................................................................................15
Data Groups in the Keyword Input System ................................................................16
How to Read Keyword Syntax ...................................................................................17
How to Document Your Data Set ...............................................................................18
How to Do a Restart....................................................................................................19
Controlling Contents of the Output Print File.............................................................21
Controlling Contents of the Simulation Results File ..................................................22
Describing Your Grid System.....................................................................................23
Specifying Null Blocks ...............................................................................................24
Describing Refined Grid .............................................................................................25
Using Dual Porosity/Dual Permeability......................................................................26
Problems with Small Time Steps or Long Execution Times ......................................27
Defining Wells............................................................................................................29
Defining the Well Type ..............................................................................................30
How to Shut In a Well and Reopen It .........................................................................31
Operating and Monitoring Constraints .......................................................................32
Specifying Well Indices..............................................................................................34
Horizontal Wells .........................................................................................................36
Stopping a Simulation Run .........................................................................................37
Guidelines for Setting Up Well Data ..........................................................................38
Running Your Simulation ...........................................................................................39
Improving Numerical Performance ............................................................................41
Optimizing Memory Requirements ............................................................................45
Well Management and Group Control........................................................................47
Parallel Processing ......................................................................................................53
User's Guide STARS
Contents i
57
Input/Output Control
91
ii Contents
Reservoir Description
147
Contents iii
263
Component Properties
297
iv Contents
Rock-Fluid Data
359
Initial Conditions
437
Contents v
455
Geomechanics
503
vi Contents
Contents vii
619
Tables
809
Table 1:
Table 2:
Table 3:
Table 4:
Table 5:
Table 6:
Table 7:
817
Overview...................................................................................................................817
A.1 Radial Inflow Well Model .............................................................................818
A.2 Well Indices ...................................................................................................820
A.3 Anisotropic Permeability ...............................................................................822
A.4 Backflow ........................................................................................................823
A.5 Surface Flash..................................................................................................825
A.6 Calculation of Geometrical Factor CC...........................................................826
A.7 Notes on Discretized Wellbore Model Usage................................................828
833
Contents ix
841
861
x Contents
933
Overview...................................................................................................................933
E.1 Nonuniform Formation Properties .................................................................934
E.2 Resolution of Process Phenomena..................................................................935
E.3 Variable Depth and Thickness........................................................................937
E.4 Grid Orientation .............................................................................................938
E.5 Symmetry Elements........................................................................................940
E.6 Local Grid Refinement ...................................................................................941
E.7 Hybrid Grid ....................................................................................................942
E.8 Naturally Fractured Reservoirs.......................................................................944
Appendix F: Equations
959
Overview...................................................................................................................959
F.1 Overview ........................................................................................................960
F.2 Conservation Equations ..................................................................................961
F.3 Phase Equilibrium Relationships....................................................................966
F.4 Well Equations ...............................................................................................967
F.5 Summary of Conservation Equations .............................................................969
F.6 Solution of Nonlinear Equations Newtons Method....................................970
F.7 Solution of Linear Equations General Sparse Solver ..................................973
F.8 Treatment of Solid Components.....................................................................974
F.9 Adaptive-Implicit Method ..............................................................................977
F.10 Use of Constraint Equations in the Sxy Formulation ...................................979
983
Overview...................................................................................................................983
G.1 Brief Description of Theory...........................................................................984
G.2 Mathematical Model Used by STARS...........................................................986
G.3 Reports and Plots ...........................................................................................989
G.4 Templates.......................................................................................................991
G.5 Input Data.......................................................................................................993
G.6 References......................................................................................................994
Keyword Index
995
Contents xi
Introduction
Overview
This introduction is divided into the following sections:
-
Introduction to STARS
Introduction 1
2 Introduction
Introduction 3
4 Introduction
13. New keyword *TRANZONE allows you to use water-oil capillary pressure curves
to generate a water-gas transition zone in a water-gas system.
14. New keyword *WOC_SW allows you to specify the water saturation below oilwater contact for an initialization region.
15. New keyword *DTMIN allows you to over-ride the default minimum timestep size
for applications at small time scales.
16. New geomechanics keyword *DILANGLE allows you to specify a dilation angle
for Mohr-Coulomb and Drucker-Prager materials. This is accompanied by new
*SOLVERG subkeywords *AIMSOLN and *PGSOLN which allow you to solve
the corresponding non-associated flow problem.
17. New geomechanics keywords *NCOUPLING, *PRESSTOL, *STRESSTOL and
*POROSTOL, together with new *GCOUPLING option 3, allow you to specify
iterative coupling to the fluid-flow solution. This feature makes it possible to
model more advanced loading processes.
18. New geomechanics keyword *GULOGINT allows you to change the interpolation
algorithm for look-up from tables *GPERMES, *GPERMTS and *GPERMVL.
19. Geomechanics dimension-override keywords *MPLNE, *MCONNG and
*MDICLU_PG were moved from the I/O Control section.
20. New keywords *MODELSHUT and *EQUILIBRATE allow fluid equilibration in
shut-in wells via crossflow between layers.
21. New keyword *WELLINIT specifies that bottom hole pressure values should be
reinitialized before every time step or Newtonian iteration.
22. New subkeyword *SHUTMOWS of *GCONP and *GCONM allows you to
specify that a list of prioritized most-offending wells should be shut if a given
monitor is violated.
23. Well control keyword *OPERATE has new subkeywords *DWN, *DWA and
*DWB which allow you to specify a drawdown pressure constraint type. Also,
under *OPERATE the descriptions of *STF and *BHF were merged.
24. New *PHWELLBORE *SAMODEL subkeyword *PUMP-MAX-PRESSUREINCREASE allows you to specify a maximum pressure increase for a pump with a
specified power.
25. New *MONITOR subkeyword *WHYSTAB allows you to monitor hydraulics
stability for a well using constraint type *WHP with *PHWELLBORE.
26. New *GCONP subkeyword *VREP specifies a voidage replacement production
target, coordinating with the existing *GCONI subkeyword *VREP with new suboptions *GMKUP and *WMKUP.
27. New *GCONP and *GCONI subkeyword *RECYCLE specifies a recycling
injection target.
28. New *GCONP and *GCONI subkeyword *PMAINT specifies that the well rates
in a group shall be adjusted to maintain an average pressure in a sector.
Introduction 5
6 Introduction
Introduction 7
15. The *ON-TIME option was improved to account for well groups, and the manual
entry for *ON-TIME was re-written. See new template stwwm036.dat.
16. Section Matrix/Fracture Addressing Defaults was added to the end of the manual
description for keywords *HEATR, etc.
17. In the *DYNAGRID manual page the description of keyword *DYNAGRIDTSINT was improved and section Viewing Dynamic Grid Changes was added.
18. The explanation of heterogeneous properties with *DYNAGRID was replaced
with sections Property Models and Grid Changes, In-Place Amounts,
Heterogeneous Property Models and Properties with Hysteresis.
19. The values of *AVISC and *BVISC in Table 4 have been corrected.
20. Electrical heating code and documentation state that the option is not allowed
together with the *ISOTHERMAL formulation option, adaptive-implicit (*AIM)
options and dynamic (*DYNAGRID) and recurrent gridding options.
21. Electrical heating rate updates are done in a time step until the electrical boundary
constraints stop changing, including the first time step.
22. Multiple electrical boundary constraints of type *CURRENT are honoured
simultaneously; previously only the most restrictive one was used.
23. All electrical heating keyword descriptions were moved for Appendix G to the
main Users Guide sections (I/O Control, Other Reservoir Properties, Well and
Recurrent Data).
8 Introduction
Introduction 9
stsmo034.dat
stsmo035.dat
stsmo036.dat
stsmo037.dat
10 Introduction
Introduction to STARS
INTRODUCTION
STARS is a three-phase multi-component thermal and steam additive simulator. Grid systems
may be Cartesian, cylindrical, or variable depth/variable thickness. Two-dimensional and
three-dimensional configurations are possible with any of these grid systems.
Some of the novel features of STARS are:
DISPERSED COMPONENT INCLUDING FOAM
The concept of dispersed components - stabilized dispersions (droplets, bubbles, and
lamellae) of one phase in another, which can be treated as components in the carrying phase
at the scale of reservoir simulation - provides a unifying point of view in the modelling of
polymers, gels, fines, emulsions, and foam. This concept can be coupled with the flexible
component property input package capabilities (including adsorption, blockage, nonlinear
viscosity, dispersion, and nonequilibrium mass transfer) to allow the user to design
appropriate simulation models of complex phenomena via input data choices alone.
In particular, two general approaches to the modelling of foam flow are available. The first, a
mechanistic model, allows direct simulation of foam creation, propagation, and coalescence
effects such as can be observed in detailed laboratory core experiments. The second approach
is more empirical and appears more appropriate for foam scoping studies and field pilot
history matching. The first approach can be used to justify aspects of the empirical model.
NATURALLY FRACTURED RESERVOIRS
The flow in naturally fractured reservoirs can be simulated by using four different models dual porosity (DP), dual permeability (DK), multiple interacting continua (MINC), or vertical
refinement (VR) - depending on the process or mechanisms to be studied.
The basic approach idealizes the fractured reservoir as consisting of two parts: fracture and
matrix. The fractures, having small storativities, are the primary conduits of fluid flow,
whereas the rock matrices have low fluid conductivities but larger storativities. The various
simulation models differ in the details of matrix-matrix and matrix-fracture flow descriptions
and are discussed in greater detail in the STARS Technical Manual.
ADAPTIVE IMPLICIT FORMULATION
STARS can be run in fully implicit and adaptive implicit modes. In many cases only a small
number of grid blocks need to be solved fully implicitly, since most blocks can be solved by
the explicit method. The adaptive implicit option accomplishes this and is useful for coning
problems where high flow rates occur near the wellbore, or in stratified reservoirs with very
thin layers.
By using the adaptive implicit option, a savings of one third to one half of the execution time
may occur because time steps are as large as those obtained using the fully implicit method.
STARS can select these blocks dynamically, based on specified thresholds or on matrix
switching criteria.
Introduction 11
12 Introduction
GRAPHICS
CMG's graphics system RESULTS, uses the SR2 file system for post-processing of
simulation output.
RESULTS can also be used for input data preparation, including grid design.
DISCRETIZED WELLBORE
The advent and growing acceptance of horizontal well technology has raised many new
questions that need to be addressed with reservoir simulation models. In particular, the impact
of long wellbore transients, viscous pressure drop and multiphase flow patterns in creating
non-uniform injectivities and productivities along the wellbore are of concern. STARS
provides an efficient and consistent method for handling these questions by discretizing
wellbore flow and solving the resulting coupled wellbore/reservoir flow problem
simultaneously. Appropriate multiphase flow correlations are used to adjust wellbore flow
patterns in an explicit fashion at the end of each time step. The circulating option makes
available a concentric tubing/annulus pair of flowing streams that are tightly coupled by heat
transfer. The discretized wellbore also models phase segregation between wellbore sections
which can be very important in non-horizontal configurations. Also, heat conduction in a
discretized wellbore continues even though the fluid flow has stopped, which can be
significant in start-up and shut-in phases of a project.
GEOMECHANICAL MODEL
Several production practices depend critically on the fact that the producing formation
responds dynamically to changes in applied stresses. These include plastic deformation, shear
dilatancy, and compaction drive in cyclic injection/production strategies, injection induced
fracturing, as well as near-well formation failure and sand co-production. A geomechanical
model consisting of three submodules is available for treating aspects of the above problems.
The coupling between the geomechanical model and the simulator is done in a modular and
explicit fashion. This increases the flexibility and portability of the model, and decreases
computational costs.
Introduction 13
Tutorial
Introduction
The Tutorial section is a guide for the novice user of the keyword input system. It does not
replace the reference user manual in this document. Only specific keywords and topics are
discussed in this tutorial section. The user manual contains a detailed description of each
keyword, while the tutorial section tackles "how-to" questions you may have when building a
data set.
STARS uses the data set that you create initially and then creates three other files. Each
STARS run creates a text output file, an SR2 index file (IRF), and a SR2 main file (MRF):
OUTPUT FILE
DATA SET
STARS
INDEX-OUT
MAIN-RESULTS-OUT
DATA SET
INDEX-IN
MAIN-RESULTS-IN
OUTPUT FILE
STARS
INDEX-OUT
MAIN-RESULTS-OUT
If a restart run is desired, then several existing files are needed and another three are
generated. This is illustrated in the diagram:
Tutorial 15
16 Tutorial
Tutorial 17
18 Tutorial
How to Do a Restart
WHAT IS A RESTART FILE?
A restart file contains information that allows the simulation to continue from another run.
WHY WOULD YOU NEED TO DO RESTART?
You may want to do restarts for the following reasons:
a) To do sensitivity studies or history matching,
b) To change well specifications,
c) To perform a short simulation run to see if the results are satisfactory, before
running bigger, longer jobs, and
d) To save execution time in subsequent runs. For instance, you have completed a
simulation run and the preliminary results look good. Now you want to do
prediction runs.
Because you have created a restart file with the initial run, you may select a timestep from the
middle of your run and 'restart' the simulation. The simulator does not need to start at the
beginning; it continues execution from the timestep you have chosen.
HOW TO DO A RESTART
Restart records are required only if you plan on restarting from your current run.
To do a restart run:
a) In the first run use keyword *WRST in the Input/Output Control section and/or in
the Recurrent Data section. *WRST indicates the frequency of writing to the restart
record. Run this first data file. The resulting files will include an IRF file, and MRF
file and possibly an RRF file.
b) Copy the first data file (or just the main data file if you are using the *INCLUDE
option) to another filename, preferable with a similar name (e.g., case1a.dat,
case1b.dat). Do not change any of the original non-recurrent data (with the
exceptions noted below). Add keyword *RESTART to the Input/Output Control
section of your data set. If you do not wish to be prompted interactively for the
input restart IRF filename, specify it with *FILENAMES *INDEX-IN.
c) Make desired changes to the recurrent data, but only for times after the restarting
time. Increase the maximum number of time steps, if necessary, or leave out
*MAXSTEPS altogether.
d) Run the second run, supplying the first runs IRF filename if you are prompted for it.
Example:
*RESTART 30
*WRST
10
Tutorial 19
20 Tutorial
If either of these is left out of the data set, then the default is to print the information at every
timestep. This can produce a very large output print file, which can fill up the available space
on your computer very quickly.
*OUTPRN limits what well data, grid data, reservoir data, and how many property tables are
printed. You may actually list the grid data types that you want.
Well data is treated differently. You may print out everything possible or print a well summary
only. To print out information per layer for all wells use *OUTPRN *WELL *ALL. This is the
default. To print out a one line summary for each well use *OUTPRN *WELL *BRIEF.
Tutorial 21
22 Tutorial
The first describes a regular Cartesian grid that is 10 x 10 x 6. The second describes a
variable depth variable thickness grid that is also 10 x 10 x 6. Lastly, the third example
describes a radial- angular cylindrical system for a coning study. It is 10 x 1 x 15.
The keywords *DI, *DJ, and *DK are required keywords. You enter the dimensions of the
grid blocks using these three keywords. You must use the array reading options with these
keywords.
Example:
*GRID
*DI
*DJ
*DK
*CART 10 10 12
*CON 100.0
*CON 100.0
*KVAR 25.0 2*50.0 3*40.0 75.0 3*40 2*50
where the grid system is a regular Cartesian grid system. Each of the 10 grid blocks in the I
direction is 100.00 meters wide. Each of the 10 grid blocks in the J direction is 100.0 meters
wide and each layer in the K direction has the same thickness but the thicknesses differ
between layers. Note that your data starts with the bottommost layer when using *KDIR *UP.
Tutorial 23
Observe that the second line overrides the first line. *NULL is optional and if it is not
present, it is assumed that all blocks are active.
Note that *NULL is the preferred method for specifying null blocks. In STARS a block with
zero porosity does not become a null block like it does for an isothermal simulator. In
STARS a zero-porosity block stays active in order to handling thermal conduction, even
though it has zero pore volume.
24 Tutorial
You are allowed to split up a fundamental block into a maximum of 4 refined blocks in each
direction. If you want to split different areas into different configurations, then you may use
subsequent *REFINE keywords, being sure to keep track of the correct locations of those
fundamental blocks.
Also note that grid refinement is not allowed when the dual-porosity option is being used.
The variable thickness, variable depth option may be used with refined grid. However, the
thicknesses of individual refined blocks are assumed to be equal within each individual
fundamental grid block.
Now that you have stated that you want to use refined grid, you must use *RG for any
properties that may differ from the properties of the corresponding fundamental blocks.
Otherwise, the properties of the fundamental blocks are attributed to the refined grid blocks.
Tutorial 25
*FRACTURE *IJK
1:10 1:3 0.0
7:9 1:2 0.4
7:8
1 = 0.45
The example also illustrates the use of *MOD, which modifies the grid property of some
blocks, from a porosity of 0.40 to a new porosity of 0.45.
In dual porosity, null blocks imply that both the matrix and the fracture have zero porosity. In
general, either the matrix porosity or the fracture porosity may be set to zero and the other
nonzero.
26 Tutorial
Tutorial 27
8. Set some regions of the reservoir or the entire reservoir to fully implicit. The
default switching criterion, *AIM *STAB checks for switching from explicit to
implicit only if the grid block is a neighbour of an implicit block. Thus if there are
regions of the reservoir where there are dramatic changes taking place and these
regions are not adjacent to wells, then set the problem regions to implicit.
Examples of such situations include:
a) When vertical equilibrium initialization is not used. In some cases, this
may result in large changes in pressure and saturation initially, even if all
the wells are shut in. Run fully implicit when this happens.
b) When there is gas cap. The bottom layer of the gas cap can be set
implicit if there is strong cusping - at least in the regions where the
cusping occurs.
c) Where blocks have extremely high permeability. Small changes in
pressure make very large changes in saturation. Set blocks to fully
implicit in these regions. Using 0.1 kPa as the pressure convergence
tolerance is recommended for high permeability areas.
Material balance errors can be caused by convergence tolerances being too large compared to
the nominal change at each timestep. Check to make sure that the tolerances are about one
order of magnitude less than the nominal values. Use the keyword *MATBALTOL to change
the model's sensitivity.
In most cases, the default values for desired changes, *NORM *PRESS and *NORM *SATUR,
and the tolerances, *CONVERGE *PRESS and *CONVERGE *SATUR, are adequate.
However, in cases where you are trying to simulate fractures or horizontal wells, it is best to use
smaller values. For coning problems, smaller values of desired changes are also recommended.
See also Improving Run Performance later in this Tutorial section.
28 Tutorial
Defining Wells
Wells are defined using the following keywords. Be aware that the order of the keywords
must be strictly adhered to:
*WELL
(Required)
*PRODUCER
(Required keywords which must follow well completion keywords.)
-or*INJECTOR
-or*SHUTIN
-or*OPEN
*INCOMP
(Required if you are injecting oil or gas phase. Keyword follows *INJECTOR.)
*OPERATE
(At least one operating constraint is required.)
*MONITOR
(Monitoring constraints are optional.)
*GEOMETRY
(Optional. It must precede a well completion keyword which is followed by
subkeyword *GEO.)
*PERF
(At least one of these three or a combination thereof, is required.)
-or*PERFV
-or*PERFRG
These keywords must all reside in the Well Data section of your data set.
It is possible to define a well, name it, and specify its group affiliation with a
*WELL keyword at one time, specify its completions with *PERF at a later
time, and finally define the wells type with *PRODUCER or *INJECTOR
at a still later time and have the well become active.
Tutorial 29
P1'
P2'
I1'
I2'
*VERT
*VERT
*VERT
*VERT
1 1
15 15
5 5
10 10
...
** both wells 3 and 4 are mobility weighted
** injectors.
*INJECTOR 3:4 *MOBWEIGHT
...
*PERFV 1:2
** The producer wells 1 and 2 are completed
** through K layers 1 through 3, each having
** a well index of 1.65
1:3 1.65
** The injector wells 3 and 4 are completed
** through K layers 2 and 3, each having a
** well index of 1.87.
*PERFV 3:4
2:3 1.87
30 Tutorial
Tutorial 31
If you are injecting gas, choose a gas rate constraint. If it's a water injector, choose a water
rate, etc.
Example:
*INJECTOR 2
*OPERATE *MAX *STW
*OPERATE *MAX *BHP
10000.0 *STOP
2250.0 *STOP
1200.0
2500.0
15000.0
*CONT
*CONT
*STOP
Tutorial 33
If *VERT was used with *WELL, then you have specified a vertical well. Use *PERFV. Only
the K direction grid block or range of blocks need be entered, since you have already entered
the I and J location with *VERT. If you are using *GEOMETRY, use *GEO with *PERFV.
Example:
*WELL 2 *VERT 2 2
*PERFV 1
** kf wi
2:4 1.56
34 Tutorial
If you are using refined grid blocks and wells are located within the vicinity, then *PERFRG
must be used. *GEO is again required if *GEOMETRY is used. *PERFRG requires the
location of the fundamental grid block(s) where the well is completed and the location of the
refined grid block(s) where the well is completed.
Example:
...
** Refinement will result in creating 3
** refined grids in the I direction, 3 in the
** J direction and two in the K direction in
** block (1,1,3).
*REFINE 3 3 2
*RANGE 1 1 3
...
*WELL 1
*PERFRG 1
** if jf kf ir jr
kr wi
1
1
3
2
2
1:2 1.75
Tutorial 35
Horizontal Wells
Horizontal wells can be simulated in two different ways.
METHOD 1:
The first method involves modelling the well as a line source (injector) or sink (producer).
This method neglects wellbore frictional pressure drop and liquid holdup effects.
When using the source-sink method, you should be aware that if the field you are trying to
model has any known backflow problems, this method will give erroneous results. Small
amounts of backflow in general are not important. If you notice a change, even a small one,
areally, in the permeability, the difference may cause backflow.
The keywords used to define a horizontal source/sink are:
a) *WELL
b) *INJECTOR or *PRODUCER
c) *OPERATE
d) *GEOMETRY
e) *PERF *GEO
*GEOMETRY and *PERF result in the output of well productivities. Run this data set and
observe the resulting production rates. If these values are not what you wish, enter your own
values via *PERF without *GEO.
METHOD 2:
The second method for modelling horizontal wells is to use the discretized wellbore model.
This novel method dynamically handles wellbore hydraulics and can also be used for vertical
producers. This method is ideally suited where frictional pressure drop or liquid holdup
effects are important. The keyword for invoking this option is *WELLBORE. Since the
method models the wellbore as a second porosity in the well block, the corresponding
compressibility, rock type and relative permeability tables must also be assigned.
36 Tutorial
Tutorial 37
38 Tutorial
Tutorial 39
data or interactive prompt. All the allowed command-line arguments are described at the
beginning of the Input/Output Control section.
The diary is written to the standard output device, which can be allowed to scroll onto the
screen or, more usefully, redirected to a file using -log. UNIX platforms can use & to
run it in background, and nohup to keep it running after the user logs off.
Running Priority on W2k/WinNT
Of the priority levels available on W2k/WinNT the default priority used to run a simulation is
Normal/Medium, which can significantly reduce the responsiveness of other tasks such as
editing large files and RESULTS viewing. Experience has shown that reducing the
simulation running priority to Low restores the response time of other tasks while having
little affect on the simulation run time.
The following can be done for the process running the simulation, or for the manually created
command window before the script or raw command is issued (child processes inherit the lower
priority).
Go into Task Manager (right click on task bar), go to the Processes tab, and right click on the
process of interest (e.g., "st200010.exe" or CMD.EXE). From the menu choose Set
Priority and choose Low. You can also make the priority visible in the Processes tab by
selecting View/Select Columns ... and check the Base Priority box. This new column is
displayed in future invocations of Task Manager, until you disable it.
40 Tutorial
bbl/d
----403.6
------Time------days
---.5000
yy/mm/dd
--------1980/01/02
-----------Production----------Oil
Gas
Water
GOR
Wat.
ft3
Cut
bbl/d ft3/d bbl/d
/bbl
%
----- ----- -------- ----7.555
3.280
30.27
The Time Step section has four columns: timestep number, timestep size in days, the number
of Newton iterations required to solve the non-linear timestep problem and the number of
times the time step failed to converge (cuts). The Time section has the time and date of the
time step. The Production section shows total Oil, Gas and Water production rates, along
with GOR and Water Cut. The Injection section shows total Gas and Water injection rates
(these phases may be different depending on what is being injected). Then, the Material
Balance Error is shown in percent. Lastly, Maximum Changes of pressure, saturation (with
phase indicator) and temperature are shown.
Timestep Size
The timestep size can be due to (a) maximum changes from the previous time step compared to
*NORM values, (b) maximum timestep size from *DTMAX, or (c) smaller time steps due to
frequent convergence failures. Check the following if timestep sizes are smaller than expected.
-
If at least one of the Maximum Changes is near its *NORM value, then the
timestep size is appropriate, and the only way to increase it is to increase the
*NORM values. Note that there are *NORM values for phase compositions that
are not shown in the diary (but can be shown in the output file). Composition
changes rarely control the timestep size for more than a few isolated time steps.
Small timestep sizes may be due to frequent cuts. Each cut reduces the timestep
size by a factor (1/2 the first try, another 1/3 the next try, etc.). Therefore, cuts
every 1 to 3 time steps may be reversing the increase in timestep size gained by
low maximum changes. In this case, the cause of the cuts needs to be investigated.
Tutorial 41
Even if maximum changes are small and there are no cuts, it takes a number of
steps to increase the timestep size from small values. The formula for timestep
size based on maximum changes is described in the explanation for keyword
*NORM, and contains damping which limits the increase in timestep size to a
factor of 2.3. Therefore, small values specified by *DTWELL should be used only
when necessary.
Use *DTMAX only when necessary. Using *DTMAX to reduce timestep cuts or
other poor numerical performance is not recommended, since it merely masks the
real problem which itself may be fixable.
Large convergence tolerances can lead to excessive material balance error. The
default *CONVERGE values are recommended as a starting point.
Material balance error can be due to persistent failed matrix solutions. STARS
proceeds with the current solution anyway, possibly with high material balance error.
The parameter mtfail printed at the end of the text output file is the total number of
matrix solver failures for that run. Also, a message is issued to the diary when more
than half of a time steps Newton iterations experience a matrix solver failure. More
than one matrix solver failure for every 5 to 10 Newton iterations likely is too many.
42 Tutorial
Matrix solver parameter *SDEGREE determines how much fill is used during the
iterative matrix solution process. The default is 1, which requires the least CPU
and storage. When increasing *ITERMAX and *NORTH does not decreased the
matrix residual sufficiently, the last resort is increasing *SDEGREE which should
be done by increments of 1. Higher degree increases storage and CPU per iterative
significantly, but hopefully converges in fewer iterations. Higher degree may
require manual setting of some solver dimension parameters via keyword *DIM.
Sometimes the matrix order *SORDER has an effect on the rate of residual
reduction in the matrix solution. There are no concrete rules regarding *SORDER,
except that the default is generally robust and most efficient.
All these matrix solver parameters can be changed at a restart. One efficient technique is to
run just one time step from a restart record, trying variations of the parameters described
above to find which is most effective
How To Read Newton Iteration Details
The following is an example of detailed Newton iteration output triggered by the *NEWTON
option of *OUTPRN *ITER. This is from Test Bed #9.
CYC
1
2
3
4
dpmx
1.00E+02
1.95E+02
1.97E+02
1.97E+02
CYC
1
2
3
4
dxmx
-1.00E-02
-8.56E-03
-8.64E-03
-8.64E-03
block
8,1,1
16,1,1
16,1,1
16,1,1
block
16,1,1
16,1,1
16,1,1
16,1,1
dsmx
1.00E-02
8.56E-03
8.64E-03
8.64E-03
urpm
1.00
1.00
1.00
1.00
block
16,1,1
16,1,1
16,1,1
16,1,1
iconv
20
12
2
0
dtmx
4.72E+00
4.95E+00
4.94E+00
4.94E+00
block
16,1,1
16,1,1
16,1,1
16,1,1
nitr
1
1
2
2
On the far left is the Newton iteration, or cycle, number. Next there are five sets of maximum
values and block addresses, for pressure, saturation, temperature, gas mole fraction and oil
mole fraction, respectively. Each value is the maximum over the entire grid of the change in
that variable, and the associate block is the one corresponding to that change. Normal
convergence shows as large changes in the first few iterations, and then the changes become
constant. The above example shows this clearly, but it may not be apparent when each
iterations maximum change occurs in a different block. The change between iterations is not
allowed to exceed the corresponding *NORM (e.g., pressure *NORM of 100 in the above
example). If any maximum change over the time step exceeds 3 times the corresponding
*NORM value, then the time step is cut.
Column URPM is the under-relaxation parameter, and shows that this run has no underrelaxation. See keyword *UNRELAX.
Tutorial 43
Column ICONV is the number of unconverged primary iterating variables or equations. The
condition ICONV = 0 is a necessary condition for convergence of the time step. Generally,
ICONV decreases steadily, but occasional small increases is normal. Divergence is indicated
by it increasing consistently along with increases in maximum changes. Oscillation is shown
by a series of iterations with a constant ICONV value or repeated pattern of values.
Sometimes convergence is held up by only a few variables, in which case ICONV is very
small but constant. Use the *UNCONV option of *OUTPRN *ITER to see details of
unconverged variables or equations. When the last several iterations all have ICONV = 0,
some other convergence criteria requires additional Newton iterations, the most common
being material balance error too high. ICONV = -200 indicates that convergence continues
because a well equation has not converged. ICONV = -10 indicates that convergence
continues because the minimum allowed pressure has been encountered.
The last column NITR is the number of inner iterations taken by the matrix solver. NITR
exceeds *ITERMAX only when the matrix solution has failed. When NITR is very low the
*DEGREE can be decreased if it is above 1. When NITR is consistently near a high
*ITERMAX then it is possible that higher *NORTH or *DEGREE may be more efficient.
44 Tutorial
Tutorial 45
Insufficient Dimensions
During an arrays step (c), above, it may happen that N > MD, in which case you will get an
error message for insufficient dimensioning. This should happen for only some solver arrays
and very rarely for connection-length arrays in the Grid Module. Use *DIM with the
appropriate sub-keyword to replace the default value of MD with a sufficient value. If this
MD increase puts you over the 2-Gb limit, you must change something else (e.g., reduce
blocks, *SDEGREE, etc.) before proceeding.
Use *CHECKONLY (NOT run one time step only) to test for sufficient dimensioning,
since a solver arrays N may change as the number of active wells changes with time. Except
for rare cases, data that runs successfully with *CHECKONLY will not experience a
condition of insufficient dimensioning when run without *CHECKONLY.
Minimizing Dimensions
Keyword *OUTSOLVR causes STARS to report detailed dimensioning information when
determining N for the solver arrays associated with the fluid flow equations. This report is
issued at the end of echoing each segment of recurrent data, so there may be many such
reports. *OUTSOLVR is most useful when used with *CHECKONLY, since a solver arrays
N may change as the number of active wells changes with time. Also, *OUTSOLVR is
useful only if there are no allocation failures and no error messages from insufficient
dimensioning. The corresponding keyword for geomechanics is *SITERPG.
Procedure to optimize storage allocation
1. Run the data set with default dimensioning and keywords *CHECKONLY and
*OUTSOLVR *ON in the Input/Output Control data section. If you are using
*GEOMECH with AIMSOL then use *SITERPG in the Geomechanics data, but
with *MAXSTEPS 1 instead of *CHECKONLY.
2. Deal with any array space under-allocation messages relating to the grid loading as
described above.
3. Once the grid array allocation is sufficient, check the .out file for the keyword
*OUTSOLVR and make sure that in the simulators summary of input data the
*OUTSOLVR *ON combination is active.
4. Deal with any under-allocation of solver array space messages as described above.
5. When a complete *CHECKONLY run is successful, examine the .out file (and the
.geo file for geomechanics) for the heading Solver Array Dimensions and
determine the maximum amount of storage required for each array variable listed.
To do this you will need to examine the Solver Array Dimension tables reported
after ALL recurrent data segments, since the storage may change either way as the
run proceeds. The maximum amount may not be given at either the beginning or
the end of the run.
6. Set the values of the array variables to the maximum required using DIM
statements. Note that not all the array variables identified can be set explicitly as
some are calculated from others. Note also that, if you end up with very tight
dimensioning, any change affecting the grid or well completions may result in
insufficient array space being allocated.
46 Tutorial
*ATTACHTO 'Field'
'GRP-1'
'GRP-1'
'GRP-1'
'GRP-1'
'GRP-2'
'GRP-1'
Groups must be defined before any group operating or monitoring constraints are specified.
The following example shows a correct sequence.
*GROUP 'GRP-1'
'GRP-2'
*GCONP
'GRP-1'
*TARGET
*STO 274.0
*MAX
*GOR 400.0
*GCONI
'GRP-1'
* TARGET *STW 500.
*GCONI
'GRP-2'
*TARGET *STW 350.
*ATTACHTO 'Field'
*SHUTMOW
A maximum of three levels is allowed in the group hierarchy; i.e., the hierarchy can consist of
one top-level group, second-level groups connected to the top-level group, and third-level
groups connected to second-level groups. Wells may be connected to second-level groups
(but then groups cannot be), but only wells may be connected to third-level groups.
Tutorial 47
'FIELD'
level 2
'GNAME-2'
'GNAME-1'
'Default-Group'
'GNAME-3'
level 3
'GNAME-4'
'GNAME-5'
'GNAME-6'
'W4'
'W6'
'W8'
'W5'
'W7'
'GNAME-7'
'W9'
'W10'
'WELL-1'
'WELL-2'
'WELL-3'
'W11'
The highest level group is the 'FIELD'. The highest level is not optional. If *GROUP data
lines appear and either no top-level group is specified, for example,
*GROUP 'G1' *ATTACHTO 'G2'
*GROUP 'G2' *ATTACHTO 'G1'
'GNAME-1'
'GNAME-2'
'GNAME-4'
'GNAME-5'
'GNAME-6'
'W4'
'W6'
'W8'
'W5'
'W7'
'W9'
'Default-Group'
'GNAME-7'
'W10'
'W11'
'GNAME-8'
'GNAME-3'
'WELL-2'
'WELL-3'
Production Control
Production controls are entered using keyword *GCONP 'group_name'. Target oil, gas, or
water production rates can be specified for the centre using *TARGET *STO, *TARGET
*STG, or *TARGET *STW.
48 Tutorial
The target rate is apportioned among contributing producers using one of the available
apportionment methods specified by keyword *APPOR-METHOD. All producers must have
a minimum BHP. If none is specified, a minimum BHP of 101.325 kPa is assigned.
Consider the following example of two producers connected to a group with an STO target
constraint, assuming SI units:
*GCONP 'GRP-1'
*TARGET *STO
274.0
*MAX
*GOR
400.0
*WELL 1 'PR-15,10'
*WELL 2 'PR-03,03'
*PRODUCER 1
*OPERATE
*MAX *STO
*OPERATE
*MIN *WHP
*PRODUCER 2
*OPERATE
*MAX *STO
*OPERATE
*MIN *BHP
*SHUTMOW
*ATTACHTO 'GRP-1'
*ATTACHTO 'GRP-1'
6.0E+03
5.0E+02
6.0E+02
1.0d+03
The following steps are taken to estimate the instantaneous production potential (IPP) of
wells 1 and 2 which will serve as the basis for apportioning the group target of 274.0 between
the two wells. Well 1 does not have minimum BHP constraint specified, therefore a value of
101.325 kPa (14.696 psia) is assumed. The minimum WHP is converted to a minimum BHP.
The larger of the two values is used to compute a maximum oil rate based on the productivity
index of well 1 at the specific time in the simulation. The oil rate thus computed is capped to
the maximum rate specified for the well, or:
IPP (well 1) = min [qoil{max(bhp=101.325, bhp@whp=500)}, 6000.0]
A similar procedure is used to compute IPP for well 2
IPP (well 2) = min [qoil(bhp=1000.0), 600.0]
Injection Control
Injection controls are entered using keyword *GCONI 'group_name'. A target injection can
be specified for the centre using *TARGET *STG and *TARGET *STW for solvent (gas)
and water injection rates respectively, or *VREP *GAS and *VREP *WATER for gas and
water voidage replacement fractions respectively. The target rate is apportioned among all
injectors using one of the available apportionment methods specified by keyword *APPORMETHOD. All injectors must have a maximum BHP. If none is specified, a maximum BHP
of 1,000,000 kPa (147,000 psia) is assumed.
Individual Well Constraints
Each well can be subjected to its own rate and pressure constraints. If the rate allocated by the
centre violates the well's own constraint, the well's constraint will be used. For example, if the
gas injection rate of a well allocated by the group exceeds the well's maximum gas rate, the
well's maximum gas rate will be used. If a well would violate its min. BHP limit while
producing the allocated rate, the well will then produce at its minimum BHP. In these
situations, the rates for the other wells will be readjusted to compensate for the differences. If
all wells are under their own constraints, then the group target rate will not be maintained.
Thus, the group production target rate should be less than the sum of the max. production
rates from all producers in the group; and the target injection rate should be less than the sum
of the max. allowable injection rates from all group injectors, if the group target is to be met.
User's Guide STARS
Tutorial 49
The name 'Default-Group' must appear exactly as shown in the above line, since it is an
internally set name. The top-level group is given the name 'Field' in this example but the user
is completely free to choose this name (up to a maximum length of 16 characters); 'Campo' or
'FIELD' would have exactly the same effect. Then to introduce a field target, it suffices to
follow the above line with the line
*GCONP 'Field' *TARGET *STO 400.0
Here it is important that 'Field' match exactly the character string after *ATTACHTO in the
*GROUP line; if 'Campo' had been used above it would have to be used here.
Data Input
The following are all the keywords related to the group well control:
Group Specification
*WELL 'well_name' (*ATTACHTO 'group_name')
Production Control
*GCONP 'group_name_1' 'group_name_2' ... 'group_name_n'
(*MAX)
(*STO)
value (*STOP)
(*TARGET) (*STG)
(*CONT)
(*STW)
(*SHUTALL)
(*STL)
(*SHUTMOWS)
(*BHF)
(*SHUTMOW)
(*SHUTMOL)
(*SHUTMOLDOWN)
(*SHUTMOLUP)
(*RECYCLE) (*GAS)
recyc_frac
(*WATER)
(*VREP)
vrep_frac
(*PMAINT) (*PMSECT) sector_name
(*PMTARG) p_targ
(*PMCOEF) c1 c2 c3
*APPOR-METHOD *PROD 'group_names'
(*IP | *GUIDE | *INGUIDE | *PRIOR)
50 Tutorial
*GUIDEP
Tutorial 51
Limitations
The following limitations currently apply to the well management and group control module.
1. A maximum of three group levels is allowed.
2. The topmost group level (the field) cannot have wells attached to it, but only other
groups.
3. Groups to which wells are attached cannot have other groups attached to them.
4. New wells may be attached to a group at any time; however, a well cannot be
attached to more than one group at a time. Redefining a well's parent group
automatically detaches it from the earlier parent.
5. Group controlled injection fluids are limited to gas (solvent) and water only. Oil
injection is not supported.
6. The well management module can automatically shutin and reopen well layers
when GOR or WCUT exceed a certain limit. When this option is used the layers
are sorted according to their depths, in order to open or close layers. If the well is
perforated horizontally, the behaviour of this option may be unpredictable.
52 Tutorial
Parallel Processing
Parallel processing allows STARS to run a given data set in significantly less clock time.
This tutorial (1) describes parallel processing in some detail and (2) discusses the associated
issues of timing, tuning and practical speed-ups.
Types of Parallelism
Current computer hardware supports two general types of parallelism based on the
configuration of memory. A shared-memory machine shares all the available memory
amongst all the CPUs via a fast high-capacity bus. This configuration gives the advantage of
high inter-CPU communication speed.
A distributed-memory system, often referred to as a cluster, consists of a number of nodes that
communicate via a high-speed network; each node has one or several CPUs and its own memory.
The speed of a distributed-memory configuration usually is limited by the network hardware, but
there is no real limit on the number of machines which may be networked together.
STARS currently supports the shared-memory paradigm. However, work is also in progress
for supporting distributed-memory systems.
OpenMP
OpenMP is the open specification for multi-processing, a coding standard developed
through the collaboration of industry, government and academia. It is used to specify sharedmemory parallelism in programs that are run on systems configured for Symmetric
Multiprocessing (SMP).
Parallel processing in STARS is achieved by placing throughout the program code OpenMP
directives that instruct the compiler to generate multi-threaded binary code. When STARS is
executed in parallel, the program starts as a single master thread. Upon reaching a parallel
code region (generally a loop), the master thread spawns a number of slave threads, which
form a team. Each thread in the team executes the parallel code region simultaneously
using its own private portion of the overall data. When the team is finished, all threads are
synchronized, control returns to the master thread, and the program continues.
Jacobian Domains and the Parallel Solver
Building of the Jacobian matrix in parallel is achieved through domain decomposition, where
the entire grid is partitioned into subdomains and each thread generates in parallel the
Jacobian matrix entries for a different subdomain. Jacobian domain decomposition is
controlled using keywords *DPLANES, *DTYPE or command-line argument -doms. Other
miscellaneous tasks are done in parallel when Jacobian domain decomposition is enabled.
For each task performed when Jacobian domain decomposition enabled, the numerical result
is the same no matter how the grid is partitioned into subdomains.
CMGs parallel solver PARASOL is used to solve the linear system of equations in parallel.
Similar in concept to domain decomposition, the reservoir is first partitioned into disjoint sets
of blocks known as solver classes which are further organized into levels. Reservoir
partitioning is controlled using keyword *PPATTERN or command-line argument -parasol.
For a given system of linear equations the numerical result from PARASOL can vary with the
number of threads. See Tuning Solver Performance below.
Tutorial 53
Number of Threads
STARS has been tested in parallel on all of the supported platforms. As of 2005 STARS has
been run with up to eight threads but STARS contains no built-in limit for the number of
threads. Parallelization of more code regions will improve speed-up for more processors so
that unparallelized code does not dominate run times.
Licensing
Licensing for the parallel-processing feature must be enabled in order to run STARS in
parallel. The number of processors for which STARS is licensed, and the number of available
processors, will determine the number of threads which can be practically used.
Parallel Processing Keywords and Command-line Options
The following keywords are used to specify parallel processing in STARS:
*SOLVER *PARASOL use CMGs parallel iterative solver.
*PNTHRDS set the number of threads to be used.
*PPATTERN define the Parasol class partitioning pattern.
*DPLANES specify the number of planes per Jacobian domain.
*DTYPE explicitly set the domain numbers for individual blocks.
*CHECKRB control red-black ordering for Parasol.
*PDEGAA set the factorization degree within Parasol classes.
*PDEGAB set the factorization degree between Parasol classes.
*PNPROSL choose the number and scaling of GMRES vector operation classes.
The following command-line options can also be used to specify parallel processing in
STARS as an alternative to keywords (e.g., used by Launcher):
-doms, which is equivalent to:
*DPLANES (note that -doms overrides both *DTYPE and *DPLANES)
-parasol n, which is equivalent to all of the following keywords together:
*SOLVER *PARASOL
*PPATTERN *AUTOPSLAB n
*PNPROSL n
*PNTHRDS m, where m is the smaller of n and the number of logical
CPUs available. The parameter n is used to specify the number of threads
to be used, and in general should not exceed the number of logical CPUs
available. Note that if n is omitted, it will be defaulted to 2.
Please refer to the Numerical Methods Control section for a detailed explanation of these
keywords and suggestions for their use.
Timing and Speedup
A STARS data set which has been suitably tuned to run in parallel (using *SOLVER
*PARASOL) will have a significantly lower elapsed time than the same data run without
parallel (using the default *SOLVER *AIMSOL).
54 Tutorial
Speedup is defined as the ratio of elapsed times for lower and higher numbers of threads. For
example, if a particular data set runs in 45 minutes in serial but 30 minutes in parallel, the
speedup is 45/30 or 1.5. Theoretical maximum speedup can be represented by Amdahls Law:
speedup = 1 / (s + p/n)
where
p is the fraction of CPU time executing parallel code,
s is the fraction of CPU time executing serial code (1-p), and
n is the number of CPUs used.
The value of s includes code in which parallel directives are not currently used (for example,
data input and results output), as well as the overhead associated with OpenMP (for example,
creating and administering threads).
In cases where the number of Newton or solver iterations varies significantly, speedups
should be calculated on a per-Newton iteration basis.
Tuning Solver Performance
For a given system of linear equations the numerical result from PARASOL can vary with the
number of threads. In fact, the result from PARASOL with one thread (non-parallel) can
differ from the result from AIMSOL. These result differences are due to incomplete
convergence of the iterative solution for different kinds of approximations in the solution of
the equations. These result differences usually are small and show up as slight differences in
numbers of Newton iterations, matrix failures or material balance. Sometimes the difference
between results can be significant, often indicating that solver or Newton iteration
convergence criteria in the Numerical Methods Control section should be adjusted. See
Improving Numerical Performance in the Tutorial section.
It is not uncommon for a data set that has good solver performance for few threads to
experience significantly worse performance with more threads. The most common cause is
insufficient solver convergence, usually indicated by large numbers of solver failures, time
step convergence failures or large material balance errors.
This is illustrated by a real case. STARS template sthrw007 was run on an IBM p550 using
1, 2 and 8 threads, with the following run results:
No. of
Newton
Cuts
Matrix
Elapsed (sec)
Speedup
Threads
Iterations
Failures
1
1575
2
0
1126
1.00
2
1581
2
2
635
1.77
untuned 8
1618
3
398
360
3.13
tuned 8
1575
2
0
357
3.15
For 1 and 2 threads, the numerical performance and production are close, as expected.
However, for 8 threads, the untuned result is quite different. The large number of matrix
solver failures (398) indicates trouble with solver convergence. Inspection of the reservoir
performance shows significant differences from the other runs, an unacceptable result.
Tutorial 55
To reduce the matrix failures, both *ITERMAX and *NORTH each were increased from
default values of 30 to 50. The tuned 8-thread result closely matches the other thread cases in
both numerical and reservoir performance.
CPU Breakdown
When command-line option -cputime is used, detailed statistics of CPU and elapsed times
are written at the end of the log file. These statistics can be used to determine where most of
the time is being spent running a particular data set. For the example sthrw007 used above,
these statistics show that the majority of the processor time is spent in two areas of the code:
Jacobian Building (JBuild) and matrix Solver.
No. of
Threads
1
1
8
8
Task
JBuild
Solver
JBuild
Solver
CPU
(sec)
604.94
301.15
632.62
431.01
% of Total
CPU
53.79
26.78
48.96
33.36
Clock
(sec)
605.45
301.35
160.03
108.75
% of Total
Clock
53.78
26.77
44.87
30.49
For the single-thread run, the CPU and Clock (elapsed) times are nearly identical, as all the
work is being done by one thread. For the 8-thread run, the CPU times are much larger than the
Clock times since the same amount of work as in the single-thread run is now being spread over
8 threads. The result is a decrease in Clock time from 605 to 160 s for JBuild, and from 301 to
108 s for Solver. The combined speedup for these two portions of the code is 3.37.
Note that the CPU times for the 8-thread run (632 s for JBuild and 431 s for Solver) are larger
than those of the single-thread run (604 s for JBuild and 301 s for Solver), due to the overhead
of OpenMP as well as the use of a different linear solver (*PARASOL instead of *AIMSOL).
56 Tutorial
indicates that a maximum of 10 data entry errors are allowed before the simulator stops. Many
data items have defaults, which are used if the keyword is not found in the input data file.
CHARACTER SET
There is a set of allowed characters that may be used in referring to keywords. Any character
not in this set will be interpreted as a blank. Characters in quotes or comments are not
checked, but will be passed along unchanged to the output.
The purpose of the character set is to detect invisible non-blank characters, such as tab, which
some editors may insert in your data file.
The CMG keywords are composed of the upper and lower case alphabet, numerals 0-9,
keyword indicator (*), and arithmetic operators (=, +, -, /). Extra characters are included in
the set to accommodate the *TRANSLATE facility (see below).
You may increase the character set at installation time by expanding the data definition of the
array CHRSET in subroutine RDLINE in the simulator source code. The only restriction is
that the characters must be supported by the computer operating system.
KEYWORD INDICATOR
The optional keyword indicator * (asterisk) may appear immediately before the keyword with
no blanks between.
An example of a keyword is the porosity keyword:
por or POR or *POR
In this Manual, keywords are shown in capitals with '*' so that they stand out in the text.
However, mixed case, and without '*', are allowed.
Two keyword indicators or asterisks, in a row, indicate a comment line, as in:
** This is a comment line. The comment line may
** appear almost anywhere in the data set. It is
** very useful for documenting your data set.
The comment indicator may be changed by using the *COMMENT keyword described later
in this section.
ORDER OF KEYWORDS
All keywords used in the keyword input system are grouped into keyword groups.
Keyword groups must appear in the data file in the same order as they appear in this
document. Keywords within a keyword group may appear in any order, unless specifically
stated otherwise.
There are a few keywords which may appear at any point in the data file. These keywords are
*LIST, *NOLIST, *INCLUDE, *COMMENT, *TRANSLATE and *RANGECHECK.
Some keywords may appear both within their keyword group, and in recurrent data.
The description of each keyword notes whether the keyword is optional or required. Some
keywords are optional or required with the use of certain other keywords. Optional keywords
have default values which are used if the keyword is not found in the data file.
STRINGING KEYWORDS
A primary keyword should appear on a new line and may be followed by its data and
subkeywords on the same line and/or subsequent lines. A keyword is primary when it
appears in the upper right-hand corner of the corresponding manual page, for example,
*COMPNAME. A sub-keyword that has the same name as a primary keyword in another
data section is not primary itself. For example, *WELL is a primary keyword in the
Recurrent Data section but may appear as a secondary keyword of, and on the same line as,
*OUTPRN in the I/O Control section.
Each row of a table must appear on a new line, since this defines the columns.
STARS allows primary keywords to be located on the same line for backward compatibility,
but the practice is not recommended. Builder does not support this practice, and STARS may
disallow it in a future version.
CASE
Keywords and alphanumerical strings may be in upper case, lower case, or any combination.
Filenames must conform to the requirements of the operating system being used, for example,
upper case for IBM mainframe systems.
LINE LENGTH
Only the first 512 characters in a line are processed, and any character after that is ignored.
DELIMITERS
Keywords, numbers, and character strings must be separated from each other by blanks,
commas, or new-line characters. Consecutive commas, with nothing except blanks between
them should not occur in the data file.
CHARACTER STRINGS
Character strings ALWAYS must be enclosed in either a pair of single quotes (e.g. '5-35-48W5') or double quotes (e.g. 5-35-48-W5). When inserting either type of quote in the string,
enclose the string in the other quote type, e.g., 'This is the "right" way. or Lands End.
When a strings maximum length is specified, characters after that maximum will be ignored.
58 Keyword Data Entry System
TRANSLATION
You can use your own keyword for any main keyword if you define the translation rule using
*TRANSLATE.
NUMBERS
Numbers are input in free format. Real numbers do not require decimal points.
Exponentiation is indicated by 'E', 'e', 'D' or 'd'. Numbers must not contain embedded blanks.
If an integer is expected, and a number with a decimal fraction is read in, an error message
will be issued, and the program will stop.
The following are examples of valid real numbers:
25.040
-3
1.23E+02
0.02D-4
34.e02
+2.3
+.3
-.3
.23
.23
.41
.27
There are two ways to input these numbers. One is to write them as they appear directly above.
However a shortcut measure is to write them using the multiple occurrence indicator ("*").
Since the first three numbers in sequence are the same you can write the numbers this way:
3*.23
.41
.27
Note that there MUST NOT be a space either before or after the "*".
INTEGER RANGE
In any instance where a sequence of INTEGER values is required, a colon must be used to
indicate a range of values from one integer to another integer. Blanks cannot be present
between either integer and the colon. For example:
1
2
3
4
6
and
1:4
6
10:12
10
11
12
are two equivalent ways of giving the same sequence of INTEGERS. Note that this method
of input will not work if real numbers are expected.
TABLES
The keyword documentation sometimes indicates that a table of data must be entered. All the
required data items (columns) are listed in order. Always enter the data in the order shown.
For each row, a value is expected for each mandatory column. In addition, you may elect to
enter values for an optional column (shown enclosed in round brackets in the table syntax); if
so, you must enter a value for each row.
An example of such an event includes the water-oil relative permeability tables (*SWT
keyword). Pcow is optional, and need not be entered, but in this case the user has capillary
pressure data.
*SWT
**Sw
0.2
0.2899
0.3778
0.4667
0.5556
0.6782
0.7561
0.8325
0.9222
1.0000
krw
0.0
0.022
0.018
0.061
0.143
0.289
0.450
0.780
1.000
1.000
krow
1.0
0.6769
0.4153
0.2178
0.0835
0.0123
0.0
0.0
0.0
0.0
(Pcow)
45.0
19.03
10.07
4.09
1.80
.50
.10
.0
.0
.0
If the capillary pressure is not used (pcow = 0), then the table would be entered as
*SW
**Sw
0.2
0.2899
0.3778
0.4667
0.5556
0.6782
0.7561
0.8325
0.9222
1.0000
krw
0.0
0.022
0.018
0.061
0.143
0.289
0.450
0.780
1.000
1.000
krow
1.0
0.6769
0.4153
0.2178
0.0835
0.0123
0.0
0.0
0.0
0.0
Tables from different sources may be merged automatically by using the *INT table entry option.
ERROR AND WARNING MESSAGES
During data input, the lines in the data file are echoed to the print output file. If an error is
detected, an error message or a warning is issued. Depending on the type of error, the
message may refer to the line printed above or below the error or warning message.
If *NOLIST has been used, the data line on which the error or warning has occurred will not
be printed. It is therefore recommended the *NOLIST only be used for production runs, after
the data has been thoroughly debugged.
Comments (Optional)
PURPOSE:
** (two keyword indicators) may be used to add comments explaining where data came from,
why options are being used, etc.
FORMAT:
** comment_text
DEFAULTS:
Optional. No defaults.
CONDITIONS:
A comment may appear at any point in the data file.
EXPLANATION:
Two consecutive keyword indicators ('**') indicate the start of comment text. The portion of
the input line after the two keyword indicators is ignored. Comment lines may be used to add
comments explaining where data came from, why options are being used, etc.
Comments are copied to the output print file with the rest of the data file (subject to
*NOLIST and *LIST keywords). Otherwise, comment lines are ignored.
An example of a comment is:
*MAXERROR 14 ** Change maximum number of errors.
*RANGECHECK
PURPOSE:
*RANGECHECK controls the data range check feature.
FORMAT:
*RANGECHECK ( *ON | *OFF )
DEFINITIONS:
*ON
Turn on the range check feature.
*OFF
Turn off the range check feature.
DEFAULTS:
If *RANGECHECK is absent, then *RANGECHECK *ON is assumed.
*RANGECHECK without *ON or *OFF implies *ON.
CONDITIONS:
This keyword may appear anywhere in the data file, as many times as needed.
EXPLANATION:
Most input data is examined to determine if it is within an expected range of numbers.
Specifying *RANGECHECK *OFF will disable the non-critical data range checking.
*RANGECHECK *OFF also will suppress the printing of all "warning" messages. Error
messages always will be printed.
Example: To override the pressure *DNORM range:
*RANGECHECK *OFF
*NORM *PRESS 500
*RANGECHECK *ON
It is recommended that the range checking be kept enabled for as much of the data file as
possible.
*LIST, *NOLIST
PURPOSE:
*LIST specifies listing the input data file, from this point forward, to the output print file.
*NOLIST specifies not listing the input data file to the output print file, starting immediately
after the current line.
FORMAT:
*LIST
*NOLIST
DEFAULTS:
Optional keywords. Default: *LIST
CONDITIONS:
*LIST or *NOLIST may appear at any point in the data file, but must be on a line by itself.
EXPLANATION:
By default, the entire data file is listed to the output print file prior to the start of the
simulation run, with the exception of a limit of 20 echoed lines for each grid-array keyword.
If a *NOLIST keyword is inserted in the data file, the data file is not listed from the point of
the *NOLIST keyword until a *LIST keyword or the end of data file is reached. Keyword
*NOLISTLIM disables the limiting of grid-array keyword data.
*COMMENT
PURPOSE:
*COMMENT changes the two character sequence that denotes the beginning of a comment.
FORMAT:
*COMMENT 'ab'
DEFINITION:
ab
A two-character string denoting the start of a comment. The string 'ab' must
be enclosed in quotes.
DEFAULTS:
Optional keyword. Default: *COMMENT '**'
CONDITIONS:
*COMMENT may appear at any point in the data file, but must be on a line by itself. All
subsequent comments following the appearance of the *COMMENT keyword must be
preceded by the two-character sequence 'ab'.
EXPLANATION:
By default, comments in the data file are denoted by the character string '**'. This may be
changed by using the *COMMENT keyword.
Example:
*COMMENT '--'
*TRANSLATE 'KX' 'PERMI' -- This is a translate
-- rule
From this point on in the data file all comments should begin with '--'. In the above example
the two lines beginning with '--' are comments.
'KX'
'PERMI'
This translate rule translates the *KX or KX keyword such that the simulator recognizes this
to mean *PERMI. Subsequent to this keyword *KX, KX, *PERMI, or PERMI may be used
to refer to the *PERMI keyword.
A keyword may have more than one translate rule,
Example:
*TRANSLATE 'KX' 'PERMI'
*TRANSLATE 'x_permeability' 'PERMI'
*TRANSLATE 'permx'
'PERMI'
*UBA
PURPOSE:
Specify address for any block in the grid.
EXPLANATION:
The User Block Address (UBA) is a natural extension of the familiar I-J-K notation for
addressing blocks, but allows the user to refer to any block in the advanced grids available in
CMG simulators. UBA is based on the idea that, even for the most complex grids, the
relationships between grids and blocks can be represented as a tree diagram with the fundamental
grid at the base node. The UBA starts by giving the fundamental grid block in I-J-K notation,
e.g., 3,6,2 or 3 6 2. Delimiting blanks or commas must separate the block indices.
Refine Grids
To refer to a block at a finer grid level, the fundamental I-J-K is followed by a slash (/) and
the next level of refined grid block in I-J-K notation, and so on, to the block of interest.
Delimiting blanks or commas must surround a slash. Multiple refinement levels are allowed.
For example, if fundamental block (3,6,2) contains a 3x3x1 refined grid, then the UBA for one
of the fine blocks is 3,6,2 / 2,3,1. UBA 3 6 2 still refers to the fundamental parent block.
Naturally Fractured Grids
In the naturally fractured grid options, a fundamental spatial block is split into two
storage blocks: fracture and (optionally refined) matrix. Indicate which of the two with
UBA qualifiers MT or FR after the indices, e.g., 10,14,3 FR and 10,14,3 MT. If the
block is fractured and neither FR nor MT is present, FR is assumed.
The MINC and Subdomain options involve refinement of the matrix portion of the spatial
block that is referenced with the refined-grid notation. For example, MINC block 2 (second
from the inside) located in fundamental block 10,14,3 is 10,14,3 / 2,1,1 MT.
Discretized Wellbore Grids
Since wellbore blocks are refined grids, they may be addressed as such. With few exceptions
UBA qualifiers WB and TU may be used to replace the trailing " / n,1,1". This alternative
syntax is unique and interchangeable. These UBA qualifiers allow for better readability as
well as backward compatibility of existing data. A wellbore qualifier may used together with
the full refined grid syntax, but it must correspond to the refined block in question (i.e.,
annulus or tubing).
There are three different cases for using these qualifiers. In a non-circulating wellbore block,
"WB" means " / 1,1,1". In a circulating wellbore block, "TU" means " / 1,1,1" (the tubing)
and "WB" means " / 2,1,1" (the annulus).
The DW-in-Hybrid option locates a wellbore grid in the centre block of a hybrid grid. If the
UBA before the qualifier denotes a block that contains a hybrid grid that itself contains a
wellbore grid, then the qualifier indicates the corresponding wellbore block " / 1,1,1 / n,1,1 ".
UBA Ranges
Some keywords support the entry of ranges of blocks in the UBA format, for example,
*PERF. A UBA range consists of the UBA described above, except that at least one integer
grid index is replaced by an integer range (e.g., 3 6 1:4 / 2 2 1:3 MT). Remember that in an
integer range the first number must not exceed the second number.
For some keywords the order of processing the individual blocks in the range is significant.
The following shows the sequence in which individual blocks are processed, with each point
in order of priority.
1. In each integer range, the values are processed from the first (lower) number to the
second (larger) number.
2. In each level, the I indices are processed first, then the J indices, then the K
indices. This is commonly known as natural order.
3. For multiple grid levels, the lowest (i.e., finest, rightmost) grid level is processed
before the next higher grid level.
Example: The UBA range 1,3:4,5 / 6,7:8,9:10 is processed in the following order:
1
1
1
1
1
1
1
1
3
3
3
3
4
4
4
4
5
5
5
5
5
5
5
5
/
/
/
/
/
/
/
/
6
6
6
6
6
6
6
6
7
8
7
8
7
8
7
8
9
9
10
10
9
9
10
10
null block
pinch out block
zero porosity block
fracture block in dual porosity system
matrix block in dual porosity or dual permeability
MINC block, where i = 1 as the innermost block
Subdomain block, where i = 1 as the topmost block
discretized wellbore (annulus) block
discretized tubing block
Where an output field does not have sufficient length for the entire address, the presence of
additional refinement levels will be indicated by "+", e.g., 23,13,12+ WB.
read_option
The read options are
*CON
*IVAR
*JVAR
*KVAR
*ALL
*IJK
*BINARY_DATA
*EQUALSI
These read_option keywords are described separately.
All these read_options except *IJK ensure definition each block in the grid.
*IJK must be used with care to ensure that the grid is covered completely;
this restriction is lifted in the RECURRENT DATA section where select
blocks may be defined.
data
These are the actual values for the grid_array. The amount of data depends
on the read_option; for *IJK it depend also on whether the context is
recurrent data or not.
array_modifier
Once an array has been input, it can be modified immediately using *MOD.
This allows modification of blocks or regions after the read_option is done.
The *MOD keyword is described separately.
EXPLANATION:
A grid block is divided into at most two parts: matrix and fracture. All other grid, wellbore
and natural fracture options are treated as local refined grids.
For example, a discretized wellbore is treated as a refined grid contained in another grid
block. Let the coarse block address be i j k. The address of the (possibly naturally fractured)
formation surrounding the discretized wellbore is i j k. The address of the wellbore is i j k / 1
1 1 since it is the first block in the 'refined' grid. If the wellbore has two streams, the tubing
address is i j k / 1 1 1 and the annulus is i j k / 2 1 1. An array assignment to block i j k will be
inherited to the refined grid it contains by default.
Another example is the MINC natural fracture option. The MINC option divides a block into
a fracture and several distinct matrix blocks; these matrix blocks are treated as a refined grid
of the matrix portion of the coarse or 'parent' block. Array assignment to block i j k will be
inherited by default to the refined (MINC) grid it contains. For parent block i j k, the
innermost matrix block has address i j k / 1 1 1, the next block is 1 1 1 / 2 1 1 and so on.
*MATRIX
PURPOSE:
*MATRIX is used immediately after a grid property keyword to indicate that a matrix
property is being input.
KEYWORD:
*MATRIX
EXPLANATION:
Any of the array reading options can be used with *MATRIX. The read_option keyword
must follow the *MATRIX keyword.
Example: To input the matrix porosity in a dual porosity system:
*POR *MATRIX *ALL
.12 5*.16 .18 .22 .21 8*.20
.19 10*.18 3*.21 .19 .16
*FRACTURE
PURPOSE:
*FRACTURE is used immediately after a grid property keyword in a dual porosity system to
indicate that a fracture property is being input.
KEYWORD:
*FRACTURE
EXPLANATION:
Any of the array reading options can be used with *FRACTURE. The array reading option
keyword must follow the *FRACTURE keyword.
Example: Suppose the planes of grid blocks with J = 2 and J = 3 are fractured. You want to
input the fracture porosities of these blocks.
*POR
1:10
*FRACTURE *IJK
2:3 1:3 .08
*RG
PURPOSE:
*RG is used to assign values of an array to refined grid blocks.
KEYWORD:
*RG i1(:i2) j1(:j2) k1(:k2)
DEFINITIONS:
i1(:i2)
I direction index range of the fundamental grid block containing the refined
grid.
j1(:j2)
J direction index range of the fundamental grid block containing the refined
grid.
k1(:k2)
K direction index range of the fundamental grid block containing the refined
grid.
EXPLANATION:
Refined grids are initially defined using the *REFINE keyword in the RESERVOIR
DESCRIPTION section.
By default, all refined grid blocks are assigned the values assigned to the fundamental grid
block. The *RG keyword allows input of different values for each refined grid block.
Any of the array reading options may be used with *RG. The array of properties input is that
of the refined grid, and corresponds to the number of blocks in the refined grid, not the
fundamental grid. The array reading option keyword must follow the *RG keyword.
Example: Suppose block (1,1,1) contains a refined grid. It is divided up into ni=3, nj=2 and
nk=1. You want to input the porosity of each of the refined grid blocks.
*POR *RG 1 1 1 *ALL
.08 .079 .078 .081
.08
.076
i1(:i2)
i1(:i2)
i1(:i2)
j1(:j2)
j1(:j2)
j1(:j2)
k1(:k2)
k1(:k2)
k1(:k2)
DEFINITIONS:
*WELLBORE
Indicates that the data is to be assigned to the wellbore element(s) in the grid
block. This applies to both annulus and tubing for circulating wells.
*ANNULUS
Indicates that the data is to be assigned to the annulus element in the grid
block. It also applies to the wellbore when no tubing exists.
*TUBING
Indicates that the data is to be assigned to the tubing element of the grid
block.
CONDITIONS:
These array input qualifiers are valid only when the discretized wellbore option is enabled via
the reservoir description keywords *WELLBORE and/or *CIRCWELL.
EXPLANATION:
Example: To specify the different initial oil saturations in a circulating well found in blocks
1:6 2 5:
*SO *MATRIX *CON 0.70
** 70% in matrix
*SO *ANNULUS 1:6 2 5 *CON 0.05 ** 5% in annulus
*SO *TUBING 1:6 2 5 *CON 0
** None in tubing
These array qualifiers are the preferred way to refer to discretized wellbore blocks.
*ALLELEM
PURPOSE:
Assign data to all elements of grid blocks.
KEYWORD:
*ALLELEM
EXPLANATION:
This array input qualifier indicates the data is to assigned to all elements of a grid block. This
qualifier is necessary only if a natural fracture option is used. Since this is the default, this
keyword is not needed explicitly.
Example: To specify the same initial temperature of 40.5 degrees in both fracture and matrix:
*TEMP *ALLELEM *CON 40.5
-or*TEMP *CON 40.5
*CON
PURPOSE:
*CON indicates that a constant value is entered for all array elements. The value may be
entered on the same line or the next line.
KEYWORD:
*CON value
EXPLANATION:
Example: Assume you have a reservoir with a constant value of porosity of 0.16, and a
constant permeability in the I direction of 100 md.
*POR *CON
0.16
*PERMI *CON 100.
*IJK
PURPOSE:
*IJK assigns a constant value of a grid property within the region defined by the minimum
and maximum block number in each of the three directions.
KEYWORD:
*IJK
{ i1(:i2) j1(:j2) k1(:k2) value }
DEFINITIONS:
i1(:i2)
I-direction grid block index range.
j1(:j2)
J-direction grid block index range.
k1(:k2)
K-direction grid block index range.
value
Constant value of the array for the defined region.
{}
Indicates that any number of lines (but at least one) may be used.
CONDITIONS:
In general, you must define ALL blocks in the grid with any one usage of *IJK. Care must be
taken with usage of *IJK, because it is possible to omit some blocks in the assignment (unlike
the other array- reading options). If you do skip at least one block a fatal error message will
inform you. In all the data sections except RECURRENT, it is safest to use one of the other
array-reading options in conjunction with the *MOD option.
The *IJK array-reading option is most useful in the RECURRENT DATA section, where
assignments to grid blocks usually are over-writing of default or previously assigned data.
Referring to only select grid blocks is allowed in that section.
EXPLANATION:
The *IJK array reading option assigns a value of a grid property within the region defined by
the block number ranges in each of the three directions. Later lines in the same array variable
invocation will overwrite previous lines if they refer to the same grid blocks.
For example, in assigning porosity to a 10 x 10 x 3 grid where the value is the same except in
a 5 x 5 region, the usage
*POR *IJK 1:10 1:10 1:3 0.246
1:5 1:5 1
0.17
-or-
will result in an error message stating that some of the grid blocks have not been assigned
values. This is because the data from the *POR *CON assignment is discarded when *POR
*IJK is encountered. The usage of *CON in itself is correct, but *POR *IJK must cover the
entire grid.
In the recurrent data section, *IJK may refer to select grid blocks. To change the relative
permeability rock type in the 5x5 region to #4, use
*KRTYPE *IJK 1:5 1:5 1 4
*IVAR
PURPOSE:
*IVAR is used to indicate values that vary in the I direction, but which are constant in the
other two directions.
KEYWORD:
*IVAR value(1) value(ni)
DEFINITIONS:
value(1)
Value assigned to all grid blocks with an I direction index of 1.
ni
Number of grid blocks in the I direction.
EXPLANATION:
Enter nj values separated by spaces or commas.
Example: I direction block sizes where ni = 10:
*DI *IVAR
2*1000 1100
1050
3*800
860
1010
1100
Note that the structure '2*1000' indicates the value '1000' occurs twice.
Example: I direction block sizes where ni = 3:
*DI
*IVAR
3000.0
4000.0
5000.0
*JVAR
PURPOSE:
*JVAR is used to indicate values that vary in the J direction, but which are constant in the
other two directions.
KEYWORD:
*JVAR value(1) value(nj)
DEFINITIONS:
value(1)
Value assigned to all grid blocks with a J direction index of 1.
nj
Number of grid blocks in the J direction.
EXPLANATION:
Enter nj values separated by spaces or commas.
Example: The J direction increments for a problem where nj=10 are: 755, 755, 755, 825, 825,
1000, 1000,1100,800,800.
*DJ
*JVAR
3*755
2*825
2*1000
1100
2*800
*JVAR
3000.0
4000.0
3000.0
*KVAR
PURPOSE:
*KVAR is used to indicate values that vary in the K direction, but which are constant in the
other two directions.
KEYWORD:
*KVAR value(1) value(nk)
DEFINITIONS:
value(1)
Value assigned to all grid blocks with a K direction index of 1.
nk
Number of grid blocks in the K direction.
EXPLANATION:
Enter nk values separated by spaces or commas. This is convenient for entering properties
vary only by layer.
Example: Porosity varies for each of the layers of a system where nk=5, but is constant
within each layer. The layer porosities are: .0810, .210, .180, .157, and .200.
*POR *KVAR .081 .21 .18 .157 .2
Example:
**
**
**
**
**
*ALL
PURPOSE:
*ALL is used to indicate that values vary in most or all the grid blocks. The number of values
expected is the number of grid blocks in the grid, including all null or zero-porosity blocks.
KEYWORD:
*ALL value(1) value(ni*nj*nk)
EXPLANATION:
Values are entered starting with block (1,1,1) and in increasing block order where the I
direction block index increases fastest and then the J direction block index second fastest and
the K direction block index the slowest.
Example: Porosities for each grid block in a three-dimensional system vary in almost every
grid block: ni=10, nj=3, nk=2
*POR
.08
.15
.074
.095
.11
.08
*ALL
.08
.134
.12
.13
.12
.09
.081
.08
.12
.12
.134
.144
.09
.087
.154
.157
.157
.143
.12
.157
.167
.17
.157
.123
.15
.145
.187
.18
.18
.16
.09
.12
.121
.184
.18
.165
.097
.135
.122
.122
.098
.102
.087
.18
.08
.084
.09
.10
.011
.092
.08
.09
.09
.10
*BINARY_DATA
PURPOSE:
Builder uses this keyword to indicate that grid-array data is stored in binary form.
KEYWORD:
*BINARY_DATA
EXPLANATION:
In Builder
Normally Builder writes data in text-format files. However, Builder is able to write some
grid definition and property data in binary form to a separate binary-format file. This option
is invoked in Builder via menu "File/Save As.../Array Saving Method/Binary File Format
(*.cmgbin)". The binary file is saved in the same folder as the main dataset file and given the
same root name but extension .cmgbin. Unlike the *INCLUDE facility which can involve
multiple include files, there is at most one binary format file associated with a main data file.
The grid definition and property data that can be written in binary form are (1) corner-point
definition keywords *XCORN, *YCORN, *ZCORN, *COORD and *CORNERS, and (2) all
grid-array keywords using read option *ALL in the initialization (non-recurrent) data
sections. In any given data set, all such data is written in the same form (text or binary)
according to the selected Array Saving Method. You may switch between the binary and textonly writing formats whenever you wish.
For grid property keywords, only that data associated directly with subkeyword *ALL is
written in binary form. Specifically, *MOD data lines are preserved as text after the
*BINARY_DATA subkeyword. Therefore, you may add or modify *MOD data lines after
the *BINARY_DATA subkeyword, just as you would after *ALL and its data.
Non-uniform grid property data from sources like maps or existing simulator results from
SR2 file sets usually are written in *ALL format in the text file. Such data can be written
directly to the binary file, avoiding *ALL text writing altogether.
Writing non-uniform data to a binary file has some distinct advantages. First, the reading of
binary data is much faster than text and so for large models can speed up significantly the
transfer of data to and from Builder. Second, binary format occupies less space than a
comparative text representation (e.g., 8 bytes versus 20 to 30 bytes). Third, the original
precision of data obtained from existing SR2 result files can be preserved by not passing the
data through a text-writing step.
In the Simulator
When the simulator detects subkeyword *BINARY_DATA in its initial data scan, it opens
the associated binary file which is assumed to have the same root name as the main data file
but extension .cmgbin. Each time the simulator encounters *BINARY_DATA during the
data loading pass, it locates that property in the binary file and reads one value for each block
in the grid, similar to the *ALL option. A mismatch between the text and binary parts of the
data set will result in an error.
The reading of binary data is much faster than text and so for large models can speed up
significantly data reading in the simulator. Text formatted data can differ slightly in value
from its associated binary data, so text and binary versions of the same data may give slightly
different simulation results.
Examples
These are examples of data fragments you might see in the text data file written by Builder in
binary file format.
** Null block distribution from map
*NULL *BINARY_DATA
** Permeability from map, with matching adjustments
*PERMI *BINARY_DATA
*MOD 1:5 1:10 1:5 * 0.9
1:3 1:4 1:2 * 1.2
*PERMJ *EQUALSI
*PERMK *EQUALSI / 5.
** Natural fracture: matrix porosity from map
*POR *MATRIX *BINARY_DATA
*POR *FRACTURE *CON 0.008
** Initial saturation, natural fracture system
*SW *MATRIX *BINARY_DATA
*SW *FRACTURE *BINARY_DATA
** Initial solution gas from primary production
*MFRAC_OIL 'SOLN GAS' *BINARY_DATA
*MOD 4 5 1:9 = 0.3 ** Enriched zone around well
*EQUALSI
PURPOSE:
*EQUALSI indicates that values in the J and K directions are the same as those in the I
direction, or that the values given for the I direction may be modified by division,
multiplication, etc.
KEYWORD:
*EQUALSI ( [ * | - | + | / ] value )
EXPLANATION:
*EQUALSI is used with direction-dependent keywords, such as the transmissibility,
permeability and dispersion coefficients. This keyword works with *MATRIX and
*FRACTURE separately.
Example: Permeabilities in a single-porosity system. J-direction values are equal to the I
direction, but the K-direction values are twice the I-direction values
*PERMI *CON 100.0
*PERMJ *EQUALSI
*PERMK *EQUALSI * 2.
Example: The same as above, only with a natural fracture option in effect.
*PERMI
*PERMJ
*PERMK
*PERMI
*PERMJ
*PERMK
*MOD
PURPOSE:
*MOD indicates the modification of an input grid property.
FORMAT:
*MOD
{ i1(:i2) j1(:j2) k1(:k2) opr value }
-or*MOD opr value
where
opr is one of +, , *, /, =
DEFINITIONS:
i1(:i2) j1(:j2) k1(:k2)
I-J-K index ranges of the region to modify. The second index of a range
must not be less than the first index; for example, 2:1 is not allowed. If
the second index of a range is the same as the first index, the colon and
second index may be omitted; for example, 5 is equivalent to 5:5.
+
Indicates that value is added to the existing grid property value in the region
defined.
Indicates that value is subtracted from the existing grid property value in the
region defined.
*
Indicates that the existing grid property is multiplied by value in the region
defined.
/
Indicates that the existing grid property is divided by value in the region
defined.
=
Indicates that the existing grid property is overwritten by value in the region
defined.
CONDITIONS:
The *MOD keyword must appear immediately after the array property data, and may appear
at most once.
EXPLANATION:
The *MOD option is used to modify the last grid property data array input by adding,
subtracting, multiplying, dividing or replacing array elements by a specified value. There are
two syntax variations. In the simpler variation an operator follows immediately after the
*MOD keyword, in which case the modification is applied to all grid blocks.
In the other syntax variation the *MOD keyword is followed by a number of sets of I-J-K
index range, operator and value. Each range-operator-value set is processed in order of
appearance, so that a block may experience more than one modification after all the *MOD
data is processed. Histories of modifications can appear in sequence, perhaps accumulated in
a matching study.
Example: Suppose for a 10 x 6 x 1 grid you want to modify the porosities in the region with I
indices 1 through 3, J indices 1 through 4 and with K index of 1 by adding 0.01. You further
wish to assign the value of .13 to the block with I=5, J=2, and K=1. Enter *MOD after the
array values. The data looks like this:
*POR *ALL
.08 .08
.15 .134
.074 .12
.095 .13
.11 .12
.08 .09
*MOD
1:3 1:4
5
2
.081
.08
.12
.12
.134
.144
.09
.087
.154
.157
.157
.143
.12
.157
.167
.17
.157
.123
.15
.145
.187
.18
.18
.16
.09
.12
.121
.184
.18
.165
.097
.135
.122
.122
.098
.102
.087
.18
.08
.084
.09
.10
.011
.092
.08
.09
.09
.10
1 + .01
1 = .13
Example: To modify the entire grid to reduce the porosity of each grid block to 95% of the
original value:
*POR
.08
.15
.074
.095
.11
.08
*MOD
*ALL
.08 .081
.134 .08
.12 .12
.13 .12
.12 .134
.09 .144
* .95
.09
.087
.154
.157
.157
.143
.12
.157
.167
.17
.157
.123
.15
.145
.187
.18
.18
.16
.09
.12
.121
.184
.18
.165
.097
.135
.122
.122
.098
.102
.087
.18
.08
.084
.09
.10
.011
.092
.08
.09
.09
.10
You are not permitted to repeat a required array keyword after it has been entered once.
For example, the user wants to change some of the porosities to 0.22 after initially assigning
0.30 to all grid blocks. The following data entry is incorrect.
*POR *CON 0.3
*POR *IJK 5:8 14:23 4 0.22
** Incorrect
The correct procedure is to use the *MOD keyword on the line immediately following *POR:
*POR *CON 0.3
*MOD 5:8 14:23
4 = 0.22
Note that if *EQUALSI and *MOD appear together, then *EQUALSI is processed first and
then the *MOD values are processed.
*INT
PURPOSE:
*INT indicates that the corresponding table entry should be filled by interpolation.
EXPLANATION:
The *INT keyword may be used in table input. This keyword enables the calculation of the
table entry by interpolation. Essentially the table entry corresponding to *INT is replaced by a
linearly interpolated value. This option is useful when not all table entries are known. This
feature is explained in further detail with the help of an example.
Suppose that it is required to enter a water-oil relative permeability table into the simulator.
Also assume that the water and oil relative-permeabilities are known at different saturations
*SWT
**Sw
0.2
0.3
0.4
0.5
0.6
0.7
0.8
1.0
Krw
0.0
0.05
*INT
0.40
*INT
0.8
1.0
1.0
Krow
1.0
*INT
0.7
*INT
0.5
*INT
0.0
0.0
In the above table values denoted by *INT will be calculated by linear interpolation by the
simulator.
NOTE:
Interpolation is done with respect to the first column. Thus the *INT keyword cannot appear
in the first column of the table.
At least one non *INT entry must appear in a column. If only one non *INT entry appears in
the column then the entire column is assigned the same value.
Input/Output Control
Input/Output Control 91
frequency of writing
frequency of rewinding
terminate run after finishing current time step and writing restart record
Required Data
There are no required or mandatory keywords in this section. Each keyword has a default
value which can be used.
Critical Keyword Ordering
*FILENAMES, if present, must be the first keyword to appear.
*MASSBASIS and *PARTCLSIZE, if present, must appear before *OUTPRN and *OUTSRF.
Usage in Other Sections
Some of the keywords in this section may be used also in the Well and Recurrent Data section:
May Appear in
Recurrent Data
*MAXERROR
*SRFASCII
*PRINT_REF
*WRST
*REWIND
*OUTSOLVR
*OUTPRN
*WPRN
*OUTSRF *GRID
*WSRF
*DYNGRDFREQ
*SR2PREC
*TITLE1
*TITLE2
*TITLE3
*CASEID
*CHECKONLY
*INUNIT
*OUTUNIT
*PRNTORIEN
*DIM
92 Input/Output Control
*RESTART
*MASSBASIS
*PARTCLSIZE
*OUTSRF *WELL
*OUTSRF *SPECIAL
*XDR
*DYNSR2MODE
Description
Number of rock-fluid table entries
Number of IFT temperature entries
Number of IFT isotherm entries
Number of rock-fluid endpoint temperature entries
Number of reaction frequency factor table entries
Number of blockage resistance table entries
Number of temperature-viscosity table entries
Run-Time Dimensioning
The amount of memory needed just to start STARS is less than 15 Mb, most of which is the
executable file itself. However, there is no internal limit to the total amount of storage
STARS will attempt to allocate as directed by the user's data. Therefore, the user has great
flexibility in running larger data sets but needs to be aware of the corresponding storage
requirement. The bulk of information required to allocate sufficient internal storage is
obtained from a preliminary scan of the data. The few remaining dimension parameters, listed
in the table Static Dimensioning Limits, above, are absolute maximums compiled into the
executable.
In the following, '>' at the beginning of a line indicates an output line to the screen or diary
file if redirected.
Normally the beginning of the screen or diary output looks like
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
Banner . . .
Opened data file on unit 72, filename is 'correl.dat'
Scanning data for dimensioning info . . .
Done.
Opened output file
on unit 73, filename is 'correl.out'
Opened INDEX-OUT
on unit 74, filename is 'correl.irf'
Opened MAIN-RESULTS-OUT on unit 76, filename is 'correl.mrf'
============= SUMMARY (from subroutine: INDATA) ==============
Reading of initial data is complete.
Simulation will stop if there were error messages.
3 Warning messages.
0 Error messages.
==============================================================
indicating that the data file is opened and then scanned for values of dimensioning parameters
such as number of blocks, components and wells. Then the output files are opened and the
initialization (non-recurrent) data is read, processed and echoed.
When *DIM *DIMSUM or command line argument '-dimsum' is used the following type of
scan report is printed:
Input/Output Control 93
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
NUMY
NUMX
NW
MDPTGL
MFORM
MISOTH
NPTGN
NPTSS
NPTCS
M9PT
NDIM
NREF
MINC
NORTH
NDWGL
NCLU
NGAUSS
This report shows what dimensioning information was obtained from the preliminary scan of
the data file. For this particular data, there are 2 components, 1190 blocks, 2 wells and 34
global well completion layers.
Accompanying the above scan report are two other reports: a detailed summary of storage
used by each module, and a complete list of dimensioning parameters.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
Dimensioning Parameters
Storage
Storage
. . .
Storage
Storage
1190
1190
. . .
2
. . .
2
34
. . .
4320
38880
used by STARS
used by WELLGRP
2175170
214
used by AIMSOL
used by Total =
1160524
7331035
- Fluid components
These last two reports appear also when an allocation error occurs. The main cause of such an
error is an attempt to allocate more memory than is available. STARS will allocate storage
until the first failure, print the two reports and stop.
Test data "verify25.dat" in the "verify" directory of the STARS template area is designed to
test handling of allocation errors. On a machine with 480 Mb of process space, it gives:
>
>
>
>
>
>
>
>
>
94 Input/Output Control
followed by the two reports, the last indicating a total of 449043917 bytes or about 450 Mb.
The allocation of array 'tl' at 39 Mb would have put the total at 489 Mb, exceeding the
available process space. Increasing the process space (up to the 2 Gb 32-bit limit) usually
solves this problem, but use of process space significantly larger than the physical memory
(RAM) will result in paging that may degrade performance (especially for PCs).
For most data sets the dimensions obtained by scanning is sufficient. However, it is possible
that several dimensioning parameters may be insufficient, in which case the user may enter
values directly via *DIM subkeywords.
See Optimizing Memory Requirements in the Tutorial section of this User Guide.
32-bit and 64-bit Process Space Limits
A computer based on a 32-bit architecture has a hard limit in how much space can be
addressed (and hence allocated) in a single process such as a STARS run. For most such
operating systems this limit is 2 Gb. However, the limit is 3 Gb for the following Windows
operating systems:
Windows .NET server family
Windows XP Professional Edition
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
To access this option add switch /3GB to boot.ini on the target machine. The STARS Win32
executable is already enabled for 3 Gb.
A 64-bit machine will have a process space limit orders of magnitude larger than 3 Gb.
However, the limiting factor for performance will be still the amount of physical memory,
especially for Win64 machines.
Input/Output Control 95
( -f input_data )
( -log )
( -r input_restart )
( -restime restime )
( -stoptime stoptime )
( -checkonly )
( -dimsum )
( -onestep )
( -maxsteps nstop )
( -wd path | -dd )
( -wait )
( -doms )
( -parasol n )
( -aimsol )
DEFINITIONS:
stars.exe
STARS invocation command, usually the name of an executable file. In
UNIX it can be a local file, a link to a file or merely accessible via your
search path.
-f input_data
Specifies that input_data is the path name to a STARS input data file.
-log
Specifies that consol diary output will be redirected to a file whose name
has the same base as the output files but extension .log. This file will not
contain error or status messages from the operating system.
-r input_restart
Specifies that input_restart is the path name to a STARS input restart IRF
generated by a previous STARS run. The MRF and possibly RRF files
required for restart also will be obtained from similar pathnames. This
option overrides pathnames specified by subkeywords *INDEX-IN, *MAINRESULTS-IN, and *REWIND-IN of keyword *FILENAMES that may
occur in the data.
-restime restime
Equivalent to putting *RESTIME restime in your data. See manual entry for
*RESTIME.
96 Input/Output Control
-stoptime stoptime
Stops the simulation at stoptime (days | days | mins) which must correspond
to a simulation reference time specified via *TIME or *DATE in the
recurrent data section before the first *STOP keyword.
-checkonly
Equivalent to putting *CHECKONLY in your data. See the manual entry for
*CHECKONLY.
-dimsum
Equivalent to putting *DIM *DIMSUM in your data.
-onestep
Equivalent to putting *MAXSTEPS 1 in your data.
-maxsteps nstop
Equivalent to putting *MAXSTEPS nstop in your data.
-wd path
Output files will be written to the directory given by path. This option is
useful in an environment where the current directory may not be defined.
-dd
Output files will be written to the directory that contains the data file. This
option is intended to be used when an absolute pathname has been supplied
via the -f argument.
-wait
If all available licenses are being used, this argument keeps the process in a
sleep mode until a license is available (up to 72 hrs). Available on PC only.
This option is useful when several jobs are submitted via the CMG
Technology Launcher at one time (e.g., over the night or weekend) and the
number of licenses is limited. An alternate way to run a series of jobs
sequentially is to use a batch file. See Running Your Simulation in the
Tutorial chapter.
-doms
Overrides keywords *DPLANES and *DTYPE for parallel processing.
-parasol n
Enables PARASOL and parallel processing. See keyword *SOLVER.
-aimsol
Enables AIMSOL. See keyword *SOLVER.
Input/Output Control 97
DEFAULTS:
If an input data filename is not supplied here via argument "-f", then STARS will prompt for it.
If this is a restart run and the input restart filename is not supplied here via argument "-r" or
via keywords *FILENAME *INDEX-IN, then STARS will prompt for it.
If neither wd nor dd is supplied, then output filenames are obtained from the *FILENAMES
keyword. If *FILENAMES is absent, then the output files are written to the current working
directory.
98 Input/Output Control
*FILENAMES
PURPOSE:
Specify names for input and output files. Needed only to override default filenames, or
specify input restart when not using command-line argument.
The input data file must be specified via the standard input device (keyboard/job-running
script) or the command-line argument "-f".
FORMAT:
*FILENAME(S) { file_type (name_option) }
where file_type is one of:
*OUTPUT
*INDEX-OUT
*MAIN-RESULTS-OUT
*REWIND-OUT
*INDEX-IN
*MAIN-RESULTS-IN
*REWIND-IN
*GEOMECHOUT
and name_option is one of:
''
'filename'
*PROMPT
For file_type *OUTPUT, the additional name_option *SCREEN is allowed.
DEFINITIONS:
*FILENAME(S)
File name keyword. The trailing 'S' is optional.
*OUTPUT
Indicates the output-file to which formatted simulation results will be written.
*INDEX-OUT
Indicates the index-results-file (irf) to which the simulation results ASCII
data is written.
When the restart run is started, some information is copied from the SR2 input
files to the SR2 output files. Time-based histories are not copied but are accessed
by parts from each set of SR2 files that lead up to the current run; do not delete
the input SR2 files until the information they contain is no longer needed.
*MAIN-RESULTS-OUT
Indicates the main-results-file (mrf) to which the simulation results binary
data is written.
Input/Output Control 99
*REWIND-OUT
Indicates the rewindable-results-file (rrf) to which the restart data is written
when the *REWIND option is used.
*INDEX-IN
Indicates the index-results-file from which simulation results and restart
records are read. This file is necessary only for restart runs.
*MAIN-RESULTS-IN
Indicates the main-results-file from which the simulation results and restart
records (binary) are read. This file is only necessary for restart runs.
*REWIND-IN
Indicates the rewindable-results-file from which the rewound restart records
(binary) are read. This file is only necessary for restart runs.
*GEOMECHOUT
Indicates the file to which the formatted output generated by the
geomechanical model is written, if this option is chosen. If *GEOMECHOUT
is absent, or *PROMPT is used, this output is written to the main output file
given by *OUTPUT.
''
Empty string, denoting that an internally generated default filename will be
used.
'filename'
A character string which is the file name. Characters after the first 80 will be
ignored. Acceptable file names depend on the operating system being used.
*PROMPT
Indicates that the user will be prompted for this file name via the standard
input device (keyboard or job-running script), if the file is required. All file
types except *INDEX-IN have an internally generated default filename
available. To use it, enter a null response at the prompt.
*SCREEN
Indicates that data for this file type will go to the standard output device
(screen/job diary file).
DEFAULTS:
There is no default filename available for the input data file. It must be specified by the user,
either via the standard input device (keyboard/job-running script) or the command-line
argument "-f" (including the CMG Technology Launcher).
There is no default filename available for the input restart file *INDEX-IN. It must be
specified by the user, either via the standard input device (keyboard or job-running script),
keyword *FILENAME *INDEX-IN (both appropriate when using the CMG Technology
Launcher) or the command-line argument "-r".
If any other required filename is not specified via *FILENAME (including *PROMPT), an
internally generated filename is used. See "Internally Generated Default Filenames", below.
CONDITIONS:
*FILENAMES, if present, MUST be the first keyword(s) in the data file. If not, the user will
be prompted for the file names as they are required, and any subsequent *FILENAME will
not be recognized.
All output files are opened with 'UNKNOWN' status and therefore are NOT protected from
overwriting. An old file will be overwritten or appended, depending on the operating system
used.
All input files are opened with 'OLD' status and so must be present for the simulation to proceed.
Command-line argument r will override all restart input filenames that have been specified
via *FILENAMES.
EXPLANATION:
CMG's Simulation Results File System (SR2)
The SR2 file system consists of three files that work together. These are the index-results-file
(IRF), the main-results-file (MRF) and the rewindable-results-file (RRF). The graphics postprocessor RESULTS and the Report Writer require the IRF and the MRF files.
These files are required also for restart runs. If the *REWIND option was used to write restart
records, then the RRF is required also for restart runs. Only restart information that was
written to the RRF after the last rewinding are available.
Internally Generated Default Filenames
There is a consistent set of filenames generated internally. Each file type's filename is one of
the three filename roots appended with a unique suffix. These filenames are available as
defaults for each file type individually. This consistency is very useful in doing series of
restart runs in a manageable manner. There are three base file types from which the default
filename roots are derived: input data, output and input restart.
Input Data: This filename is entered via the prompt or the command line. The input data root
name is this filename minus the suffix '.dat' if it exists, and contains the full path name to the
input data file's directory. The default path name to another input data file type (presumably
in the same directory as the input data file) is this root name with a unique suffix appended.
Output: The default filename for *OUTPUT is the input data root name with the directory path
stripped off (to make it "local") and '.out' appended on the end. Command-line argument wd
and dd will override the directory portion of this default pathname. This filename or another
specified via the *FILENAME keyword is used to open the file. The output root name is the
*OUTPUT filename minus the suffix '.out' if it exists, and possibly contains the full path name
to that output file's directory. The default path name to another output file type such as
*INDEX-OUT is this output root name with a unique suffix appended.
User's Guide STARS
Input Restart: The filename for file type *INDEX-IN may be entered via prompting,
*FILENAME or the command line; its filename must end with the suffix '.irf'. The input
restart root name is this filename minus the suffix '.irf' if it exists, and contains the full path
name to that file's directory. The default path name to another input restart file type such as
*MAIN-RESULTS-IN (presumably in the same directory as the input restart file) is this root
name with a unique suffix appended.
The source of default filename for each file type is summarized here:
File Type
Root Based On
Suffix
*OUTPUT
*INDEX-OUT
*MAIN-RESULTS-OUT
*REWIND-OUT
*GEOMECHOUT
*MAIN-RESULTS-IN
*REWIND-IN
input data
*OUTPUT
*OUTPUT
*OUTPUT
*OUTPUT
*INDEX-IN
*INDEX-IN
.out
.irf
.mrf
.rrf
.geo
.mrf
.rrf
Note that the stripping of directory path name information occurs only for file systems with '/'
or '\' directory delimiters (UNIX and DOS).
With this defaulting system, the user is able to perform a series of 'bootstrapped' restart runs
by changing only the *INDEX-IN filename for each run.
Example #1:
Data file is 'cycle.dat'. *OUTPUT default is 'cycle.out', *INDEX-OUT
default is 'cycle.irf' and *MAIN-RESULTS-OUT default is 'cycle.mrf'.
Example #2:
The first run segment is performed with the command "stars.exe -f run1.dat",
and the output files are 'run1.out', 'run1.irf' and 'run1.mrf'.
For the second run segment, copy 'run1.dat' to 'run2.dat'.
Among other changes to 'run2.dat', add the *RESTART keyword. Submit
with "stars.exe -f run2.dat -r run1". The output files are 'run2.out', 'run2.irf'
and 'run2.mrf'.
In fact, the SR2 file 'run2.irf' refers to 'run1.irf' as its PARENT. When you
look at 'run2' with RESULTS and the Report Writer, the first part of the well
and special histories are found automatically in the 'run1' SR2 files.
For smaller data files it is advisable to keep separate copies of each restart
run, as above. However, for large data files this may not be practical; you can
comment out "inactive" data lines. Also, you can move large static parts of
data files to outboard files and use the *INCLUDE facility, thereby changing
only the smaller master file.
*DIM
PURPOSE:
Over-ride default dimension estimates based on the preliminary data scan.
FORMAT:
*DIM
( *DIMSUM )
( *MDPTGL mdptgl )
( *MDICLU mdiclu )
( *MDJCM mdjcm )
( *MDCALP mdcalp )
( *MDALP mdalp )
( *MDV mdv )
( *MDDD mddd )
( *MDLU mdlu )
( *MDPTCN mdptcn )
( *MD-GM-DBINT mdgrig )
( *MD-GM-DBREAL mdgrrg)
DEFINITIONS:
*DIMSUM
Enables detailed report of dimensioning parameters and storage
requirements, written to the screen or diary file if redirected. This report can
be enabled also with command-line argument '-dimsum'. See "Run-Time
Dimensioning" at the beginning of this chapter.
mdptgl
Maximum number of global completion layers expected. Over-ride this quantity
only if the automatic estimation process fails.
mdiclu
Maximum number of solver fill connections expected. Over-ride this quantity
only if the automatic estimation process fails. See Solver Matrix Fill in
EXPLANATION, below.
mdjcm, mdcalp, mdalp, mdv, mddd, mdlu
Matrix solver dimension parameters. Over-ride only if necessary. See Other
Matrix Solver Dimensions in EXPLANATION, below.
mdptcn
Maximum number expected for the sum of interblock connections and well
completion layers. Over-ride this quantity only if the automatic estimation
process fails.
mdgrig
Dimension of Grid Module integer data base.
mdgrrg
Dimension of Grid Module real data base.
DEFAULTS:
If *DIM *DIMSUM is absent, and the command-line argument '-dimsum' is absent, the detailed
report is not enabled.
Each of the other *DIM subkeywords defaults independently to the value obtained from the
data scan.
EXPLANATION:
Run-time dimensioning in STARS is designed to obtain all its needed information for storage
allocation from a preliminary scan of the data. However, it is possible that several
dimensioning parameters may be insufficient after this scan, in which case the user may enter
values directly via *DIM subkeywords.
See also Optimizing Memory Requirements in the TUTORIAL chapter.
Solver Matrix Fill
Dimensioning for the matrix solver arrays is complex, and has been automated to a large extent.
However, two quantities may need manual over-rides under certain circumstances: *MDICLU
and *MDLU which correspond to matrix "fill". These determine the sizes of the largest solver
arrays, which together can make up over half of the total STARS storage requirement.
Normally, estimates for *MDICLU and *MDLU from the data scan are sufficient for default
values of matrix solver controls *SORDER, *SDEGREE (1 and *GAUSS) and *MAXLAYPRE.
When the estimates are not sufficient, STARS issues messages in the output (.out) file along with
a brief message in the diary (screen or log file). From these messages the user obtains the required
values for these quantities, and enters them via keywords *DIM *MDICLU. The keyword
*OUTSOLVR allows you to examine solver storage requirements at any time.
The internal estimate for *MDICLU is obtained in stages, first for the grid (without wells) and
then for the grid plus each set of active wells defined by each recurrent data segment. Since
notification of insufficient *MDICLU (or *MDLU, for that matter) can occur in any of these
places, the activation of large wells at later times can cause the run to stop part way through. A
restart with increased *MDICLU should work. This will be especially true for higher
*SDEGREE and *MAXLAYPRE where wells induce significant matrix fill. Keyword
*OUTSOLVR is useful in finding what value of *MDICLU is required (remember to add at
least 1 to the value reported). It is advisable to use keyword *CHECKONLY to detect
insufficient dimensioning before a large run is submitted.
Note that for *SDEGREE greater than 1 the error message does not indicate the required
value of *MDICLU. In this case, use *DIM *MDICLU to enter double the initial estimate,
use *OUTSOLVR to examine the actual requirement, and re-enter *MDICLU with at least
the required value.
*CHECKONLY
PURPOSE:
Enable scan mode for checking of entire data.
FORMAT:
*CHECKONLY
DEFAULTS:
If this keyword is absent, timestep calculations
EXPLANATION:
Normally (i.e., without *CHECKONLY), syntax, storage allocation and range checking of
data is done as it is read. Initialization data (all but recurrent) is processed at the beginning of
the run, so errors in that part of the data are detected and reported immediately.
However, recurrent data is read when it is needed, as the simulation time progresses.
Therefore, errors in recurrent data will be detected and reported later in the run. This can be
inconvenient for large runs. Keyword *CHECKONLY allows you to scan your entire data set
to the end very quickly so that data errors are detected and reported immediately.
In fact, the only part of the simulation not done in scan mode is the time step calculation. This
means that all the reading, storage allocation, checking, echoing, printing and SR2 dumping
are done. For example, you can view the initial conditions, and hence your grid, in RESULTS
from an SR2 generated by a scan mode run.
It is recommended that you keep near the top of your data set a line consisting of
*CHECKONLY. Normally this keyword is disabled (commented out). You can quickly
enable the keyword and run the data in scan mode. Remember to disable the keyword before
submitting the actual run.
A license is not required to run STARS in scan mode, allowing you to validate data while
your licenses are occupied running simulations.
PURPOSE:
Identify the project and individual run cases with titles and comments.
FORMAT:
string
string
string
string
*TITLE1
*TITLE2
*TITLE3
*CASEID
DEFINITIONS:
*TITLE1
*INUNIT, *OUTUNIT
PURPOSE:
*INUNIT specifies the input data units.
*OUTUNIT specifies the output data units.
FORMAT:
*INUNIT ( *SI | *FIELD | *LAB )
{ *EXCEPT qnty_no unit_no }
*OUTUNIT ( *SI | *FIELD | *LAB )
{ *EXCEPT qnty_no unit_no }
DEFINITIONS:
*INUNIT
Indicates that the following unit identifiers are for input data units.
*OUTUNIT
Indicates that the following unit identifiers are for output data units.
*SI
This option specifies the SI unit system (see UNITS TABLE, below).
*FIELD
This option specifies the FIELD unit system (see UNITS TABLE, below).
*LAB
This option specifies the LAB unit system (see UNITS TABLE, below).
*EXCEPT
This option allows alternate input units for selected quantities.
qnty_no
Quantity number from the list below.
unit_no
Unit number from the list below.
DEFAULTS:
If *INUNIT is absent, then *INUNIT *SI is assumed. If *OUTUNIT is absent, the output
units will be the same as the input units.
EXPLANATION:
Each dimensioned quantity in this manual appears with at least two unit labels:
the first set in the *SI system,
the second set in the *FIELD system,
and the third set in the *LAB system (if different from *SI).
For example, the unit of mass density is reported as
( kg/m3 | lb/ft3 | kg/cm3 )
where
kg/m3
lb/ft3
kg/cm3
corresponds to *SI,
corresponds to *FIELD, and
corresponds to *LAB.
The unit actually used is determined by the choice of *SI, *FIELD or *LAB after *INUNIT.
Defaults may appear in the text of this manual in *SI unit only, but they will be converted to
and echoed in your chosen units at run time.
In addition to the three unit systems, selected quantities can be given units different from
those implied by the keywords *SI, *FIELD, or *LAB through use of the *EXCEPT
keyword. For example, to use degrees F instead of C with the *SI system, put
*INUNIT *SI *EXCEPT 2 2 ** use F, not C
Once the unit set is specified via *INUNIT, including exceptions to the unit system via
*EXCEPT, that set must be used consistently throughout the data. There is no facility to enter data
in one unit system in one part of the data, and another unit system in another part of the data.
In contrast, *OUTUNIT can be changed freely from one run to the next of the same data,
since it affects only the output and not the input data. In any one run, the output unit set
chosen will be applied consistently throughout the output.
Information stored in the SR2 files are in STARS internal units, and so are independent of the
output units chosen. However, the Index Result File (IRF) records the chosen output units for
the run, and uses these as the default output units when post -processing (graphing or report
generating) is done.
*SI
days
deg C
kPa
m
m3
md
kg
gmole (kg)
cp
Joules
m3
m3
dyne/cm
V (volts)
A (amperes)
kW (103 Watts)
siemens/m
*FIELD
days
deg F
psi
ft
ft3
md
lb
lbmole (lb)
cp
Btu
ft3
ft3
dyne/cm
V
A
kW
siemens/m
*LAB
minutes
deg C
kPa
cm
cm3
md
kg
gmole (kg)
cp
Joules
cm3
cm3
dyne/cm
V
A
kW
siemens/m
qnty_no
Time
days
hr
min
yr
Temperature
deg K
deg C
deg F
deg R
Pressure
kPa
psi
atm
bar
Distance
ft
cm
Volume
m3
ft3
bbl
cm3
Permeability
darcy
micro-m2
md
Mass
kg
lb
Molar Mass
gmol
lbmol
Viscosity
kPa-day
kPa-hr
Energy
10
BTU
11
m3
ft3
bbl
Interfacial Tension
12
kPa-m
N/m
dyne/cm
13
m3
ft3
bbl
kg/cm2
cp
cm3
cm3
*MASSBASIS
PURPOSE:
*MASSBASIS enables the mass basis option.
FORMAT:
*MASSBASIS
DEFINITIONS:
*MASSBASIS
Component property data is based on mass, that is, each instance of unit
Molar mass is interpreted as mass (kg or lb).
DEFAULTS:
If keyword *MASSBASIS is absent then the component property data is based on moles, that
is, each instance of unit Molar mass is interpreted as moles (gmole or lbmole).
CONDITIONS:
The *MASSBASIS option should not be used when any component vapourizes, since the
vapour/liquid K value needs to use the mole fraction definition. This is especially true of
steam processes. To find how to disable the default vapourization of water components, see
the DEFAULTS section of manual page K Value Correlations (keywords *KV1, etc.).
Viscosity option *GVISCOR cannot be used together with *MASSBASIS.
EXPLANATION:
In some chemical flood processes it is desirable to work with composition in mass fraction
instead of mole fraction (the default). For example, when the component set includes a
polymer of very large molecular weight, the corresponding mole fraction is very small, and
mixing rules based on mole fraction weighting may no longer be appropriate.
Keyword *MASSBASIS causes almost every instance of moles for data entry to be
interpreted as mass. Component properties are on a per mass basis, and K values are defined
as the ratio of phase mass fractions instead of mole fractions. Phase compositions are reported
in mass fraction. Reaction stoichiometric coefficients are based on mass.
The Manual entry for each component contains a generic definition of its unit. For example, the
density unit is (molar mass/volume); molar mass is interpreted according to the mole/mass
basis. In SI units this density will have unit gmol/m3 normally, but has unit kg/m3 under
*MASSBASIS.
One exception is the definition of molecular weight, which must retain the unit (mass/mole),
i.e., (kg/gmole) in SI units and (lb/lbmole) in field units. The other exception is reaction
activation energy *EACT which retains its per-mole unit.
If the mass basis option is used, keyword *MASSBASIS must appear before *OUTPRN and
*OUTSRF since it affects the default unit of concentration and composition output quantities.
*RESTART, *RESTIME
PURPOSE:
Specify the starting timestep or time.
FORMAT:
*RESTART
*RESTIME
(nstart)
restime
DEFINITIONS:
nstart
Timestep number from which to restart the simulation.
restime
Time (days | days | mins) from which to restart the simulation. This option
works best when restime corresponds to a simulation reference time specified
via *TIME or *DATE in the recurrent data section of the previous run. Also,
restime may be a non-reference time but it must match the time of the target
restart record within the first 7 decimal digits. Use *RESTART when
*RESTIME picks incorrectly from a group of records whose times do not
differ in the first 7 digits. The command line argument -restime is another
way to enter restime.
DEFAULTS:
If *RESTART and *RESTIME are absent, no restart records are read, and the first timestep
number is 1.
If *RESTART is present without nstart, the last restart record in *INDEX-IN is used.
CONDITIONS:
If *RESTART or *RESTIME is present, then the restart files denoted by *INDEX-IN and
*MAIN-RESULTS-IN (and possibly *REWIND-IN) are required and must contain the
restart record corresponding to the specified time or timestep number.
EXPLANATION:
See How To Do a Restart in the Tutorial section.
*WRST, *REWIND
PURPOSE:
*WRST and *REWIND control the frequency of writing and rewinding restart records in the
output restart file.
FORMAT:
*WRST ( freq | *TIME | *TNEXT )
*REWIND (num)
DEFINITIONS:
freq
A restart record is written at each time step number evenly divisible by freq,
as well as each subsequent *DATE or *TIME in recurrent data. If freq is
zero a restart record is not written.
*TIME
A restart record is written at each subsequent *TIME or *DATE in recurrent
data. This is equivalent to specifying a large freq.
*TNEXT
A restart record is written only for the next recurrent data time after which
writing is disabled, resulting in one restart record per keyword occurrence.
This option is useful when writing restarts at infrequent but known times in
recurrent data.
num
The maximum number of restart records allowed to accumulate on the restart
file before it is rewound. If num = 0 then no rewinding is done. If num = 1,
then only the last written restart record will be available.
DEFAULTS:
If *WRST is not present, no restart is written. If *WRST is not followed by freq, *TIME or
*TNEXT, then *WRST *TIME is assumed.
If *REWIND is not present the restart file is never rewound. If *REWIND is present but
num is absent, then num = 1 is assumed.
CONDITIONS:
*WRST may appear also in recurrent data to vary the frequency or time of restart record
writing with time.
EXPLANATION:
Restart records store a "snap-shot" of reservoir conditions at a particular time. Using a restart
record you can restart a simulation from some mid point in a run. This allows you to try
different well production strategies, produce more detailed output, or make other changes
without the expense of repeating the entire simulation run.
114 Input/Output Control
Examples:
*WRST 10 ** Write restart record every 10 time steps.
*WRST
** Write restart at the every time change.
*WRST *TNEXT ** Write restart at next *TIME/*DATE only.
*REWIND 3 ** Rewind restart file every 3 restarts.
Examples of entire data sets using the restart option can be found in directory "restart" in the
STARS template release area.
A Quick Restart Check
To find out quickly at what time steps a restart was written in a simulation, use your text
editor to look in the SR2 index file which has filename suffix ".irf". A time step with a restart
written produced the following lines in the IRF generated by the test data "rrfa.dat" in the
template directory "restart":
TIME 21
10.0000000000 19731005
TIMCHR '
10.00000 days' ' 5 Oct 1973'
FILE 2
REWIND 2
RESTART-CONTROL ( 3 ) 8 1 2 0 1
RESTART ( 34 ) IFLGGN . . .
FILE 1
WELL ( 2 ) 1 2
GROUP ( 2 ) 1 2
SPEC-HISTORY ( 1 ) SPVALS /
GRID-VALUE ( 3 ) PRES SG TEMP /
TIME indicates the timestep number and the simulation time and date. RESTARTCONTROL and RESTART must be present before a restart can be read from that time step.
FILE and REWIND are present only when the *REWIND option was used. REWIND
indicates that the restart file was rewound which means that all restarts up to that point are
lost. Therefore, only the restart records after the last REWIND will be accessible.
*WPRN
PURPOSE:
*WPRN controls the frequency of writing to the output print file information flagged by
*OUTPRN.
FORMAT:
*WPRN ( *GRID | *ITER ) ( freq | *TIME | *TNEXT )
*WPRN *SECTOR ( freq | *TIME )
DEFINITIONS:
*GRID
Pertains to the conditions of the reservoir and fluids in it, as well as the
detailed well performance report.
*ITER
Pertains to the brief well rate report as well as simulator performance, e.g.,
material balance.
*SECTOR
Pertains to statistics reported by sector. Sector statistics are written either not
at all (freq = 0) or at the same times as *GRID.
freq
Write indicated results to the output file at time step numbers evenly
divisible by non-negative integer freq. If freq = 0, no results are written.
*TIME
Write indicated results to the output file at every time specified by
subsequent recurrent *TIME or *DATE keywords in the input file.
*TNEXT
Write indicated results to the output file only at the next time specified by
*TIME or *DATE in recurrent data.
DEFAULTS:
If *WPRN *GRID is absent or is not followed by a valid sub-option, *WPRN *GRID *TIME
is assumed. This applies to *ITER as well.
If *WPRN *SECTOR is absent, no sector statistics are written to the output file.
CONDITIONS:
This keyword may appear in the INPUT/OUTPUT CONTROL keyword group and may also
occur as part of recurrent data. Thus, the amount of detail in the print file may be changed
during the simulation.
EXPLANATION:
Examples:
** Write grid results every 10 time steps.
*WPRN *GRID 10
Aquifer:
Averages:
In-place:
Heaters:
Surface-condition volumes are component masses over surface densities, summed over the
components found in each phase at surface conditions (see keyword *SURFLASH).
*OUTPRN, *PARTCLSIZE
PURPOSE:
*OUTPRN identifies what information is written to the output print file at a frequency given
by *WPRN.
*PARTCLSIZE provides the properties required to print out in some optional units.
FORMAT:
*OUTPRN *GRID ( *ALL | *NONE | (*REMOVE) item_list )
*OUTPRN *WELL ( *ALL | *NONE | well_var )
*OUTPRN *ITER ( *BRIEF | *NEWTON | *UNCONV | *TSS | *NONE )
*OUTPRN *RES ( *ALL | *NONE | *ALLSMALL )
*PARTCLSIZE vol
*AQSTAT ( *ON | *OFF )
DEFINITIONS:
*GRID ( *ALL | *NONE | (*REMOVE) item_list )
This subkeyword causes the specified grid quantities (one value for each grid
block) to be written to the .out file at times determined by *WPRN *GRID.
Generally, each item on the PRN_GRID list is flagged for writing as either
enabled or disabled. The simulation starts with all items disabled. Use
item_list (keywords in the PRN_GRID list) to enable individual items, or use
*ALL to enable all items. Use *REMOVE with item_list to disable
individual items, or use *NONE to disable all items.
Enabling PRN_GRID items for writing can increase the size of the .out file.
Some items cause writing of more than one set of block values. An item
whose description starts with component will write one set for each
appropriate component. The availability of some items depends on the use of
other keywords or options.
PRN_GRID List
The PRN_GRID list consists of the following properties and quantities.
Compositions Y, X, W and Z are mole fraction normally but are mass
fraction when *MASSBASIS is used. For Y, X and W see Mole Fractions
of Absent Phase in EXPLANATION.
PRES:
SW:
SO:
SG:
TEMP:
Y:
X:
W:
Z:
BPP:
OBHLOSS:
CCHLOSS:
CCHLOSSCUM
HEATCAP:
VPOROS:
FPOROS:
POREVOL:
VISW:
VISO:
VISG:
KRW:
KRO:
KRG:
PCOW:
PCOG:
MOLDENW:
MOLDENO:
MOLDENG:
MASDENW:
MASDENO:
MASDENG:
RFW:
RFO:
RFG:
FRCFLOW:
KRINTER:
IFT:
CAPN:
LOGIFT:
LOGCAPN:
FLUIDH:
WATERHEAD:
AQWATCUM:
AQWATRATE:
AQHEATCUM:
AQHEATRATE:
IMEXMAP:
THCONDUCT:
VERDSPLPOR:
SUBSIDPOR:
SBDZ:
mole fraction
mass fraction
parts per million
volume fraction
molarity
pH = 14 + log10(molarity)
particles per phase volume (see *PARTCLSIZE)
ELCONDUCT:
ELPOTENT:
ELPOTENTI:
ELPOTMAG:
ELPOTPHS:
For notes on well layer reports for discretized wellbores, see Reporting of
Flow Performance in the manual section of Discretized Wellbores in the
RESERVOIR DESCRIPTION chapter.
*ITER ( *BRIEF | *NEWTON | *TSS | *UNCONV )
This subkeyword specifies that the following iteration results will be printed:
BRIEF:
NEWTON:
TSS:
UNCONV:
*WSRF, *DYNGRDFREQ
PURPOSE:
Control the frequency of dumping information flagged by *OUTSRF to the SR2 output files.
FORMAT:
*WSRF ( *GRID | *WELL | *GRIDDEFORM ) ( freq | *TIME | *TNEXT )
*WSRF *SECTOR ( freq | *TIME )
*DYNGRDFREQ dynfreq
DEFINITIONS:
*GRID
Controls the frequency of writing information flagged by *OUTSRF *GRID.
Dumping *GRID information more frequently than the default can increase
the size of the SR2 files significantly.
*WELL
Controls the frequency of dumping information flagged by *OUTSRF
*WELL and *SPECIAL. Dumping history information less frequently than
the default will decrease the size of the SR2 files.
Since history information is needed when reading a restart record, it is always
dumped at a restart time, no matter what *WSRF *WELL option was used.
*SECTOR
Pertains to writing of statistics that are reported by sector. Sector statistics
are written either not at all (freq = 0) or at the same times as *WELL.
*GRIDDEFORM
Pertains to writing of information for grid deformation due to geomechanics
effects. Dumping *GRIDDEFORM information more frequently than the
default can increase the size of the SR2 files significantly.
freq
The indicated information is dumped to the SR2 if the timestep number is
evenly divisible by non-negative integer freq.
For *GRID, no results are written if freq = 0. A value of freq = 0 is not
allowed for *WELL.
*TIME
Dump indicated results to the SR2 files at every time specified by subsequent
recurrent *TIME or *DATE keywords in the input file.
*TNEXT
Dump indicated results to the SR2 at the single time specified by the next
*TIME or *DATE keyword in recurrent data.
*DYNGRDFREQ dynfreq
In addition to the times indicated by *WSRF *GRID, dump *GRID results to
the SR2 once for every dynfreq of the time steps at which a dynamic grid
change check is done as specified via keyword *DYNAGRID-TSINT. No
extra dumps are done if dynfreq = 0; a grid dump is done at all grid change
times if dynfreq = 1. This keyword is active only with the *DYNAGRID
feature. See the manual entry for *DYNAGRID in the Well and Recurrent
Data chapter.
DEFAULTS:
If *WSRF *GRID does not appear, then *WSRF *GRID *TIME is assumed.
If *WSRF *WELL does not appear, then *WSRF *WELL 1 is assumed.
If *WSRF *GRIDDEFORM does not appear, then no grid deformation information is
dumped to the SR2.
If *WSRF *SECTOR does not appear, then no sector statistics are dumped to the SR2.
If *DYNGRDFREQ is absent then dynfreq = 0 is assumed.
CONDITIONS:
This keyword may appear in the INPUT/OUTPUT CONTROL section as well as the
RECURRENT DATA section of your data. Thus, the amount of detail in the SR2 files may
be changed during the simulation.
Keyword *GRIDDEFORM is available only with *GEOMECH.
EXPLANATIONS:
To dump grid results every 10 time steps use *WSRF *GRID 10. To dump results at *TIME
or *DATE times only, use *TIME or a value of freq larger than the expected maximum
timestep number. To skip dumping *GRID results at *TIME or *DATE times, use *WSRF
*GRID 0 or *TNEXT before the desired time.
Visualizing Geomechanics Grid Deformation
Keyword *GRIDDEFORM allows the user to view grids in Results that deform with time as
calculated by the geomechanics module. This feature is available in Results only for cornerpoint grid type. STARS writes to the SR2 file grid definition data that tells Results the type,
structure and appearance of the grid. If the *GRIDDEFORM option is requested, STARS
tells Results that the grid is corner-point type and does any necessary conversion. If the user
specified *GRID *CART in data then the conversion is exact, that is, Results will draw an
initial grid that looks exactly like the users Cartesian grid. If the user specified *GRID
*RADIAL in data then the conversion at initial conditions is exact in the I-K (R-Z) plane
only. Several issues arise from this technique.
1. Initial conditions are plotted with the original grid whereas the converted grid is
used to display all subsequent times. For the radial grid case you may notice a
change in the grid when going from initial time to subsequent times.
2. For a converted 3D radial grid, circular arcs are replaced with straight lines
between block corners; for example, for ntheta = 3 the areal (I-J) plane appears as
a triangle instead of a circle. The angular direction of a 2D radial grid cannot be
displayed at all.
3. A converted 3D radial grid does not include the innermost radial block, so both
fluid-flow and geomechanics quantities cannot be viewed for that block. However,
the fluid-flow equations are still solved for that block.
4. Without *GRIDDEFORM the grid is displayed as "radial" and the innermost radial
block shows a value that is (1) correct for fluid-flow quantities and (2) an average
of surrounding block values for geomechanics quantities.
The writing of grid deformation information is controlled also by the frequency of
geomechanics updating specified by keyword *GCUPDATE in the Geomechanics section.
*OUTSRF,
VELOCSC:
STRAINSH:
STRAINSHIJ:
STRAINSHIK:
STRAINSHJK:
STRNMXP:
STRNMNP:
STRAINVOL:
VPOROSGEO:
VPOROSTGEO:
PORDIFF:
Shear strain
Shear strain on IJ plane
Shear strain on IK plane
Shear strain in JK plane
Maximum principle strain
Minimum principle strain
Volumetric strain
Reservoir porosity calculated from geomechanics module
True porosity calculated from geomechanics module
Difference between geomechanics and reservoir porosity
(VPOROSGEO minus VPOROS)
VERDSPLGEO: Vertical displacement up based on geomechanics
SUBSIDGEO:
Vertical displacement down (subsidence) based on geomechanics
VDISPL:
Vector of grid displacement (*GRID only)
For more on displacement outputs see EXPLANATION, below.
YLDSTATE:
Stress state
= 0 In Elastic state
= 1 On shear failure envelope
= 2 On the compressive cap
= 3 At the corner (intercept between cap and shear failure envelope)
= 4 On the tensile cutoff surface
BIOT:
Biots constant
GCOHESION:
Cohesion value
HARDENING: Hardening parameter
POISSON:
Poissons ratio
YIELD:
Yielding stress
YOUNG:
Youngs elastic modulus
ELCONDUCT:
ELCDENI
ELCDENM
ELCURDEN
ELCUR
ELCURDENI
ELCURI
*SPECIAL { special_his }
This subkeyword defines one or more special histories, each of which writes
a single value to the SR2 at times specified by *WSRF *WELL. Each
special_his may be one of the following:
BLOCKVAR srf_prop uba ( comp_name )
Property srf_prop in block uba, possibly for component comp_name.
srf_prop is from the SRF_GRID list. uba is a User Block Address. Valid
component name comp_name is required only when the srf_prop
description starts with component.
MAXVAR srf_prop ( comp_name )
Maximum over the entire grid of SRF_GRID item srf_prop, possibly
for component comp_name. See BLOCKVAR.
MINVAR srf_prop ( comp_name )
Minimum over the entire grid of SRF_GRID item srf_prop, possibly
for component comp_name. See BLOCKVAR.
AVGVAR srf_prop ( comp_name )
Average over the entire grid of SRF_GRID item srf_prop, possibly for
component comp_name. See BLOCKVAR.
WOR well ( INST | CUM )
Water-oil ratio for well based on rate (INST), the default, or
accumulation to date (CUM), where well is well name.
GOR well ( INST | CUM )
Gas-oil ratio for well based on rate (INST), the default, or
accumulation to date (CUM) , where well is well name.
DELP well1 well2
BHP of well1 minus BHP of well2, where well1 and well2 are well
names.
132 Input/Output Control
CCHLOSS
Net cumulative energy lost (-) or gained (+) by the constant/convective
heat transfer model.
DELPBLK uba1 uba2
Pressure in block uba1 minus pressure in block uba2.
CPUSRATE, CPUSCUM
CPUSRATE gives CPU seconds per simulation time over individual
time steps. CPUSCUM gives accumulated CPU seconds from the start
of time stepping, starting at zero for both restart and non-restart runs.
PHWELL well quantity ( SURFACE | DOWNHOLE )
well is well name; quantity can be TEMP (fluid temperature), PRES
(fluid pressure) or STQUAL (steam quality). Values may be obtained
at the surface or at the downhole entrance to the portion of the well
modelled by *PHWELLBORE.
WELL_LAYER well uba quantity
well is well name; uba is a User Block Address that appears in the
perforation list of well; quantity can be:
TEMP
fluid temperature from *HEAD-METHOD *GRAVFRIC-HLOS method
STQUAL
steam quality from *HEAD-METHOD *GRAVFRIC-HLOS method, injectors only
LEPDIFRATE Critical LEP rate minus actual, LEP injectors only
FRACIMPES
FRACIMPES gives fraction of active blocks that are IMPES. See
*AIM in Numerical Control section.
AQFRTOT ( WATER | HEAT ) ( RATE | CUM )
AQFRTOT gives aquifer flow statistics of either water or heat, either
rate or accumulation, over the entire grid. See keyword *AQUIFER.
Option HEAT is available only if keyword *HFPROP is used to enable
heat influx in the aquifer. HEAT actually reports fluid enthalpy which
is referenced to base temperature and phase (see *TEMR and *CPG1).
ELHEAT ( RATE | CUM )
Instantaneous rate in kW and accumulation in kW-hr of electrical heat
dissipated over the entire grid.
DEFAULTS:
If *OUTSRF *WELL is not present, the effect is
1. only volumes are written (not moles or mass),
2. only surface conditions are written,
3. only phases are written (not components), and
4. only well totals are written (not layers).
After *OUTSRF *WELL:
1. if *MOLE and *MASS is absent, only volumes are written,
2. if *DOWNHOLE is absent, only surface condition performance is written,
3. if *COMPONENT is absent, no individual component performance is written, and
4. if *LAYER is absent, no individual layer performance is written. To get the default
action of versions earlier than 96, use *COMPONENT *ALL, *LAYER *ALL,
and *MOLE or *MASS when needed.
If *OUTSRF *SPECIAL is not present, no special histories will be written.
The special units specified in a previous usage of *OUTSRF apply unless overwritten.
If *SR2PREC is absent, then *SR2PREC *DOUBLE is assumed.
If *SRFASCII is absent, then no textual copy of the binary SR2 file is written.
If *XDR is absent, then *XDR *ON is assumed.
If *DYNSR2MODE is absent then *DYNSR2MODE *STATIC is assumed.
CONDITIONS:
*OUTSRF *GRID may appear in the I/O CONTROL data group, in which case it applies to
initial conditions. It may also appear anywhere in the recurrent data, such that the amount of grid
detail dumped may be controlled. Initial conditions can be dumped without doing any time steps,
and viewed, by using *CHECKONLY.
*WELL and *SPECIAL may occur in only the I/O CONTROL section.
Special history definitions should not be changed or removed at a restart. Special history
definitions are read from the data file, not the restart, so a change made to a special history
definition may result in a change in meaning of that quantity. A special history added at a
restart will be ignored by RESULTS Graph. Each special history definition must appear
either immediately after *OUTSRF *SPECIAL or on a subsequent new line.
When the geomechanics module (*GEOMECH) is used, geomechanical properties such as
*BIOT, *GCOHESION, *HARDENING, *POISSON, *YIELD and *YOUNG are available
but are dumped only at the start of a simulation.
EXPLANATION:
An example of *OUTSRF *GRID is
*OUTSRF *GRID *OILSAT *GASSAT *WATSAT *PRES
Save the history of coke concentration in block #20 in mass and moles
*OUTSRF *SPECIAL *BLOCKVAR *MASS *SOLCONC 6 20
*BLOCKVAR *MOLE *SOLCONC 6 20
Quantity
Basis
Sign
Special History
VERDSPLPOR
SUBSIDPOR
VERDSPLGEO
SUBSIDGEO
VDISPL (K-dir)
Porosity
Porosity
Geomechanics
Geomechanics
Geomechanics
+ is up
+ is down
+ is up
+ is down
+ in *KDIR
yes
yes
yes
yes
no
rows
0
1
2
3
4
5
6
columns
planes
I
I
K
K
J
J
K
J
J
I
K
I
ijkord
Axis reversal flag for printing out grid variables. The allowed range is 0 to 8.
Effect of ijkord is:
ijkord
0
1
2
3
4
5
6
7
8
rows
columns
planes
normal
normal
reversed
reversed
normal
normal
reversed
reversed
normal
reversed
normal
reversed
normal
reversed
normal
reversed
*PRINT_REF
Allows the user to enable and disable the printing of values requested via
*OUTPRN *GRID for the fine grids as well as the fundamental grid values.
*ON enables the printing, and *OFF disable it.
142 Input/Output Control
DEFAULT:
If *PRNTORIEN is absent then *PRNTORIEN 0 0 is assumed, giving the most compact
printout with the bottom of the reservoir toward the page bottom.
If *PRINT_REF is absent then *PRINT_REF *ON is assumed. If *PRINT_REF is present
but neither *ON nor *OFF follow it, then *PRINT_REF *ON is assumed.
EXPLANATION:
When grid variables are printed in the output, axes for up to three dimensions are required.
One axis direction is along the horizontal rows. Another axis direction is along the vertical
columns. The remaining axis is printed as planes containing the rows and columns of the first
two axes. Normally, the I, J and K axes are oriented on the printout to give the most compact
result. In some cases it may be necessary or desired to change this default printout orientation
using 'irotat'.
Normally, ordering along the rows is with the axis indices increasing from left to right;
ordering along the columns and planes is with the axis indices increasing down the page. In
some cases it may be necessary to reverse the order for one or more of the axes using 'ijkord'.
HINT: *PRNTORIEN 1 1 causes grid arrays to be written to the output file in "standard"
order, corresponding to the *ALL grid array input option. To use output of one run as input
for another, use *PRNTORIEN 1 1, copy and paste the desired data to the new data file, and
delete the "K=", "J=" and "I=" axis annotations.
*OUTSOLVR
PURPOSE:
*OUTSOLVR controls printout of detailed results from the matrix solving package
AIMSOL.
FORMAT:
*OUTSOLVR ( *ON | *OFF )
DEFAULT:
The default is *OUTSOLVR *OFF.
EXPLANATION:
The actual number and dimension value of many pertinent quantities such as interblock
connections used by the simulator will be shown. These numbers may be used to create
common storage that will optimize the use of available storage capacity. See the tutorial
Optimizing Memory Requirements.
Also printed are details of the residual reduction iterations taken by the linear solver.
*INTERRUPT
PURPOSE:
Specify the action taken when an interrupt signal is detected.
FORMAT:
*INTERRUPT ( *INTERACTIVE | *STOP | *RESTART-STOP )
DEFINITIONS:
*INTERACTIVE
Prompt the user interactively for instructions. Choices corresponding to
*RESTART-STOP and *STOP
*STOP
Terminate the simulation run immediately. The current timestep is not
completed, but the output files are closed to prevent file corruption.
*RESTART-STOP
Complete the current timestep, write all output specified by *OUTPRN and
*OUTSRF, write a restart record and stop the run.
DEFAULTS:
If *INTERRUPT is absent, or if *INTERRUPT is present but none of the subkeywords is
present, then *INTERACTIVE is assumed.
EXPLANATION:
An interrupt can be sent to a running STARS program in two ways:
1. Typing "control" and "c" together will interrupt the current interactive process: on
UNIX it will interrupt immediately; on PC the interruption occurs after the current
time step is finished.
2. The UNIX command "kill -2 pid" will interrupt the process with ID "pid" (usually
in background).
Interrupt handling is used to ensure that files are closed normally when a user aborts a run.
Some platforms do not flush output file buffers upon an interrupt, and without interrupt
handling some of the output would be lost.
*NOLISTLIM
PURPOSE:
Control the detailed echoing of input data.
FORMAT:
*NOLISTLIM
DEFINITIONS:
*NOLISTLIM
Removes limit on number of data lines echoed for each grid array keyword.
DEFAULTS:
If *NOLISTLIM is absent, then grid array keyword data is limited to 20 echoed lines.
EXPLANATION:
Data lines from the input data file are copied, or echoed, to the text output file as they are
read (if keyword *NOLIST is absent). For field-scale grids the number of data lines
associated with grid and reservoir definition can be very large, especially for corner point
grids and properties generated by other software packages (e.g., from maps). In addition, this
echoed data is not needed after it has been debugged.
In order to keep the text output file to a reasonable size, the default action is to limit to 20 the
number of echoed data lines per grid-based input data. For example, porosity keyword *POR
would have at most 20 lines echoed. This limit applies to each keyword separately.
Keyword *NOLISTLIM allows you to defeat this limiting of echoed data lines. It is
recommended that this keyword be used only for debugging data, and that it be removed for
production runs.
Reservoir Description
Cartesian
ii) Radial
iii) Variable depth/thickness
b) Corner Point
For the FD grid option, the following keywords are required:
*GRID
*DI
*DJ
*DK
9-point option.
Specify the dip angles in the I and J direction.
Using refine grid options.
Volume and area modifier option.
For specifying null blocks.
In this case the dip angles are assumed to be zero. *DTOP can be used in conjunction with
the fluid initialization keywords *DWOC, *DGOC and *REFDEPTH.
Fractured Reservoir Option
The options available for fractured reservoir simulation are specified by one of the following
keywords:
*DUALPOR *DUALPERM *MINC *SUBDOMAIN
The fracture spacing in each of the coordinate directions are specified with the keywords:
*DIFRAC *DJFRAC *DKFRAC
Discretized Wellbore Option
This option models the wellbore with grid blocks whose equations are solved simultaneously
with the reservoir flow equations. This option is invoked by the *WELLBORE keyword. A
circulating well can be specified with the subkeyword *CIRCWELL such that both the tubing
and the annulus are discretized.
Discretized Wellbore in Hybrid Grid
In order to model effectively the single-well SAGD (Steam Assisted Gravity Drainage) process,
the wellbore needs to be connected directly to blocks above it and below it, allowing steam to rise
and liquid to migrate in from the bottom at the same time. This is accomplished by embedding the
discretized wellbore inside a hybrid-refined grid. See the detailed explanation for *WELLBORE.
Rock Properties
The porosity, permeability, and transmissibility modifiers of the reservoir are specified by the
keywords:
*POR
*PERMI, *PERMJ, *PERMK
*TRANSI, *TRANSJ, *TRANSK, *TRANLI, *TRANLJ, *TRANLK, *TRANSMF
The qualifier *MATRIX and *FRACTURE are used to distinguish between matrix and
fracture properties for the fractured reservoir options. The qualifier *RG refers to refined grid
blocks when the *REFINE, *MINC, *SUBDOMAIN and *WELLBORE options are used.
Corner Point Grid
There are several ways to define a corner point grid, some using the same grid-size keywords
as the Cartesian grid. See the descriptions for keywords *ZCORN, *XCORN, *YCORN,
*COORD and *CORNERS. Note that for a corner point grid *KDIR *DOWN is assumed
and *UP is not available.
Zero-Porosity Blocks
STARS has two kinds of blocks with no porosity:
1. Null block for which no equations are solved. This block type may be specified
via keyword *NULL or *VATYPE. In isothermal mode, this block type is
specified also via zero porosity or permeability values. For example, it is common
in isothermal mode to model a shale barrier between pay zones as a layer of null
blocks or simply as a fluid transmissibility barrier between adjacent pay-zone grid
layers. In thermal mode, null blocks commonly result from the definition of a
symmetry element of a repeating pattern, e.g., one-eighth nine-spot. Each null
block requires almost no array storage. No fluid properties are reported for a null
block.
2. Heat block which may contain and conduct heat, and for which only the energy
equation is solved. This block type is available only in thermal mode and is
specified via zero porosity or permeability values. For example, a shale barrier
may store heat as well as conduct heat between pay zones. Compared to the
isothermal treatment, in thermal mode this method is required when the thickness
of the shale layer is not small compared to the adjacent pay zone grid layers. Each
heat block requires as much array storage as a fully active block. Only heat and
temperature related fluid properties are reported for a heat block.
In general, STARS treats zero-porosity grid data the same as IMEX and GEM only when
STARS is run in isothermal mode. When STARS is run in thermal mode (the default), then
care must be taken to account for the intention of the original data. Note that the most
common way to specify null blocks in the original data (zero porosity and permeabilities,
especially from map-reading software) will translate by default in STARS thermal mode to
heat blocks. This is the most accurate but most expensive treatment, so the user may need
to change the ported grid data to force these blocks to be null.
Aquifer Models
Aquifer water-influx models may be defined, based on Carter-Tracy or Fetkovitch treatments
as in IMEX or based on the previously available semi-analytical method. Keyword data from
IMEX may be ported directly. Only one keyword is needed to add thermal treatment to any
water influx method.
Porting Grid Data from IMEX and GEM
Most grid-definition data can be ported directly from the CMG simulators IMEX and GEM.
However, IMEX and GEM may support some keywords in their Reservoir Description
sections (e.g., lease options) that are not supported by STARS.
STARS supports some keywords in its Reservoir Description section that are not supported
by IMEX or GEM:
*VAMOD, VATYPE (geometry modifiers)
*WELLBORE (discretized wellbore)
*NINEPOINT, *NINEPTH
Grid Type
*GRID, *KDIR
PURPOSE:
*GRID indicates the beginning of input of the reservoir conditions.
FORMAT:
*GRID ( *CART | *VARI | *CORNER ) ni nj nk
*GRID *RADIAL ni nj nk ( *RW rw )
*KDIR ( *UP | *DOWN )
DEFINITIONS:
*CART
Keyword indicating rectangular Cartesian grid.
*VARI
Keyword indicating a rectangular grid allowing variable depth/variable
thickness layers.
*CORNER
Keyword indicating a corner point grid, as described below. *KDIR *UP is
not available with *CORNER.
ni
Number of grid blocks in I direction. For *RADIAL grids, ni must be
greater than 1.
nj
Number of grid blocks in J direction.
nk
Number of grid blocks in K direction.
*RADIAL
Keyword indicating radial-angular cylindrical grid.
*RW rw
Specifies the radius (m | ft | cm) of the innermost block boundary; the radial
blocks will start this far from the grid center. The value 0 is allowed.
*UP
Indicates that the K direction points UP, putting layer 1 at the bottom of the
reservoir. Not available with *GRID *CORNER.
*DOWN
Indicates that the K direction points DOWN, putting layer 1 at the top of the
reservoir.
150 Reservoir Description
DEFAULTS:
If *RW is absent after *GRID *RADIAL, then a radius of 8.6 cm is assumed.
If *KDIR is absent, *KDIR *UP is assumed (except for *CORNER).
CONDITIONS:
*GRID is a required keyword, and must be the first keyword in the RESERVOIR
DESCRIPTION section. A radial grid requires ni > 1.
EXPLANATION:
*GRID defines the grid type and the number of fundamental grid blocks within this system.
Examples:
a) Rectangular Cartesian grid with ten blocks in the "x" direction, five blocks in the
"y" direction, and four blocks in the "z" direction (ni=10, nj=5, nk=4). Enter:
*GRID *CART 10 5 4
b) Cylindrical grid with fifteen blocks in the radial direction, three block in the theta
direction, and five blocks in the vertical direction (ni=15, nj=3, nk=5)
*GRID *RADIAL 15 3 5
The innermost radial block of a radial grid is not discretized in the angular direction. In the
example above, the radial block i = 1 has only one angular subdivision j = 1 which is
connected to all three angular blocks for the next outer radial row i = 2. This means that i = 1
has only j = 1, but i = 2 to 15 has j = 1, 2 and 3. The result is that the center well is connected
to only one block for each k layer.
I, J, and K are used to indicate directions regardless of the grid type used.
Grid Type
*CART
*VARI
*CORNER
*RADIAL
x
x
x
r
y
y
y
theta
z
z
z
z
The K index can be made to increase downward or upward by using the *KDIR keyword.
The grid can be tilted by use of the *DIP keyword.
An untilted *UP coordinate system appears as:
K
90 o
Gravity
*KDIR *UP
Gravity
K=3
K=2
K=1
I=1
I=2
I=3
I=4
*KDIR *DOWN
Gravity
K=1
K=2
K=2
I=1
I=2
I=3
I=4
Corner Point:
Corner point grids are made up of blocks each defined by their eight corner points. Each
corner point is described by giving its three coordinates: an "x"-, "y"- and "z"-coordinate,
which gives its location in the reservoir. The "x"- and "y"- coordinates are to be measured
with respect to a horizontal reference surface, while the "z"- coordinate is to be the depth of
the corner point measured downwards from the surface. Both positive and negative depths are
valid, depending on the location of the reference surface with respect to the reservoir,
although positive values are most common.
Thus, it takes 3*8=24 numerical values to determine a general corner point block. The
simulator places restrictions on the corner point data however, so that it will not be necessary
to read 24*ni*nj*nk values to define the grid for all cases. Details follow later.
The following is a model for a corner point block, giving labels for its corners:
N
W
NE-T
NW-T
SE-T
SW-T
NW-B
SW-B
NE-B
SE-B
The block is the volume contained within the 6 faces made by connecting the corner points
with line segments as shown.
The simulator requires that the 8 corner points (each with its three coordinates) can be
arranged and labelled so that:
1. The "x"-coordinate difference from NW-T to NE-T is positive and the same as that
from SW-T to SE-T;
2. The "y"-coordinate difference from NW-T to SW-T is positive and the same as
that from NE-T to SE-T;
3. The "-B" points should lie directly below the "-T" points; that is, each "-T" and "B" pair should have the same "x"- and "y"- coordinates, and the "-B" points should
have the larger "z"-coordinate.
Thus, the corner point block's four side faces should be planar and the block should appear
rectangular when viewed from the top (or bottom). The top and bottom faces are defined with
a nonlinear (bilinear) interpolation and will not be planar in general.
When multiple blocks are defined using a corner point grid, the simulator requires that the
grid must appear Cartesian when viewed from above (or below). Thus, it is required that the
following hold for all valid indices I, J, K:
4. The NE-T corner point of block (I,J,K) and the NW-T corner point of block
(I+1,J,K) must lie in the same vertical line, and similarly for the NE-B and NW-B
corners, the SE-T and SW-T corners, and the SE-B and SW-B corners for blocks
(I,J,K) and (I+1,J,K), respectively;
5. The SW-T corner point of block (I,J,K) and the NW-T corner point of block
(I,J+1,K) must lie in the same vertical line, and similarly for the SW-B and NW-B
corners, the SE-T and NE-T corners, and the SE-B and NE-B corners for blocks
(I,J,K) and (I,J+1,K), respectively;
Note that vertical faulting is permitted, as (4) and (5) above only require that the corner points
lie in the same vertical line, and not that they be the same points. (No faulting would occur if
the phrase must lie in the same vertical line was replaced by "are the same" everywhere in
conditions (4) and (5).) Faulting implies that partial face overlap is allowed.
Finally, the simulator requires that block tops should not cross through the bottoms of their
vertical neighbours:
6. Each "-B" corner point of block (I,J,K) should not be deeper than the
corresponding "-T" corner point of block (I,J,K+1).
The simulator requires actual contact of block faces before it will allow inter-block fluid flow
on corner point grids. Nodes for corner point blocks are placed at their barycentre.
Example:
a) Corner point grid with 20 blocks in the "x" direction, 20 blocks in the "y"
direction, and 5 layers (ni=20, nj=20, nk=5). Enter:
*GRID *CORNER 20 20 5
Nine-Point Method
The transmissibilities in the nine-point finite difference approximation are calculated
according to the Amoco method (SPE 16975, 1991). The following points compare the new
method with the previously used method (Coats and Modine, SPE 12248):
1. Data sets with isotropic and uniform permeabilities and block sizes in the ninepoint plane experience no change in results (e.g., Test Bed sttst07.dat) or CPU.
2. Modest variations from uniform and isotropic usually result in acceptably small
differences in transmissibilities from the previous method. However, severely
different block sizes and/or permeabilities can give significantly different local
results. The new method is more likely to give an unphysical result for severely
non-uniform or non-isotropic data, so such data should be used with caution.
3. The new method allows separation of the geometrical factors of the nine-point
transmissibilities from the appropriate property. Therefore, processes in which that
property changes with time can be discretized with the new nine-point scheme,
unlike the previous method. The two processes of interest here are dilation, where
the permeability changes with time in response to porosity changes, and thermal
conduction, where thermal conductivity depends on current saturations and
temperature.
Thermal Conduction
The *NINEPTH option carries a CPU penalty. The *NINEPTH option is necessary only for
processes that are dominated by thermal conductivity, such as experiments at the laboratory
scale and detailed near-well thermal studies. For most field scale simulations, convection is
the main heat transport mechanism and so *NINEPTH is not needed.
Pseudo 1-D Modelling
The *NINEPOINT option will give unexpected results if the grid is not constructed properly
when modelling a pseudo-1D problem with a 2-D grid. The two reservoir boundaries that are
parallel to the pseudo-1D direction must have their nodes on the reservoir boundary. In other
words, the reservoir must be treated like a repeated pattern. Use the geometry modifiers
*VAMOD to trim these boundary blocks in half so that the block nodes fall on the reservoir
boundary.
Corner-point Grids
The nine-point formulation is based on orthogonal grid assumptions, but corner-point grids
can be non-orthogonal to a small or large degree. Therefore, care should be taken that the
plane to which 9-point is applied is not excessively non-orthogonal. For example, it is safe to
use *NINEPOINT *IJ with a corner-point grid that is non-orthogonal only in the K direction.
*DI
PURPOSE:
*DI signals input of an array of grid block lengths for I direction. For cylindrical systems, it
indicates the input of R direction block lengths.
ARRAY:
*DI
DEFAULTS:
Required keyword. No defaults.
CONDITIONS:
Only the *IVAR and *CON array reading options are allowed.
EXPLANATION:
The keyword *DI defines the dimensions of the grid blocks in the I direction. The unit is (m |
ft | cm).
The acceptable range of values for block lengths in the J direction is 1.0e-4 m (3.23e-4 ft) to
1.0e9 m (3.28e9 ft).
Examples:
a) The I direction grid increments for a problem with ni=10 are:
1000,1000,1500,400,400,400,400,400,1000,1000
*DI *IVAR 2*1000 1500 5*400 2*1000
b) The I direction grid size for ni = 10 where each block is 1200
*DI *CON 1200
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
*DJ
PURPOSE:
Specify J-direction grid block size (length for Cartesian grid, angle for cylindrical grid).
ARRAY:
*DJ
DEFAULTS:
Required keyword. No defaults.
CONDITIONS:
Only the *JVAR and *CON array reading options are allowed.
EXPLANATION:
The keyword *DJ defines the dimensions of the grid blocks in the y or theta direction. The
unit is degrees for cylindrical grids and (m | ft | cm) otherwise.
The acceptable range of values for block lengths in the J direction is 1.0e-4 m (3.23e-4 ft) to
1.0e9 m (3.28e9 ft).
Examples:
a) The J direction grid increments for a problem with nj=10 are:
2000,2000,2500,4000,1500,1500,400,400,1000,1000
b) The J direction grid size for nj = 10 where each block is 2200
*DJ *CON 2200
c) For a radial grid used in a problem with angular symmetry with one block in the J
(theta) direction, set *DJ to 360 degrees:
*DJ *CON 360
For a description of how block sizes are used in the radial grid, see Figure 1 below. In the
output echo, the J direction block size is the mid-block arc length. The product of the block
sizes reported for each direction gives the correct block volume.
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
*DK
PURPOSE:
*DK signals input of array of grid block thicknesses in K direction.
ARRAY:
*DK
DEFAULTS:
Required keyword. No defaults.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group.
If either of the *IJK, *IVAR, *JVAR or *ALL array reading options are used, then this is
assumed to be a variable-thickness grid. This is equivalent to *VARI in other CMG keyword
implementations. The variable-thickness option is not allowed with *RADIAL or *DIP.
Blocks can be assigned a zero thickness if they are to be considered as pinched out. See the
discussions for *PINCHOUTARRAY and *PINCHOUT-TOL.
EXPLANATION:
This keyword defines the dimensions of the grid blocks in the K direction. The unit is (m | ft
| cm).
The acceptable range of values for block lengths in the J direction is 1.0e-4 m (3.23e-4 ft) to
1.0e9 m (3.28e9 ft).
Examples:
a) The K direction grid increments for a problem where nk=8 are:
20,20,25,40,15,45,45,45
*DK *KVAR 2*20 25 40 15 3*45
b) The K direction grid size for nk = 8 where each block is 22.
*DK *CON 22.0
For a grid with five blocks in the I direction, four blocks in the J direction, and two blocks in
the K direction, a total of forty thicknesses must be entered.
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
Depth (Conditional)
*DEPTH
PURPOSE:
*DEPTH indicates input of a reservoir depth for a single grid block. This depth is usually to
be measured to the block's centre, unless *TOP appears (see below).
FORMAT:
*DEPTH
(*TOP)
(*CENTRE)
i j k depth
DEFINITIONS:
*TOP
Subkeyword indicating that the depth is to the top (centre of the top face) of
the reference block.
*CENTRE
Subkeyword indicating that the depth is to the centre of the reference block.
i
I direction index of the reference block.
j
J direction index of the reference block.
k
K direction index of the reference block.
depth
Depth to the centre (or top if *TOP is used) of the reference block in the
reservoir (m | ft). The value may be of any sign.
DEFAULTS:
Conditional keyword. No defaults. *CENTRE is assumed if *TOP does not appear.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. One of *DEPTH,
*DTOP, *DEPTH-TOP or *PAYDEPTH must be specified for *GRID *CART, *GRID
*VARI, or *GRID *RADIAL. This keyword should not be used with corner point grids. If
depth modifications are required for corner point grids, the *DEPTH-TOP or *PAYDEPTH
keyword can be used.
EXPLANATION:
Depths are measured downwards from a horizontal reference surface. The I, J, K indices
describe a grid block whose depth is known, the depth being measured to the centre/top of the
grid block. The value may be positive or negative depending on the location of the reference
surface, although positive values are more common.
min
max
SI
m
-1.0E+4
1.0E+4
Field
ft
-32,808.0
32,808.0
*DTOP
PURPOSE:
*DTOP specifies depth to the centre of the top face of each grid block in the top layer of the
grid.
ARRAY:
*DTOP
DEFAULTS:
If *DTOP is absent, then depth is obtained from *DEPTH or *PAYDEPTH. If *DTOP,
*DEPTH and *PAYDEPTH are absent, then depth to top of column (1,1) is zero.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. One of *DEPTH,
*DTOP, *DEPTH-TOP or *PAYDEPTH must be specified for *GRID *CART, *GRID *VARI,
or *GRID *RADIAL. Use of this keyword, *DEPTH-TOP or *PAYDEPTH, is recommended
for *GRID *VARI. *DEPTH-TOP and *PAYDEPTH, but not *DTOP, can be used for corner
point grids if depth modifications are required.
If this keyword is used with *GRID *CART, the values in the *DTOP array should all be the
same.
No array qualifiers or array reading options are permitted for this particular array keyword. A
fixed number of values (ni * nj) is always expected.
EXPLANATION:
This keyword is usually used to define the depths of grid blocks for a variable depth/variable
thickness grid (*GRID *VARI). A total of ni * nj depth values must be entered. The unit is
(m | ft | cm). The values are to be measured downwards from a horizontal reference surface
to the centre of the tops of the grid blocks in the upper-most layer. The values may be
positive or negative depending on the location of the reference surface. They are to be entered
row by row with the I index changing fastest, and the J index slowest.
Note that the K index assumed for this array will be that of the uppermost layer; that is, it will
be K = nk if *KDIR does not appear in the data set, or if *KDIR *UP has been specified, or it
will be K = 1 if *KDIR *DOWN appears.
Depths are assigned to all blocks based on the depths provided by this keyword and the
blocks' thicknesses (*DK keyword).
See Figure 2 below.
Reference Plane
DTOP
DTOP
DTOP
DTOP
(1,1,2)
(2,1,2)
(3,1,2)
(4,1,2)
(1,1,1)
(2,1,1)
(3,1,1)
(4,1,1)
(5,1,2)
(5,1,1)
a)
15.6
21.3
10.5
5*
8.9
Reference Plane
DTOP1
DTOP2
DTOP4
DTOP5
(5,1,2)
(1,1,2)
(4,1,2)
(2,1,2)
(1,1,1)
(3,1,2)
(2,1,1)
DTOP3
(3,1,1)
(5,1,1)
(4,1,1)
b)
Both depths and thicknesses vary. The layers are the same as for (a). The data is
*GRID *CART 5 1 2
DI ...
DJ ...
DK ALL
10.5 10.5 15.6 21.3 10.5 5* 8.9
*DTOP
DTOP1 DTOP2 DTOP3 DTOP4 DTOP5
Example:
A variable depth/variable thickness grid with ni=6, nj=4 and nk=2 might use the following:
*DTOP
1000.0
1070.0
1000.0
1070.0
1300.0
1090.0
1200.0
1100.0
1250.0
1080.0
1110.0
1100.0
1100.0
1110.0
1200.0
1170.0
1200.0
1120.0
1200.0
1070.0
1070.0
1200.0
1190.0
1070.0
min
max
SI
m
-1.0E+4
1.0E+4
Field
ft
-32,808.0
32,808.0
Lab
cm
-1.0E+6
1.0E+6
NOTE: Previous usage of *DTOP with STARS allowed an extended syntax with array
qualifiers *CON and *ALL. To maintain consistency with CMG pre-processors and other
CMG simulators, it is recommended that data using the extended syntax be changed to
conform to the standard syntax described above.
1. Qualifier *ALL has the same operation as the standard syntax, and therefore
keyword *ALL can be removed with no effect.
2. *DTOP *CON followed by a single depth can be replaced with *DEPTH *TOP 1
1 k where k = 1 for *KDIR *DOWN and k = nk for *KDIR *UP.
*PAYDEPTH
PURPOSE:
*PAYDEPTH indicates input of depths to the centre of the net pay for each grid block in the
reservoir. (Net pay is assumed to be centered in the grid block.)
ARRAY:
*PAYDEPTH
DEFAULTS:
Conditional keyword. No defaults.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. One of
*DEPTH, *DTOP, *DEPTH-TOP or *PAYDEPTH must be specified for *GRID *CART,
*GRID *VARI, or *GRID *RADIAL. Use of this keyword, or *DTOP, is recommended for
*GRID *VARI.
*DEPTH-TOP or *PAYDEPTH can be specified for corner point grids. These keywords will
override depths calculated from the "z" components of the corner point locations.
If this keyword is used with *GRID *CART, the depths in each layer (blocks with the same
K index) must agree, and the depth differences between layers must be consistent with the
gross thicknesses (*DK keyword).
EXPLANATION:
This keyword defines the depths to the pay of each individual grid block. All array qualifiers
and array reading options are allowed for specifying the ni * nj * nk values.
The values are to be measured downwards from a horizontal reference surface to the centre of
the grid block, which is where the net pay is assumed to be positioned. The values may be
positive or negative depending on the location of the reference surface in the reservoir,
although positive values are most common. The unit is (m | ft | cm).
Since it is assumed that the (net) pay is centered in the block, the *PAYDEPTH array's
depths can be directly assigned to each block's node.
When used for corner point grids, the paydepth values override depths calculated from the "z"
components of the corner point locations. If a *PAYDEPTH value is not set for certain cells
(as when *PAYDEPTH is used with the *IJK option and not all cells are touched) then
depths for the remaining cells will revert to those taken from the "z" components. The actual
corner point locations are not altered by *DEPTH-TOP or *PAYDEPTH, and grid
visualizations are unaffected. Only the "Depth to Centers" array in the output echo (use
*OUTPRN *RES *ALL) shows the results of using *DEPTH-TOP or *PAYDEPTH with
corner point grids. Use of *DEPTH-TOP or *PAYDEPTH with corner point grids works like
a vertical position modifier for the cells.
Example:
A variable depth/variable thickness grid with ni=6, nj=4 and nk=2 might use the following:
*PAYDEPTH *ALL
1000.0 1300.0
1070.0 1090.0
1000.0 1200.0
1070.0 1100.0
2000.0 2300.0
2070.0 2090.0
2000.0 2200.0
2070.0 2100.0
1250.0
1080.0
1110.0
1100.0
2250.0
2080.0
2110.0
2100.0
1100.0
1110.0
1200.0
1170.0
2100.0
2110.0
2200.0
2170.0
1200.0
1120.0
1200.0
1070.0
2200.0
2120.0
2200.0
2070.0
1070.0
1200.0
1190.0
1070.0
2070.0
2200.0
2190.0
2070.0
min
max
SI
m
-1.0E+4
1.0E+4
Field
ft
-32,808.0
32,808.0
Lab
cm
-1.0E+6
1.0E+6
*DEPTH-TOP
PURPOSE:
*DEPTH-TOP indicates input of depths to the top of each grid block in the reservoir.
ARRAY:
*DEPTH-TOP
DEFAULTS:
Conditional keyword. No defaults.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. One of
*DEPTH, *DTOP *DEPTH-TOP or *PAYDEPTH must be specified for *GRID *CART,
*GRID *VARI, or *GRID *RADIAL. Use of this keyword, *PAYDEPTH or *DTOP, is
recommended for *GRID *VARI.
*DEPTH-TOP can be specified for corner point grids. The *DEPTH-TOP values will
override depths calculated from the "z" components of the corner point locations.
If this keyword is used with *GRID *CART, the depths in each layer (blocks with the same
K index) must agree, and the depth differences between layers must be consistent with the
gross thicknesses (*DK keyword).
EXPLANATION:
This keyword defines the depths to the top of each individual grid block. All array qualifiers
and array reading options are allowed for specifying the ni * nj * nk values.
The values are to be measured downwards from a horizontal reference surface to the top of
the grid block. The values may be positive or negative depending on the location of the
reference surface in the reservoir, although positive values are most common. The unit is (m |
ft | cm).
When used for corner point grids, the depth to top values override depths calculated from the
"z" components of the corner point locations. If a *DEPTH-TOP value is not set for certain
cells (as when *DEPTH-TOP is used with the *IJK option and not all cells are touched) then
depths for the remaining cells will revert to those taken from the "z" components. The actual
corner point locations are not altered by *DEPTH-TOP, and grid visualizations are
unaffected. Only the "Depth to Centers" array in the output echo (use *OUTPRN *RES
*ALL) shows the results of using *DEPTH-TOP with corner point grids. Use of *DEPTHTOP with corner point grids works like a vertical position modifier for the cells.
Example:
A variable depth/variable thickness grid with ni=6, nj=4 and nk=2 might use the following:
*DEPTH-TOP *ALL
1000.0 1300.0
1070.0 1090.0
1000.0 1200.0
1070.0 1100.0
2000.0 2300.0
2070.0 2090.0
2000.0 2200.0
2070.0 2100.0
1250.0
1080.0
1110.0
1100.0
2250.0
2080.0
2110.0
2100.0
1100.0
1110.0
1200.0
1170.0
2100.0
2110.0
2200.0
2170.0
1200.0
1120.0
1200.0
1070.0
2200.0
2120.0
2200.0
2070.0
1070.0
1200.0
1190.0
1070.0
2070.0
2200.0
2190.0
2070.0
min
max
SI
m
-1.0E+4
1.0E+4
Field
ft
-32,808.0
32,808.0
Lab
cm
-1.0E+6
1.0E+6
*DIP
PURPOSE:
*DIP specifies the input of dip angles.
FORMAT:
*DIP idip (jdip)
DEFINITIONS:
idip
Tilt angle in degrees of the I axis above the horizontal. Allowed range is -90
to 90 degrees. See Figure 3 below.
jdip
Tilt angle in degrees of the J axis above the horizontal. Allowed range is -90
to 90 degrees. See Figure 3 below.
DEFAULTS:
*DIP 0 0
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. This keyword is
optional with *GRID *CART and *GRID *RADIAL. If the variable-depth or variablethickness option is specified, then idip and jdip are assumed to be zero.
EXPLANATION:
For radial grid systems, idip is the angle between the K axis and the vertical. The reference
radial direction (theta = 0) lies in the plane defined by the K axis and the vertical direction.
See Figure 4 below.
For a radial grid, modelling of gravity effects from tilting is possible in the r-theta plane only
when both the radial and the theta directions have been discretized, that is, ni > 1 and nj > 1
in the *GRID keyword. When ni = 1, then nj = 1 automatically. When nj = 1, tilt causes part
of the block to be raised and part of the same block to be lowered from the untilted elevation,
since 'block center' is not well defined in this case. In any case, Z-direction gravity treatment
is correct.
Note that RESULTS 3D does not display the reservoir tilted with the *DIP angles.
Therefore, it is recommended that tilts near 90 degrees be accomplished by changing the grid
axis being used. For example, a vertical 1D grid can use ni = nj = 1 and no tilt as opposed to
nj = nk = 1 with 90 degrees tilt.
X
Y
Direction cosines of gravity vector with respect to tilted coordinate axes are :
g x = sin
g Y = sin
g Z = 1 g 2x g 2y
Z
Z
R( =0)
horizontal
axis
g
min
max
SI
m
-1.0E+20
1.0E+20
Field
ft
-3.28E+20
3.28E+20
Lab
cm
-1.0E+22
1.0E+22
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
Algorithm for *ZCORN Ordering
The *ZCORN keyword causes the reading of all depths (Z-coordinates) of the 8*ni*nj*nk
corner points required to define the grid. The depths should be entered as follows:
Operations should be done in the order shown. Note that the text before each task ([...])
describes how often to carry out that task.
2001
2001
2001
2001
2011
2011
2011
2011
2001
2001
2001
2001
2011
2011
2011
2011
2002
2002
2002
2002
2012
2012
2012
2012
2002
2002
2002
2002
2012
2012
2012
2012
2003
2003
2003
2003
2013
2013
2013
2013
2003
2003
2003
2003
2013
2013
2013
2013
2004
2004
2004
2004
2014
2014
2014
2014
200
200
200
200
200
200
300
300
300
300
300
300
400
400
400
400
400
400
0
200
400
0
200
400
0
200
400
0
200
400
0
200
400
0
200
400
min
max
SI
m
-1.0E+20
1.0E+20
Field
ft
-3.28E+20
3.28E+20
Lab
cm
-1.0E+22
1.0E+22
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
Secondly, ...
If I and J are less than ni and nj respectively, write the "x"-, "y"-, "z"-coordinates
of another point that lies on a vertical line through the NW corner of block (I,J,1).
This point should differ from the previous one only in its "z"- coordinate.
If I = ni and J is less than nj, write the NE corner. If I is less than ni and J = nj,
write the SW corner. If I = ni and J = nj, write the SE corner.
] ]
This completes the algorithm.
Note that I is ranging fastest, J slowest in the above.
As *COORD data only provides lines on which corner points must lie, *ZCORN array data is
still required to locate the corner points along the lines.
Examples:
Provide *COORD data for a ni = 4, nj = 2, nk = 1 *CORNER grid. Note that the "x"direction grid spacing is uniformly 100 units and the "y"-direction grid spacing is uniformly
200 units. (This example appears the same regardless of the value for nk.)
*COORD
0
200
400
0 0
0 0
0 0
0
200
400
0
0
0
1
1
1
100
300
0
0
0
0
100
300
0
0
1
1
0
200
400
200 0
200 0
200 0
0
200
400
200
200
200
1
1
1
100
300
200
200
0
0
100
300
200
200
1
1
0
200
400
400 0
400 0
400 0
0
200
400
400
400
400
1
1
1
100
300
400
400
0
0
100
300
400
400
1
1
min
max
SI
m
-1.0E+20
1.0E+20
Field
ft
-3.28E+20
3.28E+20
Lab
cm
-1.0E+22
1.0E+22
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
100
100
100
100
100
100
100
100
0
200
200
400
0
200
200
400
2001
2001
2001
2001
2011
2011
2011
2011
200
200
200
200
200
200
200
200
0
200
200
400
0
200
200
400
2002
2002
2002
2002
2012
2012
2012
2012
200
200
200
200
200
200
200
200
0
200
200
400
0
200
200
400
2002
2002
2002
2002
2012
2012
2012
2012
300
300
300
300
300
300
300
300
0
200
200
400
0
200
200
400
2003
2003
2003
2003
2013
2013
2013
2013
300
300
300
300
300
300
300
300
0
200
200
400
0
200
200
400
2003
2003
2003
2003
2013
2013
2013
2013
400
400
400
400
400
400
400
400
0
200
200
400
0
200
200
400
2004
2004
2004
2004
2014
2014
2014
2014
Reservoir Description 181
min
max
SI
m
-1.0E+20
1.0E+20
Field
ft
-3.28E+20
3.28E+20
Lab
cm
-1.0E+22
1.0E+22
Pseudo-Infinite Blocks
The use of very large blocks to model a constant-pressure boundary may have subtle negative
side effects. See Pseudo-Infinite Blocks in the manual entry for *CONVERGE.
*CORNER-TOL
PURPOSE:
*CORNER-TOL controls the minimal spacing required to separate corner points (see above
for descriptions of Corner Point grids). It is also used for miscellaneous tolerance checking
for corner point applications.
FORMAT:
*CORNER-TOL cptol
DEFINITIONS:
cptol
Minimal spacing required to separate corner points and related quantities;
that is, corner points that are closer than "cptol" are deemed to be the same.
Dimensions are (m | ft).
DEFAULTS:
Optional keyword. Default is 0.050 (m | ft).
CONDITIONS:
This keyword, if present, must be in the RESERVOIR DESCRIPTION keyword group.
EXPLANATION:
Corner points that lie within a distance of "cptol" are considered to be in the same place. If
two corner points that belong to the same cell lie within a distance of "cptol", then, either:
-
one point belongs to the top of the cell and the other to the bottom, and that corner
is pinched out;
the cell is squeezed in the I or J direction and an error has occurred.
Points from neighbouring cells (four points from the top of one cell and four points from the
bottom of the other) that are supposed to be touching to make a standard flow connection will
be regarded as making contact if they lie within a distance of "cptol" (in top-bottom pairs).
If the average thickness of the cell as measured through its centre is less than a certain
tolerance (see *PINCHOUT-TOL), then that cell will be designated as pinched out.
However, for the Corner Point cells above and below to make a connection, those cells' top
and bottom corner points must match to within the tolerance "cptol".
*REFINE, *RANGE
PURPOSE:
*REFINE indicates the input of local refined grid.
FORMAT:
*REFINE
*REFINE
-or*REFINE
*REFINE
*RANGE
DEFINITIONS:
*REFINE
Indicates the application of local grid refinement of the specified type and
parameters to the specified block or range of blocks.
block_address
The address of the grid block(s) to which this refinement applies. Two forms
are allowed: multi-level single-block UBA (see Multi-level Regular
Refinement, below), and single-level range i1(:i2) j1(:j2) k1(:k2).
*INTO
Indicates as new refinement. This must be present at the first appearance of
*REFINE. Subsequent usage of *REFINE without *INTO causes the same
refinement to be used.
nir
Number of refined blocks in the I direction within each fundamental grid block.
njr
Number of refined blocks in the J direction within each fundamental grid block.
nkr
Number of refined blocks in the K direction within each fundamental grid block.
nr
Number of radial subdivisions in the R-theta-Z local hybrid grid. Allowed
values for nr are 2,3,4,... up to a maximum of 10.
ntheta
Number of theta subdivisions in the R-theta-Z local hybrid grid. Permitted
values are 1 or 4. Theta subdivisions are not applied to the inner- most hybrid
grid block.
nz
Number of Z-direction subdivisions in the R-theta-Z local hybrid grid. The
"Z" direction of the hybrid grid is specified using the *IDIR, *JDIR, or
*KDIR keywords. You are allowed to divide a fundamental grid into a
maximum of 4 refined grids. Permitted values are 1,2,3 and 4.
*HYBRID
Indicates the use of hybrid grid refinement in which a Cartesian grid block
(normally containing a well) is refined into a local cylindrical R-theta-Z grid.
*IDIR
Indicates that the "Z" axis of the hybrid grid is parallel to the I-direction of
the fundamental grid.
*JDIR
Indicates that the "Z" axis of the hybrid grid is parallel to the J-direction of
the fundamental grid.
*KDIR
Indicates that the "Z" axis of the hybrid grid is parallel to the K-direction of
the fundamental grid. This is the default.
*RW rw
Value for the well radius (m | ft | cm) must be greater than zero and not
exceed 1 m (3.28 ft, 100 cm). The volume inside this radius will be removed
from the block. *RW is required with *HYBRID.
If a discretized wellbore is embedded in a hybrid grid, the wellbore radius
from the *WELLBORE keyword will be used and this radius will be ignored.
*ALPHAI alphai
Define the ratio of the outer radius of the first ring to "rw". Used only for
isotropic *HYBRID cases. The value of alphai should exceed 1.
*ALPHA alpha
Defines the ratio of successive outer radii for rings i to i-1, for each i running
from 2 through nir-1. (The condition is not applicable to ring nir, as it is
truncated to have four planar sides in order to fit its neighbours.) Used only
for isotropic *HYBRID cases. The value of alpha should exceed 1.
DEFAULTS:
If *REFINE is absent, there are no refined grids. If *INTO is absent it will default to the
previous refinement; the first *REFINE must have *INTO.
There are no defaults for nir, njr and nkr. For *HYBRID there are no defaults for nr, ntheta,
nz and rw. For hybrid grid, the inner radial block never has theta subdivisions.
When *HYBRID is used and none of *IDIR, *JDIR and *KDIR are specified, the default is
*KDIR.
The default value for *ALPHA is chosen so that if the outer most ring (ring nir) was allowed
to be circular with an outer radius equal to that of ring nir-1 multiplied by "alpha" (so that it
was treated like the other rings), its area would equal the total area available. The outermost
ring is truncated to have flat sides so that neighbouring blocks can be properly fitted.
For anisotropic media, the values for *ALPHAI and *ALPHA are calculated internally using
much the same criteria as discussed above for the isotropic case, except that elliptical
geometries are used.
CONDITIONS:
For regular refinement, there is no internal limit to the magnitudes of nir, njr and nkr.
However, values larger than 3-5 tend to produce numerically inconsistent results at the
interface between coarse and fine blocks.
Hybrid grid refinements can be used only with Cartesian grids, i.e. *GRID *CART.
*REFINE may not be used together with *NINEPOINT.
When defining a discretized wellbore inside a hybrid grid, the hybrid grid must be defined
first. See detailed explanation for *WELLBORE.
The only types of multi-level refinement allowed are (1) Cartesian regular refinement, (2)
Cartesian regular refinement with hybrid grid at the finest level, and (3) discretized wellbore
in hybrid grid. At least 10 levels of refinement are available.
Areas with different degrees of refinement must be separated by at least one unrefined grid
block. See the detailed descriptions below.
The *REFINE keyword can be used with *GRID *CART, *GRID *VARI or *GRID
*CORNER but not with *GRID *RADIAL.
Pinched out (and null) cells can be marked as refined in data, without terminating the
simulation, although these cells will remain inactive.
Local grid refinement may be used with natural fracture options *DUALPOR and
*DUALPERM but not *MINC or *SUBDOMAIN.
EXPLANATION:
*REFINE may occur several times to define multiple regions or refinement types.
By default, refined grid blocks are assigned the properties of the fundamental block in which
they reside. Alternatively the properties of the refined grid may be entered by using the *RG
array qualifier keyword with any array keyword.
The variable depth/variable thickness option may be used with refined grids.
See Appendices E.6 and E.7 for further discussion.
186 Reservoir Description
REGULAR REFINEMENT
The parent block is refined into a child grid that is of the same type and orientation as the
parent block. In each refined direction the refined block sizes are uniform. The I-J-K indices
in the local grid follow the same sense as the parent block, but the local origin starts at the
corner of the parent block closest to the global origin.
One rule applies to adjacent parent blocks with regular refinement: in each refined direction,
parent blocks adjacent in that direction must be refined by the same amount normal to that
direction. For example, if block (I,J,K) has been refined into nir x njr x nkr, then
-
blocks (I-1,J,K) and (I+1,J,K) must be refined with the same njr and nkr, if at all;
blocks (I,J-1,K) and (I,J+1,K) must be refined with the same nir and nkr, if at all; and
blocks (I,J,K-1) and (I,J,K+1) must be refined with the same nir and njr, if at all
Example:
A grid system consists of 4 blocks in the I direction, 4 blocks in the J direction and 2 blocks
in the K direction. Two columns of grid blocks are to be refined, with two refined blocks in
each direction. The data file is as follows:
*GRID *CART
. . .
*REFINE 1 1
*REFINE 4 4
*REFINE 2 1
4 4 2
1:2
1:2
2
*INTO 2 2 2
*INTO 3 2 2
Note that two regions were assigned the same refinement type 2 x 2 x 2. Also, blocks (1,1,1)
and (2,1,1) are adjacent in the I direction and so must have the same J- and K-direction
refinement, but may have a different nir.
An areal view of the grid for K=2 would be:
J=4
J=3
J=2
J=1
I=1
I=2
I=3
I=4
K=1
I=1
I=2
I=3
I=4
5
5
5
5
5
3
3
3
3
3
2
2
2
2
2
*into
/ 2 2
/ 2 2
/ 2 2
/ 2 2
3 3 3
*into
2 / 2
2 / 2
2 / 2
3
2
2
2
3
2
2
2
3
*into 3 3 3
/ 2 2 2 *into 3 3 3
/ 2 2 2 / 2 2 2 *into 3 3 3
Note that no range is allowed in the parent block_address when it is refined, that is, has a
slash in the UBA. Be aware that excessive use of multi-level refinement can increase the
number of grid blocks significantly.
HYBRID REFINEMENT
The hybrid grid option refers to refining a parent block from a Cartesian grid into a local
cylindrical grid whose "axial" direction may be oriented in either the global I, J or K
direction. There are nr divisions in the radial direction, of which the outermost is formed to fit
the shape of the parent block. The hybrid's angular direction is divided into either 1 or 4
divisions; the innermost radial division is always a full circle. The hybrid's axial direction is
divided into nz uniform sections. It is anticipated, but not required, that a well will be placed
inside the innermost radial division.
The *HYBRID option may affect results especially when a process is influenced strongly by
near-wellbore phenomena, e.g., cyclic steam stimulation. The well can be horizontal or
vertical. The wellbore and the corresponding hybrid grid axis must go through the centre of
the grid block. Thus, the hybrid grid's local "Z-axis" may be in the global I ,J or K direction
depending on the well direction.
Perpendicular to this axis the permeability may be equal (isotropic case) or not equal
(anisotropic case). The aspect ratio of grid dimensions normal to the axial direction should
not be too different from the square root of the corresponding absolute permeability ratio.
Deviations of more than a factor of 1.25 can lead to large errors and so is not allowed.
ISOTROPIC CASE:
This is normally the case for a hybrid grid whose axis is in the vertical direction. The grid
dimensions must be within a factor of 1.25 of square.
ANISOTROPIC CASE:
This is normally the case for a hybrid grid whose axis is in a horizontal direction. The aspect
ratio of block size normal to the axial direction should be within a factor of 1.5 to 2 of the
square root of the ratio of the corresponding absolute permeabilities. For example, a well
horizontal in the X-direction with Ky = 10 Kz should have a grid aspect ratio of about
delta_Y/delta_Z = square_root(10).
Two rules apply to adjacent parent blocks refined with *HYBRID:
1. For hybrid grids adjacent in the hybrid's axial direction, nr and ntheta must be the
same, and nz may be different. This case is typical for modelling a hybrid grid
around a well that passes through more than one parent block.
2. For hybrid grids adjacent in a direction other than the hybrid's axial direction, only
nz must be the same.
188 Reservoir Description
y = yo + y',
GLOBAL VIEW
k'=1
LOCAL VIEW
k'=2
J+1
K+1
K
y'
J'=3
K-1
J'=2
J'=1
x'
z'
J'=4
y
x
z
x
J-1
Adjacent block is
connected to
(I,J,K-1)
J'=1
(I,J+1,K)
J'=2
y = yo + z',
(I,J,K+1)
J'=3
z = zo y'
I-1
k'=2
k'=1
y'
J'=3
y z
K-1
I+1
J'=2
J'=1
x'
z'
J'=4
K+1
x
Adjacent block is
connected to
(I,J-1,K)
J'=4
LOCAL VIEW
GLOBAL VIEW
z = zo x'
(I+1,J,K)
J'=1
(I,J,K-1)
J'=2
(I-1,J,K)
J'=3
(I,J,K+1)
J'=4
y = yo + y',
z = zo + z'
GLOBAL VIEW
LOCAL VIEW
I-1
k=3
y
y'
k=2
z
k=1
J'=3
J+1
I+1
I
J'=2
J'=1
x'
z'
J'=4
J-1
x
(I+1,J,K)
J'=1
Adjacent block is
connected to
(I,J+1,K)
J'=2
(I-1,J,K)
J'=3
(I,J-1,K)
J'=4
Radial
Angular
Axial
*IDIR
*JDIR
*KDIR
K
I
I
J
K
J
I
J
K
Take the *IDIR orientation for example. You would use PERMK to modify permeability in
the hybrid grid's local radial direction, PERMJ to modify the angular direction and PERMI to
modify the axial direction. You would examine K Direction Block Size to find the block size
in the hybrid grid's local radial direction, J Direction to find the angular size and I Direction
to find the axial size.
This correspondence is reported in the textual output file in the grid summary section, for
each hybrid grid. It applies to all direction dependent input (except block size)
-
permeabilities
dispersion
and output
-
block sizes
permeabilities
transmissibilities
dispersion.
Note that connection-based quantities such as transmissibility have an explicit Radial and
Angular direction printout, but the Axial direction values are found through this direction
correspondence.
Block Sizes
The block sizes reported for the hybrid grid blocks are similar to those found for a cylindrical
grid system. The radial and axial block sizes have standard definitions. The angular direction
block size is the midpoint arc length, so that the product of the block sizes in the three
directions is equal to the block volume (without volume modifier).
The only exception to this is the outermost radial block which acts as an interface between
the radial grid and the surrounding Cartesian grid. The angular block size is the parent block's
size in the corresponding direction instead of the midpoint arc length. The radial block size is
an average value which gives the block volume (without volume modifier).
For the case with no angular subdivisions (ntheta = 1) the radial block size is based not on the
entire outermost block volume, but the fraction associated with the outer face of interest. This
fraction of the total volume is the same as the block's volume for the ntheta = 4 case.
Example: Hybrid refinement where nr = 2 and ntheta = 1
*REFINE 1 1 1 *INTO 2 1 1 *HYBRID *KDIR
*VAMOD, *VATYPE
PURPOSE:
Describes modification to grid block volumes and face areas.
FORMAT:
*VAMOD key v ai aj ak (ai- aj- ak-) (*9P aij+ aij-)
ARRAY:
*VATYPE
DEFINITIONS:
key
Integer key associated with this geometry type, to be used with *VATYPE.
You do not need to define a key for the unmodified type or null-block type.
It is suggested that you define your own modifier types using key = 2 and up,
leaving predefined key = 0 for null blocks and predefined key = 1 for
unmodified (whole) blocks.
v
Block volume modification factor, equal to (desired gross volume) / (product
of block sizes *DI, *DJ and *DK). It is needed even for zero-porosity blocks
to correctly account for energy in rock. A value of zero denotes a true null
block, with no pore volume and no rock volume.
ai
Area modifier factor in the I direction, equal to (desired area) / (area from
block sizes *DJ and *DK). A zero value will result in no flow.
aj
Area modifier factor in the J direction, equal to (desired area) / (area from
block sizes *DI and *DK). A zero value will result in no flow.
ak
Area modifier factor in the K direction, equal to (desired area) / (area from
block sizes *DI and *DJ). A zero value will result in no flow.
aiArea modifier factor in the -I direction, used in situations where ai varies
along the I direction.
ajArea modifier factor in the -J direction, used in situations where aj varies
along the J direction.
Define initial grid with keywords *GRID, *DI, *DJ, *DK and *DTOP,
Once the geometry modifiers are defined, enter properties on the usual per-gross-volume
basis. The geometry factors will be applied during initialization to quantities derived from
volumes and areas. For example, the derived quantity Block Pore Volume will include the
"v" factor, but the user input property Porosity will not.
(1,1,3)
(2,1,3)
(3,1,3)
(4,1,3)
(5,1,3)
6
(1,1,2)
(2,1,2)
(3,1,2)
1 (4,1,2) 2
(5,1,2)
5
6
K
1 (1,1,1) 2
(2,1,1)
(3,1,1)
(4,1,1)
(5,1,1)
5
I
=
=
=
=
=
=
=
=
=
=
=
=
x
z
Inactive
DX
Active
DX'
*VAMOD key
0.5
0.5
0.5
Figure 7 shows how to place a block node on the reservoir corner. Both the X and Y
directions are extended, that is, DX' = 2*DX and DY' = 2*DY, and then trimmed by 1/2. The
meaning of the volume factor is
v
=
=
=
**
**
**
**
DY
Inactive
DX'
Active
DY'
DX'
*VAMOD key
0.25
0.5
0.5
0.25
Figure 8 shows how to place a block node on a diagonal boundary. Both the X and Y
directions are extended, but the geometry factors come more from inspection. Here, the ninepoint option is illustrated. The meaning of the geometry factors is
v
ai
aj
ak
aij+
aij-
=
=
=
=
=
=
Inactive
DY
DY'
Active
DX
DX'
*VAMOD key 0.5 1 0 0.5 *9P
assuming *NINEPOINT *IJ
0.5
Null Blocks
You can use *VATYPE to specify null blocks instead of *NULL. In fact, this is preferred if
any geometry modifiers will be assigned via *VAMOD. Use key value 0 for null blocks, just
as for *NULL.
There is no interblock connection to null blocks or beyond the reservoir boundary, and area
modifiers corresponding to such connections are not needed internally. When a number is
required to satisfy the syntax of the *VAMOD keyword, but you know it will not be used, enter 0.
Example: One-eighth of a 5-spot Symmetry Element
Apply the 9-point option to a 9x5 grid of square blocks, and then trim to 1/8 of a 5-spot pattern.
*GRID *CART 9 5 1 *NINEPOINT *IJ
*DI *CON 10
*DJ *EQUALSI
**
key
*VAMOD 2
*VAMOD 3
*VAMOD 4
*VAMOD 5
*VAMOD 6
v
0.5
0.5
0.5
0.125
0.25
ai
0.5
1.0
1.0
0.5
1.0
aj
1.0
1.0
1.0
1.0
1.0
ak
0.5
0.5
0.5
0.125
0.25
*9P
*9P
*9P
*9P
aij+
aij-
0.5
1.0
0.5
1.0
1.0
0.5
1.0
0.5
** like Fig 6
** like Fig 8
** like Fig 8
*VATYPE *ALL 5
0
0
0
0
2
3
0
0
0
2
1
3
0
0
2
1
1
3
0
2
1
1
1
6
2
1
1
4
0
2
1
4
0
0
2
4
0
0
0
5
0
0
0
0
**
**
**
**
---- i
|
|
j
The only difference between keys 3 and 4 is the *9P values; these keys could be merged if
*NINEPOINT were not used. Array-reading option *ALL was used with *VATYPE so that
the data itself can make a picture of the grid when arranged in rows of ni, columns of nj and
planes of nk.
Refined Grid
By default, all blocks of a refined grid have the same values for a quantity or property (except
block size) as the grid's parent block. This applies also to block modifiers. Geometry
modifiers may be entered for specific refined blocks using the subkeyword *RG.
Suppose that the block in Figure 6 is to be refined 3x3 areally. Of the nine finer blocks, three
fall entirely in the inactive zone, three fall entirely in the active zone and three are split in half
just as the parent block was. In addition to the keywords indicated above for Figure 6, the
following are needed for this refined grid case:
*REFINE block_address *INTO 3 3 1
*VATYPE *RG block_address *IVAR 0 key 1
where "key" is the same one used for the parent block. We divided the I direction into an odd
number of fine blocks so that the new block nodes fall on the reservoir boundary, as it did for
the parent block.
If the external faces of a refined grid are connected to a unrefined block in the "plus"
direction, then the area modifiers of the refined blocks are used. If the external faces of a
refined grid are connected to another refined grid, then the smallest effective area is used.
Hybrid Grids
The specification of area modifiers for hybrid grid blocks is more complicated because the
method of referring to the radial, angular or axial directions differs from the fundamental
grid's I, J or K system. The correspondence between these direction systems is shown in the
section "Direction Dependent Data" of keyword *REFINE. In general, the following can be
used for partial hybrid blocks (*IDIR, etc., denote the hybrid grid's orientation):
v ai aj ak
0.5 0.5 1.0 0.5
0.5 0.5 0.5 1.0
0.25 0.25 0.25 0.25
The following data fragment shows how to place the center of a hybrid grid on a reservoir
boundary edge. See the sample testbed data files for more examples of typical cases.
** Vertical hybrid grid on reservoir boundary in
** column I=3, J=1 refine 3 1 1:4 into 3 4 1 hybrid kdir
**
key v
ai
aj
ak
vamod 2 0.5 1.0 0.5 0.5 ** I=1 plane
vamod 3 0.5 0.5 1.0 0.5 ** hybrid half-block *KDIR
Pseudo-Infinite Blocks
The use of very large block volume modifier to model a constant-pressure boundary may
have subtle negative side effects. See Pseudo-Infinite Blocks in the manual entry for
*CONVERGE.
*NULL
PURPOSE:
*NULL indicates the input of an array of null block indicators.
ARRAY:
*NULL
DEFAULTS:
Optional keyword. Default: all blocks are active.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group.
The numerical values in the incoming array must be zeroes (0) for null or inactive blocks, or
ones (1) for active or participating blocks.
EXPLANATION:
Any of the array reading options may be used to designate the location of null blocks within
the given grid configuration.
0 = null block
1 = active block.
If the keyword *NULL is used to designate a null block and a nonzero porosity is assigned to
that block with the *POR keyword, the *NULL designation overrides the porosity value.
Since block geometry modifier array *VATYPE also can be used to indicate null blocks, it is
recommended that both *NULL and *VATYPE not appear in the same data set. If both
partial and null blocks are being specified, use only *VATYPE.
If a dual porosity model is being used, selective participation of the two porosities can be
controlled with the *NULL keyword. Using *NULL with no *MATRIX or *FRACTURE
qualifier nulls the block (including both porosities) and makes it a barrier to flow. Nulling the
block once with one of *MATRIX or *FRACTURE, and then again with the other qualifier
has the same effect. Using *NULL *MATRIX and setting each of *DIFRAC, *DJFRAC, and
*DKFRAC equal to 0 for a block accomplishes the same task. Using just *NULL *MATRIX
or *NULL *FRACTURE makes only one of the porosities non-participating. Flow can occur
to the other porosity as required.
Note that a pinched out status set by the *PINCHOUTARRAY keyword over-rides *NULL
settings. See the description of *PINCHOUTARRAY following. *NULL settings over-ride
pinch out setting generated by use of the *PINCHOUT-TOL keyword, or zero thickness
situations.
*DUALPOR
PURPOSE:
*DUALPOR indicates the use of a dual porosity model in some or all of the simulator's grid
blocks.
FORMAT:
*DUALPOR
DEFAULTS:
Optional keyword. No default.
CONDITIONS:
This keyword must be located in the RESERVOIR DESCRIPTION keyword group, before
the *REFINE, *RANGE, *NULL and *POR keywords.
Only one of *DUALPOR, *DUALPERM, *SUBDOMAIN or *MINC may be specified.
*DUALPOR option cannot be used with the *NINEPOINT or *WELLBORE options.
*DUALPOR may be used with local grid refinement *REFINE.
EXPLANATION:
This keyword indicates that a dual porosity option will be used in the simulator. This option
allows each simulator block to have up to two porosity systems, one called the matrix
porosity and the other called the fracture porosity. Each porosity can have its own porosity
value and its own permeabilities, as well as other distinct properties. Matrix properties are
described using the *MATRIX qualifier while fracture properties are described using the
*FRACTURE qualifier.
Inter-block flows are calculated in much the same manner as they would be in the standard
(no *DUALPOR keyword) model. These flows are governed by the fracture properties.
However, an additional set of matrix-fracture flows is calculated when *DUALPOR is
specified. These flows are governed either by the matrix or matrix-fracture properties
depending on the choice of the shape factor calculation (see also *SHAPE keyword).
Thus, *DUALPOR allows one matrix porosity and one fracture porosity per grid block,
where the matrix is connected only to the fracture in the same grid block. Fracture porosities
are connected to other neighboring fracture porosities in the usual manner. The presence of
both fracture and matrix porosities in a block, or just a fracture porosity or a matrix porosity,
is under user control (see the *POR and *NULL keywords). Property definition for
*DUALPOR systems usually requires the use of pairs of definitions for most items, one
carrying a *MATRIX qualifier and the other a *FRACTURE qualifier. Further details are
explained in the descriptions for the individual properties.
See J. R. Gilman and H. Kazemi, "Improvements in Simulation of Naturally Fractured
Reservoirs", SPE10511 for further details. See also Appendix E.8.
*DUALPERM
PURPOSE:
*DUALPERM indicates the use of a dual porosity model in some, or all, of the simulator's
grid blocks. Moreover, inter-block fracture to fracture flows are augmented by inter-block
matrix to matrix flows. The matrix to fracture flows within blocks remain.
FORMAT:
*DUALPERM
DEFAULTS:
Optional keyword. No default.
CONDITIONS:
This keyword must be located in the RESERVOIR DESCRIPTION keyword group, before
the *REFINE, *RANGE, *NULL and *POR keywords.
Only one of *DUALPOR, *DUALPERM, *SUBDOMAIN or *MINC may be specified.
*DUALPERM option cannot be used with the *NINEPOINT or *WELLBORE options.
*DUALPERM may be used with local grid refinement *REFINE.
EXPLANATION:
The description given above for the *DUALPOR keyword should be studied first, as this
option is closely related.
The *DUALPERM option uses the same calculations as the *DUALPOR option, except that
inter-block matrix to matrix flows are also calculated in addition to the expected inter-block
fracture to fracture flows and the matrix to fracture fluid transfer within blocks.
Thus, *DUALPERM allows one matrix porosity and one fracture porosity per grid block,
where the matrix is connected to the fracture in the same grid block. Fracture porosities are
connected to neighboring fracture porosities, and the same holds true for neighboring matrix
porosities.
Property definition for *DUALPERM systems usually requires the use of pairs of definitions
for most items, one carrying a *MATRIX qualifier and the other a *FRACTURE qualifier.
Further details are explained in the descriptions for the individual properties.
Dual permeability is often important in reservoirs with free gas and large variations in depth
for which only the vertical (K direction) matrix to matrix inter-block flows are important. If
this is so, use zero transmissibility modifiers in the I and J directions (see the *TRANSI and
*TRANSJ keywords). See also Appendix E.8.
*SUBDOMAIN
PURPOSE:
*SUBDOMAIN indicates the use of a dual porosity model using the subdomain method.
FORMAT:
*SUBDOMAIN idiv
*FRACVOL vol(1).vol(idiv)
DEFINITIONS:
idiv
Number of subdivisions for each matrix blocks, typically chosen from the
range of 2 to 5.
vol(i)
Volume fraction of matrix element i within the matrix volume of the grid
block. These volume fractions should sum to 1. The fraction i=1 corresponds
to the bottommost element.
DEFAULTS:
Optional keyword. No default.
CONDITIONS:
This keyword must be located in the RESERVOIR DESCRIPTION keyword group, before
the *REFINE, *RANGE, *NULL and *POR keywords.
Only one of *DUALPOR, *DUALPERM, *SUBDOMAIN or *MINC may be specified.
*SUBDOMAIN option cannot be used with the *NINEPOINT, *WELLBORE or *REFINE
options.
EXPLANATION:
The description given above for the *DUALPOR keyword should be studied first, as this
option is closely related.
This option allows each simulator block to have up to two porosity systems, one called the
matrix porosity and the other called the fracture porosity. Moreover, the *SUBDOMAIN
option splits up the matrix porosity vertically into "idiv" segments with a thickness depending
on *FRACVOL values. Inter-block fracture to fracture, as well as matrix to fracture and
matrix to matrix flows within a block are calculated. The *SUBDOMAIN method models
gradients (pressure, temperature, etc.) within the matrix porosity of a block.
Each block has a porosity value and permeabilities, as well as other distinct properties. Matrix
properties are described using the *MATRIX qualifier while fracture properties are described
using the *FRACTURE qualifier. Further details are explained in the descriptions for the
various properties.
For details of this method, please see J. R. Gilman, "An Efficient Finite-Difference Method
for Simulating Phase Segregation in the Matrix Blocks in Dual-Porosity Reservoirs", SPERE,
July 1986, pp.403-413. See also Appendix E.8.
204 Reservoir Description
*MINC
PURPOSE:
*MINC indicates the use of a dual porosity model using the multiple-interacting-continua
(MINC) approach.
FORMAT:
*MINC idiv
*FRACVOL vol(1).vol(idiv)
DEFINITION:
idiv
Number of subdivisions for each matrix blocks, typically chosen from the
range of 2 to 5.
vol(i)
Volume fraction of matrix element i within the matrix volume of the grid
block. These volume fractions should sum to 1. The fraction i=1 corresponds
to the innermost element.
DEFAULT:
Optional keyword. No default.
CONDITIONS:
This keyword must be located in the RESERVOIR DESCRIPTION keyword group, before
the *REFINE, *RANGE, *NULL and *POR keywords.
Only one of *DUALPOR, *DUALPERM, *SUBDOMAIN or *MINC may be specified.
*MINC option cannot be used with the *NINEPOINT, *WELLBORE or *REFINE options.
EXPLANATION:
The description given above for the *DUALPOR keyword should be studied first, as this
option is closely related.
This option allows each simulator block to have up to two porosity systems, one called the
matrix porosity and the other called the fracture porosity. Moreover, the *MINC option splits
up the matrix porosity into "idiv" nested rings according to *FRACVOL values. Inter-block
fracture to fracture, and matrix to fracture flows within a block, are calculated. Also, matrix
to matrix flows between the matrix rings within a block are calculated.
The *MINC method allows the modelling of some transient behavior within the matrix
porosity of a block.
Each block has a porosity value and its own permeabilities, as well as other distinct properties.
Matrix properties are described using the *MATRIX qualifier while fracture properties are
described using the *FRACTURE qualifier. Further details are explained in the descriptions for
the various properties.
For details of this method, please refer to K. Pruess and T. N. Narasimhan, "A Practical
Method for Modelling Fluid and Heat Flow in Fractured Porous Media", SPEJ, Feb. 1985,
pp.14-26. See also Appendix E.8.
*SHAPE
PURPOSE:
*SHAPE describes the method (which type of shape factor) is to be used in calculating
matrix-fracture flow within a naturally fractured block.
FORMAT:
*SHAPE
(*GK)
(*K-HARMONIC)
DEFINITION:
*GK
This sub-keyword indicates the use of a Gilman and Kazemi style
formulation for the shape factor.
*K-HARMONIC
This sub-keyword indicates the use of a harmonic fracture and matrix
permeability average in the shape factor calculation.
DEFAULT:
Conditional keyword. Default: *SHAPE *GK
CONDITIONS:
These keywords must be in the RESERVOIR DESCRIPTION keyword group before the
*NULL and *POR keywords.
EXPLANATION:
As a general rule, fluid flow between small porous regions is proportional to transmissibility.
The inverse of transmissibility is the sum of fluid resistance and associated geometry in each
direction. When the element size determined by *DIFRAC, *DJFRAC and *DKFRAC is not
the same as a grid block size then the fracture-matrix transfer term must be scaled up/down
by multiplying it with a ratio of block and element volume. There are different formulas in
the literature for calculation of this fracture-matrix transfer term. All of them are derived from
the formulas for flow in the porous media (mentioned above) but have different assumptions
about the effect of fracture and matrix permeability.
The Gilman and Kazemi formulation is:
G & K = 4Vb
i
k mi
L2i
1
k f i k mi
L k A / Am + Lm kf
i i fi m i fi
i
i
i
PURPOSE:
*DIFRAC indicates the input of the fracture spacing in the I direction.
*DJFRAC indicates the input of the fracture spacing in the J direction.
*DKFRAC indicates the input of the fracture spacing in the K direction.
ARRAY:
*DIFRAC
*DJFRAC
*DKFRAC
DEFAULTS:
Absence of the keyword implies that all grid blocks have zero fracture spacing (no fracture)
in that direction. If some blocks have fractures and some don't, enter zero for the unfractured
blocks. Setting values to 0 corresponds to an infinite, and hence ineffective, spacing in that
direction.
Fracture spacing corresponding to block size in a specified direction will be assigned when
*DIFRAC, *DJFRAC or *DKFRAC have negative value.
CONDITIONS:
These keywords must be in the RESERVOIR DESCRIPTION keyword group before the
*NULL and *POR keywords.
These keywords are used in conjunction with the natural fracture options *DUALPOR,
*DUALPERM, *MINC and *SUBDOMAIN.
Setting one of the fracture spacings to 0 indicates that there is no fracture plane perpendicular
to that axis. If a block is assigned a zero value for each of *DIFRAC, *DJFRAC, and
*DKFRAC, then the block's fracture porosity will be declared null and will not participate in
any simulator calculations.
EXPLANATION:
Fracture spacings together with fracture volume are used to calculate fracture and matrix
sizes in each direction. These values are used calculate the matrix to fracture transfer
coefficient as well as other geometry parameters (e.g. matrix and fracture block volume). See
detailed description in Appendix E.8.
Fracture spacings should be measured from center line to center line in the appropriate
direction. The unit is (m | ft | cm). The basic transmissibility formulas (see Appendix E.8)
are applied even when the fracture spacings exceed the grid block size. It means that all the
blocks contained in the fractured element will be fractured. The specified fracture volume
will be distributed among all blocks. If this is a concern, then reservoirs with fracture spacing
spanning several blocks should be modeled as a single porosity problem with implicit fracture
blocks. *DIFRAC and *DJFRAC fracture spacings are required for *GRID *RADIAL situations.
For such grids, *DIFRAC should be thought of as measuring spacings in the "x"-direction
(corresponding to the 0 degree axis) and *DJFRAC to spacings in the "y"-direction. Spacings are
generally inherited from parent blocks for *HYBRID grids and hence, are automatically available.
User's Guide STARS
min
max
SI
m
0.0
1.0E+4
Field
ft
0.0
32,808.0
Lab
cm
0.0
1.0E+6
Fracture spacing has a large effect on the values of effective porosity and permeability to
enter for the fracture.
*FRFRAC, *FORMINFRAC
PURPOSE:
Assign the fracture volume fraction and the rock-in-fracture fraction.
ARRAY:
*FRFRAC
*FORMINFRAC
DEFINITIONS:
*FRFRAC
Specify the fracture volume in an element as a fraction of the gross volume.
When a fracture does not contain rock then this value is equal to the effective
fracture porosity.
*FORMINFRAC
Specify what fraction of the fracture volume is rock (formation). If this
value is zero then the fracture consists entirely of open void space and the
intrinsic fracture porosity is 1. When this value is non-zero the intrinsic
fracture porosity is less than 1 and the rock (formation) intrinsic porosity is
specified via *POR *FRACTURE.
DEFAULTS:
If keyword *FRFRAC is absent then the fracture does not contain rock, in which case the
effective fracture porosity must be specified via *POR *FRACTURE.
If keyword *FORMINFRAC is absent then the fracture contains no rock (formation).
CONDITIONS:
These keywords must be in the RESERVOIR DESCRIPTION keyword group before the
*NULL and *POR keywords.
*FORMINFRAC may not be used without the *FRFRAC keyword.
EXPLANATION:
The natural fracture options *DUALPOR, etc., split a cell gross volume into two distinct
regions: (1) a fracture cell, and (2) a matrix cell or cell group. For isothermal applications it
is natural to identify the fracture cell only with the open void fracture space. In this case the
fracture cell intrinsic porosity (fracture void volume over fracture cell volume) is always one.
Therefore, early implementations used the normal fracture porosity input facility (*POR
*FRACTURE) to specify effective fracture porosity defined as the fracture void volume
over the sum of the matrix and fracture cell volumes. This definition leads to small values of
effective fracture porosity, e.g., 0.01 or 0.001.
In thermal applications the formation immediately adjacent to the fracture takes heat from the
fluid in the fracture via conduction, at a field time scale. The modeling of this effect can be
very important in predicting the propagation of heat fronts, e.g., steam breakthrough.
Therefore, in thermal applications it is common to include some part of the formation with
the fracture cell, assuming that some of the formation will have a temperature close to the
User's Guide STARS
fracture fluid value. However, this is not possible with the effective fracture porosity
technique described above.
Instead, keyword *FRFRAC lets you specify what fraction of the original gross volume
should be defined as the fracture region, and keyword *FORMINFRAC lets you specify how
much of each fracture region is actually formation. In this case, *POR *FRACTURE
specifies the intrinsic porosity of the formation portion of a fracture cell. Also in this case,
the value reported for intrinsic fracture porosity (fracture void volume over fracture cell
volume) is
f = 1 Ffr ( 1 fr )
where Ffr is specified via *FORMINFRAC and fr is the formation porosity specified via
*POR *FRACTURE. For example, if Ffr = 0.3 and fr = 0.25 then the reported intrinsic
fracture porosity will be f = 0.775. This intrinsic value is then used in calculation of block
heat capacities and thermal conductivities.
See detailed description in Appendix E.8.
Varying *FORMINFRAC
For a thermal application it is common to use *FORMINFRAC as a matching or sensitivity
parameter. You can vary *FORMINFRAC and *FRFRAC in a way that retains both the
formation pore volume and the fracture void volume. Let r be the intrinsic formation porosity
specified by *POR for both the matrix and fracture regions, let Ff be the *FRFRAC value, let
Ffr be the *FORMINFRAC value and let V be the gross volume (matrix plus fracture), all of
one block. The fracture void volume is
VFf(1Ffr)
and the total (matrix plus fracture) formation pore volume is
V(1Ff)r + VFfFfrr = Vr[1 Ff(1Ffr)]
Each of these quantities contains the quantity Ff(1Ffr). Therefore, you can change Ff or Ffr
and preserve those pore volumes as long as Ff(1Ffr) is unchanged. If matrix and fracture
cells have the same conditions (e.g., at initial conditions) then component amounts and heat
content are preserved as well. . For example, when Ff = 0.003 and Ffr = 0 these pore volumes
are 0.003V and 0.997rV. Suppose you wish to compare this with a similar case in which you
include on each side of the fracture void space an amount of formation corresponding to
twice the fracture width, that is, 80% of the fracture region is formation. To increase Ffr to
0.8 while preserving these pore volumes, change Ff to 0.003/(10.8) = 0.015.
*WELLBORE, *RELROUGH,
*LAMINAR, *TRANSIENT, *CIRCWELL, *WELLINFO, *REGIME, *WELLWALL,
*TUBINSUL, *ANNULUSWAL, *CASING, *FILM_COND, *RANGE, *WBZ, *WBZADJ
PURPOSE:
Define wells which are to be discretized. Discretized wellbore may be specified also in
recurrent data via keyword *WELLBORE-REC.
FORMAT:
*WELLBORE rw (*RELROUGH relrof)
*LAMINAR
*TRANSIENT (*ON | *OFF))
*CIRCWELL ra i j k nwbwt (*RELROUGH relrof)
*WELLINFO
*REGIME
*WELLWALL
*TUBINSUL
*ANNULUSWAL
*CASING
*FILM_COND
*RANGE
*WBZ
-or*WBZADJ
rwo
rins
rao
rcas
hcww
hcins
hcaw
hccas
nwbwin
nwbwca
DEFINITIONS:
*WELLBORE rw
Indicates that a discretized well will be defined. Each discretized wellbore
needs its own *WELLBORE keyword. Quantity rw is the inside well
radius (m | ft | cm), or inside tubing radius when well is circulating.
*RELROUGH relrof
Relative roughness values for a well (tubing).
*LAMINAR
Forces the wellbore flow to be in laminar mode so that the flow correlations
are not used. Use this keyword for vertical or deviated wells, or runs where
counter-current flow is present.
*TRANSIENT
*ON: Indicates that the transient behaviour in a wellbore will be simulated.
*OFF: Wellbore will be initialized to pseudo-steady state.
This keyword may be also used in WELL DATA Section.
User's Guide STARS
*CIRCWELL
Indicates additional information for a circulating well.
ra
Annulus inside radius (m | ft | cm), which must be greater than the tubing
radius rw.
ijk
I-J-K address of the grid block which defines the downhole end of the well
(toe). This block must be at one end of the well structure defined by *RANGE.
nwbwt
Number of sections (blocks) in the circulating well that do not contain
tubing. This, together with the I-J-K address of the downhole end, indicates
which wellbore sections will not contain tubing.
*RELROUGH relrof
Relative roughness values for an annulus.
*WELLINFO
Flags printing of detailed wellbore information.
*REGIME
This keyword indicates that another method for friction pressure drop
calculation will be used. It first evaluates the flow regime and then calculates
friction pressure drop and liquid holdup accordingly.
*WELLWALL
This keyword indicates that parameters for tubing (wellbore) wall will be
defined.
rwo
Tubing (wellbore) outside radius (m | ft |cm), which must not be less than
tubing (wellbore) inner radius rw.
hcww
Tubing (wellbore) wall heat conductivity (J/m-day-C | Btu/ft-day-F |
J/cm-min-C).
*TUBINSUL
This keyword indicates that parameters for tubing insulation will be entered.
rins
Tubing insulation outer radius (m | ft |cm), which must not be less than
tubing outer radius rwo.
hcins
Heat conductivity of tubing insulation (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
nwbwin
Number of tubing grid blocks in a discretized well without insulation (partial
tubing insulation). When tubing is shorter than annulus, indicate only the
number of tubing blocks that are not insulated.
*ANNULUSWAL
This keyword indicates that parameters for annulus wall will be entered.
rao
Annulus wall outer radius (m | ft | cm), which must not be less than the
annulus wall inner radius ra.
hcaw
Heat conductivity of annulus wall (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
*CASING
This keyword indicates that parameters for casing will be entered.
rcas
Casing outer radius (m | ft | cm), which must not be less than the annulus wall
outer radius ra.
hccas
Heat conductivity of a casing (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
nwbwca
Number of grid blocks in a discretized well without casing.
*FILM_COND
Indicates that heat transfer through a fluid film will be calculated. This
parameter together with heat conduction through walls, insulation, etc. is
used in calculation of the overall heat transfer coefficient. This heat transfer
coefficient does not include heat transfer by radiation.
NOTE: Dimensionless parameters such as Reynolds, Prandtl, Nusselt and
Grashof number are used in evaluation of heat transfer through the fluid film.
Therefore, input values for heat capacities, viscosities and heat conductivities
must be correct for each component and phase. Specifically, for heat
conductivities do not use a single average value for water, oil and gas phases.
*RANGE
Indicates the addresses of grid blocks through which the wellbore penetrates.
All discretized wellbores require the first address line; a deviated well
requires the second line as well. Each address line must indicate a range in
exactly one direction. The total number of blocks penetrated must not exceed
the dimension limit for well layers.
This keyword defines only the blocks which contain the discretized wellbore.
For a horizontal wellbore the end that is connected to the surface will be
determined by the perforation keywords in the well data section.
For a deviated wellbore the two ranges defined by the two *RANGE lines
must have exactly one block in common, which also must be at one end of
each range.
i1(:i2)
I direction index or range for well location.
j1(:j2)
J direction index or range for well location.
k1(:k2)
K direction index or range for well location.
*WBZ
Indicates that wellbore depth will be redefined. This option is useful when the
grid depth varies (that is, you used *DTOP) and you want the wellbore depth to
be constant or nearly constant. See explanation 'Depth Adjustments', below.
z(i)
Block centre depth for wellbore interval i (m | ft | cm). Enter a value for each
block addressed by *RANGE, in the order given by *RANGE. The wellbore
block centre depth must not be different from the parent block centre depth by
more than one half of the block size in the vertical direction, so that
assumptions required by the transmissibility (well index) calculation still apply.
*WBZADJ
Indicates that wellbore depth will be adjusted. This option is useful when the
grid depth is constant (that is, you did not use *DTOP) and you want the
wellbore depth to vary along its length.
dz(i)
Block centre depth adjustment for wellbore interval i (m | ft | cm). Enter a value
for each block addressed by *RANGE, in the order given by *RANGE. dz must
not exceed one half of the block size in the vertical direction, so that assumptions
required by the transmissibility (well index) calculation still apply.
DEFAULTS:
If *WELLBORE is absent, then no discretized wells will be defined.
If *RELROUGH is absent, then the relative roughness is set to 0.0001.
If *LAMINAR is absent the Reynolds number is calculated every timestep, and when flow
becomes turbulent the appropriate slip between liquid and gas phase as well as friction
pressure drop is applied.
If *TRANSIENT is absent, wellbore is set to 'pseudo steady-state conditions' initially or at
every true well change if not specified differently. If *TRANSIENT appears without *ON or
*OFF, then *ON is assumed.
If *CIRCWELL is absent after *WELLBORE, the well will not contain a tubing string.
If *WELLINFO is absent, wellbore parameters are not printed out.
If *REGIME is absent, friction pressure drop is calculated using the Dukler correlation and
liquid holdup is evaluated from Bankoff's correlation. NOTE: Keyword *LAMINAR
overrides *REGIME so that friction pressure drop and liquid holdup are not calculated.
If *WELLWALL is absent, the tubing (wellbore) outer radius is equal to the tubing inner
radius. The result is a tubing wall with zero thickness that provides no additional resistance
to heat flow.
If *TUBINSUL is absent, the tubing insulation outer radius is equal to the tubing outer
radius. The result is a tubing insulation with zero thickness that provides no additional
resistance to heat flow.
If *ANNULUSWAL is absent, the annulus outer radius is equal to the annulus inner radius.
The result is an annulus wall with zero thickness that provides no additional resistance to heat
flow.
If *CASING is absent, the casing outer radius is equal to the annulus outer radius. The result
is a casing wall with zero thickness that provides no additional resistance to heat flow.
If *FILM_COND is absent, heat transfer does not account for the presence of fluid film.
If *WBZ and *WBZADJ are absent, a wellbore block has the same depth as the centre of the
grid block that contains it.
CONDITIONS:
If *WELLBORE is present, then *RANGE must be present also.
The discretized wellbore option may not be used in a naturally fractured grid (keywords
*DUALPOR, *DUALPERM, *SUNDOMAIN and *MINC).
The discretized wellbore option may not be used in blocks that are locally refined without the
*HYBRID option of *REFINE.
When defining a discretized wellbore inside a hybrid grid, the hybrid grid must be defined
first. See explanation in the option summary at the beginning of this chapter.
The radii described above must have values in the following increasing sequence. The defaults
for rwo, rins, rao and rcas automatically satisfy this sequence.
rw rwo rins < ra rao rcas
EXPLANATION:
Aspects of the Discretized Wellbore
For some detailed discussion of this option, see Appendix A.7.
The method of modelling well flow more accurately by discretizing the wellbore separately can
be viewed as both a well option and an advanced grid option. The part of the well modelled
with grid blocks or "discretized" is defined via the above keywords; block volumes and inter
block transmissibilities are calculated as for any other block.
The part of the well not "discretized" is defined in the well data section via *WELL in the same
manner as before, with only one 'layer' which is connected to one end of the discretized part of
the well. This source/sink well provides an entrance/exit for the discretized wellbore blocks,
and controls several aspects (e.g., initialization) of the wellbore. Several source/sink wells may
be attached to a discretized wellbore at various times (e.g., to switch from injection to
production) but only one may be attached at a time.
It is common that grid properties and initial conditions are different in the wellbore. When the
keyword *TRANSIENT is not used the simulator will calculate 'pseudo steady-state' conditions
for the well- bore. This will improve the numerical performance. However, in some cases the
transient behaviour in the wellbore is of interest (injection or flow of viscous macromolecules)
and therefore the wellbore proper- ties should be set appropriately by the user in the INITIAL
CONDITIONS section. See the array input options *WELLBORE or *RG. In the output,
conditions in the wellbore penetrating a block will have a 'WB' appended, e.g., 1,1,1 + WB or
1,1,1 / 1,1,1.
Example: Horizontal producer as well #1, attached to the surface at block (1,1,1).
** Reservoir Definition Section
wellbore 0.15
range 1:4 1 1
** Recurrent and Well Section
well 1 'Producer 1'
producer 1
operate bhp 154
operate max liquid 80000
perf 1 ** i j k wi
1 1 1 wb 50
Two different methods are used to calculate the friction pressure drop and liquid holdup in
the wellbore. The first method uses Bankoff's correlation to evaluate liquid holdup and
Dukler's correlation to calculate friction pressure drop. These correlations are valid only for
co-current vertical upward or horizontal flow. This method was the only one in versions
before 98.00, and currently is the default. A more detailed description can be found in
"Aspects of Discretized Wellbore Modelling Coupled to Compositional/Thermal Simulation",
V. Oballa, D.A. Coombe, W.L. Buchanan, JCPT, April 1997, Volume 36, No. 4, page 45.
The second method (invoked with keyword *REGIME) calculates friction pressure drop and
liquid holdup according to a flow regime existing in the wellbore. These correlations are valid
only for co-current flow. This method is based on "A Comprehensive Mechanistic Model for
Two-Phase Flow in Pipelines", J.J. Xiao, O. Shoham, J.P. Brill, Proceedings from 65th Annual
Technical Conference of SPE, September 23-26, 1990, New Orleans, USA, SPE 20631.
Circulating Well
A circulating well is just a discretized wellbore with a second independent flow string in it. The
injection from surface is attached to one end of the tubing, and the injection stream flows into
the open wellbore at the end of the tubing. The resulting annulus stream flows into the reservoir
through the perforations, and excess annulus stream is produced to surface. Each discretized
wellbore stream requires that a source/sink well be attached to it in the well data section.
Properties and initial conditions can be assigned to the annulus and tubing alone using the
array input qualifiers *ANNULUS and *TUBING; the qualifier *WELLBORE refers to both
annulus and tubing. In the output, conditions in the annulus and tubing are denoted with 'WB'
and 'TU', respectively, e.g., 1,1,1 WB and 1,1,1 TU.
Example: Circulating well #1 and #2, attached to block (1,1,1); full length tubing; high initial
temperature in tubing.
** Reservoir Definition Section
wellbore 0.15
circwell 0.4 4 1 2 0
range 1:4 1 2
** Recurrent and Well Section
well 1 'TUBING'
injector mobweight 1
operate bhp 155
operate max water 80000
tinjw 355 qual .7
perf 1 ** i j k wi
1 1 2 tu 241.3
well 2 'ANNULUS'
producer 2
operate bhp 154
operate max water 80000
perf 2 ** i j k wi
1 1 2 wb 241.3
Depth Adjustments
The depth adjustment options *WBZ and *WBZADJ allow the modelling of undulating
(varying depth) wellbore in a constant-depth grid. As well, it allows the modelling of wellbore
depth different from the variable grid depth defined by the *DTOP and *DK keywords.
*WBZADJ requires only relative adjustments, and so is easy to use. However, *WBZ
requires the absolute depth which may not be apparent from your data. Whenever
*WELLBORE is used in a run, the block centre depths 'Block Centre from Ref plane' will be
printed. It is suggested that you first run the simulator initialization with no *WBZ keywords
and examine the printed depths in the grid blocks of interest. By default, the wellbore depth is
the same as the block centre. Then, enter wellbore depths that are different (within half of
block thickness) from the block depths. Check the printout for confirmation.
For a circulating well, the annulus and tubing have the same depth.
Cautionary Note
Each well in a simulation does not necessarily need to be discretized. This option should be
used with care, and only when considered necessary for an adequate representation of the
process, such as a detailed study of a horizontal well application.
Wellbore Initialization and Transient Behaviour
The initial conditions in the wellbore (tubing, annulus) dictate the length of a transient state.
When initial pressure, temperature and composition differ considerably from conditions at
which fluid is injected or produced the period of transient behaviour may be extended to
several days. Depending on the problem this may affect the final physical results (production,
pressure, temperature, saturations, etc.).
In addition, attempts to simulate the transient period will change the overall numerical
performance in comparison with the sink/source approach where pseudo-steady state is assumed.
High pressure, temperature or saturation changes occur due to small wellbore volume. Even in
an implicit simulator the timestep size will be fairly small (10e-3 to 10e-4 days, probably smaller
for high rates). For example, the worst scenario is to inject steam into a wellbore containing cold
oil, which may be the case after primary production. Thus, the well type may be changed
instantaneously, but the condition in the discretized part of the well will take time to change.
If one is not interested in the wellbore's transient behaviour, the initial conditions should be a
pseudo-steady state to avoid a lengthy equilibration period. This is achieved by omitting the
keyword *TRANSIENT.
Discretized Wellbore in Hybrid Grid
A normal discretized wellbore is connected to the block containing it with only one
connection. This is enough for most cases, where the flow is mostly one way (wellbore-toblock or block-to-wellbore) at any one time. The wellbore depth can be adjusted to be
different from the block depth so that a fluid head potential difference can be modelled, but it
is only one connection and therefore works for flow in only one direction at a time.
In order to model effectively the single-well SAGD (Steam Assisted Gravity Drainage)
process, the wellbore needs to be connected directly to blocks above it and below it, allowing
steam to rise and liquid to migrate in from the bottom at the same time. This is accomplished
by embedding the discretized wellbore inside a hybrid refined grid.
When a fundamental block contains both a discretized wellbore and a hybrid grid, the wellbore
completely replaces the innermost hybrid grid block. The discretized wellbore/annulus block
connects directly to the next outer hybrid block(s) in the hybrid grid's radial direction.
This option is invoked by defining a hybrid grid in a fundamental block, and then defining a
discretized wellbore of the same orientation in the same block. You may have a hybrid grid
surrounding any of the wellbore's sections except the corner of a deviated wellbore. If the
hybrid grid is refined into multiple blocks in the axial direction, then there will be one
discretized wellbore section in each.
You may refer to both the hybrid blocks as well as the wellbore blocks separately and
individually. For arrays, use the *RG array qualifier for hybrid blocks, and array qualifiers
*WELLBORE, *ANNULUS and *TUBING for the wellbore blocks. For example, if block
(I,J,K) contains a discretized wellbore in a hybrid grid, then use *RG I J K to refer to the
hybrid grid and use *WELLBORE I J K to refer to the wellbore blocks. For example, to
assign relative permeability type #1 to the main grid, #2 to the near-well region in block
(3,4,5) and #3 to its embedded wellbore separately, use
*KRTYPE *CON 1
** entire grid
*KRTYPE *RG 3 4 5 *CON 2
** near-well region (hybrid grid)
*KRTYPE *WELLBORE 3 4 5 *CON 3 ** wellbore or tubing/annulus
To attach a source/sink well to one end of a discretized wellbore embedded in a hybrid grid,
use *PERF and the wellbore blocks UBA. Using the above example,
*PERF *GEO 'Producer 1'
** attach s/s well to wellbore block
3 4 5 / 1 1 1 / 1 1 1
The following I-J-K block labels will appear in the output (symbols i1, j1, k1, i2, j2 and k3
are integers):
Fundamental block:
i1,j1,k1
Block in hybrid grid:
i1,j1,k1 / i2,j2,k2
Discretized wellbore in fundamental block:
i1,j1,k1 / 1,1,1 WB (non-circulating wellbore)
i1,j1,k1 / 1,1,1 TU (tubing in circulating wellbore)
i1,j1,k1 / 2,1,1 WB (annulus in circulating wellbore)
Discretized wellbore in innermost block of hybrid grid:
i1,j1,k1 / 1,1,k2 / 1,1,1 WB (non-circulating wellbore)
i1,j1,k1 / 1,1,k2 / 1,1,1 TU (tubing in circulating wellbore)
i1,j1,k1 / 1,1,k2 / 2,1,1 WB (annulus in circulating wellbore)
Note that the innermost hybrid block always has i2 = j2 = 1.
Depth adjustments entered via *WBZ and *WBZADJ will be ignored because the wellbore
fits exactly inside the hybrid grid inner block.
Reporting of Layer Flow Performance
Well layer reports are made available to RESULTS by the *LAYER option of *OUTSRF
*WELL and to the .out file by the *LAYPHASE option of *OUTPRN *WELL. In these
reports flow to and from a discretized wellbore (DW) block is treated much like a source/sink
well layer defined by *PERF. The following are important points unique to DW layers for
reporting purposes.
1. Flow involving a DW block is given a unique label for reporting purposes. Flow
between a DW block and its surrounding parent block (i,j,k) is labelled with the
UBA of the DW block, that is, i,j,k/n,1,1 where n = 1 for non-circulating DW
and n = 2 for circulating DW (annulus). An exception is DW in the centre of a
hybrid grid with angular divisions, where that flow is labelled with the UBA of
each of the 4 hybrid blocks surrounding the DW, that is, i,j,k/2,m,1/n,1,1 where
m = 1,2,3,4 for the angular sections and n is as above. Flow between tubing and
annulus in a circulating DW is labelled with the tubing block UBA, that is
i,j,k/1,1,1 or i,j,k/1,1,1/1,1,1, and reported with the tubing well.
2. The sign used in DW reports is such that injection (DW to reservoir) is (+) and
production (reservoir to DW) is (-), similar to source/sink wells.
3. Each DW report includes an extra layer that corresponds to the source/sink well
attached to it. In RESULTS this layer is labelled with -S/S- instead of a UBA.
In the .out file this layer is labelled with the UBA of the source/sink well and is
indicated as a Reference Layer with *.
4. A DW may be attached to one or more source/sink wells which may be any
combination of active and shut-in.
5. Each active source/sink well attached to the same DW will include in its layer
report the same DW layer performance. This is the case even if two source/sink
wells are injecting different phases into a DW.
6. When a DW is not attached to an active source/sink well, that is, all attached wells
are shut in, the DW may experience fluid and heat exchange with reservoir blocks
and may report these non-zero rates in its layer performance.
7. When a DW is attached to both active and shut-in wells at the same time, each
shut-in well will report zero rates for its DW layer performance while each active
well will report the actual DW layer performance.
Porosity (Required)
*POR
PURPOSE:
*POR indicates input of porosities.
ARRAY:
*POR
DEFAULTS:
Required keyword. No defaults.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group.
EXPLANATION:
Units are in fractions, dimensionless.
Porosity for wellbore and tubing blocks will be calculated automatically and reported along
with the matrix values.
See Zero-Porosity Blocks in the introductory section of this chapter. Note that a zero value
for porosity or permeability may indicate a zero-porosity block.
Natural Fracture Systems
There are two scenarios for defining the fracture in a natural fracture system (*DUALPOR,
etc.), depending upon whether or not keyword *FRFRAC is used. See the EXPLANATION
for keywords *FRFRAC and *FORMINFRAC. See also Appendix E.8, section Fracture
and Matrix Properties.
1. *FRFRAC is used. Keywords *FRFRAC and *FORMINFRAC allow you to
specify a fracture volume that contains some formation along with the fracture
void space. This is required in thermal applications where heat conduction
between fluid in the fracture and rock adjacent to the fracture is fast on field time
scales. This option allows you to specify normal intrinsic properties for the
formation, e.g., porosity and heat capacity. In this case, *POR *FRACTURE
specifies intrinsic porosity of formation in the fracture cell. Note that the Fracture
Porosity reported as output is the fracture cell intrinsic porosity (see
*FORMINFRAC). Use of *FRFRAC is recommended even if there is no
formation in fracture, to facilitate the possible conversion to thermal.
2. *FRFRAC is not used. Early implementations of natural fracture options assumed
that there is no rock (formation) associated with the fracture cell. This implies that
the intrinsic fracture porosity is always 1. Instead, *POR *FRACTURE is assumed
to be effective fracture porosity, that is, fracture volume over the sum of matrix
and fracture cell volumes. This data entry option is considered obsolete for thermal
applications but is retained for compatibility with pre-existing data sets.
*POR *MATRIX is the intrinsic formation porosity, that is, fraction of void space in a piece
of un-fractured matrix material examined independently of any fractures.
If *FRFRAC is absent, a value zero for *POR *FRACTURE indicates that the block is not
fractured. A value of zero for *POR *MATRIX indicates a zero matrix porosity (no pore
space) with no fracture.
Example #1
A simple 5 x 3 x 1 grid is used to model a naturally fractured system. Only blocks with j = 2
are fractured. Block (1,1,1) has no pore volume. There is no formation in fracture.
*POR *MATRIX *CON 0.16
*MOD 1 1 1 = 0.0
*POR *FRACTURE *CON 0
*MOD 1:5 2 1 = 0.01
Permeabilities (Required)
PURPOSE:
*PERMI indicates input of I direction permeability.
*PERMJ indicates input of J direction permeability.
*PERMK indicates input of K direction permeability.
ARRAY:
*PERMI
*PERMJ
*PERMK
DEFAULTS:
Required keywords. No defaults.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group after the *NULL
and *POR keywords.
EXPLANATION:
See Zero-Porosity Blocks in the introductory section of this chapter. Note that a zero value
for porosity or permeability may indicate a zero-porosity block. For permeability to indicate
a zero-porosity block, the permeability in all resolved directions must be zero. A resolved
direction is one in which there is more than one block.
Grid block permeabilities in each direction must be entered for all grid blocks.
If a dual porosity model is being used, values for permeabilities are required for both
*MATRIX and *FRACTURE. Matrix permeabilities are required for calculating the fluid
flow between the matrix and fracture systems, and for computing matrix to matrix flow for
*DUALPERM, while fracture permeabilities are required for calculating fracture to fracture
flows between blocks and fracture-matrix flow when *SHAPE *K-HARMONIC is used.
*MATRIX permeabilities should be the values measured from a piece of un-fractured matrix
material (intrinsic). On the other hand, *FRACTURE permeabilities should be entered as
effective fracture permeabilities; that is, the permeability of the fracture system with respect
to a ratio of fracture and element areas in a plane perpendicular to the flow. Effective fracture
permeabilities are what is usually measured during a well test or what would be computed
from an open channel flow model with multiplication by fracture porosity.
*PERMJ and *PERMK may be specified using the *EQUALSI array input
option. *PERMI must first be input. For example, for a dual
porosity/dual permeability system:
** Specify horizontal permeability
*PERMI *FRACTURE *ALL
2500. 2200. 2150. 2300. 2200.
...
The example demonstrates a scenario in which you specify only the values for the I direction
and then, if necessary, alter the values in the other directions or equate the I direction values
to the remaining directions.
Matrix/Fracture and *EQUALSI Operators
Keywords *PERMJ and *PERMK are able to use the *EQUALSI facility for entering grid
array data, even for the *MATRIX and *FRACTURE portions of the array. However, use of
*EQUALSI with *MATRIX and *FRACTURE has this additional restriction: the
*MATRIX and *FRACTURE instances of the keyword must use the same numerical
operator if an operator is used. For example, the following data fragment will not work as
expected:
*PERMI
*PERMI
*PERMJ
*PERMJ
** Operator +
** Operator * (not allowed)
min
max
SI
m
0.0
1.0E+13
Field
md
0.0
1.0E+13
Lab
md
0.0
1.0E+13
*VOLMOD
PURPOSE:
*VOLMOD indicates input of an array of bulk volume modifiers.
ARRAY:
*VOLMOD
DEFAULTS:
Optional keyword. Default: 1.0
CONDITIONS:
Values for bulk volume modifiers must be non-negative, and they may exceed 1.
EXPLANATION:
Keyword *VOLMOD applies a multiplier to a blocks bulk volume, that is, the rock as well
as the pore volume. This allows for correct accounting of heat in the rock in proportion to the
pore space. The CMG isothermal simulators may refer to *VOLMOD as a pore volume
multiplier since they are not concerned with rock volume. However, such *VOLMOD data
may be transferred directly to STARS running in either isothermal or thermal mode.
The *VAMOD facility is recommended for STARS instead of *VOLMOD for repeated
patterns like one-eighth nine spot, since the additional area factors can increase significantly
the accuracy of the pattern representation. *VOLMOD may be more convenient to use when
per-block volume modifier data comes from other software such as mapping packages. In
any case it is recommended that volume modifiers be used instead of porosity adjustments, to
avoid unusual or unphysical porosity values. This is especially true when some quantity
depends on porosity, e.g., variable permeability and chemical reactions.
*VOLMOD modifiers accumulate as data lines are read, so avoid repeated specifications for
a block. For example, if one data line specifies a multiplier of A for a block and then another
data line specifies a multiplier of B for that same block, the resulting multiplier for that block
will be AB. This often happen when values are applied to overlapping rectangular areas.
Note that multipliers larger than 1 may be used to associate volume external to the reservoir
with a grid block. For instance, total well bore volume for a gas well can be associated with the
grid block through which the well penetrates by using a multiplier for that block. This practice
is not recommended for thermal simulation since the increased block heat capacity may result
in unrealistically low temperatures near the well. See Pseudo-Infinite Blocks, below.
Natural Fracture Grids
For natural fracture grids, bulk volume modifiers can be applied to the matrix and fracture cells
separately by use of the *MATRIX and *FRACTURE qualifiers. However, the default for
fracture multipliers is still 1.0, even if *VOLMOD *MATRIX (or even just *VOLMOD)
appeared, and the default for matrix multipliers is still 1.0, even if *VOLMOD *FRACTURE
appeared. If *VOLMOD must be used instead of *VAMOD, it is recommended that *VOLMOD
*MATRIX and *VOLMOD *FRACTURE be used together, or not at all, for dual porosity
models, and that each pair of co-located matrix and fracture blocks be given the same multiplier.
Example:
The region on the right side of the following block is not part of the reservoir and constitutes
.4 of the volume of the grid block shown. Input the true average porosity for the portion of
the grid block that lies in the reservoir and assign a block volume multiplier of .6 to the block.
Reservoir
Portion
POR = 0.1
*POR
*VOLMOD
XXXXXX
XXXXXXX
XXXXXXXX
XXXXXXXXX
XXXXXXXXXX
XXXXXXXXXXX
Block (2, 3, 4)
*IJK ...
2 3 4 0.1
...
*IJK 2 3 4 0.6
Netpay (Optional)
*NETPAY
PURPOSE:
*NETPAY indicates input of an array of net pays which are to be converted internally to an
array of net-to-gross multipliers.
ARRAY:
*NETPAY
DEFAULTS:
Optional keyword. The default net-to-gross multiplier is 1.0 for grid blocks that are not
supplied with net pay values, or equivalently, net pay equals gross pay, the latter being
defined by *DK or corner point input.
In dual porosity models, net pay values can be applied to the matrix and fracture pore volumes
separately by use of the *MATRIX and *FRACTURE qualifiers. However, the default for
fracture multipliers is still 1.0, even if *NETPAY *MATRIX (or just *NETPAY) appeared, and
the default for matrix multipliers is still 1.0, even if *NETPAY *FRACTURE appeared.
It is recommended that *NETPAY *MATRIX and *NETPAY *FRACTURE be used
together, or not at all, for dual porosity models.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group.
Values for net pays must be non-negative, and may exceed the values input for gross pays.
EXPLANATION:
The keyword *NETPAY allows input of net thicknesses ( m | ft | cm ) which are converted to
net-to-gross ratios by dividing the input array values by the respective gross block
thicknesses, the latter being obtained from *DK or corner point input. These net-to-gross
ratios are used to modify the porosity array and permeability arrays in the I and J directions.
The net-to-gross ratios are used as multiplication modifiers as follows:
(a)
(b)
(c)
por is replaced by
permi is replaced by
permj is replaced by
por
permi
permj
*ntg
*ntg
*ntg
where "por" denotes the grid block's porosity as set using the *POR keyword, "permi" and
"permj" are the block's permeabilities as set using the *PERMI and *PERMJ keywords, and
"ntg" is the net- to-gross ratio as derived from the net pay value assigned by the *NETPAY
keyword divided by the appropriate thickness obtained from the *DK array or corner point
input.
Note that the permeability in the K direction is not altered. Transmissibility multipliers (see
the *TRANSK keyword following) are available for vertical flow adjustments due to full or
partial barriers caused by shales or other geological features.
The acceptable range of values for any derived net-to-gross ratio is:
min
max
SI
Field
Lab
0.0
1.0E+4
0.0
1.0E+4 0
0.0
1.0E+4
Netgross (Optional)
*NETGROSS
PURPOSE:
*NETGROSS indicates input of an array of net-to-gross multipliers.
ARRAY:
*NETGROSS
DEFAULTS:
Optional keyword. The default net-to-gross multiplier is 1.0.
In dual porosity models, net-to-gross multipliers can be applied to the matrix and fracture
pore volumes separately by use of the *MATRIX and *FRACTURE qualifiers. However, the
default for fracture multipliers is still 1.0, even if *NETGROSS *MATRIX (or just
*NETGROSS) appeared, and the default for matrix multipliers is still 1.0, even if
*NETGROSS *FRACTURE appeared.
It is recommended that *NETGROSS *MATRIX and *NETGROSS *FRACTURE be used
together, or not at all, for dual porosity models.
CONDITIONS:
This keyword should not be used with *NETPAY.
EXPLANATION:
The keyword *NETGROSS allows input of net-to-gross which are used to modify the
porosities and permeabilities in the I and J directions. The net-to-gross ratios are used as
multiplication modifiers as follows:
(a)
(b)
(c)
por is replaced by
permi is replaced by
permj is replaced by
por
permi
permj
*ntg
*ntg
*ntg
where "por" denotes the grid block's porosity as set using the *POR keyword, "permi" and
"permj" are the block's permeabilities as set using the *PERMI and *PERMJ keywords, and
"ntg" is the incoming net-to-gross ratio for the block. These modifications are used internally
and do not appear in the output.
Note that the permeability in the K direction is not altered. Transmissibility multipliers (see
the *TRANSK keyword) are available for vertical flow adjustments due to full or partial
barriers caused by shales or other geological features. Transmissibility multipliers can still be
used to further alter the flows in the I and J directions.
The acceptable range of values is:
min
max
SI
Field
Lab
0.0
1.0E+4
0.0
1.0E+4 0
0.0
1.0E+4
Transmissibility multipliers may be applied to flow along the wellbore of a discretized well.
Use the keyword corresponding to the local wellbore axial direction (which for a deviated
wellbore may change along the wells length). For example, use the following to reduce by
half the flow in a horizontal well completed in the I-direction in block (1,1,1).
*TRANSI *RG 1 1 1 CON 0.5
For *TRANSI, etc., that appear before *END-GRID use *RG to refer to the wellbore instead
of the surrounding parent block; in recurrent data you can use array qualifiers *WELLBORE,
*TUBING, *ANNULUS and *RG.
The acceptable range of values for transmissibility multipliers is:
min
max
SI
Field
Lab
0.0
1000.0
0.0
1000.0
0.0
1000.0
If both types of multipliers have been defined for a face, one coming from a *TRANLI,
*TRANLJ or *TRANLK value assigned to the higher indexed block, and a *TRANSI,
*TRANSJ or *TRANSK value assigned to the lower indexed block, then the following rules
are applied, in the order shown, to determine the final transmissibility:
1. If both values are 1, then no modification is performed (multiplier is 1);
2. If either value is 0, then no fluid flow is allowed (multiplier is 0);
3. If one value is 1, and the other is not 1, then modification is based on the non-unity
value (multiplier is the non-unity value);
4. If both values are not 1, then the arithmetic average of the two values is used
(multiplier is the average of the two values).
Thus, setting a zero *TRANLI, *TRANLJ, *TRANLK, *TRANSI, *TRANSJ, or *TRANSK
cuts off all fluid flow at a face.
These multipliers can be used to control flow between refined grids, or from the fundamental
grid to a refined grid. These multipliers apply even when faults are present (see *FAULT
following). Faults only use the *TRANLI and *TRANLJ multipliers.
The rules of how these low side multipliers apply to refined blocks is essentially the same
as those for *TRANSI (J, or K). The user should always refer to the I, J, or K indices of the
parent blocks and apply the same rules as he would on a fundamental grid to determine which
blocks multipliers are used.
These multipliers have no effect on flow between matrix and fracture in dual porosity models
(*DUALPOR and *DUALPERM). *MATRIX flow values are used for matrix to matrix flow
between different blocks in a DUAL PERMEABILITY model.
*TRANLI, *TRANLJ, or *TRANLK should not be used with *HYBRID grids.
*TRANLJ and *TRANLK may be specified using the *EQUALSI array input option,
providing that *TRANLI is entered first.
The acceptable range of values for transmissibility multipliers is:
min
max
SI
Field
Lab
0.0
1000.0
0.0
1000.0
0.0
1000.0
*PINCHOUTARRAY
PURPOSE:
*PINCHOUTARRAY defines pinch outs using an array input format. (See also
*PINCHOUT-TOL.) (This keyword replaces the older keyword *PINCHOUT.)
ARRAY:
*PINCHOUTARRAY
DEFAULTS:
Optional keyword. Default: No pinch outs.
CONDITIONS:
This keyword must be in the Reservoir Description keyword group.
*PINCHOUTARRAY cannot appear in the same data set as the *PINCHOUT-TOL keyword.
Pinched out cells may be set using *PINCHOUTARRAY, or they can detected by a thickness
tolerance set by *PINCHOUT-TOL, but only one technique is allowed per data set. Note that,
regardless of the technique chosen, blocks with true zero thickness (*DK value of 0.0, or corner
point cells entered with top corner points that are equal to bottom corner points) will be treated
as pinched out, unless they had been flagged null using the *NULL keyword (see later).
All array qualifiers and array reading options are allowed for specifying the required ni * nj *
nk values. The array values should consist of 0's to indicate blocks that are pinched out and
1's to indicate blocks that are not pinched out. (This keyword is similar to the *NULL
keyword in that 1's are used to indicate active blocks and 0's are used to indicate special
blocks that do not fully participate in the simulation.)
Note that if a vertical stack of one or more corner point cells are pinched out, and they are
surrounded above and below by active corner point cells, then the blocks above and below
will not connect to each other UNLESS the pinched out cells form an uninterrupted stack of
contacting blocks. The presence of a gap will break the connection, where *CORNER-TOL
gives the tolerance describing how close cells need to be before they are deemed to make
contact.
Pinching out blocks on *HYBRID refined grids is not recommended.
This keyword replaces the older *PINCHOUT keyword. Use of this older keyword is no
longer recommended.
EXPLANATION:
*PINCHOUTARRAY indicates the modelling of pinched out layers. Such blocks will not
participate in any of the simulator's flow calculations; that is, they will be inactive. However,
fluid will be permitted to pass through them in the vertical direction (only).
Pinched out blocks are used to remove layers from the simulator's calculations in certain
regions on a grid. Such layers may be required to model geological strata that exist in other
portions of the grid but are not present in the pinched out region. The *PINCHOUTARRAY
keyword corresponds to true geological pinch outs.
Blocks that are designated as pinched out allow fluid to pass through them vertically, but not
laterally, and fluid can pass through a stack of one or more pinched out blocks on a grid.
Pinched out blocks can also lie between active blocks on a grid and a refined grid region,
allowing fluid to pass through between the grids. Two *HYBRID grids can even be
connected vertically through intervening pinched out layers on their parent grid.
Pinched out blocks should have relatively small thicknesses (a *DK array value of near 0.0 or
matching, or nearly matching, top and bottom corner points) since the transmissibility
calculations between cells above and below the pinched out stack do not use the intervening
stack's thickness.
A pinched out status set with *PINCHOUTARRAY over-rides an inactive setting using
*NULL. This means that if a block has been designated in a *PINCHOUTARRAY list, fluid
will pass through it regardless of it having been also designated inactive in a *NULL list.
However, a *NULL setting overrides zero thickness; that is, a zero thickness block will not
allow vertical fluid passage if it is flagged inactive using the *NULL keyword. Note that
zero thickness overrides zero pore volume; that is, a block that is pinched out due to having
zero thickness will allow fluid passage regardless of whether it was assigned non-zero
porosity values or not.
The simulator uses the following hierarchy when determining whether a block is pinched out
(allows vertical fluid passage) or is completely inactive. Note that Rule (1) overrides Rule
(2), which overrides Rule (3), which overrides Rule (4).
1. The block has been flagged as pinched out using the *PINCHOUTARRAY
keyword (a 0 value was assigned). This block will always be pinched out and this
state will not be overridden.
2. The block has been flagged as inactive using the *NULL keyword (a 0 value was
assigned). This block will not allow vertical fluid passage, unless overridden by
Rule (1).
3. A zero thickness block will be pinched out (allows vertical fluid passage) if not
overridden by Rules (1-2).
4. A zero pore volume block will be inactive and not allow any fluid passage unless
overridden by Rules (1-3).
Example:
To pinch out the second layer of a 100 X 100 X 9 model use the following:
*PINCHOUTARRAY *IJK 1:100 1:100 2:2
Note that the remaining blocks in the model need not be referred to and their state remains
unaltered.
*PINCHOUT-TOL
PURPOSE:
*PINCHOUT-TOL controls the minimal thickness required to initiate an automatic pinched
out connection (see also *PINCHOUTARRAY).
FORMAT:
*PINCHOUT-TOL pnctol
DEFINITIONS:
pnctol
Minimal thickness required under which a block is removed from the
simulation and the block above it is connected directly to the block below.
Dimensions are (m | ft).
DEFAULTS:
Optional keyword. The defaults are:
-
0.0010 (m | ft) for Corner Point grids on the fundamental grid only, if
*PINCHOUTARRAY does not appear;
0.0002 (m | ft) for non-Corner Point grids on the fundamental grid only, if
*PINCHOUTARRAY does not appear;
(m | ft) otherwise.
EXPLANATION:
Blocks whose thickness are less than pnctol are considered to be pinched out. When this
occurs, blocks above and below the pinched out blocks are connected as if the pinched out
blocks did not exist. The minimum thickness pnctol at which this occurs is controlled
using *PINCHOUT-TOL.
Pinched out blocks are used to remove layers from the simulator's calculations in certain
regions on a grid. Such layers may be required to model geological strata that exist in other
portions of the grid but are not present in the pinched out region. The *PINCHOUT-TOL
and *PINCHOUTARRAY keywords correspond to true geological pinch outs.
Blocks that are designated as pinched out allow fluid to pass through them vertically, but not
laterally, and fluid can pass through a stack of one or more pinched out blocks on a grid.
Pinched out blocks can also lie between active blocks on a grid and a refined grid region,
allowing fluid to pass through between the grids. Two *HYBRID grids can even be
connected vertically through intervening pinched out layers on their parent grid.
*NULL settings override *PINCHOUT-TOL-generated pinch outs; that is, a small thickness
block will not allow vertical fluid passage if it is flagged inactive using the *NULL keyword.
Note that small thickness overrides zero pore volume; that is, a block that is pinched out due
to having small thickness will allow fluid passage regardless of whether it was assigned nonzero porosity values or not.
Faults (Optional)
*FAULT
PURPOSE:
*FAULT indicates the input of designations for grid blocks whose flow connections are to
take into account their exact position in the reservoir with respect to their lateral neighbours.
Each *FAULT keyword is expected to describe a group of grid blocks that together form a
geological fault block.
FORMAT:
*FAULT
throw
i1:i2 j1:j2
:
:
DEFINITIONS:
throw
Geologically speaking, "throw" is the difference in depth between a
geological fault block and neighbouring reservoir rock. (m | ft | cm).
In the simulator, throws provide modifications to depth data given earlier
through use of the *DEPTH, *DTOP or *PAYDEPTH keywords. A zero
throw is valid if the depth information is already complete and only the
identification of the grid blocks involved in the geological fault block is
required.
i1:i2 j1:j2
The indices, i1, i2, j1, and j2 locate grid block columns whose first index (I
index) lies between i1 and i2 inclusive, whose second index (J index) lies
between j1 and j2 inclusive, and whose third index (K index) lies between 1
and nk inclusive.
The grid block columns identified by successive lines of these indices will
make up a geological fault block.
DEFAULTS:
Optional keyword. Default: no faults.
CONDITIONS:
*FAULT should not be used with *GRID *CORNER. (Fault data can be entered directly for
corner point grids.)
EXPLANATION:
Geologic faults are formed when a portion of the reservoir is dislocated with respect to
another portion. These dislocated portions form geological fault blocks. Lateral flow cannot
follow the usual geological strata in these cases. To take this into account when modelling a
reservoir, it is necessary to be able to group grid blocks into fault blocks, and to take account
of these fault blocks when developing inter-block communication.
The fault model described here assumes that each geologic fault block can be described by
the grid blocks in a collection of grid block range descriptions which operate as noted above.
Note that fault blocks must extend through the entire reservoir. For convenience, a "throw"
value can be applied to the depths of all grid blocks in a fault block.
Note that throws can be positive, zero, or negative, and that they will be added directly to the
already existing depth values. Thus, comments given earlier regarding depth measurements
(see *DEPTH, *DTOP and *PAYDEPTH keywords) will apply. If a full and correct depth
array was introduced earlier (using the *PAYDEPTH option, for instance), the throw values
can be set to 0.0. (If a grid block is assigned to more than one fault block, throws accumulate
in the order they are input.)
When it comes time to compute transmissibilities for lateral inter-block flow, and fault blocks
are present, special checking is carried out. For instance, if lateral flow into grid block (I,J,K)
from its positive I-direction is being considered, which is normally flow from block
(I+1,J,K), and *FAULT keywords appeared, the following is done.
If the high side of block (I,J,K) lies on the edge of a fault block (that is, (I,J,K) was identified
in a *FAULT list that did not refer to (I+1,J,K)), or any block in the adjacent column has its
low side on the edge of a (necessarily) different fault block (that is, (I+1,J,K) was identified
in a *FAULT list that did not refer to (I,J,K)), then block (I,J,K) will be connected to ANY
block of the form (I+1,J,KK) that has a positive vertical overlap with block (I,J,K). Moreover,
the transmissibility calculation will take into account the amount of actual overlap. A similar
calculation will be done for the low side of block (I,J,K), and for the J direction cases.
Vertical transmissibility calculations are not affected by such fault considerations, as are
flows internal to fault blocks.
Thus, exact positioning at fault block boundaries governs inter-block flows, as grid blocks in
one fault block will no longer align with their usual lateral neighbours.
The acceptable range of values for throws are:
min
max
SI
m
1.0E-3
1.0E+3
Field
ft
.00328
3,280.0
Lab
cm
0.1
1.0E+5
*FAULTARRAY
PURPOSE:
*FAULTARRAY signals the input of an array of binary flags which controls whether
individual block faces are connected using standard connections or fault connections.
ARRAY:
*FAULTARRAY
DEFAULTS:
Standard connections assumed.
CONDITIONS:
This keyword must be in the Reservoir Description keyword group. *FAULTARRAY is not
necessary with corner-point options as the block corners determine connections directly. For
Cartesian grids, GridBuilder will automatically generate this array if faults exist in the topmost
structure map. Care must be taken if the user overrides the automatically generated values.
All array reading options are valid. The most commonly used array reading subkeyword used
with this option would be *CON.
EXPLANATION:
The *FAULTARRAY values consist of a single integer which defines how all of a grid
blocks connections are made. A standard connection does not account for depth as it connects
two blocks. It only takes layer number into account. In other words, blocks are connected
even if the difference in the two block depths make a physical connection impossible. A fault
connection accounts for depth when creating a connection and would create connections
between blocks which physically touch. This is the default for all corner-point options.
The value of *FAULTARRAY controls how each of the four areal connections are made.
The four connections are labeled nilow, nihigh, njlow, njhigh where i refers to the i direction
and j refers to the j direction. Low refers to flow between block i (or j) and i-1 (or j-1). High
refers to flow between block i (or j) and block i+1 (j+1).
The *FAULTARRAY binary integer flag uses the following convention:
nilow, nihigh, njlow, njhigh = 0 if the connection is a standard connection
nilow, nihigh, njlow, njhigh = 1 if the connection is a fault connection
The value of *FAULTARRAY for a block is:
IVAL = nilow + 2*nihigh + 4*njlow + 8*njhigh
Thus if all connections are standard IVAL = 0, and if all connections take into account block
depths (are fault connections), IVAL = 15.
Use:
**all connections areally are fault connections
*FAULTARRAY *CON 15
**all i connections are fault connections,
**all J connections are standard
*FAULTARRAY *CON
3
Example:
Standard Connections:
i Connections
1,1 is connected to 2,1
Fault Connections:
j Connections
2,1 is connected to 3,1
3,2
2,2
3,1
2,1
1,2
1,1
*TRANSF
PURPOSE:
Adjusts transmissibilities on a fault basis.
FORMAT:
*TRANSF
Fault_Name
<pair or single>
<pair or single>
fault_trans_mult
DEFINITIONS:
*TRANSF
Keyword introducing the fault name, multiplier and fault description.
Fault_Name
A quoted name for this fault.
fault_trans_mult
Transmissibility multiplier for the connections across this fault. Multipliers
of this type apply cumulatively to previously applied multipliers.
<pair or single>
Identifiers for the connections that are to make up this fault. The identifier
can either be of the pair or single variety. A pair identifier looks like:
i1 j1 k1 [*IDIR or *JDIR or *KDIR] i2 j2 k2
which refers to an existing connection between cells, while a single
identifier looks like:
i1 j1 k1 [*IDIR- or *IDIR+ or *JDIR- or *JDIR+ or *KDIR- or *KDIR+]
which refers to all connections on a certain cell face. Multiple mixed pair
or single identifiers can follow a *TRANSF line.
DEFAULTS:
Optional keyword.
CONDITIONS:
This keyword, if present, must be in the RESERVOIR DESCRIPTION keyword group.
Pair-type identifiers should refer to pairs of cells that actually are connected in the grid
direction specified by the given direction identifier (*IDIR, *JDIR or *KDIR). Refined grid
cells cannot be referenced in the description of a pair or single identifier.
EXPLANATION:
This keyword allows the imposition of a single multiplier to a group of connections. The
group of connections can be thought of as corresponding to a single fault, and the multiplier
as a way of adjusting the sealing properties of this fault. If the descriptor is of pair type, the
multiplier will be applied to an (existing) connection. If the descriptor is of single type, the
multiplier will be applied to all connections that the cell has to other cells on a specified face.
User's Guide STARS
The face for the latter is identified using *IDIR-/+, *JDIR-/+ or *KDIR-/+ descriptors. The
- identifier refers to the face crossed by moving from the cell to its neighbour along the grid
direction corresponding to decreasing the appropriate I, J or K index, and the + identifier to
increasing the appropriate I, J or K index. The multiplier can be 0 if desired, which will
eliminate connections.
For non-isothermal simulations, this multiplier applies only to fluid flow, not to heat flow.
Duplicate Assignments to a Cell Face
If multiple instances of *TRANSF attempt to assign a factor to the same cell face more than
once, only one instance of the assignment will be accepted, that is, the factor is applied only
once. However, no check for duplicate assignments is done while processing a single
instance of *TRANSF with a list of cell faces. Therefore, data entry must be done carefully.
Consider the following examples in which a multiplier of 105 is assigned to the face between
blocks (5,1,1) and (6,1,1).
** The following data will assign the factor only once
** since duplicate assignment is detected
*TRANSF 'Fault1' 1e5
5 1 1 *IDIR 6 1 1
*TRANSF 'Fault1' 1e5
5 1 1 *IDIR+
*TRANSF 'Fault1' 1e5
6 1 1 *IDIR** The following data will assign the factor twice
*TRANSF 'Fault1' 1e5
5 1 1 *IDIR+
6 1 1 *IDIR-
Aquifer Model
( *BOTTOM | *BOUNDARY |
{ *REGION i1(:i2) j1(:j2) k1(:k2) (direction) } )
*AQMETHOD ( *CARTER-TRACY | *FETKOVITCH
| *SEMI-ANALYTICAL )
*AQPROP
Thickness Porosity Permeability Radius Angle (R-Ratio)
*AQVISC
Aqvisc
*AQCOMP
Aqcomp
*AQLEAK
( *ON | *OFF )
*HFPROP
( aqrcap aqrcnd )
*AQGEOM
( *RECTANG | *RADIAL ) ( *INFINITE | *FINITE )
DEFINITIONS:
*AQUIFER
Specifies the aquifer location, via one of three methods:
Use *BOTTOM to connect aquifer to the bottom of the reservoir.
Use *BOUNDARY to connect aquifer to all boundary blocks in the sides of
the reservoir.
Use *REGION to connect aquifer to an arbitrary list of fundamental grid blocks
via I-J-K address ranges i1(:i2) j1(:j2) k1(:k2). The *REGION keyword and the
data following it may appear multiple times after *AQUIFER if necessary to
describe a complex geometry. Use optional direction (*IDIR, *JDIR or *KDIR)
for connection to the block face on the exterior reservoir boundary in the
indicated direction. Interior block faces are ignored. For example, for *IDIR the
connection is to the -I face when I = 1 and to the +I face when I = NI.
*AQMETHOD
Specifies the method used to calculate water influx from the aquifer. The
choices available are *CARTER-TRACY, *FETKOVITCH and *SEMIANALYTICAL. See Water Influx Models in EXPLANATION below for
discussions of these methods.
*AQVISC aqvisc
Aquifer water viscosity (cp). Use this keyword only to over-ride the default.
*AQCOMP aqcomp
Total aquifer compressibility (1/kPa | 1/psi). Use this keyword only to override the default.
*AQPROP
Specifies the following aquifer properties:
Thickness
Porosity
Aquifer porosity.
Angle
R-Ratio
aqrcnd
Thermal conductivity of rock in the aquifer (J/m-day-C | Btu/ftday-F). A non-positive value triggers the default.
DEFAULTS:
Absent
Action
*AQUIFER
No aquifer calculations.
*AQMETHOD
*AQPROP
R-Ratio
R-Ratio = 100
*AQVISC
*AQCOMP
*AQLEAK
*AQLEAK *OFF.
*HFPROP
aqrcap
aqrcnd
*AQGEOM
In the above, average refers to a pore volume weighted average taken over aquifer
connecting cells, and contact area means the sum of the areas of all cell faces that are
defined to contact the aquifer, as specified by the *AQUIFER keyword.
CONDITIONS:
These keywords must be in the Reservoir Description keyword group.
The composition of water in the aquifer is specified via keyword *AQFRCOMP in the
COMPONENT PROPERTIES chapter.
The minimum required keyword to enable water influx is *AQUIFER followed by either
*BOTTOM, *BOUNDARY, or a *REGION definition. To enable heat conduction
calculations, the minimum additional required keyword is *HFPROP.
Multiple aquifers maybe specified, that is, keyword *AQUIFER may appear more than once.
Defaults are applied separately for each *AQUIFER definition.
EXPLANATION:
The aquifer models described here allow water and heat influx (and outflow for *AQLEAK
*ON) to a reservoir from one or more aquifers. Use of these aquifer models can be more
economical for simulation purposes than using many grid blocks filled with water. However, if
great accuracy is required in modeling aquifers then water filled blocks should be used.
Water Influx Models
The *CARTER-TRACY water influx calculation option is a Carter-Tracy approximation. For
more information, refer to R. D. Carter and G. W. Tracy, "An Improved Method for Calculating
Water Influx", Trans., AIME, Vol. 219, (1960), 415-417. This method uses a dimensionless
pressure influence function P(td), expressed as a function of dimensionless time td. The
function is defined using a table (see keyword *AQFUNC), along with an extrapolation method
for dimensionless times that go beyond the end of the table. If the internal infinite extent
aquifer table is used, an analytical expression is used for the extrapolation (see the Van
Everdingen and Hurst reference mentioned in the *AQFUNC section). Otherwise, linear
extrapolation in dimensionless time is used, which is appropriate for finite aquifers. See
Appendix D.19 for further discussion of the Carter-Tracy and Fetkovitch options.
The *FETKOVITCH water influx calculation option is based on work by Fetkovitch (see M.
J. Fetkovitch, "A Simplified Approach to Water Influx Calculations - Finite Aquifer
Systems", JPT, July 1971, 814-828). This approach is able to model finite aquifers via
parameter R-Ratio and does not need dimensionless pressure function *AQFUNC.
The *SEMI-ANALYTICAL water influx calculation option is based on an extension of the
work by Vinsome and Westerveld. See "A Simple Method for Predicting Cap and Base Rock
Heat Losses in Thermal Reservoir Simulators", Vinsome, P.K.W. & Westerveld, J.D., JCPT,
July-September 1980, Volume 19, No. 3). With this method, the water influx from an
adjacent aquifer region is predicted using a semi-analytical pressure profile based on a onedimensional single-phase flow assumption. See Appendix D.12 for further discussion.
Heat Conduction Model
To model heat conduction to and from an aquifer, the keyword *HFPROP must be specified.
The method for heat conduction calculation is a semi-analytical formulation similar to the
*SEMI-ANALYTICAL water influx method. Heat conduction can be calculated for any of
the water influx methods. For a thermal run (keyword *ISOTHERMAL absent), heat
transferred with convective flow is always accounted for, independent of conduction.
Geometry Options
Flow of water and heat in the aquifer may be either linear or radial. Linear flow is appropriate for
situations such as bottom water where the areal confinement of the aquifer is similar to that of the
reservoir. Radial flow is useful for single-well problems where there is a surrounding aquifer in the
horizontal direction. Specify which geometry to use via *AQGEOM. The aquifer geometry type
for heat conduction is the same as the one for water influx if *SEMI-ANALYTICAL is used, and
will take the one assigned by *AQGEOM or by default for *CARTER-TRACY and
*FETKOVITCH.
*AQPROP specifies the aquifer properties for calculations of water influx from the aquifer.
For a boundary aquifer (*BOUNDARY) with *CARTER-TRACY and *FETKOVITCH,
*AQPROP defaults (Thickness, Angle and Radius) envision a cylindrical reservoir with the
aquifer contacting the reservoir around the full cylinder. The defaults are constructed so that
the average thickness multiplied by the circumference gives the contact area calculated from
the reservoir defined.
For a bottom aquifer (*BOTTOM) with *CARTER-TRACY and *FETKOVITCH,
*AQPROP defaults envision a square contact area with a dimension of L. Thus, L is equal to
the square root of the bottom contact area. An average reservoir thickness H is also used in
these calculations. The model assumes the aquifer is bounded by the edges of a wedge
coming up to the bottom of the reservoir, as shown in the following side view of the
reservoir. The aquifer angle (Angle) is taken from the wedge angle and equals to
2*Arctan(L/H)/360, aquifer thickness (Thickness) taken as L, and the effective reservoir
radius (Radius) taken as the square root of (L*H/).
L
Reservoir
H
L
2 Arctan
H
Aquifer
Detailed Output
Use the subkeywords *AQWATCUM, *AQWATRATE, *AQHEATCUM and
*AQHEATRATE of *OUTPRN *GRID, *OUTSRF *GRID and *OUTSRF *SPECIAL
*BLOCKVAR to see instantaneous rates and net accumulations for the aquifer regions
attached to each grid block. Since aquifer regions normally are attached to select boundary
blocks, the full grid output will be mostly zeros; also, the quantities are proportioned to the
block face areas and so may not be useful to compare between blocks. The most useful output
may be via the special history *BLOCKVAR in which histories of selected quantities for
selected blocks may be chosen.
Another useful printout is the *AQSTAT option, which reports the net and rate quantities
*AQWATCUM, *AQWATRATE, *AQHEATCUM and *AQHEATRATE in column format
for the active aquifer regions only. See the *OUTPRN manual page.
The total net flow of water and energy is reported along with the usual material balance
statistics in the test output file.
These quantities are relative to the aquifer, so a positive value indicates a gain by the aquifer
and therefore a loss by the reservoir grid block.
EXAMPLES:
Multiple Aquifers
To model water and heat influx into all boundary blocks in the sides and at the bottom of the
reservoir, use the following:
*AQUIFER
*AQMETHOD
*AQGEOM
*AQPROP
*HFPROP
*BOUNDARY
*FETKOVITCH
*RECTANG *FINITE
240.0 0.3 100.0
35.0 24.0
*AQUIFER
*AQMETHOD
*AQGEOM
*AQPROP
*HFPROP
*BOTTOM
*FETKOVITCH
*RECTANG *FINITE
102.04 0.25 250.0
35.0 24.0
802.41
0.0
1.00
0.0
1.5
0.0
In this example, the numerical method employed for water influx calculations of both
aquifers is the Fetkovitch formulation and both aquifers retain a rectangular, finite geometry
type for heat flux calculations. For the bottom aquifer zeroes indicate default values for the
effective reservoir radius (Radius), angle of influence (Angle) and R-Ratio.
Multiple *REGION Aquifers
Multiple use of *REGION following *AQUIFER keyword is allowed to define complex
aquifer connections,
*AQUIFER *REGION 1:10
*REGION 1
*REGION 2:9
1
2:10
2:9
1
1
1
*JDIR
*IDIR
*KDIR
However, if multiple aquifer connections are intended for a block, such as the blocks at the
corner of a reservoir, multiple aquifer definition should be used. For a block in a corner (e.g.,
i=1, j=1 and k=1), aquifers attach in all three directions, the correct input should be:
*AQUIFER
.
*AQUIFER
.
*AQUIFER
*REGION
*IDIR
*REGION
*JDIR
*REGION
*KDIR
*AQFUNC
PURPOSE:
Define dimensionless pressure influence function for the Carter-Tracy water influx method.
TABLE:
*AQFUNC
{ td P(td) }
DEFINITIONS:
td
Dimensionless time.
P(td)
Dimensionless pressure influence function.
DEFAULTS:
See EXPLANATION for a discussion of the default table.
CONDITIONS:
This keyword may be used only with the Carter-Tracy option of *AQUIFER.
EXPLANATION:
If water influx from (to) the aquifer is calculated using the Carter-Tracy approximation, a
dimensionless pressure influence function P(td) as a function of dimensionless time td is
required.
The default dimensionless pressure function is for a constant terminal-rate solution and an
infinite radial aquifer, given in A. F. Van Everdingen and W. Hurst, "The Application of the
Laplace Transform to Flow Problems in Reservoirs", AIME Dec. 1949, pp.305-324.
Influence functions for limited extent aquifers also can be found in this reference.
Additional tables may be found in Appendix D.19.
*PVCUTOFF
PURPOSE:
*PVCUTOFF controls the level at which a block will be set null due to a small pore volume.
FORMAT:
*PVCUTOFF pvcut
DEFINITIONS:
pvcut
Pore volume (block volume multiplied by porosity) below which a block will
be considered to be null. Dimensions are (m3 | ft3 | cm3); see below.
DEFAULTS:
Optional keyword. Default is to examine the *POR values and any *NULL keyword input for
null block determination.
CONDITIONS:
This keyword, if present, must be in the RESERVOIR DESCRIPTION keyword group.
EXPLANATION:
This option ensures that blocks with small pore volumes can be systematically removed from
the simulation. Such small pore volume blocks can hinder convergence and should not
remain in a simulation.
Advanced Unit Usage
If normal unit systems are used for *INUNIT without exceptions, then the unit of pvcut
corresponds to volume. However, the unit of pvcut is actually (length)3 instead of volume,
where length and volume are basic unit types defined in tables found in the EXPLANATION
for *INUNIT. For normal unit systems (length)3 is effectively the same as volume.
However, use of the *EXCEPT option may result in a case where (length)3 is not the same as
volume. For example, for *INUNIT *FIELD length is ft and volume is ft3. If *EXCEPT 4
0 is added then length is m instead of ft, so that the unit of pvcut is m3 even though volume
is still ft3.
Sectors (Optional)
*SECTOR
PURPOSE:
*SECTOR controls the definitions of sectors, which are used to summarize regional reservoir
activity.
FORMAT:
*SECTOR 'Sector_Name'
i1:i2
:
j1:j2
:
k1:k2
:
DEFINITIONS:
'Sector_Name'
Sector identification name (16 characters maximum), enclosed in quotes.
The name 'Entire Field' is reserved for internal use (see DEFAULTS, below).
i1:i2
Indicates the I beginning and ending indices of the grid region where the
sector is to be located.
j1:j2
Indicates the J beginning and ending indices of the grid region where the
sector is to be located.
k1:k2
Indicates the K beginning and ending indices of the grid region where the
sector is to be located.
DEFAULTS:
The first sector is defined internally as all grid blocks in the field, and is called 'Entire Field'.
If *SECTOR is absent, no additional sectors are defined.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group.
Use keywords *WPRN and *WSRF to enable writing of sector statistics to the output file and
SR2.
EXPLANATION:
Sectors are collections of grid blocks. Various simulation results are available by sector in
both the text output and the graphical output, making sectors useful for obtaining regional
summaries. A grid block may belong to any number of sectors.
S1
S1
S1
S1/S3
S3
S3
S3
J=5
S1
S1
S1
S3
S3
S3
S2/S3
J=4
S1
S1
S1
S2
S2
S2
S2
S2
S2
S2
S2
S2
S2
S2
S2
J=3
J=2
S2
J=1
I=1
1:3
4
3:6
4:7
5:7
6:7
7
4:7
4:6
6
1
2
3
4
5
5:6
1
1
1
1
1
1
1
1
There is considerable flexibility in the way the *SECTOR keyword can be used. For an
alternative method see the *SECTORARRAY keyword.
See keyword *WPRN for the list of sector statistics.
*SECTORARRAY
PURPOSE:
*SECTORARRAY defines Sectors (see *SECTOR) using an input format. Sectors permit
output to be printed on a regional basis.
ARRAY:
*SECTORARRAY 'Sector_Name'
DEFINITIONS:
'Sector_Name'
Same as for *SECTOR.
DEFAULTS:
Comments for keyword *SECTOR regarding default sectors apply here as well.
If SECTORARRAY is absent, then no additional sectors are defined.
CONDITIONS:
This keyword must be in the RESERVOIR DESCRIPTION keyword group. All array
qualifiers and array reading options are allowed for specifying the required ni * nj * nk
values. The qualifiers and array values should come after 'Sector_Name'. The array values
should consist of either 0 (no sector membership for that cell) or 1 (indicating sector
membership for that cell).
EXPLANATION:
Sectors are collections of grid blocks that the simulator uses to summarize various quantities.
A grid block can belong to different sectors. See the description of *SECTOR above for
further information about sectors.
The *SECTORARRAY keyword provides an array-based alternative to the *SECTOR rangebased input format.
Example:
To set sector membership in a sector named 'Sector-1' for a few cells in the reservoir, use the
following
*SECTORARRAY 'Sector-1' *IJK 1:5 1:5 1:1 0
4
4
1 1
2
3
1 1
where it is assumed the grid is dimensioned 5x5x1. Note that the string "1:5 1:5 1:1 0" is not
actually required as "no membership" is the default state.
where it is assumed that the grid is dimensioned 5x5x2. Provided that this not a dual porosity
problem, then three sectors will be defined in the simulation: 'LAYER-1', 'LAYER-2' and the
default sectors.
Keyword *DILATION accesses a dilation-recompaction option that was developed for cyclic
steam stimulation but is applicable for other processes and scenarios with appropriate
parameter values. Keyword *EPCOMPACT enables a compaction-rebounding model with
elastic-plastic deformations.
Overburden Heat Loss Option
The heat loss directions and over/underburden thermal properties for the semi-analytical
infinite-overburden heat loss model is specified by the following keywords:
*HLOSSPROP *HLOSST *HLOSSTDIFF
Electrical Heating
The electrical heating option is enabled by keyword *ELECHEAT, and static properties like
electrical conductivity are specified.
Natural Fracture Changes in v2007
The natural fracture options triggered by *DUALPOR, etc., have been enhanced significantly
and a number of important bugs have been fixed. Previously "effective" fracture porosity
was entered and used (incorrectly) for calculation of quantities (e.g., heat capacity, thermal
conductivity and reaction rates) that required "intrinsic" porosity. Starting with v2007
fracture and matrix porosities are treated consistently and pseudo values of these properties
are not needed. Also, numerous improvements have been made to internal natural-fracture
calculations for both fluid flow and heat conduction, and the Users Guide was corrected.
Existing data sets will need some modification of the properties organized under
*ROCKTYPE. Previously these properties were given pseudo values calculated from
intrinsic (unfractured matrix) values using formulas found in the section "Fracture and Matrix
Properties" of Appendix E.8. Now, these input parameters should have their intrinsic values.
Consequently there is no longer a need for separate *ROCKTYPE types for matrix and
fracture if they have the same intrinsic formation properties.
Take as an example template "sttst28.dat" which has no formation/rock in the fracture blocks.
First consider the previous data, before v2007. The matrix *ROCKTYPE data was
*CPOR 3E-6
*ROCKCP 35
*THCONR 24
*THCONW 24
*THCONO 24
*THCONG 24
*HLOSSPROP OVERBUR 35 24 UNDERBUR 35 24
*ROCKCP 0
*THCONR 0
*THCONW 16
*THCONO 16
*THCONG 16
*HLOSSPROP OVERBUR 35 24 UNDERBUR 35 24
In the fracture data note the value of 0 for *ROCKCP and *THCONR, as well as the fluid
thermal conductivity values that are 2/3 the matrix values. These were pseudo values
calculated to obtain the desired end result from the previous treatment of fracture blocks.
Starting with v2007 the matrix (intrinsic) rock type data noted above is applied to both matrix
and fracture blocks, so that only one *ROCKTYPE is needed. Rock properties *ROCKCP
and *THCONR are not used in these fracture blocks which contain no rock. The fracture
fluid phase thermal conductivities now require intrinsic values 24 instead of the previous
pseudo value of 16 (2/3 of 24).
For the matrix properties it appears that the values are unchanged but this is not strictly true.
The previous matrix "effective" values usually were close to the intrinsic values so it was a
common practice to enter the intrinsic values instead. Now, use of the intrinsic values is
strictly correct.
New keywords *FRFRAC and *FORMINFRAC let you specify that a fracture cell contains
some formation, in a way that is consistent and correct with regard to porosity treatment.
Specification of pseudo properties from complex formula in Appendix E.8 is no longer
needed, greatly reducing the task of data preparation for the rock-in-fracture modelling
technique. For example, see templates "sttst29.dat" and "sttst31.dat".
New keyword *SHAPE lets you control which type of shape factor is used in calculating
matrix-fracture flow in natural fracture grid systems: *GK (Gilman-Kazemi, the default) or
*K-HARMONIC. Previously the shape factor always used was *GK instead of what the
Users Guide indicated. See new templates "stgro041.dat", stgro042.dat" and "stgro043.dat".
Generally natural fracture results generated by v2007 are close to previous results after the
required data conversion. Because of numerous bug fixes and improvements to low-level
calculations in the natural fracture treatment, only the simplest cases (uniform, isotropic,
isothermal) will obtain exactly the same results. Most of these improvements affect aspects
of the result that usually are of only second order importance. However, the improved
consistency shows more in cases where some specific aspect becomes of primary importance
(e.g., mimic natural fracture grid with suitable single-porosity grid type).
Generated result differences will be more pronounced in rock-in-fracture cases, which can
depend largely on the pseudo values used for fracture rock properties. The formulas for
these pseudo values went through several revision stages, the last of which appeared only in
interim releases after v2006.10. Before v2007 the basis of the natural fracture feature was not
really intended for rock-in-fracture usage, so a number of small inconsistencies were present
even if the rock property pseudo values were correct by the latest formula. Starting with
v2007 the rock-in-fracture feature is treated consistently, so some result differences are
expected. In addition, data entry is much simpler since only intrinsic rock and thermal
properties are needed.
*END-GRID
PURPOSE:
*END-GRID flags the beginning of the data that defines the other reservoir properties.
FORMAT:
*END-GRID
CONDITIONS:
This keyword must occur after all the grid definition keywords in chapter Reservoir
Description and before keywords in this chapter Other Reservoir Properties.
EXPLANATION:
This keyword signals the Grid Module to stop reading and processing data, and passes control
back to STARS.
This chapter consists largely of keywords that are unique to STARS, and so not found in the
other CMG simulators and hence are not in the Grid Module.
Rock Type
*ROCKTYPE, *THTYPE
PURPOSE:
Define and assign multiple rock property types.
FORMAT:
*ROCKTYPE key (COPY old_key)
ARRAY:
*THTYPE
DEFINITIONS:
key
Rock property type key. All rock properties listed below will be assigned to
this rock type number until another *ROCKTYPE is encountered.
*COPY old_key
Initialize the set corresponding to key with values from the set
corresponding to old_key. This is useful when you want two rock types that
are the same except for a few properties.
*THTYPE
Enter a rock type key for each grid block. Only 1 and key values that have
been defined are allowed.
DEFAULTS:
The default rock type key value is 1. *ROCKTYPE is needed only to define multiple rock types.
The default key assigned to each block is 1. *THTYPE is needed only to assign multiple rock
type keys to the grid.
Unless you have multiple rock types, you do not need *ROCKTYPE or *THTYPE.
CONDITIONS:
This keyword must be in the Other Reservoir Properties keyword group.
EXPLANATION:
The following rock properties may be assigned values for multiple rock types:
Rock compressibility
Rock thermal properties
Overburden heat loss
Variable permeability
ppr1, ppr2
Lower (ppr1) and upper (ppr2) reference pressures for pressure-dependent
formation compressibility (kPa | psi | kPa). At ppr1 the compressibility is
nearly cpor, and at ppr2 the compressibility is nearly cpor_p2.
ppr1 must be non-negative, and ppr2 must be greater than ppr1. The
suggested lower limit of ppr1 is 100 kPa (14.504 psi), and the suggested
upper limit of ppr2 is 1.0e6 kPa (1.45e5 psi).
pormax
Maximum allowed fractional increase in porosity due to pressure. One aspect
of sand dilation can be modelled very simply by using a large
compressibility, i.e., greater than 0.0001 1/psi. Unphysical porosity increases
are avoided by enforcing a maximum porosity fractional increase pormax.
The value of pormax must be greater than zero and less than one. A typical
value is 0.10 to 0.20. The default value of 10 effectively disables this limit.
This option is considered obsolete and has been replaced by *DILATION.
DEFAULTS:
If *PRPOR is absent, the porosity reference pressure is equal to the initial pressure in the first
active block in natural ordering of the corresponding rock type.
If *CPOR is absent, the formation compressibility is zero.
If *CTPOR is absent, the formation thermal expansion coefficient is zero.
If *CPTPOR is absent, cptpor = 0 is assumed.
If *PORMAX is absent, the corresponding option is disabled.
If *CPORPD is absent, the corresponding option is disabled.
CONDITIONS:
This keyword must be in the Other Reservoir Properties keyword group.
Keywords *CPTPOR and *CPORPD may not be used together.
EXPLANATION:
Fluid porosity f contains the fluid phases but not the solid phase and is calculated as
f (p, T, C i ) = v (p, T ) * (1 C i / si )
v
p
T
Ci
si
There are several ways to calculated void porosity v from pressure and temperature.
1. Linear Elastic: Use *CPOR for pressure dependence:
v(p,T) = vr{1 + min[ pormax, cpor(p-prpor) ] ctpor(T-Temr) }
vr
p
T
Temr
cporpd
Note
-2.68e-5
0
2.75e-3
2.00e-2
8.00e-2
Low pressure
P = PRORP = PPR1
P = Pav
P = PPR2
High pressure
ARRAY:
*PERMULI
*PERMULJ
*PERMULK
DEFINITIONS:
*DILATION
Keyword indicating that the dilation/recompaction model is enabled, and that
other keywords in this group may follow.
pbase
Reference pressure (kPa | psi | kPa). The suggested range is from 100 kPa
(14.504 psi) to 1.0e6 kPa (1.45e5 psi); the value must be non-negative.
pdila
Pressure at which dilation begins (kPa | psi | kPa). The value must be nonnegative.
ppact
Pressure at which recompaction begins (kPa | psi | kPa). The value must be
non-negative.
crd
Dilation rock compressibility (1/kPa | 1/psi | 1/kPa). The value must be nonnegative. A zero value will disable the dilation option.
fr
Residual dilation fraction, i.e., the fraction of total dilation not recovered on
recompaction. The allowed range is 0 to 1.
rat
Maximum allowed proportional increase in porosity, applied individually to
each block's base porosity. The minimum allowed value of rat is 1. The
maximum recommended value of rat is 1.3; much larger values can result in
severe convergence problems.
DEFAULTS:
If *DILATION is absent, the dilation-recompaction model is disabled and the subkeywords
of *DILATION are disallowed.
If *PBASE is absent its value is assumed to be equal to that given by *PRPOR or its default.
*PDILA 0
*PPACT 0
*CRD 0
*FR 0.5
*PORRATMAX 1
CONDITIONS:
*PBASE, *PDILA, *PPACT, *CRD, *FR and *PORRATMAX are subkeywords of
*DILATION and so must be located immediately after *DILATION but may appear in any order.
All subkeywords of *DILATION are indexed by rock type, and their values are assigned to
the current rock type number (see keyword *ROCKTYPE).
These keywords are mutually exclusive for each rock type: *PERMCK, *PERMTAB,
*PERMTABLOG, *PERMEXP, *DILATION and *EPCOMPACT.
EXPLANATION:
Dilation/Recompaction Model
The dilation-recompaction model represents the main features of oil-sand dilation and
recompaction occurring during cyclic steam stimulation process. The model is based on the
work of Beattie, Boberg and McNab in "Reservoir Simulation of Cyclic Steam Stimulation in
the Cold Lake Oil Sands', SPE Reservoir Engineering, May, 1991. In this model, the porosity
por(p) at pressure p is given by
max
fr = B/A
Elastic
tion
Di l
atio
n
POROSITY
pac
com
Re
Initial
Reservoir
Conditions
pbase
Elastic
ppact
PORE PRESSURE
pdila
Figure 13: The Dilation-Recompaction Model for Cyclic Steam Stimulation Process
ARRAY:
*PERMULI
*PERMULJ
*PERMULK
DEFINITIONS:
*EPCOMPACT
Keyword indicating that the elastic-plastic compaction-rebounding model is
enabled, and that other keywords in this group will follow.
crp
Rock compressibility for plastic compaction (1/kPa | 1/psi | 1/kPa). The
value must be non-negative.
pplastic
Threshold pressure at which plastic compaction begins (kPa | psi | kPa). The
value must be non-negative.
DEFAULTS:
If *EPCOMPACT is absent, the elastic-plastic compaction model is disabled and
subkeywords *CRP and *PPLASTIC are disallowed.
If *EPCOMPACT is present but *CRP or *PPLASTIC is absent, the corresponding data
value is zero.
CONDITIONS:
*CRP and *PPLASTIC are subkeywords of *EPCOMPACT and so must be located
immediately after *EPCOMPACT but may appear in any order.
All subkeywords of *EPCOMPACT are indexed by rock type, and their values are assigned
to the current rock type number (see keyword *ROCKTYPE).
The following options are mutually exclusive for each rock type: *PERMCK, *PERMTAB,
*PERMTABLOG, *PERMEXP, *DILATION and *EPCOMPACT.
EXPLANATION:
The compaction-rebounding model is primarily intended to simulate the irreversible process
of formation shrinkage due to pressure decline in primary depletion and rebound due to
pressure rise by a possible subsequent injection period. Under this option, the effect of
compaction or rebound on fluid flow is modelled in STARS by the change of reservoir
porosity. Figure 14 below schematically shows the behavior of porosity on pressure changes.
As the pressure starts to decline from the initial reservoir condition, the rock deforms
elastically and the porosity decreases due to the elastic compressibility (keyword *CPOR). If
the pressure reduces further below a threshold pressure (pplastic), some unrecoverable
compaction will occur and the porosity changes plastically by the compressibility CRP.
Unlike the elastic period, the plastic compaction is an irreversible process; that is, as the
pressure rises the porosity will follow a rebounding curve which is branched out from the
plastic compaction, instead of re-traversing the original compaction curve.
Porosity,
Initial condition
Elastic compaction
Plastic
compaction
Rebounding
PPlastic
Pore Pressure, p
Figure 14: Rock compaction-rebounding model
The functional form used for the porosity-pressure relationship in the calculation is
) ].
Here, c is the compressibility for elastic or plastic compaction, pref is the reference pressure
and ref is the porosity at pref.
Examine subsidence amounts via subkeyword *SBDZ of *OUTPRN *GRID, OUTSRF *GRID
and *OUTSRF *SPECIAL *BLOCKVAR, etc.
Variable Permeability
A grid cells absolute permeability in each direction may depend upon porosity, effectively
varying in a manner similar to that shown in Figure 14. Keywords *PERMULI, *PERMULJ
and *PERMULK may be used with *EPCOMPACT to specify permeability variation on both a
per-block and per-direction basis. See the explanation for keyword *PERMEXP.
EXAMPLE:
*EPCOMPACT *CRP 1.0e-5
*PERMULI *CON 10
*PERMULJ *CON 10
*PERMULK *CON 10
*PPLASTIC 1500
*PERMCK, *PERMTAB,
*PERMTABLOG, *PERMEXP, *PERMULI, *PERMULJ, *PERMULK, *PERMSLD
PURPOSE:
Specify dependence of permeability on fluid porosity.
FORMAT:
*PERMCK ckpower
*PERMTAB
{ / o K / K o }
*PERMTABLOG
{ / o log(K / Ko ) }
*PERMEXP
*PERMSLD
ARRAY:
*PERMULI
*PERMULJ
*PERMULK
DEFINITIONS:
*PERMCK ckpower
Permeability is a function of fluid porosity via the Carmen-Kozeny type formula
*PERMEXP
Permeability is the following function of fluid porosity:
o
k = k o exp k mul
1 o
Here, ko and o are the original (initial) permeability and fluid porosity,
respectively, and kmul is a user-defined multiplier factor specified by
*PERMULI, *PERMULJ or *PERMULK. This calculation is done on a perblock and per-direction basis. See *PERMULI below.
*PERMSLD
This keyword is used only for permeability change due to solid in a
Discretized Wellbore (DW). Permeability is the following function of fluid
porosity:
k = ko (1 solid())
CONDITIONS:
Keywords *PERMCK, *PERMTAB, *PERMTABLOG, *PERMSLD and *PERMEXP are
indexed by rock type, and their values and flags are assigned to the current rock type number
(see keyword *ROCKTYPE). Different rock types may have different variable permeability
options in the same run. If more than one of these keywords appears for the same rock type,
the last one encountered is used.
Option *PERMEXP requires keywords *PERMULI, *PERMULJ and *PERMULK to
specify the block dependence of the permeability multiplier.
The following options are mutually exclusive for each rock type: *PERMCK, *PERMTAB,
*PERMTABLOG, *PERMEXP, *DILATION and *EPCOMPACT.
EXPLANATION:
In addition to the options described above, the *DILATION and *EPCOMPACT options may
be used to vary permeability via *PERMULI, etc. However, the *PERMCK, *PERMTAB,
*PERMTABLOG and *PERMEXP options do not use the complex void porosity model of
the *DILATION and *EPCOMPACT options, so changes in fluid porosity, and hence
permeability, usually are caused largely by changes in the amount of material in the
solid/adsorbed/trapped phase.
Initial fluid porosity o corresponds to the value for the block calculated at its initial pressure,
temperature and solid amounts in place. Initial permeability ko is equal to the blocks
reference permeability entered via keywords *PERMI, *PERMJ and *PERMK.
Multiple Associations of *PERMULI, etc.
Keywords *PERMEXP, *DILATION and *EPCOMPACT are mutually exclusive for a rock
type, even though all three are associated with keywords *PERMULI, *PERMULJ and
*PERMULK. This is possible because keywords *PERMEXP, *DILATION and
*EPCOMPACT are per-rock-type whereas *PERMULI, etc., are per-block grid arrays.
Consider the following example. A grid has three K layers, each assigned a different porosity
model type as well as different variable permeability data. Note that *PERMEXP is used to
enable permeability variation in the layer with the standard compressibility model.
*ROCKTYPE 1 ** Dilation-recompaction model
*CPOR 1.8e-5 *DILATION
*ROCKTYPE 2 ** Standard compressibility model
*CPOR 2.5e-5 *PERMEXP
*ROCKTYPE 3 ** Compaction-rebounding model
*CPOR 1.8e-5 *EPCOMPACT
*PERMULI *KVAR 2.5 3.2 2.8
*PERMULJ *EQUALSI
*PERMULK *KVAR 3.5 3.8 2.9
*ROCKCP, *THCONR,
*THCONS, *THCONW, *THCONO, *THCONG, *THCONMIX, *THCONTAB,
*THCONANTAB, *ROCKCP_SHL, *THCONR_SHL
PURPOSE:
*ROCKCP indicates entry of rock heat capacity.
*THCONR, etc., *THCONTAB or *THCONANTAB indicate rock and phase thermal
conductivities.
FORMAT:
*ROCKCP rockcp (rockcp2)
*THCONR thconr
*THCONW thconw
*THCONO thcono
*THCONG thcong
*THCONS thcons
*THCONMIX ( *SIMPLE | *COMPLEX | *TEMPER )
or
*THCONTAB
{ T thconr thconw thcono thcong ( thcons ) }
or
*THCONANTAB
{ T thconr_i thconr_j thconr_k thconw_i thconw_j thconw_k
thcono_i thcono_j thcono_k thcong_i thcong_j thcong_k
( thcons_i thcons_j thcons_k ) }
*ROCKCP_SHL rockcp (rockcp2)
*THCONR_SHL thconr
DEFINITIONS:
*ROCKCP rockcp (rockcp2)
Coefficients in the correlation (rockcp + rockcp2T) for volumetric heat
capacity of solid formation (rock) in the reservoir, where T is absolute
degrees. If rockcp2 = 0 then rockcp is the rock heat capacity. The value of
the correlation must be positive over the expected T range. The energy in the
rock is the integral of the correlation from TEMR to T.
The suggested range of rockcp (J/m3-C | Btu/ft3-F | J/cm3-C) is from 0 to 108
J/m3-C (1491 Btu/ft3-F). The suggested range of rockcp2 (J/m3-C-C | Btu/ft3F-F | J/cm3-C-C ) is 1010 J/m3-C-C (8.28108 Btu/ft3-F-F).
thconr
Thermal conductivity of reservoir rock (J/m-day-C | Btu/ft-day-F | J/cm-minC). A typical value for silica is 6.6105 J/m-day-C (106 Btu/ft-day-F). The
minimum allowed value is 0, and the maximum suggested value is 107 J/mday-C (1605 Btu/ft-day-F). The rock heat conductivity should be zero in
fractures containing no rock.
280 Other Reservoir Properties
thconw
Thermal conductivity of the water phase (J/m-day-C | Btu/ft-day-F | J/cmmin-C). A typical value is 5.35104 J/m-day-K (8.6 Btu/ft-day-F). The
minimum allowed value is 0, and the maximum suggested value is 107 J/mday-C (1605 Btu/ft-day-F).
thcono
Thermal conductivity of the oil phase (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
A typical value is 1.15104 J/m-day-K (1.8 Btu/ft-day-F). The minimum
allowed value is 0, and the maximum suggested value is 107 J/m-day-C
(1605 Btu/ft-day-F).
thcong
Thermal conductivity of the gas phase (J/m-day-C | Btu/ft-day-F | J/cm-minC). At 330 C the value for steam is 4000 J/m-day-C (0.64 Btu/ft-day-F) and
the value for methane is 7400 J/m-day-C (1.2 Btu/ft-day-F). The minimum
allowed value is 0, and the maximum suggested value is 107 J/m-day-C
(1605 Btu/ft-day-F).
thcons
Thermal conductivity of the solid phase ( J/m-day-C | Btu/ft-day-F | J/cmmin-C). For example, solid coke is 4.5105 J/m-day-K (72 Btu/ft-day-F).
The minimum allowed value is 0, and the maximum suggested value is 1020
J/m-day-C (1.61016 Btu/ft-day-F).
*SIMPLE
Simple volume weighting of phase thermal conductivities.
*COMPLEX
More complex mixing of phase thermal conductivities. See appendix D.10.
When porosity is zero, the rock value is used. When porosity is between
zero and 0.01, the calculation assumes 0.01. This option should not be used
for blocks with small porosities, since the resulting value can be very large.
*TEMPER
The same mixing as for *COMPLEX, with a temperature correction. This
option is not allowed when T dependence is specified via table.
*THCONTAB
Temperature-dependent isotropic thermal conductivities of all the phases are
defined via a table. After temperature column T (C|F), columns thconr, etc.,
appear in the order shown. The column for thcons is optional. Each row
must have the same number of columns. The maximum allowed number of
rows is 30. *THCONMIX *TEMPER may not be used with this option. If
there is only 1 row, thermal conductivity does not vary with temperature.
Action
*ROCKCP
rockcp2
*THCONR
*THCONW
*THCONO
*THCONG
*THCONS
*THCONMIX
*ROCKCP_SHL
*THCONR_SHL
CONDITIONS:
These keywords must be in the Other Reservoir Properties keyword group.
No more than one of *THCONTAB, *THCONANTAB and *THCONMIX *TEMPER may
be used together for each rock type.
*THCONR_SHL is available only with the anisotropic option *THCONANTAB.
EXPLANATION:
If the T-dependent table option is used, the conductivities of all the phases are evaluated at
the current temperature. If temperature is outside the table range, the nearest table entry is
used. If the table is not used, the conductivity values are constant.
The *SIMPLE volume-weighted phase mixing scheme for thermal conductivity mix is
mix = f ( thconw Sw + thcono So + thcong Sg )
+ ( 1 v ) thconr + (v f ) thcons
where v is the void porosity (solid plus fluids) and f is the fluid porosity (fluids only).
To obtain a thermal conductivity that is independent of porosity and saturation, assign the
same value to rock and all phases. A typical value for water-saturated rock is 1.496105 J/mday-K (24 Btu/ft-day-F).
Conductive heat flow between two adjacent blocks is based on harmonic (series) weighting of
the mixed thermal conductivities mix of the two blocks in that direction. This is consistent for
all cases of block size, flow directions and conductivity values. For example, if mix = 0 in
one block then the conductive heat flow between the two blocks is zero.
Anisotropic Conductivities
If keyword *THCONANTAB is used then thermal conductivities may be different for each of
the three directions. The following points apply.
1. Use of single subkeyword *THCONDUCT of *OUTSRF *GRID will generate
output values for all three directions, including special histories.
2. For oriented sub-grids the I, J and K directions correspond as described in
Direction Dependent Data in the explanation for keyword *REFINE.
3. Full anisotropy is not available for the advanced nine-point option *NINEPTH; the
conductivities in the nine-point plane are taken from direction I.
4. Full anisotropy is not available for heat conduction to and from discretized and
semi-analytical wellbores; the conductivities are taken from direction I.
Natural Fracture Data
For natural fracture options *DUALPOR, etc., values of rock heat capacity and phase thermal
conductivities are specified as intrinsic values for both matrix and fracture blocks.
Consequently, fracture and matrix blocks may share the same rock type. When fracture does
not contain rock its intrinsic void porosity will be equal to one and therefore only fluid will
participate in the block heat capacity and conductivity calculation. STARS will calculate the
appropriate block heat capacities and conductivities for each block depending on the current
intrinsic porosity values. In fact, a fracture and corresponding matrix block need separate
rock types only if (1) the fracture block contains some formation via*FORMINFRAC and (2)
the fracture and matrix blocks have different intrinsic formation properties. Different rock
User's Guide STARS
types are specified via *ROCKTYPE and assigned to blocks via *THTYPE *MATRIX and
*THTYPE *FRACTURE.
A fracture block containing no formation will be assigned internally a void porosity of 1 that
will remain constant throughout the run. In this case, porosity parameters like *CPOR and
*CTPOR, as well as models like *DILATION, will not be applied to the fracture block.
However, those void porosity calculations will be done for a fracture block that does contain
some formation and consequently has a void porosity less than 1.
Shale Properties
The net-to-gross option (*NETPAY or *NETGROSS) assumes that a block has horizontal
shale streaks which have zero porosity but can retain and conduct heat. Keywords *POR,
*PERMI and *PERMJ specify properties for the pay zone, and adjustments are made
internally to account for the net-to-gross ratio (see EXPLANATION for *NETPAY).
However, rock properties *ROCKCP and *THCONR are not adjusted this way by default,
since the shale is assumed to have the same properties as the rock in the pay zone.
Keyword *ROCKCP_SHL lets you specify shale heat capacity that is different from rock in
the pay zone. Consider a block with pay zone void porosity v, fluid porosity f and net-togross ratio R. If we let subscripted U denote the per-volume energy of the various parts of
the block (r payzone rock, s solid phase), then the value for the entire block is
Ublock = (1R)Ushale + R[(1v)Ur + (vf)Us + f(SwUw+SoUo+SgUg)]
If keyword *ROCKCP_SHL is absent then Ushale = Ur and the block value reduces to
Ublock = (1 Rv)Ur + (Rv Rf)Us + Rf(SwUw+SoUo+SgUg)
This is the more standard form, but with replaced by effective porosity R as stated in
the *NETPAY explanation.
Keyword *THCONR_SHL lets you specify shale thermal conductivity, in the I and J
directions, different from rock in the pay zone. If subscripted is the conductivity of the
various parts of the block, then the value for the entire block is
block = (1R)shale + R[(1v)r+(vf)s+f(Sww+Soo+Sgg)] *SIMPLE
block = (1R)shale + RF(v,f,Sw,So,Sg,r,s,w,o,g)
*COMPLEX
*SIMPLE
block = F(Rv,Rf,Sw,So,Sg,r,s,w,o,g)
*COMPLEX
This is the more standard form, but with replaced by R. Unlike the *SIMPLE case, the
*COMPLEX expressions are not equivalent when shale = r.
Note that entering zero for *ROCKCP_SHL and *THCONR_SHL causes the shale to
contribute nothing to the storage and conduction of heat in the system. This should be done
only if fine-grid calibration results show that the shale in question does not contribute
significantly to the thermal process.
*HLOSST thf
*HLOSSTDIFF dthl
DEFINITIONS:
*OVERBUR
Apply these heat loss properties to the outer grid block faces at the reservoir
top, equivalent to *+K for *KDIR *UP and *-K for *KDIR *DOWN.
*UNDERBUR
Apply these heat loss properties to the outer grid block faces at the reservoir
bottom, equivalent to *+K for *KDIR *DOWN and *-K for *KDIR *UP.
*+I, *-I, *+J, *-J, *+K, *-K
Apply these heat loss properties to the outer grid block faces in the indicated
direction. *OVERBUR/*UNDERBUR may be used together with *+I, *-I,
*+J and *-J but should not be used with *+K/*-K.
dnurol
Volumetric heat capacity of formation adjacent to the reservoir in the indicated
direction (J/m3-C | Btu/ft3-F ). The lower limit is 0, and the suggested upper
limit is 108 J/m3-C (1491 Btu/ft3-F ). A value of zero will result in no heat loss.
A typical value for wet rock is 2.347106 J/m3-K (35 Btu/ft3-F).
hconl
Thermal conductivity of formation adjacent to the reservoir in the indicated
direction (J/m-day-C | Btu/ft-day-F). The lower limit is 0, and the suggested
upper limit is 107 J/m-day-C (1605 Btu/ft-day-F). A zero value results in no heat
loss. A typical value for wet rock is 1.496105 J/m-day-K (24 Btu/ft-day-F).
thf
Initial temperature of formation adjacent to the reservoir, used by the heat
loss calculation (deg C | deg F). The value must be non-negative.
dthl
Minimum temperature difference needed between block temperature and thf
to start heat loss calculation (C deg | F deg). The lower limit is 0, and the
suggested upper limit is 10 C deg (18 F deg).
DEFAULTS:
If *HLOSSPROP is absent, there is no heat loss.
If *HLOSST is absent, thf for each external block face is equal to the initial temperature in
the corresponding reservoir block.
If *HLOSSTDIFF is absent, dthl = 0.1 C.
EXPLANATION:
Reference: "A Simple Method for Predicting Cap and Base Rock Heat Losses in Thermal
Reservoir Simulators", Vinsome, P.K.W. & Westerveld, J.D., JCPT, July-September 1980,
Volume 19, No. 3.
Keyword *OUTPRN *GRID *OBHLOSS causes the heat loss rate for each grid block to be
dumped to the ".out" file. After that, a summary of heat loss rate and accumulation is written,
split between overburden and underburden. Here, "overburden" is the total heat loss for all the
blocks in the top K index layer (e.g., K = 1 for *KDIR *DOWN); "underburden" corresponds to
the entire opposite K index layer. When heat loss is specified only in those two layers (e.g.
using *OVERBUR and *UNDERBUR) and those layers are distinct, then the overburden and
underburden heat loss will sum to the total shown in the material balance summary.
See Appendix D.11 for further discussion.
Sign Convention for Reporting Heat Loss
Reported heat loss values are negative for heat transfer from reservoir to overburden, and
positive from overburden to reservoir.
Heat Loss Through Pinch-Out Blocks
Overburden heat loss consists of heat flow between a boundary grid block and a semi-infinite
portion of formation adjacent to that block, as specified by *HLOSSPROP directions and
possible *ROCKTYPE and *THTYPE.
Most times the reservoir boundary coincides with the grid boundary, so that heat loss occurs
for blocks on the grid boundary. However, on the boundary of some grids are zero-thickness
(pinched-out) blocks, special null blocks that arise in corner-point or variable-thickness grid
types. Other grids may have unused grid blocks outside the reservoir boundary marked by
keyword *PINCHOUTARRAY. In all cases, heat loss in the K direction of interest occurs
for the non-null block closest to (or on) the grid boundary in the grid column, separated from
the grid boundary by only pinched-out blocks. In other grid directions heat loss occurs only
for non-null blocks on the grid boundary.
For example consider a 10105 Cartesian grid used to model a reservoir that has pinched out
blocks in layers K=1 (top) for some (I,J). If heat loss is applied to the entire overburden area
then there will be heat loss from all 100 blocks at the reservoir top boundary, mostly from
blocks with K=1 but some from blocks with K=2.
*ELECHEAT, *ELECTYPE,
*ELTYPE
PURPOSE:
Enable electrical heating and specify electrical property sets.
FORMAT:
*ELECHEAT
*ELECTYPE set_number ( *COPY old_set_number )
*VOLTOL Vtol
*VOLSHF Vshift
*EHEATCYC ncyc
ARRAY:
*ELTYPE
DEFINITIONS:
*ELECHEAT
Enable electrical heating option. See Appendix G.
*ELECTYPE set_number ( *COPY old_set_number )
Define electrical heating property set set_number, starting at 1 and increasing
by 1 for each set.
The following keywords may be specified on a per-set basis: *ELCONTAB,
*ELWCOMPTAB, *ELSCOMPTAB, *ALITHO, *ATORTU, *ASATUR
and *TEMMULT.
Use optional *COPY to load all the property values from previously defined
set old_set_number as a basis for the current set.
*ELTYPE
Grid array that assigns set electrical heating property set numbers to grid
blocks.
*VOLTOL Vtol
*VOLSHF Vshift
Specify the numerical shift for electric potential (volts). Vshift should be
around 10-4 of Vtol.
*EHEATCYC ncyc
Specify the last Newton cycle number ncyc at which the heat rate is updated.
A value of 1 corresponds to an explicit mode, which is most stable. Values
greater than 1 may give more accuracy at the cost of more cycles.
*CURRENT type boundary constraints may not converge satisfactorily with
larger values of *EHEATCYC.
DEFAULTS:
Any block that is not explicitly assigned a set number via *ELTYPE will use set #1.
If *VOLTOL is absent then Vtol = 10 V is assumed.
If *VOLSHF is absent then Vshift = 10-3 V is assumed.
If *EHEATCYC is absent then ncyc = 1 is assumed.
CONDITIONS:
EXPLANATION:
The electric heating option is enabled by keyword *ELECHEAT in this section. See
Appendix G. The other electrical property keywords in this section must follow as a group
immediately after *ELECHEAT. None of the electrical heating keywords in this section is
mandatory, but electrical conductivity must be assigned for at least one phase or rock before
any electrical potential field can be calculated.
Keyword Overview
The electrical heating keywords are organized into the following groupings, one grouping per
manual page, in the following data sections.
Other Reservoir Properties
1. *ELECHEAT enables the electrical heating option. *ELECTYPE and *ELTYPE
access the property set option. *VOLTOL, *VOLSHF and *EHEATCYC control
convergence.
2. *ELCONTAB, *ELWCOMPTAB and *ELSCOMPTAB specify electrical
conductivities that vary with set, temperature, phase and composition.
3. *ECONDWI, *ECONDWJ, *ECONDWK and *TEMMULT specify electrical
conductivities that vary by block and temperature.
Well and Recurrent Data
4. *ELBOUND and *ELTARGET specify electrical boundary conditions and
operating constraints.
Input/Output Control
5. *OUTPRN *GRID subkeywords ELCONDUCT, etc., specify grid dump output to
the .out text file.
6. *OUTSRF *GRID subkeywords ELCONDUCT, etc., specify grid dump output to
the SR2 graphics file. In addition, *OUTSRF *SPECIAL subkeywords ELHEAT,
etc., are available for history plots.
7. The EXPLANATION for keyword *INUNIT documents the electrical units.
290 Other Reservoir Properties
Restrictions
The electric heating option may be used with any grid, component, rock property and fluid
well configuration, with the following exceptions:
1. The nine-point, natural fracture and discretized wellbore grid options are not
allowed.
2. You may not use the *RW 0 option or keyword *GRID *RADIAL with an
electrical boundary in the -I, -J or +J direction, since this would give a radius of 0
to the inner reservoir boundary normally associated with the wellbore.
3. A zero-porosity heat-conducting block conducts electrical current only if rock
electrical conductivity is assigned a non-zero value.
4. The *ISOTHERMAL formulation option is not allowed.
5. Adaptive-implicit (*AIM) options are not recommended or supported.
6. Dynamic (*DYNAGRID) and recurrent gridding options are not allowed.
Electrical Property Sets
Each electrical property set (rock type) can have its own values of conductivities, temperature
multipliers and Archie parameters. For example, they are useful for assigning different
conductivity data to reservoir and overburden, or to different reservoir formation types.
When *COPY is used and the old set contains *ELCONTAB, the presence of *ELCONTAB
in the new set will clear the old conductivity data from the new set before new data is read.
However, the temperature entries from the old set will be kept. The same comments apply to
*ELWCOMPTAB and *ELSCOMPTAB.
To model current flow in non-porous materials like metal, use a separate set for the material,
set porosity to zero and use *ROCKI, etc. Thermal and electrical flow calculations are valid
in such blocks. For example, material with a high conductivity will have low resistance and
hence low energy generation.
Examples
The following example shows that subkeyword *COPY lets you see immediately the
relationship between rock types (rock type #2 will have the same Archie parameters as #1,
but different temperature multipliers).
*ELECTYPE 1
*TEMMULT
65.
1.
150.
2.8
350.
3.2
*ALITHO
.92
*ATORTU 1.43
*ELECTYPE 2
*COPY 1
*TEMMULT
65.
1.
250.
1.8
*ELTYPE *KVAR 5*2 10*1
** Pay zone
** Overburden
*ELCONTAB,
*ELWCOMPTAB, *ELSCOMPTAB
PURPOSE:
Specify properties for each electrical heating set.
FORMAT:
*ELCONTAB key1 ... keyn
{ T val1 ... valn }
*ELWCOMPTAB comp_name1 comp_namen
{ T I-val1 J-val1 K-val1 ... I-valn J-valn K-valn }
*ELSCOMPTAB comp_name1 comp_namen
{ T I-val1 J-val1 K-val1 ... I-valn J-valn K-valn }
*ALITHO Alith
*ATORTU Ator
*ASATUR Asat
DEFINITIONS:
*ELCONTAB
Specify electrical conductivities of water, rock, solids and oil as a function of
temperature by a table where T is temperature (C|F), and vali is electrical
conductivity (siemens/metre) corresponding to keyword keyi. The keyword
list may be any number of the following.
*WATERI
*WATERJ
*WATERK
*ROCKI
*ROCKJ
*ROCKK
*SOLIDI
*SOLIDJ
*SOLIDK
*OILI
*OILJ
*OILK
For each I-J-K triplet of keywords, the J and K direction data defaults to the I
direction data if the corresponding I direction keyword is present. If all three
keywords in a triplet are absent, there is no current flow in that phase or rock.
Temperature entries must increase and the number of rows must not exceed
20. Electrical conductivity values must be non-negative. A phase or rock
with zero conductivity for all directions and temperatures will be treated like
no values were entered, on a per-set basis.
To model current flow in non-porous materials like metal, use a separate rock
type for the material, set porosity to zero and use *ROCKI, etc.
292 Other Reservoir Properties
*ELWCOMPTAB
Specify water phase electrical conductivity as a function of composition via
table where comp_namei is the quoted name of a water (aqueous)
component defined by keyword *MODEL and *COMPNAME, T is
temperature (C|F), and I-val1, J-val1 and K-val1 are electrical conductivity
(siemens/metre) in the three grid directions, one triplet for each component.
Temperature entries must increase and the number of rows must not exceed
20. Electrical conductivity values must be non-negative.
If this table method is used together with *ELCONTAB then (1) the
temperature entries of the two tables must be the same and (2) this table
overrides any water phase values entered for *ELCONTAB.
*ELSCOMPTAB
Specify solid phase electrical conductivity as a function of composition via
table where comp_namei is the quoted name of a solid component defined
by keyword *MODEL and *COMPNAME, T is temperature (C|F), and Ival1, J-val1 and K-val1 are electrical conductivity (siemens/metre) in the three
grid directions, one triplet for each component. Temperature entries must
increase and the number of rows must not exceed 20. Electrical conductivity
values must be non-negative.
If this table method is used together with *ELCONTAB then (1) the
temperature entries of the two tables must be the same and (2) this table
overrides any solid phase values entered for *ELCONTAB.
*ALITHO Alith
Specify Archie lithology parameter Alith. The allowed range is 10-5 to 1010.
*ATORTU Ator
Specify Archie tortuousity parameter Alith. Ator must be non-negative.
*ASATUR Asat
Specify Archie water saturation parameter Asat. Asat must be non-negative.
DEFAULTS:
If Alith is not assigned a value, Alith = 0.88 is assumed.
If Ator is not assigned a value, Ator = 1.37 is assumed.
If Asat is not assigned a value, Asat = 2 is assumed.
*ALITHO, *ATORTU and *ASATUR are required only to override their respective defaults,
for each rock type.
CONDITIONS:
At most one *ELCONTAB table may be specified for each electrical set.
At most one *ELWCOMPTAB table may be specified for each electrical set.
At most one *ELSCOMPTAB table may be specified for each electrical rock type.
User's Guide STARS
The water phase subkeywords of *ELCONTAB may not be used together with per-block
keywords *ECONDWI, etc.
*ELWCOMPTAB may not be used together with per-block keywords *ECONDWI, etc.
Data entered via keywords *ELWCOMPTAB and *ELSCOMPTAB will override water and
solid phase data, respectively, entered via *ELCONTAB.
EXPLANATION:
Composition-Dependent Water Phase Conductivities
If *ELWCOMPTAB is used then the aqueous phase value will be equal to the mole weighted
average of the values of all aqueous components. Only aqueous components that are
assigned conductivities in *ELWCOMPTAB will contribute to the water phase value. This
table should be used only if the process depends significantly on the differences between
conductivity values of the water phase components. If there is only one component in the
water phase, or all water phase components have nearly the same value, then use *WATERI,
etc. with *ELCONTAB instead.
Composition-Dependent Solid Phase Conductivities
If *ELSCOMPTAB is used then the solid phase value will be equal to the mole-weighted
average of the values of all solid components. Only components that are assigned
conductivities in *ELSCOMPTAB will contribute to the solid phase value. This table should
be used only if the process depends significantly on the differences between conductivity
values of the solid components. If there is only one solid component, or all solid components
have nearly the same value, then use *SOLIDI, etc. with *ELCONTAB instead.
Archie Parameters
Bulk electrical conductivity can be calculated from water conductivity, porosity and Sw in
each of the three directions using
p ( T, Sw ) = w , p ( T ) * fAtor SAsat
/ Alith
w
p = i, j, k
Note that overburden can conduct electrical current since it has non-zero porosity and water
saturation, even though the fluid permeability is very low or zero. Alternatively, overburden
can be modelled with rock conductivity.
Examples
Non-isotropic water and rock conductivities can be specified as follows. Here the J direction
values are equal to the I direction values since the J direction keywords are absent.
*ELCONTAB *WATERI *WATERK *ROCKI *ROCKK
50
0.8
0.4
0.1
0.02
150
1.6
0.8
0.2
0.04
250
2.4
1.2
0.3
0.06
*ECONDWI,
*ECONDWJ, *ECONDWK
PURPOSE:
Specify per-block water-phase electrical conductivities.
ARRAY:
*ECONDWI
*ECONDWJ
*ECONDWK
FORMAT:
*TEMMULT
{ T FT }
DEFINITIONS:
*ECONDWI, *ECONDWJ, *ECONDWK
Specify water-phase electrical conductivities for each block separately
(siemens per metre). The *EQUALSI keyword may be used, similar to
permeability assignment via *PERMI, etc.
These keywords are an alternative to specifying water phase conductivities
via keyword *ELCONTAB, but they are considered obsolete and the other
conductivity keywords are recommended instead.
*TEMMULT
Specify temperature dependence by a multiplier function in table form,
where T is temperature (C|F) and FT is the electrical conductivity multiplier
at that temperature. Temperature entries T must be increasing. The allowed
range for FT is 10-10 to 1010. The number of rows must not exceed 20.
DEFAULTS:
Any block that is not explicitly assigned a value will use zero.
If *ECONDWJ (or *ECONDWK) is not entered, the J (or K) direction values are assumed to
be equal to the I direction values.
The default multiplier is 1 at all temperatures. This keyword is required only to override its
default, for property set separately.
CONDITIONS:
These keywords may not be used together with the water phase subkeywords of
*ELCONTAB.
*TEMMULT may be used only together with *ECONDWI, etc.
EXPLANATION:
Examples
Note: These keywords are considered obsolete, having been replaced with the
temperature-dependent tables *ELCONTAB, etc.
*ECONDWI
*ECONDWJ
*ECONDWK
*CON 0.8
*EQUALSI
*EQUALSI * 0.3
** K direction is reduced
Temperature Dependence
Whenever a value of water conductivity is required for block i, it is multiplied by table lookup function FT(Ti). Therefore, the water conductivity data entered via *ECONDWI, etc., are
referenced to Tref at which FT(Tref) = 1.
Component Properties
DEFAULTS:
If numw is absent, it is assumed to be 1.
If *COMPNAME is absent, the component names will be 'COMP_x', where x is the
component number.
CONDITIONS:
*MODEL is always required.
There are no strict limits for the number of each kind of component. However, the
computational and storage requirements increase significantly with the total number of fluid
components (numy).
EXPLANATION:
A detailed discussion of component design concepts can be found in Appendices D.1 and
D.2. A discussion of many advanced recovery processes, including how those processes are
implemented with components, can be found in Appendix C as well as Appendices D.7, D.8
and D.13 to D.16.
The structure of component ordering is shown in Table 1.
Aqueous or Water-Like Components
These are components 1 to numw. For these components the water phase is the reference
liquid phase for K value definition:
K(gas/liq) = (gas mole fraction)/(water mole fraction) = y/w,
K(liq/liq) = (oil mole fraction)/(water mole fraction) = x/w.
For example, a component which will partition only sparingly in the oil phase should be this
type, so that the liquid-liquid K values will be very small instead of very large. A
condensable component which is not at all soluble in the oil phase must be aqueous, and its
liquid-liquid K value must be zero.
Any injected water component using the *QUAL option must be component #1. The normal
case with one water component automatically satisfies this restriction. However, when there
are multiple water components (e.g., injected versus in-place) then the injected water
component must be #1 if the *QUAL option is used. See CWE Water Component in the
explanation for keyword *QUAL in the Well and Recurrent Data section.
Use keyword *ICE in this data section to enable modelling of water ice.
Oleic or Oil-Like Components
These are components numw+1 to numx, and the oil phase is the reference liquid phase for K
value definition:
K(gas/liq) = (gas mole fraction)/(oil mole fraction) = y/x,
K(liq/liq) = (water mole fraction)/(oil mole fraction) = w/x.
For example, a component which will partition only sparingly in the water phase should be
this type, so that the liquid-liquid K values will be very small instead of very large. A
condensable component which is not at all soluble in the water phase must be oleic, and its
liquid-liquid (w/x) K value must be zero.
In this group must be included volatile components which are significantly soluble in liquid,
such as methane and CO2.
Noncondensable Gases
These are components numx+1 to numy, and appear only in the gas phase. The physical
interpretation is that these components are so volatile that their condensation and solubility in
liquids can be ignored. No liquid phase properties are required, and no K values are needed.
These components are allowed to mix freely with the vapours of liquid components.
Use of 1 noncondensable gas component, that is, numy = numx + 1, may result in poor numerical
performance, especially for the combustion process. If stability is poor, try numy = numx (even if
the K value of component numy is very large and the solubility is slight) or numy > numx + 1.
Solid or Trapped Components
These are components numy+1 to ncomp, and appear only in the solid or immobile phase
state. These components require only basic data such as density and heat capacity. Examples
of such components are:
a) coke fuel created by cracking reaction,
b) a component in the adsorbed or trapped state due to non-equilibrium mass transfer,
c) rock that will dissolve, such as carbonate.
See Appendix F.8 for a discussion of solid component treatment. If there is at least one solid
component then there must be at least one reaction, otherwise that component's moles will
not be conserved.
Default Partitioning of Components
Default phase partitioning will be done for components for which (a) no K value table is
entered, or (b) the correlation coefficient is absent or zero. The default partitioning is
1. Aqueous components (numbers 1 to numw) are based in the water phase, and will
vapourize according to the internal steam table. There is no partitioning in the oil phase.
This is desired for the normal case of one water component, as well as the case of
multiple labelled water components. This default is NOT appropriate for non-water
components that partition principally in the aqueous phase, such as polymer. The
individual manual entries show how to get zero K values for these components.
2. Oleic components (numbers numw+1 to numx) are based in the oil phase, and will
not vapourize. There is no partitioning into the aqueous phase.
This is desired for a dead oil component. Any volatility must be specified
explicitly via correlation or table.
3. Non-condensable components (numbers numx+1 to numy) are found only in the
gas phase, by definition.
Component
Comp #
Aqueous
...
"
Oleic
...
"
Non-condensable
...
"
Solid
...
"
1
numw
numw+1
Aqueous
Oleic
X
X
X
numx
numx+1
numy
numy+1
ncomp
Gaseous
Solid
X
X
X
X
X
X
X
X
X
X
X
X
numy
ncomp
=
=
6
6
K Value Correlations
PURPOSE:
Specify gas-liquid K value correlations.
FORMAT:
*KV1 kv1(1) ... kv1(numx)
*KV2 kv2(1) ... kv2(numx)
*KV3 kv3(1) ... kv3(numx)
*KV4 kv4(1) ... kv4(numx)
*KV5 kv5(1) ... kv5(numx)
DEFINITIONS:
kv1
First coefficient in the correlation for gas-liquid K value (kPa | psi).
kv2
Second coefficient in the correlation for gas-liquid K value (1/kPa | 1/psi).
kv3
Third coefficient in the correlation for gas-liquid K value.
kv4
Fourth coefficient in the correlation for gas-liquid K value (C | F). This
coefficient has the unit of temperature difference. It has the same value for
temperature scales C and K, and has the same value for temperature scales F
and R.
kv5
Fifth coefficient in the correlation for gas-liquid K value (C | F). This
coefficient has the unit of temperature, and is different for each temperature
scale. Often this coefficient is quoted in other sources in absolute degrees K
or R, even though all other temperatures are quoted in C or F. Here, this
coefficient is quoted in the same unit as all other temperatures, so it may be
necessary to convert it from absolute to C or F.
DEFAULTS:
Each absent keyword implies a zero value (for each component) for the corresponding
coefficient.
The absence of all these keywords implies zero K values, unless the table option is used
instead. The exception is aqueous components (1 to NUMW) for which the default K values
(all coefficients zero) are internal water K values.
In order to assign zero K value to an aqueous component, enter a non-zero value for KV4 and
zeroes for the other coefficients. This forces the component to use the correlation, below; if
kv1 = kv2 = kv3 = 0 then K will be zero for all p and T.
EXPLANATION:
As a function of p and T, the K value is
K = ( kv1/p + kv2 * p + kv3 ) * EXP ( kv4 / (T-kv5) )
where T is temperature and p is gas phase pressure. This expression for K accounts for
curvature of the vapor pressure curve with pressure.
See Table 2 for suggested correlation values for selected components. See Appendix D.3 for
a discussion of the basis for the correlation form. See Appendix F.3 for a discussion of phase
equilibrium relationships.
Use of the correlation forces you to enter values for all condensable components. If you want
to use the default partitioning for a component, enter zero in that component's column.
This correlation applies only to gas-liquid K values. You must use the table to specify liquidliquid partitioning.
Over the operating pressure and temperature ranges, each components resulting correlation
K value must be either all zero or all positive (greater than zero). Specifically, K values are
not allowed to dip below zero for some p and T.
Bubble Point Pressure
Keyword *PBC (initial bubble point pressure) uses gas-liquid K value to convert from bubble
point pressure to oil mole fraction via the formula Xi = 1 / Ki(Pbi,T). In this case, the
correlation must give K values greater than 1 at the specified Pbi and T. This condition is
usually satisfied since (1) the component in question probably is a volatile gas with initial K
values greater than 1 and increasing as pressure decreases, and (2) the Pbi do not exceed the
initial reservoir pressure.
Subkeyword *BPP of *OUTPRN *GRID reports oil mole fraction in the form of bubble point
pressure by solving Ki(Pbi,T) = 1/Xi for Pbi. If Pbi cannot be found, then Pbi = 0 is reported.
The correlation coefficients may define a function such that Pbi cannot be found at the desired
T, in which case Pbi = 0 is reported. This may happen when coefficient kv2 is non-zero and
large. To see this, consider the equation Ki(Pbi,T) = 1/Xi written as aPbi Pbi + bPbi + c = 0
where
a = kv2
b = kv3 (1/Xi) EXP [ -kv4 / (T-kv5) ]
c = kv1
If kv2 is zero, the equation is linear and Pbi = -c/b. If b is close to zero or c/b is not positive,
then Pbi cannot be obtained.
If kv2 is non-zero, the equation is quadratic and the discriminant D = bb 4ac. If D is
negative then there is no real root, and Pbi cannot be obtained. If D is non-negative then there
are two real roots, and the minimum root above zero is chosen. If neither root satisfies this
last condition, then Pbi cannot be obtained.
See also Bubble Point Pressure description under *KVTABLE.
K Value Tables
*GASLIQKV, *LIQLIQKV, *KVTABLIM, *KVTABLE, *KVKEYCOMP
PURPOSE:
Assign K values in table form. Liquid-liquid K values must be assigned this way.
FORMAT:
*GASLIQKV | *LIQLIQKV
*KVTABLIM plow phigh Tlow Thigh
*KVTABLE comp_name
K_value_table
*KVKEYCOMP key_comp key_phase xlow xhigh (slope int)
*KVTABLE comp_name
{ *KEYCOMP
K_value_table }
DEFINITIONS:
*GASLIQKV
The following *KVTABLIM, *KVKEYCOMP and *KVTABLE are applied
to gas-liquid K values, until *LIQLIQKV appears.
*LIQLIQKV
The following *KVTABLIM, *KVKEYCOMP and *KVTABLE are applied
to liquid-liquid K values, until *GASLIQKV appears.
plow, phigh
Low and high pressure limits in K value table (kPa | psi). The allowed range
for plow is [10-3 kPa, 106 kPa] and for phigh is [plow + 1 kPa, 108 kPa].
Look-up of K values more than 1 kPa outside this range is allowed only a
limited number of times.
Tlow, Thigh
Low and high temperature limit in K value table (C | F). The allowed range
for Tlow is from -100 C (-148 F) to 106 (users unit), and for Thigh it is
from Tlow + 1 C to 106 (users unit). Look-up of K values more than 1 C
outside this range is allowed only a limited number of times.
comp_name
Component name in quotes. Zero K values will be assumed for components
for which no table has been entered, except if correlation coefficients are
assigned.
K_value_table
K(Tlow,plow)) . . . K(Tlow,phigh)
. . . . . . . . . . . . . . . .
K(Thigh,plow) . . . K(Thigh,phigh)
The maximum allowed number of table entries assigned to a component, or a
*KEYCOMP set, is 1500. The maximum allowed number of rows
(temperature values) is 50; the maximum allowed number of columns
(pressure values) is 30. There must be at least two columns and two rows.
All gas-liquid tables must have the same number of columns and the same
number of rows. All liquid-liquid tables must have the same number of
columns and the same number of rows.
key_comp
Quoted name of key component corresponding to the compositions
*KEYCOMP x.
key_phase
Phase or interpolation option corresponding to the compositions
*KEYCOMP x. The following are allowed:
SXY formulation only
W
water phase mole fraction, explicit
X or O
oil phase mole fraction, explicit
Y or G
gas phase mole fraction, explicit
YK
gas phase mole fraction, implicit
M
maximum of W, X and Y, explicit
Note: Y and YK are available for condensable components only.
ZT or ZH formulations (recommended)
GLOBAL or Z
RATIOW or RW
xlow, xhigh
Low and high composition limit in composition-dependent K value table.
The allowed range for xlow is [0,1] and for xhigh is [xlow+1.0e-6,1].
slope
Slope of maximum tie line used in Hand's tie line interpolation parameter,
used only for RW and RO.
int
Intercept of maximum tie line used in Hand's tie line interpolation parameter
(for RW and RO only).
*KEYCOMP
Denotes a composition-dependent K value table, and the following table
corresponds to a certain composition of key_comp in key_phase. The first
table corresponds to xlow, the last corresponds to xhigh, and intermediate
tables correspond to equally spaced compositions in between xlow and xhigh.
All gas-liquid tables with *KEYCOMP must have the same number of
*KEYCOMP entries; the same comment applies to liquid-liquid tables.
DEFAULTS:
Absence of any gas-liquid K value data will result in default K values for aqueous
components and zero K values for other components.
Absence of liquid-liquid K values for a component will result in no liquid-liquid solubility. Only
aqueous components will go in the water phase; only oleic components will go in the oil phase.
The simulator starts reading data with *GASLIQKV assumed.
If 'slope' and 'int' are absent, then slope = 1 and int = 0 are assumed.
CONDITIONS:
The gas-liquid K values of aqueous components (numbers 1 to numw) must be specified the
same way, that is, either table or correlation.
The gas-liquid K values of oleic components (numbers numw+1 to numx) must be specified
the same way, that is, either table or correlation.
The only combination not allowed is table for aqueous and correlation for oleic components.
This data will be applied to gas-liquid or liquid-liquid K values, depending on which of
*GASLIQKV or *LIQLIQKV is in force.
If gas-liquid *KVKEYCOMP appears more than once then only the last instance is used.
The same comment applies to liquid-liquid *KVKEYCOMP.
Over the operating pressure and temperature ranges, each components table K value must be
either all zero or all positive (greater than zero). Specifically, a components K value table is
not allowed to be zero for some p and T and positive for other p and T.
EXPLANATION:
The look-up table for component 'Pseudo 3':
P=
T=70
T=170
T=270
20
1.0
2.0
3.0
70
2.0
3.0
3.0
120
3.0
4.0
4.0
170
4.0
3.0
5.0
220
3.0
1.0
6.0
2.
3.
3.
3.
4.
4.
4.
3.
5.
3.
1.
6.
*CMM
PURPOSE:
Assign molecular weights.
FORMAT:
*CMM cmm(1) ... cmm(ncomp)
DEFINITIONS:
cmm
Molecular mass of component (kg/gmol | lb/lbmol). The unit is (mass/mole),
even if *MASSBASIS was specified.
DEFAULTS:
Enter cmm(k) = 0 for aqueous component k to get the water default of 0.01802 kg/gmole
(18.02 lb/lbmole).
EXPLANATION:
Since many fluid properties are on a per-mole basis, cmm is very important. For example,
liquid density, which determines the hydrostatic head of each phase, will depend directly on
the mass density, that is, the product mole density times mass/mole.
The molecular masses of some common pure substances are:
Water
Nitrogen
Oxygen
PURPOSE:
Assign critical pressure and temperature.
FORMAT:
*TCRIT tcrit(1) ... tcrit(numy)
*PCRIT pcrit(1) ... pcrit(numy)
or
*IDEALGAS
DEFINITIONS:
tcrit
Component critical temperature (C | F | C). Suggested values for selected
components can be found in Table 5. You may enter zero for a nonvolatile
component since such values are not used internally.
pcrit
Component critical pressure (kPa | psi | kPa). Suggested values for selected
components can be found in Table 5. You may enter zero for a nonvolatile
component since such values are not used internally.
*IDEALGAS
Specifies that the ideal gas law is used, that is, compressibility factor Z is 1.
This option will save some CPU, but can be very inaccurate if any
component is not far from its critical point.
DEFAULTS:
Enter tcrit(k) = 0 for aqueous component k to get the water value of 374.15 C (705.47 F).
If *PCRIT is used, enter pcrit(k) = 0 for aqueous component k to get the water value of
22048 kPa (3198 psi).
CONDITIONS:
*TCRIT is a required keyword.
You must specify either *PCRIT or *IDEALGAS.
EXPLANATION:
Critical temperatures TCR(I) are used in two property calculations:
a) Gas density compressibility factor Z (see Appendix D.4), and
b) Vapourization enthalpy (see Calculation of Vapourization Enthalpies under the
manual page Fluid Enthalpies for keyword *HVR, etc.).
Reference Conditions
Oleic component i:
Noncondensable gas:
Gas phase
DEFAULTS:
If *PRSR is absent, prsr = 100 kPa.
If *TEMR is absent, temr = 25 C.
If *PSURF is absent, psurf = 101 kPa =14.65 psi.
If *TSURF is absent, tsurf = 290 K = 62 F.
If *SURFLASH is absent, then *SURFLASH *SEGREGATED is assumed.
If *AQFRCOMP is absent, then the aquifer fluid is component #1.
If *K_SURF is absent for a component, that components surface gas-liquid K value is the
value calculated from user input data at psurf and tsurf. For the table calculation the p and T
values used are those within the tables p and T range closest to psurf and Tsurf. The same
comments apply to *KL_SURF and surface liquid-liquid K value.
CONDITIONS:
*SURFLASH must be followed by either *SEGREGATED, a list of phase designators,
*KVALUE or *THERMAL.
EXPLANATION:
TEMR is used in conjunction with the following input data:
1. Liquid density data (*MOLDEN, *MASSDEN or *MOLVOL),
2. Liquid and gas phase enthalpy data (*CPL1, *CPG1, etc.),
3. Formation heat capacity (*ROCKCP),
4. Reaction enthalpy data (*RENTH). Most reaction enthalpy data is referred to 25 C,
so the default value is recommended for combustion simulations.
5. Wellbore heatloss option, where TEMR may be the temperature of water entering
the steam boiler.
Reporting Well Performance at Surface Conditions
When well performance is reported in terms of phase volumes at surface conditions, the
corresponding phase densities and compositions must be defined. Densities of each
component are based on *PSURF and *TSURF. Mixing of components in a phase is
assumed to be ideal, that is, the total phase volume is the sum of the individual component
volumes in that phase. The *SURFLASH options indicate how to partition the components
between phases. Both *SEGREGATED and phase_list result in each component being
partitioned entirely in the indicated phase, but the other options partition each component
between multiple phases according to K values. See Appendix A.5 for further discussion.
Aquifers and Multiple Aqueous Components
The analytical aquifer enabled via keyword *AQUIFER assumes that the fluid in the aquifer
pore space consists entirely of the aquifer component in the water phase. When there is
only one aqueous component (numw = 1 for keyword *MODEL) then that must be the
aquifer component. When there are multiple aqueous components you can choose to override
the default aquifer component (#1) via keyword *AQFRCOMP.
There is a condition on the fluid which flows from reservoir to aquifer, that is, the aquifer
model can accept from the reservoir only the aquifer component. However, the composition
of fluid flowing from reservoir to aquifer depends on the composition of the water phase in
the reservoir. At the end of each time step the water phase composition is checked for each
block experiencing flow into an aquifer: if the mole fraction of the aquifer component is less
than 99%, a warning message is issued. After a number of these messages the run is
terminated. One strategy to satisfy this constraint is to assign water phase composition of
100% aquifer component in blocks around the aquifer as a buffer zone.
Fluid Enthalpies
cpg3
cpg4
cpl1
First coefficient in liquid heat capacity correlation (J/gmol-C | Btu/lbmol-F).
cpl2
cpl3
cpl4
hvr
ev
Second coefficient in vapourization enthalpy correlation.
hvapr
Vapourization enthalpy at reference temperature given by *TEMR (J/gmol |
Btu/lbmol).
DEFAULTS:
If none of these keywords is present, the fluid heat capacities will be:
a) Aqueous components: liquid and vapour from internal water table,
b) Oleic components: vapour is 0.25 Btu/lb-F; liquid is 0.5 Btu/lb-F for liquid-based
enthalpy options, 0.25 Btu/lb-F for gas-based enthalpy option,
c) All other components: vapour is 0.25 Btu/lb-F.
These defaults usually are quite adequate, and are recommended unless you have specific
values to use. When the gas-based enthalpy option is used, for a dead component assign a
liquid value to the gas keyword *CPG1, etc.
Defaulting is done on a per-component basis. Therefore, if you want to over-ride the default
for a particular component, enter zeroes in that components position for each enthalpy
definition keyword that appears in the data. It is necessary to do this since the enthalpy
keywords require a number for each component. For example, to over-ride the default of
only component #3 out of 5 components, and only for liquid heat capacity, use the following:
*CPL1 0 0 30.5 0 0
Here components #1, #2, #4 and #5 each will end up with zero for all enthalpy data, which
indicates that the defaults above are to be used.
The absence of *EV results in ev = 0.38.
EXPLANATION:
Enthalpy Base Option
With the above keywords it is possible to define for each condensable component the
following three quantities as a function of temperature:
a) Heat capacity in a liquid phase CPL(T),
b) Heat capacity in the gas phase CPG(T), and
c) Enthalpy of vapourization HVAP(T).
However, only two of these three quantities are independent, since they are related by the
definition
HVAP(T) = HG(T) - HL(T).
Here, HL(T) is component enthalpy in a liquid phase, defined by CPL(T) = d(HL(T))/dT;
HG(T) is component enthalpy in the gas phase, defined by CPG(T) = d(HG(T))/dT.
Three enthalpy datum options are available, allowing the user to choose which two of the
three quantities, above, to enter as data. The option is determined by the choice of keywords.
1. Liquid Heat Capacities
Enter coefficients for liquid heat capacity and vapourization enthalpy *CPL1 to 4,
*HVR and *EV. Enthalpy datum is liquid phase at T = TEMR. See Temperature
Units and Correlation Coefficients, below.
Condensable Components:
CPL(T) = cpl1 + cpl2 * T + cpl3 * T2 + cpl4 * T3
HVAP(T) = hvr * (Tcrit - T)ev
The component liquid enthalpy HL(T) is the integral of CPL(T) from
TEMR to T. The component vapour enthalpy is
HG(T) = HL(T) + HVAP(T)
Non-condensable Components:
CPG(T) = cpl1 + cpl2 * T + cpl3 * T2 + cpl4 * T3
The component vapour enthalpy HG(T) is the integral of CPG(T) from
TEMR to T. These coefficients correspond to T in absolute degrees.
2. Vapour Heat Capacities
Enter vapour heat capacity and vapourization enthalpy coefficients *CPG1 to 4
and *HVR. Enthalpy datum is gas phase at T = TEMR. See Temperature Units
and Correlation Coefficients, below.
Condensable Components:
CPG(T) = cpg1 + cpg2 * T + cpg3 * T2 + cpg4 * T3
HVAP(T) = hvr * (Tcrit - T)ev
The component vapour enthalpy HG(T) is the integral of CPG(T) from
TEMR to T. The component liquid enthalpy is
HL(T) = HG(T) - HVAP(T)
Non-condensable Components:
Same as for #1.
3. Liquid and Vapour Heat Capacities
Enter both liquid and vapour heat capacity coefficients *CPL1 to 4 and *CPG1 to
4, along with *HVAPR. Enthalpy datum is liquid phase at T = TEMR. See
Temperature Units and Correlation Coefficients, below.
Condensable Components:
CPG(T) = cpg1 + cpg2 * T + cpg3 * T2 + cpg4 * T3
CPL(T) = cpl1 + cpl2 * T + cpl3 * T2 + cpl4 * T3
hvapr is an integration constant for HG(T); it is the vapourization
enthalpy at T = TEMR.
The component liquid enthalpy HL(T) is the integral of CPL(T) from
TEMR to T. The component I vapour enthalpy is HVR(I) plus the
integral of CPG(T) from TEMR to T.
Non-condensable Components:
CPG(T) = cpg1 + cpg2 * T + cpg3 * T2 + cpg4 * T3
The component vapour enthalpy HG(T) is the integral of CPG(T) from
TEMR to T. These coefficients correspond to T in absolute degrees.
Calculation of Vapourization Enthalpies
The component vapourization enthalpy HVAP(T) may be modelled as a function of
temperature using Watson's correlation
HVAP(T) = HVAP(Tb) * ( (Tc-T) / (Tc-Tb) )ev
where Tc is the component's critical temperature, Tb is the component's normal boiling
temperature, HVAP(Tb) is the component's vapourization enthalpy at Tb, and ev is a constant
with a value between 0.375 and 0.38. The constant part of HVAP(T) for component I is
lumped into
HVR = HVAP(Tb) / (Tc-Tb)ev
Suggested values of HVR for selected components are included in Table 8.
Alternatively, to determine HVAP(Tb) if Tb, Tc and critical pressure Pc are known, the
Reidal correlation can be used:
HVAP(Tb) = 1.093 * R * Tc * ( (Tb/Tc)*(ln(Pc)-1) / (0.93-Tb/Tc) )
where Tb and Tc are in degrees K, Pc is in atm, R is the gas constant 1.987 cal/gm mole-K, and
HVAL(Tb) is in cal/gm mole. HVAP(Tb) must be converted to the correct user input units.
Phase Enthalpies
The enthalpies and internal energies of the water, oil, gas and phases are calculated as follows.
Note that oil phase pressure Po is used for the work term in all three phases.
Water:
ENTHW(T) = water mole fraction weighted sum of HL(T) of component I,
for I from 1 to NUMX.
UINW(T) = ENTHW(T) - Po/DENW, where DENW is water phase mole
density.
Oil:
ENTHO(T) = oil mole fraction weighted sum of HL(T) of component I, for I
from 1 to NUMX.
UINO(T) = ENTHO(T) - Po/DENO, where DENO is oil phase mole density.
Gas:
ENTHG(T) = gas mole fraction weighted sum of HG(T) of component I, for
I from 1 to NUMY.
UING(T) = ENTHG(T) - Po/DENG, where DENG = gas phase mole density.
Temperature Units and Correlation Coefficients
Heat capacity correlation coefficients usually are quoted for the correlation T expressed in
absolute degrees, and STARS accepts directly such coefficients for all STARS input
temperature units. For example, when input temperature unit is C, STARS still assumes that
coefficients cpg1, etc., correspond to the correlation T expressed in K. See the example in
Table 5 Gas Heat Capacity Coefficients for Selected Components.
If coefficients from another source are quoted for temperature in non-absolute degrees (C or
F) then they must be converted. Let the correlation in non-absolute degrees TN (C or F) be A1
+ A2*TN + A3*TN2 + A4*TN3. By substituting TN = T TD (TD = 273.15 for C and 459.67 for
F), rewrite the correlation in terms of absolute temperature T and gather terms to get
cpg1 = A1 - A2*TD + A3*TD2 - A4*TD3
cpg2 = A2 2*A3*TD + 3*A4*TD2
cpg3 = A3 3*A4*TD
cpg4 = A4
For example, assume that gas phase heat capacity of component N2 is quoted as 7.077 3.412e-4*TF Btu/lbmol-F where TF is the temperature in F. Here A1 = 7.077, A2 = -3.412e-4,
A3 = A4 = 0 and TD = 459.67. The resulting STARS coefficients are cpg1 = 7.234 and cpg2 =
-3.412e-4. See British-unit 2-coefficient entries for component N2 in Table 5.
Exceeding Maximum Pressure of Internal Steam Table
The internal table for steam (water vapour) enthalpy depends on both temperature and pressure.
This pressure data consists of tables up to 60 MPa (8702 psi). If a block or well fluid pressure
exceeds this value, the enthalpy returned will be the value at the tables maximum pressure and
the requested temperature. This measure is necessary since extrapolating pressure outside the
table leads to incorrect temperature dependence and hence heat capacity values; it is acceptable
because enthalpy dependence on pressure is low at these pressures.
DEFINITIONS:
name
Component name in quotes, defined via keywords *MODEL and
*COMPNAME.
density
cp
Compressibility (1/kPa | 1/psi) at constant temperature.
ct
Thermal expansivity (1/C | 1/F) at constant pressure.
cpt
Pressure-temperature cross term (1/kPa-C | 1/psi-F) for density.
cps1
First coefficient in solid heat capacity correlation (J/gmol-C | Btu/lbmol-F).
cps2
Second coefficient in solid heat capacity correlation (J/gmol-C**2 |
Btu/lbmol-F**2).
*GASSYSLD
Indicates that the density of the indicated component in the trapped
(adsorbed/solid) phase will be calculated using a gas-like compressibility
instead of value cp entered via *SOLID_DEN. See "Gassy Solids" in the
EXPLANATION below.
DEFAULTS:
For each adsorbed/trapped condensable component, if *SOLID_DEN is absent then k0, cp,
ct and cpt are obtained from *MASSDEN (or equivalent), *CP, *CT1 and *CPT, for that
components liquid reference phase. If *SOLID_CP is absent then cps1 and cps2 are
obtained from *CPL1 and *CPL2 when the fluid enthalpy is referenced to the liquid phase;
otherwise the default is the same as for solid component.
If *SOLID_DEN appears but its cpt is absent, cpt = 0 is assumed for that component.
For each solid and adsorbed/trapped non-condensable component, *SOLID_DEN is required.
If *SOLID_CP is absent then cps1 = 17 J/gmole-C (4.06 Btu/lbmole-F) and cps2 = 0.
The absence of *GASSYSLD implies that no component uses the gas-like compressibility
option.
EXPLANATION:
The density of component k in the solid phase at pressure p and temperature T is given by
sk(p,T) = k0 exp[ cp(p PRSR) ct(T TEMR) + cpt(p PRSR)(T TEMR) ]
The total solid phase volume is the sum of
Cck / sk (p, T )
over all components k found in that phase, where Cck is the solid phase concentration of
component k in the pore space.
When this heat capacity model is being used (see DEFAULTS), the heat capacity is
v = 0.30
and fuel concentration of 1.8 lb/reservoir ft3, also expressed as Cc = 6.0 lb/ pore ft3. Assume
coke fuel has a pure density of
c = 60 lb / ft 3
Therefore, the fluid porosity
f = v [1 Cc / c ] = 0.27
at this value of Cc, but will vary with time as the Cc varies. For each solid component the
ratio Cc/c represents the fraction of the void porosity that it occupies, and these fractions
must be summed to obtain f.
Gassy Solids
Nonequilibrium processes involving gas evolution such that a quantity of immobile gas
remains trapped in the reservoir include foams, foamy oils, and gas evolution from hydrates
and coal. When these trapped bubbles are viewed as a "dispersed component" in the trapped
phase, the keyword *GASSYSLD allows this component to import a gas-like compressibility
to this phase.
It is important when using this keyword that the appropriate component partial molar density
corresponding to the reference pressure be employed. Thus when *PRSR is high, an almost
liquid-like density is appropriate, while if *PRSR is at or near surface pressure, a gas-like
partial molar density should be employed.
Most often it is expected that this keyword is used in conjunction with a nonequilibrium mass
transfer expression (via the chemical reaction model) which quantifies the rate of creation,
and possibly the rate of coalescence, of this gas-like dispersed component.
Conversion from Obsolete Keywords *SOLDEN and *ADSDEN
To convert mole density from obsolete keywords *SOLDEN and *ADSDEN to mass density
k0 for *SOLID_DEN, multiply by the components molecular mass. The default of
*SOLDEN and *ADSDEN was 48000 gmole/m3 (2.997 lbmole/ft3).
PURPOSE:
Specify the liquid phase(s) to which the subsequent liquid data is to be assigned.
FORMAT:
*LIQPHASE
*WATPHASE
*OILPHASE
DEFINITIONS:
*LIQPHASE
Assign the following liquid phase data to both the water and oil phases. This
is the default and should be overwritten only if necessary.
*WATPHASE
Assign the following liquid phase data to the water phase only. Use this
when a component is found in both liquid phases but its component property
is not the same in the two phases.
*OILPHASE
Assign the following liquid phase data to the oil phase only. Use this when a
component is found in both liquid phases but its component property is not
the same in the two phases.
DEFAULTS:
This option applies to liquid densities and viscosities, that is, the following keywords
*MOLDEN
*MASSDEN
*MOLVOL
*CP
*CT1
*CT2
*AVISC
*BVISC
*VISCTABLE
*DNMIXCOMP
*DNMIXENDP
*DNMIXFUNC
*VSMIXCOMP
*VSMIXENDP
*VSMIXFUN
An example of a need for the other option might be assuming that a component is dissolved
in the water phase but forms an emulsion in the oil phase. The effect of the component on the
oil phase would be completely different from the water phase.
Internally there are two copies of density and viscosity definition data one for each of the
liquid phases. For example, keywords *MOLDEN, *MASSDEN and *MOLVOL end up
assigning a value den(k) for each condensable component k. Internally there is space for the
water and oil phases separately, namely denw(k) and deno(k), respectively.
The following illustrates how to assign different property data to the water and oil phases.
*WATPHASE
*MASSDEN . . .
*OILPHASE
*MASSDEN . . .
Keyword *LIQPHASE causes data to be assigned to both water and oil phases.
*LIQPHASE
*MASSDEN . . .
The following shows that you can use all three phase designation keywords if not all the
density and/or viscosity data is different between the phases.
*WATPHASE
*MASSDEN . . .
** Assign to denw(k) only
*OILPHASE
*MASSDEN . . .
** Assign to deno(k) only
. . .
*LIQPHASE
*VISCTABLE . . . ** Liquid viscosities the same in two phases
This last example shows that each phase designation keyword sets a rule, but does not assign
data itself. *WATPHASE indicates that data following it is assigned only to the water phase.
The keyword *LIQPHASE must appear in order to change the assignment rule for viscosity
data.
Note that the order of appearance of these phase designators can be significant. For example,
to assign the same data to both liquid phases, with one exception, *LIQPHASE must appear
first and the exception must appear below it. The following data fragments illustrate this.
*** CORRECT ***
*LIQPHASE
data including *MASSDEN . . .
** Assign to both phases
*OILPHASE
*MASSDEN . . .
** Exception is kept
*** INCORRECT ***
*OILPHASE
*MASSDEN . . .
** Assign to oil phase only
*LIQPHASE
data including *MASSDEN . . .
** Exception is lost
*MOLDEN
*MASSDEN
*MOLVOL
*CP
*CT1
*CT2
*CPT
*GASSYLIQ
den(1)
denm(1)
vol(1)
cp(1)
ct1(1)
ct2(1)
cpt(1)
comp_name
...
...
...
...
...
...
...
den(numx)
denm(numx)
vol(numx)
cp(numx)
ct1(numx)
ct2(numx)
cpt(numx)
DEFINITIONS:
den
Partial molar density (inverse of partial molar volume) at reference pressure
PRSR and temperature TEMR (gmol/m3 | lbmol/ft3 | gmol/cm3).
denm
vol
Partial molar volume at reference pressure PRSR and temperature TEMR
(m3/gmol | ft3/lbmol | cm3/gmol).
cp
Liquid compressibility (1/kPa | 1/psi) at constant temperature.
ct1
First coefficient of the thermal expansion correlation (1/C | 1/F). ct1 is the
thermal expansion coefficient when ct2 = 0.
ct2
Second coefficient of the thermal expansion correlation (1/C**2 | 1/F**2).
The thermal expansion coefficient is ct1 + Tct2 where T is temperature
expressed in absolute degrees (R or K). See Second Temperature
Coefficient below.
cpt
Pressure-temperature cross term for liquid density (1/kPa-C | 1/psi-F).
*GASSYLIQ
Indicates that the liquid density of the specified component will be calculated
using a gas-like compressibility instead of the number entered via *CP. See
"Gassy Liquids" in the EXPLANATION below.
This keyword may be used for multiple components.
If keyword *CP is present there still must be "numx" numbers after it, but the
cp value for this component will not be used internally.
comp_name
Component name in quotes defined via keywords *MODEL and
*COMPNAME of a liquid component.
DEFAULTS:
It is not possible to enter correlation coefficients for an aqueous component that will cause
the correlation to match the default aqueous density calculation.
The absence of *GASSYLIQ implies that no component uses the gas-like compressibility option.
CONDITIONS:
For non-defaulted aqueous components, the partial molar volume of component k in the
aqueous phase at pressure p and temperature T is given by
Vw(k) = exp[ ct1(k)*(T-TEMR) + ct2(k)*(T*T - TEMR*TEMR)/2
cp(k)*(p-prsr) cpt(k)*(p-prsr) *(T-TEMR) ] / den(k)
Aqueous phase molar volume Vaq is given by the sum of Vw(k) * w(k), k=1 to NUMX, where
w(k) is the mole fraction of component k in the aqueous phase. The aqueous phase molar
density is given by 1/Vaq.
Oil Phase Density
For non-defaulted aqueous components, the partial molar volume of component k in the oil
phase at pressure p and temperature T is given by
Vo(k) = exp[ ct1(k)*(T-TEMR) + ct2(k)*(T*T - TEMR*TEMR)/2
cp(k)*(p-prsr) cpt(k)*(p-prsr) *(T-TEMR) ] / den(k)
Oil phase molar volume Voil is given by the sum of Vo(k) * x(k), k=1 to NUMX, where x(k)
is the mole fraction of component k in the oil phase. The oil phase molar density is given by
1/Voil.
Second Temperature Coefficient
from which ct1(k) = -4e-5 and ct2(k) = 2.5e-7. The temperature-dependent part of the density
correlation is generated by integrating the thermal expansion expression from TEMR to T:
ct1(k)(T-TEMR) + ct2(k)(TT - TEMRTEMR)/2
Using the previous example with TEMR = 60F = 520R and T = 300F = 760R, the
temperature dependent part of the correlation is
(-4e-5)(760-520) + (2.5e-7)(760760-520520)/2 = 2.88e-2
To get this result, the constant model (ct2=0) would need ct1 = 1.2e-4 which is between the
two values specified above.
Note that the density correlations above need T and TEMR expressed in absolute degrees (R
or K) only when ct2 is non-zero. For example, if ct2 = 0 and ct1 = 1.2e-4 then the same
result is obtained from the correlation using the F values: (1.2e-4)(300-60) = 2.88e-2.
Dissolved Gases
Gaseous components like methane dissolved in the liquid oil also use the concept of partial
molar volume. Many misunderstandings stem from the fact that reservoir engineers
commonly do not distinguish between component names and phase names. When working
with a compositional simulator like STARS, care must be taken to note the component or
fluid as well the phase of interest (e.g., solution gas component in the gas phase versus the
same component in the oil phase).
There is a definite distinction between the inverse of partial molar volume (what would be
entered via *MOLDEN or *MASSDEN) and two other commonly used gas densities that
have very different meanings: bulk density and gas phase density. Bulk density is the mass
of gas divided by the total oil phase volume, whereas *MASSDEN is the mass of gas divided
by the volume of just the gas component in its liquid (dissolved) form. Gas phase density is
the mass of gas divided by its volume in its gaseous form. Usually *MASSDEN has a value
corresponding to specific gravities ranging roughly from 0.3 to 0.7, much like a light liquid.
Bulk density usually has a smaller number, and gas phase density is very small. The correct
value of *MASSDEN will result in the correct live oil density after the mixing rule is applied.
Gassy Liquids
The evolution of solution gas when a live oil drops below the bubble point often can occur
sufficiently slowly that a nonequilibrium stage in this process should be modelled directly. In
this "foamy oil" situation, small bubbles of gas flow with the oil and contribute to an
abnormally high oil phase compressibility. These bubbles are viewed as a "dispersed"
component in the oil phase, and the keyword *GASSYLIQ allows this component to impart a
gas-like compressibility to the liquid phase.
It is important when using this keyword that the appropriate component partial molar density
corresponding to the reference pressure be employed. Thus when *PRSR is high, an almost
liquid-like density is appropriate, while if *PRSR is at or near surface pressure, a gas-like
partial molar density should be employed.
Most often it is expected that this keyword is used in conjunction with a nonequilibrium mass
transfer expression (via the chemical reaction model) which quantifies the rate of creation,
and possibly the rate of coalescence, of this gas-like dispersed liquid component.
*DNMIXCOMP comp_name
*DNMIXENDP xlow xhigh
*DNMIXFUNC f(1) ... f(11)
DEFINITIONS:
comp_name
Quoted name of component using density nonlinear mixing.
xlow
Abscissa corresponding to the first table entry. The allowed range is from 0
to xhigh.
xhigh
Abscissa corresponding to the last table entry. The allowed range is from
xlow to 1.
f(i)
Table entries that define the nonlinear mixing rule function which must be
monotonically increasing. The function also should be reasonably smooth in
order to minimize convergence difficulties.
DEFAULTS:
The phase to which this data will be assigned depends on which of *LIQPHASE,
*WATPHASE and *OILPHASE is in force.
A nonlinear function may be specified for more than one component in each of the water and
oil phases. At least one component in each liquid phase must not be a key component, since
the algorithm involves adjusting the weighting factors of the non-key components.
Keywords *DNMIXENDP and *DNMIXFUNC are applied to the last key component
defined via *DNMIXCOMP. A key component may not be specified more than once in each
liquid phase.
EXPLANATION:
Density Nonlinear Mixing
The linear mixing rule for liquid density actually is linear in mole volumes
V = sum of V(i) * X(i)
where
V
V(i)
X(i)
The nonlinear mixing option replaces the mole fractions with a more general weighting factor
vector. When the weighting factors are equal to the mole fractions, the "linear mixing" result
is obtained. Keywords *DNMIXENDP and *DNMIXFUNC define a function that specifies
how to change the weighting factors from "linear".
More exactly, this function f(x) is the desired weighting factor f corresponding to the "linear"
factor which is the mole fraction x. For example, consider a medium oil with partial molar
volume 100 cc/mole and CO2 that may dissolved in that oil with a partial molar volume of
200 cc/mole. If the mole fraction of CO2 in the mixture is x = 0.3 then the linear mixing rule
gives a mixture molar volume of
V
Suppose that an EOS estimation of oil phase molar volume at the same conditions is 137
cc/mole, reflecting a certain degree of nonlinear volume mixing. If f is the "nonlinear"
weighting factor for key component CO2 at these conditions, then
(1-f) * 100 cc/mole + f * 200 cc/mole = 137 cc/mole
giving f = 0.37. Since this point corresponds to mole fraction 0.3, the nonlinear function has
point f(0.3) = 0.37. The function is filed in for other values of mole fraction of key
component CO2 until 11 points f(0.0) to f(1.0) are obtained. These 11 function points are
entered for *DNMIXFUNC. Keyword *DNMIXENDP allows you to customize the range of
mole fractions corresponding to the 11 function points. The precise definition of f(x) from 11
points f(i), i = 1 to 11, along with xlow and xhigh is (all interpolation is linear):
x(i) = xlow + (i-1)*(xhigh-xlow)/10, i = 1 to 11
so that xlow = x(1) and xhigh = x(11);
0 < x < xlow: interpolate between f(0) = 0 and f(xlow) = f(1)
x(i) <= x < x(i+1): interpolate between f(i) and f(i+1)
xhigh < x < 1: interpolate between f(xhigh) = f(11) and f(1) = 1.
The nonlinear mixing option is used in the density calculation as shown above (in the
equation used to get the weighting function f at mole fraction x = 0.3), except that the
weighting factors are known and the phase mole volume is the result. Since the weighting
factors used for all the components must sum to 1, the factors used by the non-key
components are multiplied by R where
wold
wnew
R
=
=
=
If wnew or wold is 1 or greater (no non-key components present) then the weighting factors
of the key components are normalized to sum to 1.
Nonlinear mixing data should be entered only for truly key components. In the example
above with only 2 components, it is true that the same result could be obtained by entering
"mirror-image" nonlinear mixing data for the other component. However, designating CO2 as
the key component makes it clear what is happening when there is more than 1 other oleic
component and when there is more than 1 key component. For example, if the medium oil in
the example is split then the nonlinear data is unchanged if CO2 is key.
Example: Two key components 'CO2' and 'Naphtha'
*DNMIXCOMP 'CO2' *DNMIXENDP 0 0.2
*DNMIXFUNC
** 0.000 0.020 0.040 0.060 0.080 0.100 0.120 0.140 0.160 0.180 0.200
0.000 0.025 0.048 0.069 0.091 0.112 0.129 0.145 0.163 0.181 0.200
*DNMIXCOMP 'Naphtha' *DNMIXENDP 0 0.05
*DNMIXFUNC
** 0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050
0.000 0.014 0.018 0.022 0.026 0.030 0.034 0.033 0.042 0.046 0.050
*GASD-ZCOEF
PURPOSE:
*EXPLICIT
Gas compressibility factor Z is updated at the beginning of each time step,
that is, its treatment is explicit in time.
*IMPLICIT
Gas compressibility factor Z is updated continuously, that is, its treatment is
fully implicit in time.
DEFAULTS:
Gas phase density is calculated from the Redlich-Kwong equation of state assuming zero
interaction coefficients. See Appendix D.4. This calculation reduces to finding the gas
compressibility factor Z. Since the Z calculation is somewhat expensive and Z does not vary
much under normal circumstances, the default action is that Z is updated only at the
beginning of each time step (*EXPLICIT). In some cases a more implicit method is required,
so *IMPLICIT is available. An example of such a case is crossing into and out of water
supercritical regions.
*VISCTYPE, *VSTYPE
PURPOSE:
*VSTYPE
DEFINITIONS:
key
Viscosity property type key. Allowed range is from 1 to 50, inclusive.
Viscosity properties will be assigned to this key number until another
*VISCTYPE is encountered.
*COPY old_key
Initialize the set corresponding to 'key' with values from the set
corresponding to 'old_key'. This is useful when you want two viscosity types
that are the same except for a few properties.
*VSTYPE
Enter a viscosity type key for each grid block. Allowed values are 1 and key
values that have been defined.
DEFAULTS:
The default viscosity type key value is 1. *VISCTYPE is needed only to define multiple
viscosity types.
The default key assigned to each block is 1. *VSTYPE is needed only to assign multiple
viscosity type keys to the grid.
EXPLANATION:
Unless you have multiple viscosity types, you do not need *VISCTYPE or *VSTYPE.
The viscosity type can be changed at any time in recurrent data. This can model some of the
effects of hysteresis when one set is used for injection and another set is used for production.
The following keywords may be assigned to multiple viscosity types: *AVG, *BVG,
*GVISCOR, *AVISC, *BVISC, *VISCTABLE, *VSMIXCOMP, *VSMIXENDP and
*VSMIXFUNC. Note that *AVG and *BVG must appear either for all viscosity types or for
none.
PURPOSE:
Override the internal gas phase viscosity with a composition-dependent, and possibly pressuredependent, calculation.
FORMAT:
avg(i)
First coefficient in correlation for temperature dependence of viscosity of
component i in the gas phase (cp/K**bvg(i) | cp/R**bvg(i)). avg(i) must be
non-negative, and may be zero only if (a) bvg(i) = 0 or (b) the component
does not appear in the gas phase.
bvg(i)
Second coefficient of correlation for temperature dependence of viscosity of
component i in the gas phase. The value must be non-negative.
*GVISCOR
Enable correction to gas phase viscosity to account for high gas density.
This option is not allowed together with *MASSBASIS.
DEFAULTS:
If all three keywords are absent, the following composition-independent internal gas viscosity
correlation is used: (0.00864 cp) (1.574+0.0044T) where T is in deg C. This default is
designed for general purpose use and does not correspond to any particular component.
T (C):
VISG (cp):
10
0.01398
100
0.01740
500
0.03261
10
0.01017
100
0.01368
500
0.02994
This default does not yield the same result as the general-purpose default described above.
For non-aqueous component i, if avg(i) = bvg(i) = 0 is entered then avg(i) = 0.01 cp and
bvg(i) = 0 are assumed.
CONDITIONS:
Both *AVG and *BVG must be present to enable the composition-dependent option.
*AVG, *BVG and *PCRIT must be present to enable the high-density correction option,
since the calculation uses critical pressures.
User's Guide STARS
For multiple viscosity sets (*VISCTYPE), keywords *AVG and *BVG should be either
present for all sets or absent for all sets.
For components that appear in the gas phase, avg(i) = 0 is allowed only when bvg(i) = 0.
EXPLANATION:
The internal default method requires the least computation of the gas viscosity options and
the accuracy is quite good, so override this default only if necessary. Another consideration
is that variations in gas viscosity usually do not significantly affect other recover results.
The component viscosity visg(i) in the gas phase is calculated from absolute temperature T
using:
visg(i) = avg(i) * (T ** bvg(i)).
The gas phase viscosity is determined by
numy
i =1
numy
y(i )*
cmm(i )
i =1
Pressure correction is applied for dense gases when the keyword *GVISCOR is used. The
correction was suggested by Dean and Stiel, AICHEJ 1965, vol.11, p. 526 and has the form:
(vishp-vislp)C = 1.08 exp ( 1.439 denr
exp ( -1.111 denr ** 1.858 ) )
vishp
vislp
denr
denm
dencm
C
Tcm
Pcm
MWm
Pcm and Tcm are calculated by taking mole fraction weighted averages of critical properties
and Zcm was also approximated to be 0.27.
See Appendix D.5 for further discussion.
avisc(i), bvisc(i)
Coefficients of the correlation for temperature dependence of component
viscosity in the liquid phases. The unit of avisc(i) is cp (viscosity). The unit
of bvisc(i) is temperature difference which has the same value if the
temperature unit is C or K and the same value if the temperature unit is F or R.
The correlation for component i viscosity viso(i) is
viso(i) = avisc(i) exp[ bvisc(i) / T ]
where T is in absolute degrees. Neither avisc(i) nor bvisc(i) may be negative.
See Table 4 for suggested coefficient values for selected components.
For an aqueous component, enter zero to get the internal water table (water
phase only). For a component not found in the phase in question, enter a zero
value for avisc. A zero value for bvisc(i) results in viso(i) = avisc(i).
*VISCTABLE
Indicates that a viscosity-versus-temperature table follows. The maximum
allowed number of temperature values is 40. Enter only one row when
running in isothermal mode or to indicate that the viscosities do not vary with
temperature.
temp
Table temperature (C | F). The specified temperature range must be large
enough to include all the temperatures encountered during the simulation. A
warning message is issued at the end of each time step for each grid block
temperature that lies more than 1 deg C outside this table range. To avoid
possible unphysical results and poor convergence, only a certain number of
such warning messages are allowed before the simulation is terminated.
visc(i)
Viscosity (cp) for each component i. A zero value is allowed only for an
aqueous component to specify defaulting to internal water data. A warning is
issued when viscosity increases with temperature. Such a condition can be
allowed for soluble gases dissolved in liquid components (see Appendix D.5)
but should not be allowed for the liquid components themselves.
A value must be entered for each of numx components. For a component not
found in the phase in question, enter a zero value.
xnacl
Brine concentration (mass fraction of salt). The allowed range is from 0 to 0.26.
DEFAULTS:
If *AVISC is present but *BVISC is absent, the component viscosities are viso(i) = avisc(i).
If zero data is entered at all temperatures for an aqueous component, internal water data will
be used for that component in the water phase only. There is no default for aqueous
component data in the oil phase, even if the data is assigned with *LIQPHASE in force.
If *XNACL is absent, xnacl = 0 is assumed.
CONDITIONS:
Either *AVISC (and possibly *BVISC) or *VISCTABLE must be present, but not both. Once
the method of specifying liquid viscosity is decided, that method must be used for all
components.
The phase to which this data will be assigned depends on which of *LIQPHASE,
*WATPHASE and *OILPHASE is in force. The default is *LIQPHASE.
EXPLANATION:
2.1
Estimated
Temp
40 o-120 o
120 o-212 o
212 o-400 o
2.0
1.9
Max.
*
1%
5%
10%
Error
f
5%
5%
5%
1.14
1.12
1.10
1.8
psi
1.08
1.7
100
00
ps
i
1.06
80
00
1.6
1.04
si
0p
600
1.5
1.02
psi
4000
2000 psi
1.4
1.00
1.3
100
200
300
400
T, oF
Pressure correction factor (f)
for water versus T, oF
Presumed applicable to brines but
not confirmed experimentally
Viscosity at elevated pressure
p,T = *T f p,T
1.1
l
Nac
26%
24%
20%
8%
0.9
16%
12%
1.0
4%
0%
Viscosity *, centipoise
1.2
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
40
60
80
100
120
140 160
180 200
220
240 260
280
300 320
340
360
380 400
T, oF
*VSMIXCOMP comp_name
*VSMIXENDP xlow xhigh
*VSMIXFUNC f(1) ... f(11)
DEFINITIONS:
comp_name
Quoted name of component using viscosity nonlinear mixing.
xlow
Abscissa corresponding to the first table entry. The allowed range is from 0
to xhigh.
xhigh
Abscissa corresponding to the last table entry. The allowed range is from
xlow to 1.
f(i)
Table entries that define the nonlinear mixing rule function, which should be
reasonably smooth.
DEFAULTS:
The phase to which this data will be assigned depends on which of *LIQPHASE,
*WATPHASE and *OILPHASE is in force.
A nonlinear function may be specified for more than one component in each of the water and
oil phases. At least one component in each liquid phase must not be a key component, since
the algorithm involves adjusting the weighting factors of the non-key components.
Keywords *VSMIXENDP and *VSMIXFUNC are applied to the last key component defined
via *VSMIXCOMP. A key component may not be specified more than once in each liquid
phase.
EXPLANATION:
The viscosity nonlinear mixing option works the same way as the density option described
with keyword *DNMIXCOMP. The only difference is that the quantity that is weighted is
logarithm of viscosity.
The STARS Technical Manual discusses further the use of this option.
Composition of the viscosity nonlinear mixing key components may be examined via
subkeyword *VISCCMP of *GRID *OUTPRN and subkeywords *VISWCOM and
*VISOCOM of *OUTSRF *GRID and *SPECIAL.
See Appendix D.5 for further discussion.
Nonequilibrium Blockage
*BLOCKAGE, *SOLIDMIN
PURPOSE:
*BLOCKAGE
Table to describe dependence of flow restriction factor on effective
permeability. Enter one set of effp1t versus rrsft on each line.
phase_des
Phase to which the flow restriction will be applied:
'W' - water phase,
'O' - oil phase,
'G' - gas phase, and
'ALL' - water, oil and gas phases.
comp_name
Quoted name of component whose captured concentration causes the flow
restriction to vary.
effp1t
Tabular value of permeability (md). It must be greater than zero.
rrsft
sldmin
DEFAULTS:
CONDITIONS:
This option is effective only if there is a solid (non-fluid) component, that is, ncomp > numy.
EXPLANATION:
Nonequilibrium Blockage
Particles captured by the porous medium can cause permeability reductions (blockage) in a
manner similar to equilibrium mass transfer to the rock (adsorption).
If the captured droplet is assumed to come from the oil phase then the oil phase effective
permeability is
(absolute perm) (oil relative perm) / Rfo
where
Rfo = j [ 1 + RRSFTj max ( 0, Csj - sldmin ) ]
in a manner similar to (equilibrium) adsorption blockage. Here Rfo is the product of the
resistance factor of each blocking component j, Csj is the concentration of captured oil
droplets, and RRSFTj is looked up from the *BLOCKAGE table. The minimum solid
concentration for blockage to start is given by sldmin. If Csj is less than sldmin, no blockage
occurs. If the captured droplet comes from the water or gas phases then the phase effective
permeability is modified analogously by an Rfw or Rfg.
See Appendix D.7 for further discussion.
sto1
Stoichiometric coefficient of reacting component. It must be non-negative.
Enter zero for components which are not reacting.
Normally, the stoichiometric coefficients are based on one mole of one of the
reacting components.
sto2
Stoichiometric coefficient of produced component. It must be non-negative.
Enter zero for components which are not being produced in this reaction.
Normally, the stoichiometric coefficients are based on one mole of one of the
reacting components.
rrf
Reaction frequency factor (unit is variable). It must be non-negative.
This is the constant factor in the expression for reaction rate (see below). The
unit depends upon data entered via *STOREAC, *RORDER, *O2PP &
*O2CONC.
p_rrf
Pressure (kPa | psi) corresponding to frequency factor rrf in table. p_rrf entries
must be increasing and evenly spaced. Interpolation of rrf between p_rrf
entries is linear. For pressures outside the table range, rrf corresponding to
the closest p_rrf is used. No more than 30 table rows are allowed.
Use *FREQFACP only to provide reaction rate dependence on pressure
beyond that naturally occurring through concentration factors via phase
densities. When it is used, keyword *FREQFACP replaces keyword
*FREQFAC on a per-reaction basis.
DEFAULTS:
A component with sto1 = 0 will not react, and a component with sto2 = 0 will not be
produced by that reaction. A reaction with rrf = 0 will have zero reaction rate, and will not
react or produce any components indicated by *STOREAC and *STOPROD.
CONDITIONS:
*STOREAC ....
*STOPROD ....
*RENTH, etc.
*FREQFAC ....
** Reaction # incremented to 2
** Still second reaction
** Still second reaction
**
"
EXPLANATION:
For each reaction, it is assumed that each reactant reacts in a particular phase. Sometimes one of
the components reacts in more than one phase; this must be modelled as two separate reactions.
For example, the burning of an oil component in both the liquid and gas phases must be entered
as two reactions. The stoichiometry coefficients will be the same, but the reaction kinetics (rate
parameters) may be different. Usually, oil burning is assumed to be a reaction between liquid
oil and gaseous oxygen; the reaction kinetics and enthalpy accounts for oil vapourization or
oxygen dissolution, which in fact may be the rate-determining processes.
The chemical reaction model can be used to model the type of nonequilibrium mass transfer
processes that are involved in the in-situ generation or coalescence of emulsions and foams.
A typical set of combustion reactions, is:
1. Heavy oil cracking to form light oil and solid coke,
2. Coke burning to form water and carbon oxides,
3. Light oil burning,
4. Heavy oil burning.
The user is responsible for ensuring that the stoichiometric coefficients entered as data
represent a mass-conserving set. A set of mass-conserving coefficients will satisfy
sum of cmm(i)*sto1(i) = sum of cmm(i)*sto2(i), sums over i = 1 to ncomp
where cmm(i) is the fluid component molecular mass entered via *CMM.
Stoichiometric Volume Balance
The value of cncco (*SOLID_DEN) normally will be derived from a coke mass density and
*CMM. If the coke mass density is much different from the heavy oil mass density, the
products of the cracking reaction will have a volume significantly different from the
reactants. If there is little or no gas present, the total system compressibility is small which
can cause large pressure changes. Therefore, in some cases it is important to minimize
volume changes due to reactions. A volume conservation constraint would be similar to the
mass conservation constraint, with molar volume (inverse of mole density) of component i in
phase iph(i) replacing cmm(i).
Proportionality of Reaction Parameters
Quantities renth, sto1 and sto2 and reaction rate are proportioned to an amount of material
involved, usually assumed to be one mole of one of the reactants.
Example: Coke-burning reaction. If STO1(coke) = 1, then
a) Renth is energy released per mole of coke burned,
b) Reaction rate is the rate of disappearance of moles of coke,
c) sto1(numy) is moles of oxygen required to burn one mole of coke,
d) sto2(i) is moles of product i from burning one mole of coke.
Reaction Keywords
The data for the following keywords will be associated with a particular reaction number:
1. Critical Reaction Keywords: *STOREAC, *STOPROD, *FREQFAC,
*FREQFACP
2. Noncritical Reaction Keywords: *RENTH, *RPHASE, *RORDER, *EACT,
*O2PP, *O2CONC, *RTEMLOWR, *RTEMUPR, *RXCRITCON
3. Generalized Reactions: *PERMSCALE, *MTVEL
4. Partial Equilibrium Reactions: *RXEQFOR, *RXEQBAK
Solid Components
If there is at least one solid component then there must be at least one reaction, otherwise that
component's moles will not be conserved. See Appendix F.5 and F.8. If you have a data set
with a solid component and associated reactions, you can disable those reactions by setting
their *FREQFAC to zero.
See Appendices D.13, D.14 and F.8 for further discussion.
*RENTH, *RPHASE,
*RORDER, *EACT, *O2PP, *O2CONC, *RTEMLOWR, *RTEMUPR, *RXCRITCON,
*RXCMPFAC
PURPOSE:
Assign non-critical and optional chemical reaction and nonequilibrium mass transfer data.
FORMAT:
*RENTH
*RPHASE
*RORDER
*EACT
*O2PP
*O2CONC
*RTEMLOWR
*RTEMUPR
*RXCRITCON
*RXCMPFAC
Renth
Iphas(1) ... iphas(ncomp)
Enrr(1) ... enrr (ncomp)
Eact
( component name )
( component name )
tlwt
tupt
component name crit_conc
component name phase A B
DEFINITIONS:
renth
Reaction enthalpy (J/gmol | Btu/lbmol). It is positive for exothermic
reactions and negative for endothermic reactions. The default is 0.
Reaction enthalpy is referenced to temperature TEMR and the enthalpy base
phase given by the choice of CPL's and CPG's entered elsewhere. In most
cases, the reaction enthalpy is based on gas phase at 25 deg C.
iphas
Flag defining phase for reacting component. The allowed range is 0 to 4.
= 0 non-reacting components,
= 1 water phase (fluid components only)
= 2 oil phase (fluid components only)
= 3 gas phase (fluid components only)
= 4 solid phase (solid components only)
Note that an adsorbing component may not react in the adsorbed phase.
enrr
Order of reaction with respect to each reacting component's concentration
factor. It must be non-negative.
Enter zero for non-reacting components. Normally, enrr = 1. If enrr = 0, the
reaction rate will be independent of that component's concentration.
eact
Activation energy (J/gmol | Btu/lbmol), which determines the dependence of
the reaction rate on grid block temperature (see below). For chemical
reactions (e.g., combustion) this quantity is non-negative. However, negative
values are allowed, with a warning, to accommodate advanced options like
non-equilibrium interphase mass transfer.
Activation energies are often given in cal/gmole, so be sure that the units are
converted correctly.
*O2PP ( component name )
Partial pressure in the gas phase is used for the concentration factor of the
indicated component in the reactions rate expression. If component name
is absent, then component number numy (usually oxygen) is assumed. This
option may be applied only to components reacting in the gas phase.
*O2CONC ( component name )
Mole (or mass) density is used for the concentration factor of the indicated
component in the reactions rate expression. If component name is absent,
then component number numy (usually oxygen) is assumed.
tlwt
Lower limit of burning zone temperature (C | F) used in the calculation of
reaction rates. If the grid block temperature is less than tlwt, then tlwt is used
as burning zone temperature. The suggested range is from 280 K to 2000 K.
This lower limit can be used to ensure that there is vigorous combustion in a
field-scale grid block, independent of the grid block average temperature.
tupt
Upper limit of burning zone temperature (C | F) used in the calculation of
reaction rates. If the grid block temperature is greater than tupt, then tupt is
used as burning zone temperature. The minimum value allowed is equal to
tlwt. The suggested maximum value is 2000 K.
This upper limit can be used to ensure that the reaction temperature and hence
reaction rate does not get too large. A large burning reaction rate corresponds
to nearly complete oxygen utilization. This results in very small amounts of
unburned oxygen, which can cause stability problems. Therefore, decreasing
TUPT may increase numerical stability in some combustion simulations.
crit_conc
Critical value of reactants concentration factor, below which the dependence
of reaction rate on the concentration factor is linear. The unit is (gmol/m3 |
lbmol/ft3 | gmol/cm3) if the factor is a mole density, and is (kPa | psi) if the
factor is a pressure.
Use this option only when the reactants *RORDER is less than 1 and its
concentration is expected to approach zero. Use a value 3 to 6 orders of
magnitude below the significant operating range of the quantity in question.
For example, for an oil component with density 0.1 lbmol/ft3, use 1e-5.
*RXCMPFAC component name phase A B
Reaction rate is divided by factor (1+Ax)**B where x is the components
mole fraction in the indicated phase (W for water, O for oil, G for gas). Both
A and B must be non-negative. A value of zero for either A or B disables the
option. This keyword is allowed at most once for each reaction.
DEFAULTS:
All these keywords are optional. They are assigned to the current reaction number which is
determined by their position relative to the critical reaction keywords *STOREAC,
*STOPROD and *FREQFAC.
EXPLANATION:
Reaction Kinetics
A reaction's kinetics provides information on the speed with which the reaction is proceeding.
The expression for volumetric reaction rate is the following series of factors:
The concentration factor for component i in a fluid phase is usually based on density (by
default or flagged by keyword *O2CONC):
c(i ) = f * den (iphas(i ))* sat (iphas(i )) * x (iphase(i ), i ).
f = v * 1 Csk / sk (p, T )
Here void porosity v is corrected for pore pressure and temperature, and fluid porosity f is
corrected for the volume of the solid phase in the pore space. Each component k in the solid
phase has concentration Cck and density sk(p, T) (see keyword *SOLID_DEN).
The second and third factors are the mole density and, saturation respectively, of the fluid
phase in which the component I is reacting. The last factor is the mole fraction of component
I in the fluid phase in which the component I is reacting.
The solid phase concentration factor for component I is
c(i ) = v * Cci
where por is the pore space porosity, which has been corrected for pore pressure and
temperature only, and cncc is the current solid concentration in the pore space.
Optionally, the concentration factor for component i in a fluid phase may be based on partial
pressure (by default or flagged by keyword *O2PP):
c(i) = y(i) * pg
where y(i) is gas mole fraction of component i, and pg is the gas phase pressure.
The temperature normally used in conjunction with eact is the grid block temperature. In field
scale, this may not correspond to the temperature of the burning zone, resulting in a burn rate
which is unrealistically low, or premature extinction. An assumed range for burning zone
temperature may be specified using tlwt and tupt.
Example: The following describes how a set of chemical reaction data would look.
A chemical reaction in the six-component model
H2O - water
HO - heavy oil
LO - light oil
IG - inert gas, includes nitrogen and carbon oxides
O2 - oxygen
CH - coke fuel
348 Component Properties
LO IG
O2
CH
0
0
1.25 1
0
1
0
0
units are 1/day-kPa
6.3e5
Note that *RPHASE, *RORDER, *O2PP, *RTEMLOWR and *RTEMUPR were defaulted.
Lower Reaction Order
A warning is issued when enrr from *RORDER is less than 1 and keyword *RXCRITCON is
not used, since numerical stability may be compromised when the components concentration
approaches zero. This stability concern stems from the fact that the derivative of reaction rate
with respect to mole fraction is d/(x**a)/dx = ax**(a-1) which for a < 1 is unbounded as x
approaches zero.
Maximum Solid Phase Volume
Since void porosity v contains both the solid and fluid phases, the fraction of void space
occupied by solid phase,
Csk / sk (p, T ),
must not exceed 1. This constrains the total amount of solid phase present in a block,
including solid components and adsorbed/trapped fluid components.
Normally the dependence of reaction rate on fluid concentration (and hence f) naturally
prevents f from going negative. However, even a modest amount of numerical over shoot
during convergence can produce negative f.
In addition, some types of reactions are able to produce solid components even as the fluid
porosity decreases to zero, such as when reaction rate depends upon partial pressure instead
of concentration.
When f approaches zero due to increasing solid volume, reaction rates are reduced to
preserve stoichiometry as well as satisfy the constraint that f is positive. See Appendix F.8
for details.
Generalized Reactions
*PERMSCALE, *MTVEL
PURPOSE:
*PERMSCALE
{ effpt freqt }
*MTVEL phase_des exp vref (vcrit)
DEFINITIONS:
*PERMSCALE
Table to describe dependence of reaction or mass transfer rate on
permeability. Enter one set of effpt versus freqt on each line.
effpt
Effective permeability (md). It must be greater than zero.
freqt
Reaction rate scaling factor. The allowed range is from 0 to 10,000.
*MTVEL
Indicates that the rate of mass transfer described be the current reaction has
the following dimensionless velocity dependent factor:
( ( V - vcrit ) / vref ) ** exp
phase_des
Indicates for which phase the velocity factor applies. The allowed choices are
W for water, O for oil and G for gas.
exp
Exponent in the velocity factor. The allowed range is -4 to +4. A value of 1
will result in a linear dependence. A zero value will disable the factor.
vref
Reference velocity for the reaction rate (m/day | ft/day | cm/min). When V vcrit = vref, the factor is one. This parameter provides a velocity scale for the
factor.
vcrit
Critical velocity for the reaction rate (m/day | ft/day | cm/min). The factor is
non-zero when the phase velocity exceeds vcrit. This parameter provides a
cut-off velocity for the factor. vcrit is optional, and defaults to zero.
DEFAULTS:
This option is effective only in conjunction with a current chemical reaction, since it applies
to *FREQFAC.
EXPLANATION:
Nonequilibrium Mass Transfer
The reaction model's heterogeneous mass transfer (source- sink) terms can be applied to the
nonequilibrium capture and release of emulsion fines particles by the porous rock. This
requires that the (reaction) rate constants depend upon permeability, to account for the
changes in capture efficiency as the droplet size to pore throat size ratio changes. These
effects are documented in:
Radke, Soc. Pet. Eng. J. ,June 1984, p 351,
Radke, J. Coll. Int. Sc., v. 102, 1984, p 462,
Folger, Soc. Pet. Eng. J. , Feb 1983, p 55, and
Folger, J. Coll. Int. Sc., v 101, 1984, p 214.
Example: The simple capture of oil-in-water emulsion globules of molar concentration w(2)
by the porous medium can be represented by the first order capture process
d(cc)/dt = ka * denw * w(2)
where cc is the moles of captured globules, t is time, denw is the water phase density. The
rate constant ka is also known as the filter coefficient and, in general, is permeability and/or
velocity dependent.
This process is modelled using a two-step procedure. First a reference rate constant ka is
obtained for a given permeability and is entered via *FREQFAC. Then rate constants are
obtained for several other permeabilities and are entered as scaling factors relative to the
reference ka. The permeability corresponding to the scaling factor FREQT=1 defines ka.
Sample data might appear as follows:
*FREQFAC 40
*PERMSCALE
**
**
**
**
Current research into the mechanisms of emulsion and/or foam creation and decay in-situ
indicate possible dependence on phase velocity.
*RXEQFOR, *RXEQBAK
PURPOSE:
*RXEQFOR
Keyword indicating the entry of data for a forward reaction.
*RXEQBAK
Keyword indicating the entry of data for a backward reaction.
comp_name
Fourth coefficient in the correlation for K value (C | F). This coefficient has
the unit of temperature difference. It has the same value for temperature
scales C and K, and has the same value for temperature scales F and R.
rxk5
Fifth coefficient in the correlation for K value (C | F). This coefficient has the
unit of temperature, and is different for each temperature scale. Often this
coefficient is quoted in other sources in K or R, so it must be converted if C or F
was specified for temperature in *INUNIT. Convert it from absolute to C or F.
*GL, *LL
Limit values for the table's p, T and composition parameters will be those
assigned via *KVTABLIM and *KVKEYCOMP for the gas-liquid (*GL)
liquid-liquid (*LL) K value tables. See the definitions for keywords
*GASLIQKV and *LIQLIQKV.
K_value_table
See the definition for keyword *KVTABLE.
*KEYCOMP
See the definition for keyword *KVTABLE.
DEFAULTS:
If keywords *RXEQFOR and *RXEQBAK are absent, then the option is not used.
If *KVTABLE appears with neither *GL nor *LL, then *GL is assumed.
CONDITIONS:
If the table option *KVTABLE is used, then *KVTABLIM corresponding to *GL or *LL
must have appeared previously. If *KEYCOMP is used then *KVKEYCOMP corresponding
to *GL or *LL must have appeared previously.
Any table defined here must have the same number of columns and rows as any preceding K
value table of the same type (*GL or *LL). Also, if this is the first of a type (*GL or *LL) of
K value type, then any subsequent K value tables must have the same number of columns and
rows.
*RXEQFOR and *RXEQBAK may not occur more than once in any one reaction definition.
Also, a reaction may have only *RXEQFOR or *RXEQBAK or neither, but not both.
For each reaction you may choose one of the following five options:
rxk1 rxk2 rxk3 rxk4 rxk5
*KVTABLE *GL
*KVTABLE *LL
*KVTABLE *GL with *KEYCOMP
*KVTABLE *LL with *KEYCOMP
EXPLANATION:
According to the keyword syntax, there must be a value for each one of the data items after
the keyword. If the correlation you wish to model is a subset of the one shown above for
K(p,T), then enter zero for each "unused" coefficient rxk1 to rxk5. Whether or not rxk5 is
"unused" depends on the temperature scale specified in *INUNIT.
For example, assume that the input temperature scale specified via *INUNIT is Celsius. We
wish to assign a forward partial equilibrium K value for component 'Gas Bubl' based on the
correlation
K1(p,T) = ( A / p ) * exp ( B / T )
where T is absolute degrees, as is common. First, we must rewrite the desired correlation in
our input units
K1(p,T) = ( A / p ) * exp ( B / (TC+273) )
where TC is in the input temperature scale Celsius. We see that rxk5 is not "unused" but has
the value -273, since 0 K = -273 C. The keyword data in this case is
*RXEQFOR 'Gas Bubl' A 0 0 B -273
*ICE
PURPOSE:
*ICE
DEFINITIONS:
*ICE
Enable the modelling of ice formation from liquid water when temperature
falls below 0 C (32 F). In addition, allow values of *MINTEMP down to 100 C (-148 F).
DEFAULTS:
If keyword *ICE is absent then the formation of ice from water is not allowed and
*MINTEMP may be restricted to a value above 0 C (32 F).
CONDITIONS:
You may not use the *THERMAL option of *SURFLASH with temperatures below 0 C.
EXPLANATION:
Minimum Temperature
Two separate steps are required to enable the ice option: (1) add keyword *ICE to the
Component Properties data section, and (2) override the default of *MINTEMP with a value
below the lowest expected temperature. When keyword *ICE is present, the minimum
allowed value of *MINTEMP decreases from just above 0 C (32 F) to -100 C (-148 F).
To get ice you must explicitly specify a temperature below freezing, e.g., *MINTEMP -20.
You can enter any temperature data (e.g., *TEMP) down to the minimum *MINTEMP.
When initial temperature *TEMP is below 0 C (32 F), initial liquid water is changed
internally to ice resulting in an initial water saturation of zero. A value of injection
temperature *TINJW below 0 C is not allowed for water phase.
Physical Process
Consider a block containing liquid water at 10 C and hence no ice. As heat is withdrawn the
temperature decreases. At the freezing point, continued heat withdrawal causes the liquid
water to convert to solid ice at a constant temperature of 0 C. Once the conversion to ice is
complete, the temperature will again decrease. Liquid water co-exists with ice only at 0 C
(32 F). The same process occurs in reverse when heat is added to ice below 0 C.
Output
To see the ice concentration, use subkeyword *ICECONC with *OUTPRN *GRID,
*OUTSRF *GRID and *OUTSRF *SPECIAL *BLOCKVAR, etc. This subkeyword uses
the same unit indicator as *SOLCONC and *ADSORP: *MOLE, *MASS, *VOL or *NUM.
For example, to see the full grid dump of fraction of void volume occupied by ice use
*OUTSRF *GRID *VOL *ICECONC.
Effect on Porosity
Ice is water component in the solid/immobile phase, just like a solid component or an
adsorbed fluid component. Therefore, variations in ice concentration will affect the fluid
porosity (see STARS User's Guide Appendix F.2). To see the effect of ice concentration on
fluid porosity, use subkeyword *FPOROS with *OUTPRN *GRID, *OUTSRF *GRID and
*OUTSRF *SPECIAL *BLOCKVAR, etc. Remember that water, oil and gas saturations are
fractions of the fluid pore volume, so saturations will change when water freezes even though
oil and gas volumes are unchanged.
Effect on Permeability
Modelling of ice in a fluid-flow context often requires use of a variable permeability option
(*PERMCK, etc.) since permeability can vary with fluid porosity which itself varies with ice
concentration. All variable permeability options work well for porosities significantly larger
than zero.
If very small or zero fluid porosities are expected then it is best to use the *PERMTAB option
with a zero permeability ratio entry at a non-zero fluid porosity ratio. All the other variable
permeability options achieve zero permeability only at zero fluid porosity. This often leads to
fluid attempting to flow through a vanishingly small pore volume, a situation which is
physically questionable and numerically very difficult.
Properties of Ice
Density and enthalpy for ice are calculated from internal correlations which are valid from 0
C to -40 C (1998 ASHRAE Refrigeration Handbook (SI), page 8.2). Since STARS allows
you to work with temperatures down to -100 C, you must ensure that the resulting property
values below -40 C are appropriate. In the following, Tc is temperature in C.
Ice density (kg/m3):
916.89 0.13071Tc
Ice specific heat (kJ/kg-K):
2.0623 + 6.076910-3Tc
Ice latent heat of fusion (kJ/kg):
333.6 at 0 C
Properties for ice correspond to the pure water component #1. At present there is no facility
for the user to change the density and enthalpy correlations for ice. Water vapour cannot be
specified initially or injected below 0 C. The ice formulation is strictly non-compositional
and may not be appropriate for more complex freezing phenomenon like hydrates.
Other Sub-zero Properties
Below 0 C the properties of other components in the oil and gas phases are obtained from
their usual tables and correlations. For example, in the liquid viscosity table *VISCTABLE
you can enter temperatures down to the *MINTEMP value. In general, temperatures below
0 C are disallowed only for a component that is using internal water properties.
Related Keywords
The following template data sets illustrate the simulators ice modelling capabilities.
STFLU026
STFLU027
STFLU028
STFLU029
STFLU030
Models three steam cycles with cooling in an outer radial block to -20
deg F, with *AUTOCOOLER constraint on maximum cooling rate.
Multi-block cooler is controlled from single block via *HEATSLAVE.
See temperature and heater rate (CCHLOSS) histories for blocks
(11,1,1:4) in Results Graph.
STFLU031
Rock-Fluid Data
temperature dependence
relative permeability hysteresis for wetting and non-wetting phase and capillary
pressure hysteresis
velocity dependence
any phases
different values for each grid block for each grid direction
any component
any phases
different values for each grid block for each grid direction
Total dispersion:
-
temperature dependence
Required Data
The minimum data required in this section is one set of relative permeability curves (*SWT
and *SLT).
If multiple rock types are used, the minimum data is:
*SWT and *SLT ** Rock type #1 relative permeability curves
*RPT 2 ** Enable rock type #2
*SWT and *SLT ** Rock type #2 relative permeability curves
*KRTYPE ** Assigns rock types to grid
Critical Keyword Ordering
1. Water-oil curve *SWT must come before liquid-gas curve *SLT, because *SLT
has an endpoint check which depends on an endpoint in *SWT.
2. The rock-fluid data can be divided into three groups: data which varies only by
rock types, data which varies by interpolation sets, and data which varies strictly
by block. This is a summary:
Rock Type
*RPT *IFTTABLE
*FMGCP *EPSURF
*FMOMF *EPCAP
*INTCOMP *FMSURF
*INTLIN *FMCAP
*EPGCP *INTLOG
*EPOMF *EPOIL
*FMOIL *FMMOB
*FMSALT *EPSALT
*FLOIL *FLSALT
Interpolation Set
*KRINTRP *SCRV *KRWIRO
*KRTEMTAB *SWT *KROCW
*DTRAPW *SLT *KRGCW
*DTRAPN *SWR *PCWEND
*WCRV *SORW *PCGEND
*OCRV *GCRV *SGR *SORG
*HYS_KRO *HYS_KRW
*HYS_KRG *HYS_PCOW
*HYS_PCOG
Block
*KRTYPE *RTYPE
*KRTYPE_VERT
*KRTYPE_CTRWAT
*KRTYPE_CTROIL
*KRTYPE_CTRGAS
*BSWR *BSWCRIT
*BSORW *BSOIRW
*BSGR *BSGCON
*BSORG *BSOIRG *BSWRG
*BSWIRG *BKRWIRO
*BKROCW *BKRGCW
*BPCWMAX *BPCGMAX
The following diagram shows the scope and required ordering of each keyword. The vertical
direction denotes critical ordering, whereas keywords linked in the horizontal direction can be
intermixed. This diagram shows there is always a 'current' rock type number which is
changed only by *RPT. Reading starts with rock type #1 so the first *RPT is not needed.
When all the data for rock #1 is entered, *RPT for the second rock type appears and the
diagram is repeated as indicated by the outside return loop. Similar comments apply to the
interpolation set number and the inner return loop.
Since the interpolation option operates within a rock type, the Interpolation Set loop falls
inside the Rock Type outer loop. When the interpolation option is not used (keyword
360 Rock-Fluid Data
*KRINTRP absent for a rock type), most keywords in the Interpolation Set column are valid
for the rock type, that is, may appear once for each rock type.
*RPT (Rock Type #)
*KRINTERP (Interpolation Set #)
*SWT
Interpolation
Set Data
*SLT
*RPT
*SWT *SLT
*HYS_KRO, etc.
*SWR, etc.
*KRTEMTAB
*RPT
*INTCOMP
*IFTTABLE, etc.
*FMSURF, etc.
and the following keywords may appear at most once per interpolation set for that rock type.
Interpolation Set Number
Interpolation Parameters
Tables
Hysteresis Parameters
Endpoints
Temperature Dependence
*KRINTRP
*DTRAPW, etc.
*SWT *SLT
*HYS_KRO, etc.
*SWR, etc.
*KRTEMTAB
=
=
=
=
Alternatively, the same information can be entered with only two sets of relative permeability
curves by using DTRAPW and DTRAPN as follows:
1. High interfacial tension curves (no surfactant)
DTRAPW = DTRAPN = log10(6.0E-8)
2. Ultra low interfacial tension curves (straight lines)
DTRAPW = log10(2.3E-1) and DTRAPN = log10(1.2E-3)
In either case, the same high-tension liquid/gas relative permeability curves can be entered
for each interpolation set, if we assumed they are unaffected. On the other hand, it is the
liquid/gas relative permeability curves which may change with solvent concentration when
solvent injection causes oil and gas phases to mix.
364 Rock-Fluid Data
These interpolation schemes can be extended to representing the behaviour of different rock
types. For example, surfactant injection into a parallel core system of differing wettability
will require that high interfacial tension curves for the two rock types be distinguished.
The two-phase relative permeability curves are interpolated as:
krw
krow
krg
krog
=
=
=
=
wtr
oil
=
=
ratw ** WCRV
ratn ** OCRV
with
gos = ratw ** SCRV
gas = ratn ** GRCV
and where ratw, ratn are the current values of the dimensionless interpolation parameters
(varying between 0 and 1)
ratw =
log10 (N c ) DTRAPWA
DTRAPWB DTRAPWA
ratn =
log10 (N c ) DTRAPNA
DTRAPNB DTRAPNA
Endpoint values used in krwA, krwB etc. have also been modified depending on ratw, ratn
values. Stones models for 3-phase relative permeability are employed on the results of the
interpolations.
The curvature interpolation parameters WCRV, OCRV, GCRV and SCRV allow additional
flexibility in interpolating between sets of curves if experimental evidence requires it. Normally
default values of 1 are recommended unless a poor history match is observed. Non-default values
imply that the slopes of the interpolated relative permeability curves do not change at the same
rate as the endpoint values. Thus WCRV = 0.5 implies that the interpolated krw retains its krwA
character more closely over range of interpolation, while WCRV = 2 implies that krwB has the
dominant influence. This can be verified by a close inspection of the interpolation formula shown
for krw. Similar comments apply to the role of OCRV, GCRV and SRCV to krow, krg and krog.
Option 3: Empirical Foam Interpolation Scheme
Foam treatments are employed to reduce gas phase mobility and improve displacement
efficiency as well as areal and vertical sweep. An empirical method of simulating much of the
effects of foam can be accomplished by assuming that the mobility reduction corresponds to a
decreased gas phase relative permeability (as a function of a product of experimentally
observed factors, including surfactant concentration). Such method is useful for preliminary
scoping of laboratory experiments as well as history matching and predicting field scale foam
treatments. Most often use of this option also implies surfactant flow modelling, requiring
additional surfactant property data such as adsorption, partition coefficients in oil, and
surfactant decomposition kinetics.
A less empirical approach can also be accomplished with the concept of a lamella as a dispersed
component. This requires utilizing appropriate viscosity, adsorption, and resistance factor data.
This latter approach can also be viewed as partially validating the empirical foam option. Further
details can be found in the STARS Technical manual and a CMG report 90.08.T.
krow,
Pcow,
1 S 'oirw S 'wcrit
1 S oirw S wcrit
1 S 'orw S 'wcon
1 S orw S wcon
1 S 'oirw S 'wcon
1 S oirw S wcon
Sw
S 'w , S 'w' , S 'w''
Swcrit, Swcon, Soirw and Sorw
c
Oil-water Table
co w
row
k rw
0.0
1.0
Sw
S wcon
S wcrit
1-S oirw
1-S orw
'
'
1 S lcon S gcrit
'
'
1 S lcon S gcon
c
krg,
rog
co g
Pcog,
rg
S org
S oirg
0.0
1.0
Sl
S lcon
S lrg
1-S gcrit
1-S gcon
Sl
Slrg
Slrg
=
=
=
So + Sw
Swcon + Sorg, if the *NOSWC option is not used Swc
Sorg, if the *NOSWC option is used
In the latter case Sorg includes all residual liquid in the liquid-gas system.
is the blocks liquid saturation
are the saturations used to interpolate the original user
entered tables with respect to krog, krg and Pcog respectively
are the user entered grid block end point values (from the
keywords for end point change or temperature
dependence)
are the original table end point values (calculated directly
from the relative permeability tables)
Sl
S 'l , S 'l' , S 'l''
S org , Slcon , S gcon and Sgcrit
Note that each relative permeability curve is now scaled with respect to different end points
that define the range of each curve.
Swcrit Sw 1 Soirw,
krow
Swcon Sw 1 Sorw,
Pcow
Swcon Sw 1 Soirw,
krog
Slrg Sl 1 Sgcon,
krg
Slcon Sl 1 Sgcrit,
Pcog
Slcon Sl 1 Sgcon,
rog
cog
krw
rg
S org
S oirg
0.0
1.0
Sl
S wcon
S lrg
1-S gcrit
1-S gcon
S lcon
Then, normalized relative permeabilities and capillary pressures are obtained as functions of
S'w , S'w' , S'w'' and S'l , S'l' , S'l'' via table look-ups. Finally, the relative permeabilities are multiplied
by the calculated connate values to get the unnormalized result.
End-point Saturation Modification Keywords
The keywords for modifying relative permeability end-points are shown below. A Single
Keyword may be used by itself or after *KRTEMTAB. A Per-Block Keyword is a grid
property array.
Symbol
Single
Keyword
Per-Block
Keyword
Swcon,
Swr
*SWCON,
*SWR
*BSWCON,
*BSWR
Swcrit
*SWCRIT
*BSWCRIT
Soirw
*SOIRW
*BSOIRW
Sorw
*SORW
*BSORW
Sgcon
*SGCON
*BSGCON
Sgcrit
*SGR
*BSGR
Soirg
*SOIRG
*BSOIRG
Sorg
*SORG
*BSORG
Swirg
*SWIRG
*BSWIRG
Swrg
*SWRG
*BSWRG
Description
End-point saturations can be divided into connate/critical pairs (Swcon, Swcrit), (Soirw, Sorw), (Sgcon,
Sgcrit), (Soirg, Sorg) and (Swirg, Swrg). Except for the constraint connate critical, in the most
general case the two members of each pair are independent of each other. Often, however,
connate = critical and it is the users intent that this equality be preserved even after end-point
modification options are applied.
To facilitate this, STARS keeps track of which end-point pairs are equal in the *SWT and *SLT
tables, and then enforces equality during modification of one end-point by internally applying
the same modification to the other. This equality enforcement is done for all the end-point
modification options: single end-points, temperature dependence and per-block end-points.
For example, assume that Soirw = Sorw is detected in the *SWT table. If single end-point keyword
*SOIRW appears but keyword *SORW does not, or if *SORW appears but *SOIRW does not,
then both Soirw and Sorw are assigned the new value. However, if both keywords appear then Soirw
and Sorw are assigned their separate new values, thus breaking their equality. The same process
occurs for keywords *SOIRW and *SORW appearing in the list after *KRTEMTAB, as well as
for per-block keywords *BSOIRW and *BSORW.
Per-block end-point modification has an additional complication. When a per-block end-point
keyword is entered, then all blocks use the per-block option for that end-point. This is facilitated
by the fact that the end-point value of each block is initialized with the value from that blocks
rock type, which is then over-written with any input per-block values. If only one of a pair of
User's Guide STARS
per-block end-point keywords appears, the same data may be applied to the other end-point.
However, this duplication is done only if there is at least one block for which (1) the end-points
are equal for that blocks rock type, and (2) the per-block value entered is different from that
rock types table value.
Combination with Other Options
There are four options for overriding rock-fluid endpoints that have been specified in tables
*SWT and *SLT:
1. Override with keywords *SWR, etc.
2. Override with temperature dependence via *KRTEMTAB. This will override
values from keywords *SWR, etc.
3. Interpolate between sets via *INTCOMP and *KRINTRP.
4. Override on a per block basis via *BSWR, etc.
All these options work together. For example, you may specify that Swr has temperature
dependence (*KRTEMTAB), different values depending on the amount of surfactant in place
(*INTCOMP and *KRINTRP) as well as a complex distribution in space (*BSWR).
A per-block array like *BSWR refers to the first *KRTEMTAB temperature (if there is
temperature dependence) and the first interpolation set in *KRINTRP (if there is
interpolation). It is the relative variation of the individual block's value from the "reference"
value (first T and first interpolation set for the associated rock type) that is applied to the
value calculated from the temperature and surfactant of interest.
The per-block option may be used also with oil-wet or intermediate wettability rock types.
The interpretation of the relative permeability columns is applicable also to the keywords
*BKRWRO, *BKROCW and *BKRGCW.
Example:
Assume the following for quantity Swr:
*KRINTRP
Value
Value
*KRINTRP
Value
Value
Value
1 *DTRAPW 0
** No surfactant
from *SWT is 0.2
from *KRTEMTAB is 0.18 at 100 F and 0.28 at 300 F.
2 *DTRAPW 1e-3
** Some surfactant
from *SWT is 0.08
from *KRTEMTAB is 0.06 at 100 F and 0.09 at 300 F.
from *BSWR for block 1 is 0.216
We have interpolation with surfactant amount, temperature dependence and per-block overrides.
At the time the first *SWT is read, the table's Swr and Sorw are saved and then the table's Sw entries
are normalized. When the first *KRTEMTAB is read, Swr = 0.2 is replaced with Swr = 0.18 since
the *SWT table is referenced to the lowest T. Then the same process is applied to the second
interpolation set, with Swr = 0.06 as a result. When *BSWR is read, the value 0.216, which is
referenced to 100 F and no surfactant, is saved in separate storage Swr for block #1.
The following is done to get a value of Swr for T = 235 F and some surfactant amount:
a) Get Swr at no surfactant by interpolating between 100 and 300 F
R = ( 235 - 100 ) / ( 300 - 100 ) = 0.675
Swr1 = (1-R)*0.18 + R*0.28 = 0.2475
Adjust the individual block's value with this relative variation from the Swr
reference value (at no surfactant and 100 F)
SwrA = Swr1 * ( 0.216 / 0.18 ) = 0.297
Use this to get normalized block Sw from which the table lookup is done to get "no
surfactant" value of normalized krw and krow. Use other endpoint scaling factors to
unnormalized krw, etc.
b) Do the same for the 1e-3 surfactant amount
R = ( 235 - 100 ) / ( 300 - 100 ) = 0.675
Swr2 = (1-R)*0.06 + R*0.09 = 0.08025
SwrB = Swr2 * ( 0.216 / 0.18 ) = 0.0963
c) The values of krw and krow for the two surfactant amounts are mixed.
This example has both T and component dependence. For T dependence alone, the algorithm is
just part (a) above. For component dependence alone, the algorithm is equivalent to factor R = 0.
Note that no scaling is done if the reference end point (first T and interpolation set) is zero. Also,
it is the users responsibility to ensure that end-point values after scaling are within physical
ranges.
Three-Phase Models
Stone's Model I
Stone's Model I may be used to combine oil-water and liquid-gas two-phase relative
permeabilities. This model assumes that (1) Sgc = 0, and (2) Som varies between Sorw and Sorg.
This option is available only when Swc is included in the liquid saturation (*NOSWC absent).
The calculation of three-phase oil relative permeability is
kro
= krow * krog*Seo/(krocw * Sel * (1-Sew))
Seo
Sew
Sel
=
=
=
where krocw = krow(Sw=Swc) = krog(Sg=0) to ensure that kro = krow when Sg = 0 and that kro = krog
when Sw = Swc.
For the "minimal" value Som of the oil saturation, STARS uses the linear function of Sg
proposed by Fayers and Matthews (SPEJ April 1984, pp. 224-232):
Som(Sg) = (1 - a(Sg)) * Sorw + a(Sg) * Sorg,
where
a(Sg) = Sg / (1 - Swcrit - Sorg).
Stone's Model II (modified)
The relative permeability of water in the three-phase system is equal to the water relative
permeability in the two-phase water-oil system, and is a function only of Sw. The relative
permeability of gas in the three-phase system is equal to the gas relative permeability in the
two- phase liquid-gas system, and is a function only of Sg. The three-phase oil relative
permeability is calculated using the modification of Settari and Aziz. (Aziz, K., and Settari,
A., "Petroleum Reservoir Simulation," Applied Science Publishers Ltd., London, 1979).
Liquid Contains Swc (default):
kro
krocw
krow(Sw=Swc) = krog(Sg=0) to ensure that kro = krow when Sg = 0 and that kro
= krog when Sw = Swc.
where
kromax
krow(Sw=0) = krog(Sg=0) to ensure that kro = krow when Sg = 0 and that kro =
krog when Sw = 0.
where
When plotted on a saturation ternary diagram like Fig. 12, constant kro contours between the
two-phase water-oil and gas-liquid data tend to be curved toward the So=0 boundary. For
some sets of two-phase data, the kro=0 curve may cross the So=0 boundary, resulting in a
range of Sw values where kro>0 when So = 0. Such a condition is not only unphysical, but it
can reduce numerical stability. This condition is detected when the detailed rock-fluid data
echo is written to the output file, but it is flagged only as a warning since the affected
saturation range may not be encountered during time stepping. However, this condition is
detected for individual blocks at the end of each time step, and is flagged as a fatal error after
a number of warnings. The equivalent condition is detected when krw is the middle phase.
Baker's Linear Interpolation Model
The middle phase relative permeability is calculated from a linear interpolation scheme
described by L. E. Baker in "Three-Phase Relative Permeability Correlations", SPE/DOE
paper 17369.
Fig. 12 shows a schematic of the geometrical construction for the method. The functions
krow(Sw) and krog(Sg) are placed on the ternary diagram of saturations, and points of equal oil
relative permeability, that is, krow(Sw) = krog(Sg), are linked with a straight line to form a series
of kro contours. This method works because krow and krog have the same range (0 to krocw).
Sg=1
Swc
S g1
S g2
k
ro
k ro
=0
Sg3
k ro
Sg4
Sg5
kr
o5
k ro
kr
o3
S w1
Sw =1
Sg6
k row
1-S 1max
S w1
S w2
Sw3
k ro6 =k rocw
Sw4
Sw5
Sw6
So=1
Note that at any (Sw,Sg) in the "interpolation" region kro depends only on krow and krog. This is
in contrast to Stone's II model where kro depends also on krw and krg.
Wettability Options
There are five wettability options: water-wet, oil-wet and three models of intermediate
wettability. The data requirements and formulas used are summarized here. Water-wet rock is
the default. Only the water-wet option is available with set interpolation (*INTCOMP).
These wettability options are static since they correspond to the original in-situ fluid composition
and rock type. They should not be confused with the dynamic rock-fluid interpolation technique
of modelling wettability as a function of composition or capillary number.
Water Wet (*WATWET)
This is the usual wettability choice, and is the default. This option assumes that the water
phase is next to the rock, and oil is the middle phase. The three-phase relative permeability
calculation is:
a) Obtain krw and krow from *SWT, as a function of Sw
b) krocw = krow(Sw=Swc)
c) Obtain krg and krog from *SLT, as a function of Sg
d) kro = krocw * ( (krow/krocw + krw) * (krog/krocw+krg) - krw - krg)
e) krw and krg are the same as the two-phase values
Oil Wet (*OILWET)
This option assumes that the oil phase is next to the rock, and water is the middle phase. The
three-phase relative permeability calculation is:
a) Obtain krwo and kro from *SWT, as a function of So
b) krwco = krwo(So=Soc)
c) Obtain krg and krwg from *SLT, as a function of Sg
d) krw = krwco * ( (krwo/krwco + kro) * (krwg/krwco +krg)-kro-krg)
e) kro and krg are the same as the two-phase values
Intermediate Wet Model #1 (*INTMED1)
This option assumes that one half of the pores are water-wet and the other half is oil-wet. The
three-phase relative permeability calculation is:
a) Obtain krw(w) and krow from *SWT, as a function of Sw
b) krocw = krow(Sw=Swc)
c) Obtain krg and krog from *SLT, as a function of Sg
d) kro(w) = krocw * ( (krow/krocw+krw(w)) * (krog/krocw+krg) - krw(w) - krg)
e) Obtain krwo and kro(o) from *SWT, as a function of So
f) krwco = krwo(So=Soc)
g) Obtain krwg from *SLT, as a function of Sg
h) krw(o) = krwco * ( (krwo/krwco+kro(o)) * (krwg/krwco+krg) - kro(o) - krg)
i)
j)
This option obtains krw assuming oil-wet, and obtains kro assuming water-wet. The threephase relative permeability calculation is:
a) to h) same as for Intermediate Wet Model #1
i)
krw = krw(o)
j)
kro = kro(w)
This option calculates both krw and kro from an application of Stone's model to two-phase krwo
and krow obtained by averaging water-wet and oil-wet values. The three-phase relative
permeability calculation is:
a) Obtain krw(w) and krow(w) from *SWT, as a function of Sw
b) Obtain krwo(o) and kro(o) from *SWT, as a function of So
c) krwo = (krw(w) + krwo(o)) / 2
d) krow = (krow(w) + kro(o)) / 2
e) krocw = krow(w)(Sw = Swc)
f) Obtain krg and krog from *SLT, as a function of Sg
g) kro = krocw * ((krow / krocw + krwo) * (krog / krocw + krg) - krwo - krg)
h) krwco = krwo(So = Soc)
i)
j)
krw = krwco * ( (krwo / krwco + krow) * (krwg / krwco + krg) - krow - krg)
krw Table
krow Table
krog Table
*WATWET
*OILWET
*INTMED1
*INTMED2
*INTMED3
krw
krwo
krw(w) & krwo
"
krw(w) & krwo(o)
krow
kro
krow & kro(o)
"
krow(w) & kro(o)
krog
krwg
krog & krwg*
"
"
*ROCKFLUID
PURPOSE:
*ROCKFLUID
DEFAULTS:
This keyword must be the first keyword in the ROCK-FLUID DATA keyword group.
ROCK-FLUID DATA must follow immediately after component properties.
Define rock type number for rock-fluid data, and assign rock type number to grid blocks.
FORMAT:
*KRTYPE or *RTYPE
*KRTYPE_VERT
DEFINITIONS:
nrock
Rock type number of the following rock-fluid data. The starting value is 1,
and need not be specified explicitly.
Succeeding rock type numbers MUST be increasing by 1, etc., 1, 2, 3.
*COPY old_nrock
Initialize rock type number nrock with the data currently assigned to
previously defined number old_nrock. This is useful when different rock
types are the same except for a few properties.
*STONE2
Use of Stone's second model (normalized) to calculate three-phase relative
permeabilities. This is the default.
*STONE1
Use Stone's first model (normalized) to calculate three-phase relative
permeabilities. The *NOSWC option for *SLT is unavailable with *STONE1.
*LININTERP
Middle phase relative permeability is calculated from linear interpolation
scheme described by L. E. Baker in "Three-Phase Relative Permeability
Correlations", SPE/DOE paper 17369. This option is not related to the
interpolation options given by *INTCOMP, etc, but can be used with them.
*WATWET
This is the usual wettability choice, and is the default. This option assumes
that the water phase is next to the rock, and oil is the middle phase.
*OILWET
This option assumes that the oil phase is next to the rock, and water is the
middle phase.
*INTMED1
This option assumes that one half of the pores are water-wet and the other
half is oil-wet.
*INTMED2
This option obtains krw assuming oil-wet, and obtains kro assuming waterwet.
*INTMED3
This option calculates both krw and kro from an application of Stone's model
to two-phase krwo and krow obtained by averaging water-wet and oil-wet
values.
*KRTYPE, *RTYPE
Assign a rock-fluid rock type number to each grid block. The only rock type
numbers allowed are 1 and those defined via *RPT. Alias *RTYPE can be
used for compatibility with other CMG simulators.
*KRTYPE_VERT
Assign a rock-fluid rock type number to each grid block for flow in the
vertical direction. The only rock type numbers allowed are 1 and those
defined via *RPT.
If *KRTYPE_VERT is present then use *KRTYPE to apply rock type
numbers to flow in the horizontal (I and J) directions.
Subkeywords *HORIZONTAL and *VERTICAL are obsolete. Replace
*KRTYPE *HORIZONTAL with *KRTYPE and replace *KRTYPE
*VERTICAL with *KRTYPE_VERT.
DEFAULTS:
If *KRTYPE is absent, *KRTYPE *CON 1 is assumed. If subkeyword *IJK is used, then any
non-discretized wellbore block that is not referred to explicitly will be assigned the value 1.
If a discretized wellbore grid is present in the data, an additional rock type is created with an
nrock value equal to the maximum user value plus 1 and data corresponding to pipe flow.
Each discretized wellbore block that is not explicitly assigned a value via *KRTYPE is
assigned to this internal rock type.
*STONE2 and *WATWET are assumed for each rock type until explicitly overwritten.
If *KRTYPE_VERT is absent, then rock types assigned via *KRTYPE are applied to all flow
directions. If subkeyword *IJK is used, then any non-discretized wellbore block that is not
referred to explicitly will be assigned the value 1.
CONDITIONS:
Rock type number nrock is applied to the data following it until overwritten by another value.
The only intermediate-wet option that can be used with *LININTERP is *INTMED2.
The only wettability option available with *INTCOMP is *WATWET.
EXPLANATION:
See Multiple Sets of Rock-Fluid Data at the beginning of this chapter for more details on
the organization and use of keywords with multiple rock types.
Middle-Phase Option *LININTERP
This option requires that the wetting phase relative permeability entries in the *SWT table be
equal to the corresponding liquid relative permeability entries in the *SLT table, between the
critical saturations. If they are not, entries are inserted by interpolation to satisfy the
condition. The expanded tables must fit within the allowed table dimensions.
For example, consider the water-wet case where the *SWT table has entry krow = 0.85. If the
*SLT table has an entry with krog = 0.85, then no action is taken. If there is no such krog entry,
then all the columns in *SLT (Sl, krg, etc.) are interpolated to get a krog = 0.85 entry. The same
will be done to the columns in the *SWT table to get a krow entry equal to a krog entry
entered as data.
Discretized Wellbores
Discretized wellbore blocks usually need rock-fluid data that corresponds to pipe flow, that
is, relative permeability curves that are straight lines with zero critical and connate saturations
and unity end-points, and zero capillary pressures. A default is provided that corresponds to
this usual case.
If a discretized wellbore grid is present in the data, an additional rock type is created with an
nrock value equal to the maximum user value plus 1 and data corresponding to pipe flow.
Then, each discretized wellbore block that is not explicitly assigned a rock type value via
*KRTYPE is assigned to this internal rock type. In addition, explicit reference may be made
to this pipe-flow rock type via the data entered for *KRTYPE.
For example, assume that there are 8 user-specified rel perm rock types and that there is a
discretized wellbore grid. In this case the pipe-flow rock type is created as rock type #9, and
any wellbore blocks that are not assigned rock types via *KRTYPE will be assigned to #9.
*KRTYPE_CTRWAT,
*KRTYPE_CTROIL, *KRTYPE_CTRGAS
PURPOSE:
*KRTYPE_CTRWAT
*KRTYPE_CTROIL
*KRTYPE_CTRGAS
DEFINITIONS:
*KRTYPE_CTRWAT
Assign a rock-fluid rock type number to each grid block for flow in the water
countercurrent direction. The only rock type numbers allowed are 1 and
those defined via *RPT.
If *KRTYPE_CTRWAT is present then use *KRTYPE to apply rock type
numbers to flow in the cocurrent direction.
*KRTYPE_CTROIL
Assign a rock-fluid rock type number to each grid block for flow in the oil
countercurrent direction. The only rock type numbers allowed are 1 and
those defined via *RPT.
If *KRTYPE_CTROIL is present then use *KRTYPE to apply rock type
numbers to flow in the cocurrent direction.
*KRTYPE_CTRGAS
Assign a rock-fluid rock type number to each grid block for flow in the gas
countercurrent direction. The only rock type numbers allowed are 1 and
those defined via *RPT.
If *KRTYPE_CTRGAS is present then use *KRTYPE to apply rock type
numbers to flow in the cocurrent direction.
DEFAULTS:
Some processes (SAGD, VAPEX) involve the dynamic evolution of coupled cocurrent and
countercurrent flows. Since the relative permeabilities for these flow conditions are
experimentally different (typically countercurrent relative permeabilities are less than
cocurrent relative permeabilities), a simulation needs a way to dynamically test and shift
380 Rock-Fluid Data
between cocurrent and countercurrent relative permeabilities in every region (every grid cell)
during the simulation. These keywords implement this capability. See the discussion in
Yuan et. al., CIM paper 2001-2002.
If coupled cocurrent-counterflow is to be modelled, additional rock types are created for each
countercurrent flow situation (water countercurrent, oil countercurrent, gascountercurrent)
which are used in conjunction with the standard cocurrent flow situation specified by the
default *KRTYPE keyword. Then, the simulator internally checks (for each grid block and at
each time) the current flow situation and uses the appropriate combination of relative
permeability curves.
These keywords allow you to specify different sets of countercurrent relative permeabilities
in different regions. In addition, you may specify interpolation of cocurrent/countercurrent
relative permeabilities as a function of a specified quantity, e.g., component composition via
*INTCOMP.
Interpolation Component
*INTCOMP
PURPOSE:
Quoted string indicating the phase from which the component's composition
will be taken:
'WATER'
'OIL'
'GAS'
'GLOBAL'
'MAX'
DEFAULTS:
Unless IFTTABLE is present, it is assumed that the interpolation parameters *DTRAPW and
*DTRAPN correspond to the mole fraction defined via *INTCOMP.
The only wettability option available with *INTCOMP is *WATWET.
EXPLANATION:
Interfacial Tension
PURPOSE:
*IFTTABLE
cift
:
sigift
:
-or*IFTTABLE
*TEMP
*TEMP
temp
cift
:
temp
cift
:
sigift
:
sigift
:
etc.
-or*IFTTABLE
( *2CMPW | *2CMPX | *2CMPY ) 2conc
cift
:
sigift
:
sigift
:
etc.
*INTLIN
*INTLOG
DEFINITIONS:
cift
Composition of component/phase given by *INTCOMP. The sigift-versus-cift
must have at least two entries. Put each entry on a new line. The maximum
allowed number of entries for each table is 20.
sigift
Interfacial tension (dyne/cm).
*TEMP temp
Temperature of sigift-versus-cift table (C | F). Temperature dependence is
optional. The maximum allowed number of *TEMP tables is 10.
2conc
Concentration value of second component affecting the sigift-versus-cift
table for component *INTCOMP. The additional concentration dependence
is optional. Used with *2CMPW, *2CMPX or *2CMPY the concentration
refers to component NUMW in the aqueous phase, component NUMX in the
oleic phase or component NUMY in the gaseous phase, respectively. The
maximum allowed number of second-concentration tables is 10.
*INTLIN
Linear interpolation is used when doing a table lookup of composition values
cift. This is the default.
*INTLOG
Logarithmic interpolation is used when doing a table lookup of composition
values cift.
DEFAULTS:
If IFTTABLE is absent, then it is assumed that the interpolation parameters *DTRAPW and
*DTRAPN correspond to the mole fraction itself defined via *INTCOMP.
If the subkeyword *TEMP is absent, the interfacial tension is assumed to be independent of
temperature. *TEMP can be absent for thermal as well as isothermal runs.
*INTLIN is the default until overridden by *INTLOG.
EXPLANATION:
*FMSURF, *FMCAP,
*FMOIL, *FMGCP, *FMOMF, *FMSALT, *FMMOB, *EPSURF, *EPCAP, *EPOIL,
*EPGCP, *EPOMF, *EPSALT, *FLOIL, *FLSALT
PURPOSE:
*FMSURF
*FMCAP
*FMOIL
*FMGCP
*FMOMF
*FMSALT
*FMMOB
*EPSURF
*EPCAP
*EPOIL
*EPGCP
*EPOMF
*EPSALT
*FLOIL
*FLSALT
fmsurf
fmcap
fmoil
fmgcp
fmomf
fmsalt
fmmob
epsurf
epcap
epoil
epgcp
epomf
epsalt
floil
flsalt
DEFINITIONS:
fmsurf
Critical oil mole fraction for component numx used in dimensionless foam
interpolation calculation. The allowed range is 0 to 1.
fmsalt
DEFAULTS:
If all of these keywords are absent, then it is assumed that the interpolation parameters
*DTRAPW and *DTRAPN correspond to the interfacial tension (capillary number) option
defined via *IFTTABLE if present, and the mole fraction defined via *INTCOMP if not.
CONDITIONS:
The foam interpolation option is possible only if both *INTCOMP and *IFTTABLE are
present.
EXPLANATION:
FM =
1
1 + FMMOB * F1 * F2 * F3 * F4 * F5 * F6
where
F1
F2
F3
F4
F5
F6
=
=
=
=
=
=
** EPSURF,
** EPOIL,
** EPCAP,
** EPGCP,
** EPOMF,
** EPSALT
The factor FM is an inverse mobility reduction factor which varies between FM = 1 (no
foam) and FM << 0 (strongest foam).
The reference foam mobility reduction factor FMMOB is that achieved at measured values of
surfactant concentration FMSURF, capillary number (flow rate) FMCAP above two times
FMGCP, zero oil saturation, and zero oil mole fraction of component numx. The normal
range of FMMOB is 5 to 100, depending on the strength of created foam.
The remaining factors account empirically for the effects of surfactant concentration, the
positive effect of salt (component numw), the detrimental effect of oil and oil composition
(component numx), and flow velocity (both generation and shear thinning effects) on foam
mobility, essentially scaling FMMOB. Typical values are FMSURF = 0.00001 mole fraction,
FMCAP = 0.0001, and FMOIL = 0.2, while EPSURF = 1, EPCAP = 0.5, and EPOIL = 1 are
appropriate exponents. Additionally FMGCP = 1.0e-6 and FMOMF = 0.2, while EPGCP = 1
and EPOMF = 1. Setting an exponent value to zero disables the corresponding contribution.
The simplest application of the foam interpolation option is to rescale gas relative permeability,
that is, from krg to FMkrg. To account for increased gas trapping with foam, employ higher
critical gas saturation in the input foam relative permeability curves.
Indicate interpolation set number along with its value of interpolating parameter.
FORMAT:
dtrapw
dtrapn
wcrv
ocrv
gcrv
scrv
DEFINITIONS:
*KRINTRP nset
Interpolation set number, local to the current rock-fluid rock type. Values
start at 1 for each new rock type and increase by 1 for each additional
interpolation set. For example, rock type #1 might have local set numbers 1
and 2 while rock type #2 might have local set numbers 1, 2 and 3.
*KRINTERP nglobset
Interpolation set number, global over all rock-fluid rock types. Values must
start at 1 and increase by 1 for each additional interpolation set. For example,
rock type #1 might have global set numbers 1 and 2 while rock type #2 might
have global set numbers 3, 4 and 5. This keyword is considered obsolete
and *KRINTRP should be used instead.
*COPY old_rock old_set
Optional keyword that allows a rock-fluid data set to be defined
incrementally from another previously defined set.
old_rock is a rock type number previously defined via *RPT. If rock type #1
is not explicitly defined via *RPT then it is implied by default.
old_set is a local interpolation set number previously defined via
*KRINTRP. To copy the single set of rock-fluid data from a rock type
without *KRINTRP or *KRINTERP, use old_set = 1. To copy a set defined
via *KRINTERP, see EXPLANATION below.
dtrapw
dtrapn
For a rock type, if *KRINTRP and *KRINTERP are absent then there is no rock-fluid
interpolation, but for *COPY purposes the data is accessible as interpolation set #1.
At least one of *DTRAPW and *DTRAPN must be present to enable interpolation. If only
one is present, its value is applied to the absent keyword.
Each of *WCRV, *OCRV, *GCRV and *SCRV default to 1 if absent.
CONDITIONS:
At least two sets of rock-fluid data must be present before interpolation can be done. The
minimum requirement for interpolation inside a rock type is:
*INTCOMP . . . ** Interpolation component
*KRINTRP 1
*DTRAPW . . .
*SWT . . .
*SLT . . .
*KRINTRP 2 *COPY 1 1
*DTRAPW . . .
** Set #2, different *SWT only
*SWT . . .
"
EXPLANATION:
Example
The following illustrative sketch of keywords shows four rock types, three of which have
interpolation. Actual rock-fluid data (e.g., *SWT and *SLT) is denoted with .
*RPT 1
*KRINTRP 1
... ** Base data for rock type #1, set #1
*KRINTRP 2 *COPY 1 1
... ** Changes for rock type #1, set #2
*KRINTRP 3 *COPY 1 1
... ** Changes for rock type #1, set #3
*RPT 2
...
** Base data for rock type #2 (set #1)
*RPT 3
*KRINTRP 1 *COPY 2 1
... ** Changes for rock type #3, set #1
*KRINTRP 2 *COPY 3 1
... ** Changes for rock type #3, set #2
*KRINTRP 3 *COPY 3 2
... ** Changes for rock type #3, set #3
*RPT 4
*KRINTRP 1 *COPY 1 2
... ** Changes for rock type #4, set #1
*KRINTRP 2 *COPY 4 1
... ** Changes for rock type #4, set #2
*KRINTRP 3 *COPY 4 1
... ** Changes for rock type #4, set #3
For rock type #1, set #1 is fully defined and sets #2 and #3 are defined incrementally from it.
Rock type #2 has no interpolation. For rock type #3, set #1 is based on the data from rock
type #2, set #2 is defined incrementally from set #1 and set #3 is defined incrementally from
set #2. For rock type #4, set #1 is defined incrementally from set #2 of rock type #1 and sets
#2 and #3 are defined incrementally from it.
Obsolete keyword *KRINTERP
Keyword *KRINTERP uses global interpolation set number nglobset which is inconsistent
with old_set and can be difficult to convert. Also, *KRINTERP made it difficult to mix
interpolating and non-interpolating rock types (see example above). Therefore, this keyword
is considered obsolete and supported for it will be removed in a future version.
To help convert from *KRINTERP to *KRNTRP, the following data fragment shows the
global set numbers needed for the first three rock types of the above example.
*RPT 1
*KRINTERP
*KRINTERP
*KRINTERP
*RPT 2
*KRINTERP
*RPT 3
*KRINTERP
*KRINTERP
*KRINTERP
1
2 *COPY 1 1
3 *COPY 1 1
4
5
6 *COPY 3 1
7 *COPY 3 2
*SWT
PURPOSE:
krw
Relative permeability to water at Sw. The first entry must be 0, and krw entries
must be non-decreasing to a maximum of 1. The last krw must be greater than
zero. Swc is obtained from the last entry with krw = 0.
This column is interpreted as krw for *WATWET, krwo for *OILWET and
both krw and krwo for intermediate wettability. See section Wettability
Options at the beginning of this chapter.
krow
Relative permeability to oil at Sw. The first entry must be greater than zero
but not exceed 1, and krow entries must be non-increasing. The last entry must
be zero. Sorw is obtained from the first entry with krow = 0.
This column is interpreted as krow for *WATWET, kro for *OILWET and
both krow and kro for intermediate wettability. See section Wettability
Options at the beginning of this chapter.
Pcow
Pcowi
CONDITIONS:
At least one *SWT table must be entered, and it must appear before *SLT.
Entries must be in order of increasing water saturation.
The maximum number of rows allowed in this table is 100.
For the size of the mobile region 1-Swcrit-Sorw, the minimum allowed value is 0.02 and the
minimum recommended value is 0.3. These conditions are applied for all temperatures, all
interpolation sets and all per-block end-point values.
To enable the capillary pressure hysteresis option, some other primary keywords must be
entered along with Pcowi. For further discussion of how to apply this feature, refer to the
section Hysteresis Parameters.
This table must have either 3 columns (Sw krw krow), 4 columns (Sw krw krow Pcow) or 5
columns (Sw krw krow Pcow Pcowi).
The *LININTERP Option
This option requires that the wetting phase relative permeability entries in the *SWT table be
equal to the corresponding liquid relative permeability entries in the *SLT table, between the
critical saturations. If they are not, entries are inserted by interpolation to satisfy the
condition. The expanded tables must fit within the allowed table dimensions.
For example, consider the water-wet case where the *SWT table has entry krow = 0.85. If the
*SLT table has an entry with krog = 0.85, then no action is taken. If there is no such krog entry,
then all the columns in *SLT (Sl, krg, etc.) are interpolated to get a krog = 0.85 entry. The same
will be done to the columns in the *SWT table to get a krow entry equal to a krog entry entered
as data.
*SLT
PURPOSE:
*NOSWC
Table liquid saturation Sl does not contain connate water saturation Swc, and
therefore is all oil. The *STONE1 option is unavailable with *NOSWC.
*SMOOTHEND {*LINEAR | *QUAD | *CUBIC}
Optional keyword indicating what type of interpolation is to be used for the
table intervals where krg and krog (krwg) go from zero to non-zero. Use
subkeyword *LINEAR for linear interpolation, *QUAD for quadratic
interpolation and *CUBIC for cubic interpolation. If *SMOOTHEND is
absent then *LINEAR is used.
*WATERGAS
Flag to indicate that the krwg column is expected. This keyword is needed
only for specifying krwg different from krow for an intermediate wettability
option. See section Wettability Options at the beginning of this chapter.
Sl
krg
Relative permeability to gas at Sl. The first entry must be greater than zero
but not exceed 1, and krg entries must be non-increasing. The last entry must
be 0. Sgc is obtained from the first entry with krg = 0.
krog
krwg
Pcog
Pcogi
DEFAULTS:
This table must be entered at least once, even if gas is never present, and it must occur after
*SWT, since an endpoint check uses information from *SWT.
For the size of the mobile region 1-Sgcrit-Slrg, the minimum allowed value is 0.02 and the
minimum recommended value is 0.3. These conditions are applied for all temperatures, all
interpolation sets and all per-block end-point values.
When *NOSWC option is not used, krow entries of *SWT before Swc must be equal to
krow(Swc), since Stone's models assumes that the endpoint value is krow(Swc). In this case, the
only reason to have table entries for Sw < Swc is for Pcow. When *NOSWC is used, this
restriction is lifted.
See the section in this chapter's introduction entitled "CRITICAL AND CONNATE
SATURATIONS, SCALE-UP FACTORS, AND NORMALIZATION".
*HYS_KRO, *HYS_KRW,
*HYS_KRG, *HYS_PCOW, *HYS_PCOG, *HYS_LEVEL, *HYS_TOLW, *HYS_REVW,
*HYS_TOLG, *HYS_REVG, *HYS_DRAINW, *HYS_IMBIBW, *HYS_DRAING,
*HYS_IMBIBG
PURPOSE:
These keywords enable the relative permeability and capillary pressure hysteresis option and
signal entry of hysteresis parameters.
FORMAT:
*HYS_KRW
*HYS_KRG
* HYS_PCOW
(*EPSOW epsow)
*HYS_PCOG
(*EPSOG epsog)
Defined for relative permeability and capillary pressure with all interpolation sets:
*HYS_TOLW
*HYS_REVW
*HYS_TOLG
*HYS_REVG
tolhyl
tolrel
tolhyg
tolreg
nlevel
*HYS_IMBIBW
*HYS_IMBIBG
DEFINITIONS:
*HYS_KRO
With water being the wetting phase (*WATWET), *HYS_KRO enables
hysteretic effect on the oil (non-wetting phase) relative permeability for all
three methods and optionally on the water (wetting phase) relative
permeability for Killough and BBM method.
*HYS_KRW
With oil being the wetting phase (*OILWET), *HYS_KRW enables
hysteretic effect on the water (non-wetting phase) relative permeability for
all three methods and optionally on the oil (wetting phase) relative
permeability for Killough and BBM method.
*HYS_KRG
With gas always being treated as the non-wetting phase, *HYS_KRG enables
hysteretic effect on the gas relative permeability for all three methods.
*CARLSON
Depending on the rock wettability, the method developed by Carlson is
employed in the treatment of non-wetting phase relative permeability hysteresis.
*KILLOUGH
Depending on the rock wettability, the method developed by Killough is
employed in the treatment of non-wetting phase, and optionally wetting
phase, relative permeability hysteresis.
*BBM
Depending on the rock wettability, the method developed by Beattie, Boberg
and McNab is employed in the treatment of non-wetting phase, and
optionally wetting phase, relative permeability hysteresis.
*SOTMAX (sotmax)
For the Carlson method only, sotmax is the maximum trapped oil (nonwetting phase) saturation of the imbibition curve (See Fig. HY1(a)). This is
the endpoint of the imbibition curve which breaks off from the oil relative
permeability drainage curve at the maximum possible krow (at So = 1.0 Swc).
This value is used to evaluate the shape and path of all scanning curves
which leave the drainage curve at any saturation reversal. sotmax must be
greater than the residual oil saturation Sorw and less than (1.0 Swc).
*SWTMAX (swtmax)
For the Carlson method only, swtmax is the maximum trapped water (nonwetting phase) saturation of the imbibition curve. This is the endpoint of the
imbibition curve which breaks off from the water relative permeability
drainage curve at the maximum possible krw (at Sw = 1.0 Soirw). This value
is used to evaluate the shape and path of all scanning curves which leave the
drainage curve at any saturation reversal. swtmax must be greater than the
irreducible water saturation Swc and less than (1.0 Soirw).
*SGTMAX (sgtmax)
For the Carlson method only, sgtmax is the maximum trapped gas saturation
of the imbibition curve. This is the endpoint of the imbibition curve which
breaks off from the gas relative permeability drainage curve at the maximum
possible krg (at Sg = 1.0 Slc). This value is used to evaluate the shape and
path of all scanning curves which leave the drainage curve at any saturation
reversal. sgtmax must be greater than the critical gas saturation Sgc and less
than (1.0 Slc). A larger value of sgtmax will result in a steeper imbibition
curve which may potentially cause numerical convergence difficulties.
*HYEXO (hyexo)
Used by the Killough method, this dimensionless real number determines the
position and curvature of the oil relative permeability scanning curves. For oil
non-wetting, the larger the hyexo value, the further the scanning curve will be
away from the drainage curve (see (EQ h.6)). For oil wet case, increasing
hyexo tends to make the scanning curves closer to the drainage curve.
*HYEXW (hyexw)
Used by the Killough method, this dimensionless real number determines the
position and curvature of the water relative permeability scanning curves. For
water non-wetting, the larger the hyexw value, the further the scanning curve
will be away from the drainage curve. For water wet case, increasing hyexw
tends to make the scanning curves closer to the drainage curve (see (EQ
h.12) and (EQ h.13)).
*HYEXG (hyexg)
Used by the Killough method, this dimensionless real number determines the
position and curvature of the gas relative permeability scanning curves. The
larger the hyexg value, the further the scanning curve will be away from the
drainage curve.
( *ENWI enwi ) ( *ENWD enwd ) ( *EWTI ewti ) ( *EWTD ewtd )
Used by the BBM method, these dimensionless scanning curve exponents
determine how rapidly the non-wetting and/or wetting phase relative
permeability scanning curves approach the bounding drainage and imbibition
curve after a saturation reversal. enwi and enwd are designated for non-wetting
phase and ewti and ewtd for wetting phase.
For water wet, when Sw is increasing, the larger value of enwi and ewti makes
the scanning curve move rapidly toward the imbibition bounding curve (see
(EQ h.9) and (EQ h.14)). Rising enwd and ewtd tends to make the scanning
curves closer to the drainage bounding curve when Sw is decreasing.
For oil wet case, when Sw is increasing, the larger value of enwi and ewti
makes the scanning curve move rapidly toward the drainage bounding curve.
Rising enwd and ewtd tends to make the scanning curves closer to the
imbibition bounding curve when Sw is decreasing.
( *ENGI engi ) ( *ENGD engd )
Used by the BBM method, these dimensionless scanning curve exponents
determine the position and curvature of the gas phase relative permeability
scanning curves. The larger the engi value, the further the scanning curve will
be away from the drainage curve when Sli is increasing. Rising engd tends to
make the scanning curves closer to the drainage curve when Sli is decreasing.
( *RNW rnw )
( *RWT rwt )
Used by the BBM method, these dimensionless real numbers determine which
curve the simulation will start on for the wetting and non-wetting phase
relative permeabilities. If rnw ( rwt ) = 1.0, the run will start on drainage curve
for non-wetting phase (wetting phase) relative permeability. If rnw ( rwt ) =
0.0, the run will starts on imbibition curve for non-wetting phase (wetting
phase) relative permeability. If 0.0 < rnw ( rwt ) < 1.0, the run will starts on
scanning curve for non-wetting phase (wetting phase) relative permeability.
( *RNG rng )
Used by the BBM method, this dimensionless real number determines which
curve the simulation starts on for the gas relative permeability. If rng = 1.0,
the run will starts on drainage curve. If rng = 0.0, the run will starts on
imbibition curve. If 0.0 < rng < 1.0, the run will starts on scanning curve.
*SWTI
Indicates the start of the water-oil relative permeability imbibition table.
Swi
A column of real numbers represents the water saturation. The allowed range
is 0 to 1. Swi table entries must be increasing. The minimum allowed
difference between Swi entries is 1e-5.
If *KILLOUGH is invoked, for a water wet system, the first entry must equal
to the connate water saturation Swc from the drainage table and the last entry,
Swi_last, defines the maximum trapped oil saturation by sotmax = 1 Swi_last;
for an oil wet system, the first entry defines the maximum trapped water
saturation, swtmax, and the last entry must equal to 1-Sorw.
If *BBM is invoked, the first entry must equal to the connate water saturation
Swc from the drainage table and the last entry must equal to 1 - Sorw.
kri_nonwet
( kri_wet )
If *BBM is invoked, krwi or krowi must have the same endpoints as its
counterpart of the drainage table. For water wet system, krwi entries must be
larger than the corresponding drainage table value; for oil wet system, krowi
entries must be larger than the corresponding drainage table value.
*SLTI
Indicates the start of the liquid-gas relative permeability imbibition table.
Sli
A column of real numbers represents the liquid saturation. The allowed range
is 0 to 1. Sli table entries must be increasing. The minimum allowed
difference between Sli entries is 1e-5.
If *KILLOUGH is invoked, the first entry must equal to the connate liquid
saturation obtained from the drainage table and the last entry, Sli_last, defines
the maximum trapped gas saturation by sgtmax = 1 Sli_last.
If *BBM is invoked, the first entry must equal to the connate liquid saturation
obtained from the drainage table and the last entry must equal to 1 - Sgcrit.
krgi
*HYS_PCOW
Denotes that hysteresis effect on the oil-water capillary pressure is modeled.
*EPSOW epsow
Dimensionless real number which determines the transition between the
imbibition and drainage curves for oil-water capillary pressure. Typical
values of epsow should generally satisfy the expression: 0.05 epsow 0.1.
Values smaller than 0.05 tend to cause numerical convergence problems.
*HYS_PCOG
Denotes that hysteresis effect on the oil-gas capillary pressure is modeled.
*EPSOG epsog
Dimensionless real number which determines the transition between the
imbibition and drainage curves for oil-gas capillary pressure. Typical values
of epsog should generally satisfy the expression: 0.05 epsog 0.1. Values
smaller than 0.05 tend to cause numerical convergence problem.
*HYS_TOLW tolhyl
Saturation tolerance by which the water (or oil) saturation must exceed the
critical values (endpoints), e.g. |Sw - Swc| > tolhyl, before hysteresis
calculations are performed.
*HYS_REVW tolrel
Saturation tolerance by which the water (or oil) saturation must exceed the
historical maximum saturation, e.g. |So - Sohmax| > tolrel, before hysteresis
calculations are performed.
*HYS_TOLG tolhyg
Saturation tolerance by which the gas saturation must exceed the critical
values before hysteresis calculations are performed.
*HYS_REVG tolreg
Saturation tolerance by which the gas saturation must exceed the historical
maximum saturation before hysteresis calculations are performed.
*HYS_LEVEL
Number of levels of scanning curves for capillary pressure hysteresis.
Allowed values are 1 or 2.
*HYS_DRAINW | *HYS_IMBIBW
Indicates which water-oil capillary pressure curve to use for initialization
option *VERTICAL *DEPTH_AVE. *HYS_DRAINW denotes the
drainage curve and *HYS_IMBIBW denotes the imbibition curve. At most
one of these subkeywords may be entered. If neither is entered then
*HYS_DRAINW is assumed.
*HYS_DRAING | *HYS_IMBIBG
Indicates which gas-oil capillary pressure curve to use for initialization option
*VERTICAL *DEPTH_AVE. *HYS_DRAING denotes the drainage curve
and *HYS_IMBIBG denotes the imbibition curve. At most one of these
subkeywords may be entered. If neither is entered then *HYS_DRAING is
assumed.
DEFAULTS:
*SWTI table are mandatory input for Killough and BBM method. There is no default.
If *HYS_KRG is not entered then there is no hysteretic effect on gas relative permeability for
this interpolation set. If *HYS_KRG *CARLSON *SGTMAX is entered without the
number sgtmax following it, then
sgtmax = Sgr + 0.5 * (1.0 Slr Sgr)
If *HYS_KRG *KILLOUGH is entered without *HYEXG, the relative permeability interpolation
will be used in gas relative permeability computations. Otherwise, the saturation interpolation will
be used.
If *HYS_KRG *KILLOUGH *HYEXG is entered without the number following it, then
hyexg = 1.0
If *HYS_KRG *BBM is entered without the subkeywords and numbers following it, then
engi = engd = rng = 1.0
*SLTI table is mandatory input for Killough and BBM method. There is no default.
If *HYS_PCOW is not entered then there is no hysteretic effect on oil-water capillary pressure
for this interpolation set. If *HYS_PCOW is entered without the subkeyword *EPSOW epsow,
then epsow = 0.1 is assumed. To enable oil-water capillary pressure hysteresis, column Pcowi
must be entered via table keyword *SWT for this interpolation set.
If *HYS_PCOG is not entered then there is no hysteretic effect on oil-gas capillary pressure for
this interpolation set. If *HYS_PCOG is entered without the subkeyword *EPSOG epsog, then
epsog = 0.1 is assumed. To enable the oil-gas capillary pressure hysteresis, column Pcogi must
be entered via table keyword *SLT for this interpolation set.
If *HYS_LEVEL is not entered, then *HYS_LEVEL 1 is assumed.
If *HYS_TOLW is not entered, then *HYS_TOLW 1.0e-6 is assumed.
If *HYS_REVW is not entered, then *HYS_REVW 1.0e-6 is assumed.
If *HYS_TOLG is not entered, then *HYS_TOLG 1.0e-6 is assumed.
If *HYS_REVG is not entered, then *HYS_REVG 1.0e-6 is assumed.
CONDITIONS:
The relative permeability hysteresis option can only be applied to the system that a strong
rock wettability exists (either *WATWET or *OILWET). These keywords must be in the
Rock-Fluid Data keyword group, after the drainage water-oil and the liquid-gas relative
permeability tables have been entered. It is possible to apply hysteresis to either the relative
permeabilities, capillary pressure or both simultaneously. If the oil-water capillary pressure
hysteresis is intended, the water phase should be the wetting phase (*WATWET). The gas
phase is always treated as the non-wetting phase. The hysteresis option may be applied in
combination with other features, such as endpoint over-riding, temperature dependence and
interpolation between sets, but extra caution should be exercised to ensure the consistency of
input data to avoid numerical difficulties.
EXPLANATION:
The relative permeability and capillary pressure hysteresis option allows to simulate the
history-dependency of saturation functions when saturation changes are not unidirectional.
Three methods are available to model non-wetting phase relative permeability hysteresis:
Carlson, Killough and BBM and two for wetting phase, Killough and BBM. For a three phase
system, the hysteretic values are first obtained independently from both water-oil and liquidgas systems, these values are then utilized in the calculation of the middle phase (oil for water
wet and water for oil wet) relative permeability.
Non-wetting Phase Relative Permeability Hysteresis
The Carlson and Killough method
Drainage curve
S wc
S orw
Scanning curve
G
Imbibition
curve
S omax
C
Sotmax
1.0
Socrt
Sohmax
So
Locus of
maximum
k rw
A'
E'
S wc
S orw
C'
Drainage
curve
Imbibition
curve
D'
1.0
B'
1-S omax
1.0
1-S ocrt
1-Sotmax
1-S ohmax
Sw
Fig. HY1: Hysteretic characteristics of wetting and non-wetting phase relative permeability, Carlson(nonwetting phase only) and Killough method.
If oil saturation increases monotonically from Sorw (point A) to the maximum oil saturation Somax =
1.0 Swc (point B), the drainage curve AB will be followed. If oil saturation then decreases from
B all the way to C, the imbibition curve is used. If the drainage or imbibition process is reversed
at some point between, the relative permeability will be obtained from a scanning curve.
Suppose a drainage process is reversed at some intermediate oil saturation Sohmax (point D), a
scanning curve DE is created. The end points of a scanning curve are the trapped oil saturation
(Socrt) and the historical maximum oil saturation reached in the run (Sohmax).
For any state on the scanning curve DE, change back to drainage will stay on the same
scanning curve until Sohmax is reached. When the state returns to the drainage curve at D, if
drainage continues, the state will follow DB, until imbibition again succeeds.
Another situation may arise when oil saturation decreases at the state of point E. This could
happen if oil phase is burnt or dissolved. Then at a point F to the right of E, a subsequent
drainage process would result in a scan upward to the drainage curve at point G.
The Carlson (*CARLSON) method needs to update the historical maximum oil saturation
(Sohmax) for each grid cell during the simulation. If the oil saturation equals or exceeds the
historical maximum, Sohmax, the drainage curve will be used to determine the value of the oil
relative permeability. On the other hand, if the oil saturation in a grid cell falls below Sohmax, a
scanning curve will be employed. In constructing the scanning curve, the approach is based on
the assumption that the scanning relative permeability is equal to the drainage relative
permeability evaluated at the free oil saturation, Sof, that is:
User's Guide STARS
drain
k scan
row (So ) = k row (Sof )
(EQ h.1)
where the free oil saturation Sof is obtained from the following equation:
(So
S ocrt )2 +
4 (S o S ocrt )
(EQ h.2)
In (EQ h.2),
So:
Sorw:
Socrt:
C:
Sohmax Sorw
1 + C (Sohmax Sorw )
(EQ h.3)
(Somax
Somax sotmax
Sorw ) (sotmax Sorw )
(EQ h.4)
Sohmax:
sotmax:
The scanning curves constructed by the Carlson method retain a geometrical simplicity since
the only hysteretic parameter inputted is sotmax.
The Killough (*KILLOUGH) method (Killough, J. E., "Reservoir Simulation with HistoryDependent Saturation Functions", SPEJ, Feb. 1976, 37-48) renders more user control on the
formation of the scanning curves. Similar to the Carlsons, it uses the same formula, (EQ h.3)
and (EQ h.4) to compute the trapped saturation Socrt, but the relative permeability on the
scanning curve is calculated by either a relative permeability interpolation
drain
k scan
row (So ) = k row (Sohmax )
k imbib
row (So )
drain
k row (Somax )
(EQ h.5)
or a saturation interpolation
k scan
row
(So ) =
k drain
row
(Sohmax )
S Socrt
Sohmax Socrt
(hyexo )
(EQ h.6)
imbib
where k drain
row and k row are the relative permeability values on the drainage and imbibition
curve and the normalized oil saturation So in (EQ h.5) is computed from
So =
(So
(EQ h.7)
Based on a similar observation as the previous section, the BBM method constructs the nonwetting phase relative permeability scanning curves differently from the Carlson and the
Killough method (For details, see Beattie, C.I., Boberg, T.C. and McNab, G.S., "Reservoir
Simulation of Cyclic Steam Stimulation in the Cold Lake Oil Sands", SPE 18752). Fig.
HY2(a) shows the history of oil relative permeability vs. water saturation by tracking a grid
block over several injection-production cycles. As the oil saturation increases (or water
saturation decreases) initially from point A to B, krow follows the drainage curve. At point B
the saturation reversal occurs, krow moves along a scanning curve BC toward the imbibition
bounding curve. When second reversal occurs at point C, a new scanning curve CD is trailed
until another reversal takes place in the later cycles.
1.0
Drainage
curve
D
S wc
S orw
B
Imbibition
curve
Scanning
curve
1.0
So
1.0
Imbibition
curve
Scanning
curve
S wc
S orw
Drainage
curve
1.0
Sw
Fig. HY2:Hysteretic characteristics of wetting and non-wetting phase relative permeability, BBM method.
According to the BBM method, using a normalized water saturation and oil relative
permeability
Sw =
(S w
S wc )
k (S )
; k row = row w ,
(1 S wc S orw )
k row (S wc )
(EQ h.8)
hysteretic relative permeabilities to oil on the scanning curve are computed by the following
formulae:
When Sw increasing:
k scan
row
k imbib
row
1 Sw
+ (rnw )
1 (Sw )p
(enwi )
(EQ h.9)
(EQ h.10)
drain
k row
k imbib
row
When Sw decreasing:
k scan
row
drain
k row
S
(1 rnw ) w
(Sw )p
(enwd )
drain
k row
k imbib
row
In (EQ h.9) and (EQ h.10), the subscript 'p' denotes the values at the point where the last
saturation reversal occurred and
rnw =
imbib
( k scan
row ) p ( k row ) p
imbib
( k drain
row ) p ( k row ) p
(EQ h.11)
Once the normalized values are known, the relative permeability can easily be recovered
from (EQ h.8).
Wetting Phase Relative Permeability Hysteresis
The wetting phase relative permeability generally exhibits a much less dependence on the
change of flow directions than the non-wetting phase. However, it has been observed that for
some processes, such as cyclic steam, the wetting phase relative permeability hysteresis plays
an important role in achieving a satisfactory history match.
The Killough method
In association with its non-wetting phase counterpart, Fig. HY1(b) shows a sketch of hysteretic
relative permeability profile for the wetting phase. The curve AB represents the user-inputted
water (wetting phase) relative permeability drainage curve, and BC represents the userinputted water relative permeability imbibition curve. With reference to the analysis of the nonwetting phase hysteresis, as water saturation decreases from A to B, the drainage curve AB
is followed; then the imbibition curve BC is followed as the water saturation increases from
Swc until reaching the maximum water saturation, 1-sotmax, on the curve. For any reversal
occurred at an intermediate saturation on AB, a scanning curve, shown as DE, is generated
starting at 1-Sohmax and ending at 1-Socrt. The maximum reachable krw on the scanning curve is
predicted by an interpolation between the imbibition curve and drainage curve
drain
imbib
drain
k scan
rw (1 Socrt ) = k rw (1 Socrt ) + k rw (1 sotmax ) k rw (1 sotmax )
S S
ocrt orw
sotmax Sorwt
(hyexw )
(EQ h.12)
The user-specified parameter, hyexw, is used to allow a closer fit with inputted data.
At any given Sw, the wetting phase relative permeability on the scanning curve is then
calculated from
k imbib
drain
rw (1 So )
k scan
rw (Sw ) = k rw (1 Sohmax ) + imbib
k rw (1 sotmax )
drain
k scan
rw (1 Socrt ) k rw (1 Sohmax )
k imbib
rw (1 So )
imbib
k rw (1 sotmax )
(EQ h.13)
Fig. HY2(b) depicts the relative permeability hysteretic feature of the wetting phase, the water
in this case. Very similar to the treatment for the non-wetting phase, the hysteretic relative
permeabilities to water on the scanning curve are computed by the following formulae:
When Sw increasing:
k scan
rw
k imbib
rw
1 Sw
(rwt )
1 (Sw )p
(ewti )
drain
k imbib
k rw
rw
(EQ h.14)
When Sw decreasing:
k scan
rw
drain
k rw
S
+ (1 rwt ) w
(Sw )p
(ewtd )
k imbib
k drain
rw
rw
(EQ h.15)
In (EQ h.14) and (EQ h.15), the subscript 'p' again denotes the values at the point where the
last saturation reversal occurred and
rwt =
( k imbib
) p ( k scan
rw
rw ) p
imbib
drain
( k row ) p ( k row ) p
(EQ h.16)
The method used in STARS to model the capillary pressure hysteresis is similar to the one
suggested by Killough (Killough, J. E., "Reservoir Simulation with History-Dependent
Functions", Soc. Pet. Eng. J., Feb. 1976, Trans. AIME, Vol. 261, pp. 37-48).
Consider an oil-water system with the capillary pressure, Pcow, versus water saturation, Sw,
behavior given in Fig. HY3. The three curves AB, BC and CD are refereed to as the primary
drainage curve (PDR), the bounding imbibition curve (BIM) and the secondary drainage
curve (2DR). These curves are obtained when displacement in either direction is carried out
completely to the residual value of saturation.
E
S wc
S oirw
PD R
D
M
BI
2D
R
F
A
S whmin
1.0
S wr
Water saturation
Sw
S wmax
Suppose the drainage process is reversed at intermediate water saturation Swhmin (point E),
Pcow will follow an imbibition scanning curve EC. For a given water saturation, Sw, the
capillary pressure on the scanning imbibition curve is calculated by a weighted average of the
secondary drainage and bounding imbibition capillary pressure curves
scan
2 DR
2 DR
BIM
(Sw ) = Pcow
(Sw ) F (Sw ) Pcow
(Sw ) Pcow
(Sw )
Pcow
(EQ h.17)
Sw Swhmin +
F(Sw ) =
1
1
Swmax Swhmin +
(EQ h.18)
where
Swhmin:
Swmax:
:
If the imbibition scanning curve started at point E experiences a second saturation reversal at
point F (Sw decreasing), a new drainage scanning curve FE will be followed which generally
is not a re-traverse of EF:
scan
BIM
2 DR
BIM
(Sw ) = Pcow
(Sw ) + G (Sw ) Pcow
(Sw ) Pcow
(Sw )
Pcow
(EQ h.19)
Sw Swr +
G (Sw ) =
1
1
Swhmin Swr +
(EQ h.20)
The unknown saturation Swr is determined from the condition that the two scanning curves
meet at point F. In STARS, the keyword *HYS_LEVEL controls the level of scanning curve
to be employed. The default is 1, that is, the secondary scanning curve will re-traverse the
first scanning curves.
The explanations presented above for saturation reversals in the drainage process can be
applied likewise to the case which an imbibition process is reversed. Similar equations for
calculating the scanning capillary pressure can be derived (see Aziz, K. and Settari, A.,
"Petroleum Reservoir Simulation", Applied Science Publishers, London, 1979, pp. 395-399).
The scanning curve behavior depicted on Fig. HY3 is valid only when the system has previously
undergone a complete drainage displacement. If a reversal occurs on the primary drainage curve,
rather than follow a scanning curve back to the residual oil saturation, some new residual has to be
determined. In STARS, it will detect internally weather a grid cell has finished the primary
drainage and then employ different formula to calculate scanning capillary pressure.
EXAMPLE:
For a water wet system, the following keywords will activate the Carlson method for the
hysteretic effect on the non-wetting oil relative permeability, the gas relative permeability and
the water-oil capillary pressure hysteresis:
*HYS_KRO *CARLSON
*HYS_KRG *CARLSON
*HYS_PCOW *EPSOW
*SOTMAX 0.45
*SGTMAX 0.40
0.10
For a water wet system, the following keywords will activate the Killough method for the
relative permeability hysteresis to non-wetting oil phase, wetting water phase and gas phase:
*HYS_KRO *KILLOUGH
*SWTI
** Swi
krowi
0.13
1.0
0.25
0.43
0.30
0.25
0.35
0.12
0.45
0.01
0.4595 0.0
*HYS_KRG *KILLOUGH
*SLTI
**
Sli
krgi
0.200
0.17
0.395
int
0.433
int
0.515
int
0.52
0.0
*HYEXG 1.5
For an oil wet system, the following keywords will activate the BBM method for the relative
permeability hysteresis to non-wetting water phase, wetting oil phase:
*HYS_KRW *BBM
*EWTI 13.0 *EWTD 13.0 *ENWI 10.0 *ENWD 3.0
*SWTI
**
swti
krwi
krowi
0.2
0.0
0.9
0.32
0.01
int
0.56
0.16
int
0.68
0.35
int
0.8
0.9
0.0
To help user to verify the input data and observe the relative permeability behavior, two new
special history outputs have been added. The following keywords in Input/Output Control
section will record the history of both wetting (water or oil) and non-wetting phase (oil or
water) relative permeability vs. water saturation for grid block (i1, j1, k1):
rpwt and rpnw are for the wetting phase and non-wetting phase, respectively. Plotting the
curves with Results Graph, user should be able to check if the scanning curves behave
appropriately, such as whether the scanning values are confined in the bounding curves, and
fine-tune the input parameters accordingly.
Overwrite critical and connate saturations and endpoints from the tables.
FORMAT:
*SWR or *SWCON
*SWCRIT
*SORW
*SOIRW
*SGR
*SGCON
*SORG
*SOIRG
*SWRG
*SWIRG
*KRWRO
*KRWIRO
*KROCW
*KRGCW
*PCWEND
*PCGEND
Swcon
Swcrit
Sorw
Soirw
Sgr
Sgcon
Sorg
Soirg
Swrg
Swirg
krwro
krwiro
krocw
krgcw
pcwend
pcgend
DEFINITIONS:
Swcon
Swcrit
Sorw
Soirw
Sgr
Sgcon
Irreducible water saturation. Sometimes known as Swc, but the keyword used
is *SWR or *SWCON. The allowed range is 0 to 1.
Critical water saturation. The allowed range is 0 to 1.
Residual oil saturation for water injection. The allowed range is 0 to 1.
Irreducible oil saturation for water injection. The allowed range is 0 to 1
Critical gas saturation. The allowed range is 0 to 1
Connate gas saturation. The allowed range is 0 to 1.
Sorg
Soirg
Swrg
Swirg
krwro
krwiro
krocw
krgcw
pcwend
Maximum value of water-oil capillary pressure, usually an endpoint value
(kPa | psi | kPa).
pcgend
Maximum value of gas-oil capillary pressure, usually an endpoint value (kPa
| psi | kPa).
DEFAULTS:
These keywords should be used only to overwrite the critical and connate saturations and
endpoints that were found in the tables entered via *SWT and *SLT.
CONDITIONS:
To be effective, these keywords must occur after *SWT and *SLT. Any of these keywords
found before the corresponding table will be ignored.
For the size of the mobile regions 1-Swcrit-Sorw and 1-Sgcrit-Slrg, the minimum allowed value is
0.02 and the minimum recommended value is 0.3.
EXPLANATION:
The result of applying these endpoint modifications to the tables entered via *SWT and *SLT
will be reported in the output file in the data summary section. Information about endpoints
scaling is at the beginning of this section "CRITICAL AND CONNATE SATURATIONS,
SCALE-UP FACTORS, AND NORMALIZATION".
*KRTEMTAB
A list of relative permeability endpoint keywords must follow, along with a
table of corresponding endpoint values versus temperature.
key(i)
Any keywords from the RELATIVE PERMEABILITY ENDPOINT
keyword group (*SWR, *SWCRIT, *SORW, *SOIRW, *SGR, *SGCON,
*SORG, *SOIRG, *SWRG, *SWIRG, *KRWIRO, *KRWRO, *KROCW,
*KRGCW, *PCWEND, *PCGEND) in any order. A maximum of 10
keywords are allowed.
T
Temperature table entry (C | F). There must be at least 2 entries, and all
temperature entries must be evenly spaced. The maximum allowed number
of temperature entries is 10.
val(i)
Table values corresponding to keyword key(i).
DEFAULTS:
See the section in this chapter's introduction entitled "CRITICAL AND CONNATE
SATURATIONS, SCALE-UP FACTORS, AND NORMALIZATION". See also
Appendix D.6.
*BSWR, *BSWCRIT,
*BSORW, *BSOIRW, *BSGR, *BSGCON, *BSORG, *BSOIRG, *BSWRG, *BSWIRG,
*BKRWRO, *BKROCW, *BKRGCW, *BPCWMAX, *BPCGMAX
PURPOSE:
*BSWR or *BSWCON
*BSWCRIT
*BSORW
*BSOIRW
*BSGR
*BSGCON
*BSORG
*BSOIRG
*BSWRG
*BSWIRG
*BKRWRO
*BKRWIRO
*BKROCW
*BKRGCW
*BPCWMAX
*BPCGMAX
DEFINITIONS:
*BSWR or *BSWCON
Connate water saturation. The allowed range is 0 to 1.
*BSWCRIT
Critical water saturation. The allowed range is 0 to 1.
*BSORW
Residual oil saturation to water. The allowed range is 0 to 1.
*BSOIRW
Irreducible oil saturation to water. The allowed range is 0 to 1.
*BSGR
Critical gas saturation. The allowed range is 0 to 1.
*BSGCON
Connate gas saturation. The allowed range is 0 to 1.
*BSORG
Residual oil saturation to gas. The allowed range is 0 to 1.
*BSOIRG
Irreducible oil saturation to gas. The allowed range is 0 to 1.
*BSWRG
Residual water saturation to gas. The allowed range is 0 to 1. This quantity is
used only for blocks whose system is oil-wet or intermediate-wet.
*BSWIRG
Irreducible water saturation to gas. The allowed range is 0 to 1. This quantity
is used only for blocks whose system is oil-wet or intermediate-wet.
*BKRWRO
Relative permeability to water at residual oil and zero gas saturation. The
allowed range is 1.0e-9 to 1. Keyword *BKRWRO is obsolete and
*BKRWIRO should be used instead. Any *BKRWRO data is converted
internally to *BKRWIRO and is reported as krwiro. Use of *BKRWRO makes
it possible to scale the krw curve such that krwiro exceeds 1 which is not a
recommended practice. Note that krwro may be different from krwiro when Sorw
> Soirw.
*BKRWIRO
Relative permeability to water at irreducible oil and zero gas saturation. The
allowed range is 1.0e-9 to 1.
*BKROCW
Relative permeability to oil at connate water and zero gas saturation. The
allowed range is 1.0e-9 to 1.
*BKRGCW
Relative permeability to gas at connate liquid. The allowed range is 1.0e-9 to 1.
*BPCWMAX
Maximum value of water-oil capillary pressure, usually an endpoint value
(kPa | psi | kPa).
*BPCGMAX
Maximum value of gas-oil capillary pressure, usually an endpoint value (kPa
| psi | kPa).
DEFAULTS:
Each quantity may be defaulted independently. For example, the defaulting and assignment
of Swr via *SWT, *SWR or *BSWR does not affect the defaulting and assignment of Sgr via
*SLT, *SGR or *BSGR.
For each keyword absent, the corresponding quantity used by a block comes from the rock
type assigned to that block, and the quantity will change according to rock type reassignments via *KRTYPE in recurrent data.
User's Guide STARS
Upon the first appearance of each of these keywords, each block is seeded with the associated
rock type value for that quantity. Subsequently, each block's default is the value assigned up
to that point in the simulation.
CONDITIONS:
These keywords, if present, must appear after all other keywords that define or modify
endpoints of the rock-fluid tables for all rock types (*SWT, *SLT, *KRTEMTAB, all
modifiers such as *SWR).
For the size of the mobile regions 1-Swcrit-Sorw and 1-Sgcrit-Slrg, the minimum allowed value is
0.02 and the minimum recommended value is 0.3.
These keywords may appear also in the Well and Recurrent Data section.
EXPLANATION:
All these keywords are grid arrays, and all array reading option subkeywords are valid.
See the section in this chapter's introduction entitled "CRITICAL AND CONNATE
SATURATIONS, SCALE-UP FACTORS, AND NORMALIZATION".
Rock Type Versus Individual Block Data
There are two ways to specify an endpoint scaling quantity for a given grid block: (1) through
the rock type associated with the block, or (2) directly via one of the above "block"
keywords. If this "block" keyword is absent then the quantity is obtained from the rock type
during the entire simulation.
However, once the "block" keyword for a quantity is detected then that quantity is obtained
FOR ALL BLOCKS from the "block" array at all times after that. This switch over from rock
type to block is facilitated by the fact that each entry in the "block" array is seeded from the
associated rock type in effect when the keyword first appears. However, it also means that
thereafter in the run the quantity in question is never obtained from a block's rock type, even
if the rock type changes via *KRTYPE. It is not possible to switch from "block" array back to
rock type. Any subsequent changes to the quantity must be done via the "block" keyword.
Inheritance by Refined Grids
Inheritance of values defined by these keywords from parent to child blocks is performed as in
recurrent data, that is, immediately upon reading the keyword data. See Find-Grid Inheritance
in the Well and Recurrent Data chapter.
*DIFFI_WAT,
*DIFFJ_WAT, *DIFFK_WAT, *DIFFI_OIL, *DIFFJ_OIL, *DIFFK_OIL, *DIFFI_GAS,
*DIFFJ_GAS, *DIFFK_GAS
PURPOSE:
Enter effective molecular diffusion coefficients for the desired component and phase.
ARRAY:
*DIFFI_WAT
*DIFFJ_WAT
*DIFFK_WAT
*DIFFI_OIL
*DIFFJ_OIL
*DIFFK_OIL
*DIFFI_GAS
*DIFFJ_GAS
*DIFFK_GAS
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
DEFAULTS:
For each component/phase combination specified, all three directions must be specified.
The molecular diffusion option may not be used together with the total dispersion option
(keywords *DISPI_WAT, etc.).
EXPLANATION:
The propagation of injected tracers and chemicals employed in EOR processes are influenced
by the tortuous flow paths and (random) heterogeneities of the porous media in which they
flow. Normally this contribution to dispersion - the broadening and spreading of concentration
fronts - dominates that due to molecular diffusion. Because of this, much useful information on
porous media structure can be gained from the analysis of dispersion.
Dispersion is affected by transmissibility multipliers specified by keywords *TRANSI, etc.
Therefore, if the transmissibility multiplier for a given pair of adjacent blocks is decreased,
then both the convective flow and dispersive flow will decrease accordingly.
In some circumstances these coefficients may be regarded as adjustable parameters that need to
be tuned to give acceptable results. Indeed, laboratory values may not correspond to what is
needed for large grid blocks used in reservoir simulation.
The flux Jijk of component i in phase j in direction k due to diffusion is given by:
J ijk = ( S j D * ij / Fjk ) k ( j X i, j )
where
, Sj
D*ij
Fjk
k ( jx i, j )
=
=
=
=
The coefficients entered here are effective because they include the effect of formation tortuosity
and optionally Sj.
Tortuosity is defined as the ratio of the true path length travelled by a particle flowing through
the medium to the macroscopic distance travelled.
When molecular diffusion is being modelled it may be necessary to run in fully implicit mode
(*AIM *OFF in Numerical Control).
Examples
** Molecular diffusion
*DIFFI_OIL 'C3H8' *CON 0.03
*DIFFJ_OIL 'C3H8' *CON 0.03
*DIFFK_OIL 'C3H8' *CON 0.03
*DIFFI_OIL 'C7H16' *CON 0.02
*DIFFJ_OIL 'C7H16' *CON 0.02
*DIFFK_OIL 'C7H16' *CON 0.02
*DIFFI_GAS 'C3H8' *CON 0.05
*DIFFJ_GAS 'C3H8' *CON 0.05
*DIFFK_GAS 'C3H8' *CON 0.05
Mechanical Dispersivity
*MDSPI_WAT, *MDSPJ_WAT,
*MDSPK_WAT, *MDSPI_OIL, *MDSPJ_OIL, *MDSPK_OIL, *MDSPI_GAS,
*MDSPJ_GAS, *MDSPK_GAS
PURPOSE:
*MDSPI _WAT
*MDSPJ_WAT
*MDSPK_WAT
*MDSPI _OIL
*MDSPJ_OIL
*MDSPK_OIL
*MDSPI _GAS
*MDSPJ_GAS
*MDSPK_GAS
DEFINITIONS:
For each reservoir rock region specified, all three directions must be specified.
The mechanical dispersivity option may not be used together with the total dispersion option
flagged for use by keywords *DISPI_WAT, etc.
EXPLANATION:
The propagation of injected tracers and chemicals employed in EOR processes are influenced
by the tortuous flow paths and (random) heterogeneities of the porous media in which they
flow. Normally this contribution to dispersion - the broadening and spreading of concentration
fronts - dominates that due to molecular diffusion. Because of this, much useful information on
porous media structure can be gained from the analysis of dispersion.
The above keywords allow dispersion coefficients to depend on region, direction and phase.
For simulation, the input dispersion coefficients should be viewed as the true physical
dispersion coefficients minus the numerical dispersion introduced by truncation error.
When mechanical dispersion is being modelled it may be necessary to run in fully implicit
mode (*AIM *OFF in Numerical Control).
Dispersion is affected by transmissibility multipliers specified by keywords *TRANSI, etc.
Therefore, if the transmissibility multiplier for a given pair of adjacent blocks is decreased,
then both the convective flow and dispersive flow will decrease accordingly.
Theory
Dispersion is the mixing of fluids caused by diffusion, local velocity gradients, locally
heterogeneous streamline lengths, and mechanical mixing (Lake, 1989). The mechanical
dispersive flux Jijk of component i in phase j in direction k is given by:
J ijk = S j jk u j k ( j X i, j )
where
, Sj
jk
uj
k ( jx i, j )
=
=
=
With regard to the issue of longitudinal versus transverse dispersivity, it is assumed implicitly
that the predominant flow is in one grid direction throughout the simulation. In tensor terms,
the dispersion tensor is diagonal. The longitudinal value can be assigned to the predominant
flow direction, and the transverse value can be assigned to the other two directions.
However, the flexibility of data entry makes it possible to use variations of this strategy as
well as completely different strategies.
Examples
** Mechanical dispersivity
*MDSPI_OIL *CON 0.03 ** All components in oil phase
*MDSPJ_OIL *CON 0.03
*MDSPK_OIL *CON 0.03
*MDSPI_GAS *CON 0.05 ** All components in gas phase
*MDSPJ_GAS *CON 0.05
*MDSPK_GAS *CON 0.05
*DISPI_WAT, *DISPJ_WAT,
*DISPK_WAT, *DISPI_OIL, *DISPJ_OIL, *DISPK_OIL, *DISPI_GAS, *DISPJ_GAS,
*DISPK_GAS
PURPOSE:
Enter total dispersion coefficients for the desired component and phase.
ARRAY:
*DISPI_WAT
*DISPJ_WAT
*DISPK_WAT
*DISPI_OIL
*DISPJ_OIL
*DISPK_OIL
*DISPI_GAS
*DISPJ_GAS
*DISPK_GAS
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
comp_name
DEFINITIONS:
For each component/phase combination, if there is no total dispersion keyword then the total
dispersion is determined by the corresponding molecular diffusion and mechanical
dispersivity keywords.
CONDITIONS:
For each component/phase combination specified, all three directions must be specified.
The total dispersion option may not be used together with the molecular diffusion option
(keywords *DIFFI_WAT, etc.) or the mechanical dispersivity option (keywords
*MDSPI_WAT, etc.).
EXPLANATION:
The propagation of injected tracers and chemicals employed in EOR processes are influenced
by the tortuous flow paths and (random) heterogeneities of the porous media in which they
flow. Normally this contribution to dispersion - the broadening and spreading of concentration
fronts - dominates that due to molecular diffusion. Because of this, much useful information on
porous media structure can be gained from the analysis of dispersion.
Most generally, dispersion coefficients are found to be region and direction dependent, as
well as being different in different phases for species which partition in multiple phases. This
variation can be captured with the allowed flexible input options. For simulation, the input
dispersion coefficients should be viewed as the true physical dispersion coefficients minus
the numerical dispersion introduced by truncation error.
The total dispersive flux Jijk of component i in phase j in direction k is given by:
J ijk = D ijk k ( j x i, j )
where
Dijk
k ( j x ij )
=
=
Total dispersion is made up of two parts: effective molecular diffusion (which is component
and phase dependent), and mechanical dispersion (which is a property of the reservoir rock),
as follows. Dispersion is affected by transmissibility multipliers specified by keywords
*TRANSI, etc. Therefore, if the transmissibility multiplier for a given pair of adjacent blocks
is decreased, then both the convective flow and dispersive flow will decrease accordingly.
Examples
** Total dispersion with natural fracture grid option
** Component COMB WAT in water phase
*DISPI_WAT 'COMB WAT' *MATRIX
*CON 1e-4
*DISPJ_WAT 'COMB WAT' *MATRIX
*EQUALSI
*DISPK_WAT 'COMB WAT' *MATRIX
*EQUALSI
*DISPI_WAT 'COMB WAT' *FRACTURE *CON 1e-2
*DISPJ_WAT 'COMB WAT' *FRACTURE *EQUALSI
*DISPK_WAT 'COMB WAT' *FRACTURE *EQUALSI
** COMPONENT OXYGEN IN GAS PHASE
*DISPI_GAS 'OXYGEN' *MATRIX
*CON 3e-4
*DISPJ_GAS 'OXYGEN' *MATRIX
*EQUALSI
*DISPK_GAS 'OXYGEN' *MATRIX
*EQUALSI
*DISPI_GAS 'OXYGEN' *FRACTURE *CON 3e-2
*DISPJ_GAS 'OXYGEN' *FRACTURE *EQUALSI
*DISPK_GAS 'OXYGEN' *FRACTURE *EQUALSI
PURPOSE:
*ADSLANG
Denotes that composition dependence is specified via Langmuir isotherm
coefficients. If *TEMP is present, enter a table of coefficients versus T
(maximum of 30 entries).
tad1
Adsorbed moles per unit pore volume at composition cpt (gmol/m3 | lbmol/ft3
| gmol/cm3). Table entries adt must increase by more than 1e-10.
DEFAULTS:
CONDITIONS:
*ADSCOMP and either *ADSLANG or *ADSTABLE must be present for each adsorbing
component.
*ADSCOMP must appear only once for each adsorbing component.
EXPLANATION:
The Langmuir adsorption isotherm gives the adsorbed moles of component MM per unit pore
volume as
ad =
where xnacl is the salinity of the brine, and ca is the mole fraction of comp_name in
phase_des. At high concentrations (large ca) the maximum adsorption is (tad1 + tad2 *
xnacl)/tad3.
Single-Component Phase
If phase_des indicates a single phase (WATER, OIL or GAS) then comp_name must not be
the only component found in that phase. The adsorption model varies that components mole
fraction to achieve a balance of that component's moles in both the reference phase and the
adsorbed phase. When comp_des is the only component in phase_des, its mole fraction is
constant at 1 and the adsorption model cannot work properly.
Table PHASE DISTRIBUTION OF COMPONENTS in the text output file reports on the
component-phase distribution resulting from the *MODEL and K-value data entered. If
phase_des is a single-component phase according to this table, then an error message is
issued when the offending *ADSCOMP keyword is read and the run stops before the table is
printed. In order to see this table you must temporarily remove the offending adsorption data.
Phase Disappearance
The amount of adsorption depends only on phase mole fraction and not the amount of that
phase present. This model is intended for an injected component which achieves a modest
maximum mole fraction in a phase that is always present, such as injected chemical.
Therefore, if phase_des indicates a single phase (WATER, OIL or GAS) then that phase must
not disappear or become small.
PURPOSE:
Assign rock (permeability) dependence of adsorption data for component/phase indicated via
*ADSCOMP.
FORMAT:
*ADSROCK nrock
*ADMAXT admaxt
*ADRT adrt
*ADSPHBLK phase_des
*PORFT porft
*RRFT rrft
ARRAY:
*ADSTYPE
DEFINITIONS:
*ADSROCK nrock
Specify the current rock type number for the keywords *ADMAXT, *ADRT,
*PORFT, *RRFT and *ADSPHBLK. The default is 1. This keyword is
necessary only if you have multiple adsorption rock types.
admaxt
adrt
phase_des
Over-rides the default phase to which the resistance factor calculation is applied
*W
*O
*G
*ALL
Normally, the resistance factor is applied only to the fluid phase which is the
source of the adsorbing component. *ADSPHBLK makes is possible to apply
the resistance factor of another or all fluid phases.
porft
The following defaults apply to all adsorbing components in all adsorbing rock types.
*ADSROCK 1
*ADMAXT 0 (no adsorption)
*ADRT 0 (completely reversible adsorption))
*PORFT 1 (no inaccessible pore volume)
*RRFT 1 (no resistance effect)
*ADSTYPE *CON 1
If keyword *ADSPHBLK is absent, then the resistance factor is applied to the phase which is
the source of the adsorbing component.
CONDITIONS:
Adsorption properties such as component retention, residual resistance factor, inaccessible pore
volume and desorption level depend upon the formation permeability. Reservoir heterogeneities
can cause these properties to vary significantly within a reservoir. Therefore, equilibrium
adsorption is a function of location as well as component concentration and temperature.
This is accounted for by scaling the adsorption obtained from local concentration and
temperature conditions by the factor
ADMAXT(I) / ADmax,T1
where ADMAXT(I) is the maximum adsorption capacity at grid block I, and ADmax,T1 is the
maximum possible adsorption obtainable from the adsorption isotherm of the first input
temperature, that is, first tads in keyword *ADSLANG or *ADSTABLE.
Thus
ad(C,T,I) = ADMAXT(I) * ad(C,T) / ADmax,T1
The reduced porosity for adsorbing component ic, adsorption rock type k, at grid block i is
porft(k,ic) * por(p(i),T(i))
where por is the usual porosity calculated from the block pressure and temperature.
Adsorption or mechanical entrapment can cause blockage which amounts to a reduction in
the effective permeability. This is accounted for by the permeability reduction factors
RKW
RKO
RKG
=
=
=
1 + ( RRF-1 ) * AD(C,T)/ADMAXT
1 + ( RRF-1 ) * AD(C,T)/ADMAXT
1 + ( RRF-1 ) * AD(C,T)/ADMAXT
If there are both multiple adsorbing components and multiple adsorption rock types, then
specify the components in the outer loop and the rock types in the inner loop. Note that
*ADSCOMP for a component must appear only once, but *ADSROCK for a rock type can
appear more than once.
For example, for two adsorbing components and three rock types, use the following.
*ADSCOMP 'Adsorb 1'
*ADSLANG or *ADSTABLE ...
*ADSROCK 1
*ADMAXT ...
*ADSROCK 2
*ADMAXT ...
*ADSROCK 3
*ADMAXT ...
*ADSCOMP 'Adsorb 2'
*ADSLANG or *ADSTABLE
*ADSROCK 1
*ADMAXT ...
*ADSROCK 2
*ADMAXT ...
*ADSROCK 3
*ADMAXT ...
Initial Conditions
*INITIAL
PURPOSE:
*INITIAL indicates the beginning of initial condition values.
FORMAT:
*INITIAL
DEFAULTS:
Required keyword.
CONDITIONS:
This keyword must be the first keyword in the INITIAL CONDITIONS keyword group,
which must come immediately after the ROCK-FLUID DATA keyword group.
The only required keywords in this section are those which define the initial pressure
distribution.
*INITREGION, *INTYPE
PURPOSE:
Specify multiple initialization regions.
FORMAT:
*INITREGION key
ARRAY:
*INTYPE
DEFINITIONS:
*INITREGION key
Introduces an initialization region to which data is assigned. The numerical
key is an integer from 1 to the maximum number of initialization regions.
All regions from 1 to the maximum must be specified and may appear in any
order.
*INTYPE
Assigns initialization regions to grid blocks. The value for each grid block is
one of the key values defined by an *INITREGION keyword. Dump this
grid array to the SR2 via *OUTSRF *GRID *INSETN.
DEFAULTS:
If *INITREGION is absent there is only one initialization region.
If *INTYPE is absent then all blocks use region #1.
CONDITIONS:
All keys assigned to *INTYPE must be defined via *INITREGION.
EXPLANATION:
An initialization region is a collection of grid blocks to which a single set of the following
keywords apply: *REFPRES, *REFDEPTH, *REFBLOCK, *TRANZONE, *DWOC,
*DGOC and *WOC_SW. The following data fragment defines two hydraulically
disconnected regions.
*VERTICAL *DEPTH_AVE
*INITREGION 1
** === Upper member ===
*REFDEPTH 3000 ** ft
*REFPRES 1800 ** psi
*DWOC 3000
*INITREGION 2
** === Lower Member ===
*REFDEPTH 3200 ** ft
*REFPRES 1950 ** psi
*DWOC 3200
*DGOC 3100
*INTYPE *KVAR 5*1 8*2
| *DEPTH_AVE )
*REFPRES ref_pres
*REFDEPTH ref_depth or *REFBLOCK uba
*TRANZONE
DEFINITIONS:
*OFF
Do not perform gravity equilibrium calculation.
*DEPTH_AVE
Perform depth-averaged capillary-gravity vertical equilibrium calculation in
conjunction with *DWOC and *DGOC. See EXPLANATION, below.
*REFPRES ref_pres
Pressure at reference depth (kPa | psi). ref_pres must lie within the allowed
pressure range (see *MINPRES and *MAXPRES). This keyword may be
specified for each initialization region.
*REFDEPTH ref_depth
Reference depth for *REFPRES (m | ft | cm). This depth must lie within the
range of depths contained in the reservoir (a fatal error is issued if not). If the
block has both matrix and fracture, then the fracture is indicated. This
keyword may be specified for each initialization region.
*REFBLOCK uba
Address of reference block in UBA format. The depth of this blocks center is
used as ref_depth. This keyword may be specified for each initialization region.
*TRANZONE
Use water-oil capillary pressure curves to generate a water-gas transition
zone in a water-gas system. In such a zone Sg is above its critical value and
Sw varies from Swcon to 1. For a water/gas system it is assumed that Soirw =
Sorw = 0. This keyword is available only for water/gas systems, that is, where
the same value is specified for the two contact depths *DWOC and *DGOC.
DEFAULTS:
If *VERTICAL is absent, then *VERTICAL *OFF is assumed.
If *TRANZONE is absent, there will be no transition zone for a water/gas reservoir.
User's Guide STARS
CONDITIONS:
*REFPRES and either *REFDEPTH or *REFBLOCK are required with the *DEPTH_AVE
option. If *REFDEPTH and *REFBLOCK appear together for the same initialization region,
*REFBLOCK is ignored.
If *DEPTH_AVE and *PRES appear together, *DEPTH_AVE overrides *PRES.
*VERTICAL *DEPTH_AVE uses information from *DWOC, *DGOC and *WOC_SW, and
will honour information entered via *SW, *SO and *SG.
EXPLANATION:
The capillary-gravity method *DEPTH_AVE of calculating vertical equilibrium is a
conventional approach that is used also in the other CMG simulators.
There are three fluid system options:
a) water/oil/gas is flagged when both *DWOC and *DGOC appear and give unequal
contact depths inside the reservoir.
b) water/oil is flagged when *DGOC is absent, or *DGOC is used to enter a value
that is above the top of the reservoir.
c) water/gas is flagged when both *DWOC and *DGOC appear and give equal
contact depths inside the reservoir (not available when oil is heavier than water).
This method executes in two stages:
1. Build Depth Table: Accounting for both gravity and capillarity, it builds a table of
phase pressure and capillary pressure versus depth, based on over-all rock-fluid data
in the initialization region, phase compositions in one representative block and the
comparison of oil and water phase densities at the WOC. Note that densities are
based on normalized phase compositions which may vary from reservoir values.
2. Assign Block Conditions: The following is done for each block individually by
integration over the block's vertical extent. Oil pressure is assigned from the above
table. In the transition zones around the contact depths saturations are obtained from
the blocks cap pressures curves to maintain gravity/capillary balance. If a cap
pressure curve is zero then the transition zone has zero thickness. The saturations
outside the transition zones depend on the block's critical saturations (see Saturation
Endpoints, below). In obtaining these critical saturations first priority is given to the
individual block's endpoint data entered via *BSWR, etc.; otherwise, they come
from the block's associated rock type whose endpoints may depend on temperature.
In a gas-zone block, the composition is adjusted to satisfy vapour/liquid equilibrium.
For a block in a horizontal hybrid or wellbore grid, oil pressure is not integrated but
is taken at the blocks node (center) depth.
One limitation of this method is that for a relative permeability rock type for which
interpolation will be done between multiple sets (*INTCOMP), only the first set will be used
in the depth table generation. Therefore, the first set should correspond to the initial
conditions (e.g., no surfactant present).
If the two scenarios do not agree upon which phase is heavier, then the *DEPTH_AVE
calculation cannot proceed and the simulation stops. This case happens very rarely, but
indicates a situation in which the bottom phase cannot be determined. When it does happen,
use a reference depth that is closer to, or equal to, the WOC depth. When the reference and
WOC depths are the same, the two scenarios give the same WOC pressure and hence the
same phase density comparison.
When there are non-zero water-oil capillary pressures, the size of the water-oil transition zone
may become very large when the two phase densities are close together. In addition, the
*DEPTH_AVE calculation will fail if the phase density difference changes sign in the wateroil transition zone (e.g., water is heavier than oil at the WOC but oil becomes heavier than
water somewhere in the water-oil transition zone).
Phase Composition Adjustments
To avoid a circular calculation dependence with the *DEPTH_AVE option, the depth table is
generated for a representative but static set of phase compositions. These compositions
correspond to the users input values after passing through the first stage of possible
adjustments (see Stage 1 Adjustments in section INITIAL PHASE MOLE FRACTIONS).
If a gas zone is present and the gas mole fractions sum to less than 1, the gas mole fractions
are normalized to sum to 1 with no change to the oil mole fractions.
Entire Oil Column at Saturated Conditions
When the user specifies that the oil phase composition of a black-oil component set is the
same at all depths, the resulting pressure distribution may cause grid blocks at some depths to
be at the bubble point whereas other blocks are not. This is because K values typically
decrease with increasing pressure and the sum of the resulting gas mole fractions (equal to 1
at bubble point) decreases away from 1 going down the oil column.
In order to get the entire oil column at saturated conditions, follow these steps when oil is
lighter than water. First, use a reference depth greater than the WOC depth. Second, use a
reference pressure that is greater (but not by much) than the maximum pressure expected in
the oil column (some trial and error may be needed). Lastly, use *PBC *CON 0 to assign the
composition of the oil phase at saturated conditions. This combination of data causes each
grid block to start with the largest bubble point pressure, then pressure is decreased for blocks
above the reference depth, after which the Stage 2 gas zone adjustment changes oil phase
composition from over-saturated to saturated conditions for the local pressure.
Saturation Endpoints
The following table shows the endpoint saturations that are assigned to various zones. When
there are oil components (numx > numw from keyword *MODEL), the water zone contains
0.0001 oil saturation to enhance stability.
Water Heavier Than Oil
Zone
Top (gas)
Middle (oil)
Bottom (water)
Sw
Swc
Swc
1
So
Soirg
1-Swc
0
Sg
1-Swc-Soirg
0
0
Sw
Swc
1-Soirw
Swc
So
Soirg
Soirw
1-Swc
Sg
1-Swc-Soirg
0
0
Rock-Fluid Hysteresis
The capillary-gravity method (*DEPTH_AVE) described above uses water-oil and gas-oil
capillary pressures. If the hysteresis option is enabled for water-oil capillary pressure, then
either the drainage curve (via *HYS_DRAINW, the default) or the imbibition curve (via
*HYS_IMBIBW) can be used. If the hysteresis option is enabled for gas-oil capillary
pressure, then either the drainage curve (via *HYS_DRAING, the default) or the imbibition
curve (via *HYS_IMBIBG) can be used.
Special Phase Cases
There are some special phase cases that may need additional data. For example, you may
need to force the reservoir to be entirely in the water zone if there is no oil-based component
(numx = numw from keyword *MODEL). To do this, explicitly specify via *DWOC a
water-oil contact above the top of the reservoir, perhaps with *DGOC also at the WOC or
higher. The same idea applies to forcing the reservoir to be entirely gas zone.
Default Contact Depths and Zones
When *DGOC is absent, GOC is 1 m above the region top. When *DWOC is absent, WOC
is 1 m below the region bottom when water is on the bottom and just below the GOC when
oil is on the bottom. Therefore, when both *DWOC and *DGOC are absent the region is
placed entirely in the oil zone.
*PRES, *TEMP
PURPOSE:
Specify initial reservoir pressures and temperatures.
ARRAY:
*PRES
*TEMP
DEFINITIONS:
*PRES
Initial oil phase pressure in reservoir (kPa | psi). It must lie within the
allowed pressure range (see *MINPRES and *MAXPRES).
*TEMP
Initial temperature in reservoir (C | F). It must lie within the allowed
temperature range (see *MINTEMP and *MAXTEMP).
DEFAULTS:
If *TEMP is absent, then *TEMP *CON temr is assumed (see *TEMR).
CONDITIONS:
*PRES is required if *VERTICAL *DEPTH_AVE is not used.
Initial Saturations
PURPOSE:
Specify initial saturations in reservoir, or override vertical equilibrium saturations.
ARRAY:
*SW
*SO
*SG
FORMAT:
*DWOC dwoc
*DGOC dgoc
*WOC_SW Swbwc
DEFINITIONS:
*SW
Initial water saturation in reservoir. Allowed range is 0 to 1.
*SO
Initial oil saturation in reservoir. Allowed range is 0 to 1.
*SG
Initial gas saturation in reservoir. Allowed range is 0 to 1.
*DWOC dwoc
Water saturation is initialized in the initialization region according to the
water-oil contact depth dwoc (m | ft | cm). Use this keyword only if a water
zone actually exists within the initialization region.
The exact values assigned depend on the initialization option used. For
*VERTICAL *DEPTH_AVE the resulting water saturations will reflect the
water/oil transition zone caused by non-zero Pcow. For *VERTICAL *OFF
the water saturations are assigned as if Pcow = 0. See the EXPLANATION
for *VERTICAL.
*DGOC dgoc
Gas saturation is initialized in the initialization region according to the gasoil contact depth dgoc (m | ft | cm). Use this keyword only if a gas cap
actually exists within the initialization region.
The exact values assigned depend on the initialization option used. For
*VERTICAL *DEPTH_AVE the resulting gas saturations will reflect the
liquid/gas transition zone caused by non-zero Pcog. For *VERTICAL *OFF
the gas saturations are assigned as if Pcog = 0. See the EXPLANATION for
*VERTICAL.
*WOC_SW Swbwc
Water saturation below oil-water contact for an initialization region. When
using *WOC_SW take care to avoid specifying mobile oil in the water zone.
In general, Swbwc should be greater than 1-Sorw.
DEFAULTS:
If *DWOC is absent or dwoc is greater than the depth of the reservoir bottom, then the
initialization region will fall in the oil zone; that is, no water zone exists in the region.
If *DGOC is absent then the GOC, if used, will lie 1 m above the initialization region.
If *WOC_SW is absent for a region then Swbwc = 0.9999 is assumed. This value avoids most
numerical stability issues associated with an absent liquid phase.
Block saturations are assigned values according to the following priority (1 is highest):
1. Explicit assignment via *SW, *SO and *SG.
2. Depth-dependent assignment via *DWOC or *DGOC.
3. The following table.
In the following table 'x' denotes that the saturation is entered. Saturations are normalized
where necessary to get Sw+So+Sg=1. Swc is the critical water saturation obtained from the
block's rock-fluid data which may depend on temperature.
Case
SW
SO
SG
1
2
3
4
5
6
7
8
x
x
x
x
x
x
x
x
x
x
Action
Sg=1-Sw-So
So=1-Sw-Sg
Sw=1-So-Sg
Sg=0,So=1-Sw
Sg=0,Sw=1-So
Sw=Swc,So=1-Sw-Sg
Sw=Swc,Sg=0,So=1-Sw
Check for
Sw+So+Sg=1
Sg<0
So<0
Sw<0
So<0
CONDITIONS:
*DWOC and *DGOC are independent of each other, that is, if you use *DWOC to assign
water saturation then you could use *SG to assign gas saturation. However, it is simpler to be
consistent by using *SW, *SO and *SG together, and *DWOC with *DGOC.
*DWOC and *DGOC refer to depths in the initialization region, and assume that *DEPTH or
*DTOP has been used to explicitly define these depths. However, depth is defined even when
*DEPTH and *DTOP are absent, so be sure that the contact depths are consistent with the
reservoir depths (a warning message is issued if not).
Note that the saturations assigned via *DWOC do not depend on relative permeability
wettability. You may include or omit any number of blocks in the *SW, *SO or *SG
definitions. For example, you may prefer to define *SW for a watered-out channel only and
let the remaining blocks use default Sw.
If there is no water zone then normally *DWOC does not need to appear. However, if the
*DEPTH_AVE option is used to produce a water-oil transition zone from non-zero Pcow, then
keyword *DWOC should be used to specify the bottom of that transition zone.
If there is no gas cap then normally *DGOC does not need to appear. However, if the
*DEPTH_AVE option is used to produce an oil-gas transition zone from non-zero Pcog, then
keyword *DGOC should be used to specify the top of that transition zone.
DEFAULTS:
All initial phase mole fractions default to zero, except for the higher level defaults described
below. Therefore, these keywords are needed only to assign non-zero values.
A higher level default is available for initial water mole fraction on a per-block basis, but
only when there is exactly one aqueous component (see EXPLANATION for *MODEL). If
the water phase exists in a block, every zero value of that aqueous components water mole
fraction is set to 1. This default corresponds to a single water component being the only
component in the water phase, the most common case.
A higher level default is available for initial oil mole fraction on a per-block basis, but only
when there is exactly one oleic component (see EXPLANATION for *MODEL) and *PBC is
absent. If the oil phase exists in a block, every zero value of that oleic components oil mole
fraction is set to 1. This default corresponds to a single oil component being the only
component in the oil phase.
If *MFRAC_OIL is absent and *PBC is used for each oleic component except one, that one
components initial oil mole fraction is obtained by difference.
CONDITIONS:
If the water phase exists in at least one block and there are two or more aqueous components,
*MFRAC_WAT must appear for at least one component. If *MFRAC_WAT appears then
the water mole fractions must sum to one for each block in which the water phase exists.
If the oil phase exists in at least one block and there are two or more oleic components,
*MFRAC_OIL must appear for at least one component. If *MFRAC_OIL appears then the
oil mole fractions must sum to one for each block in which the oil phase exists.
If both liquid phases are absent in at least one block, *MFRAC_GAS must appear for at least
one component which can partition into a liquid phase. Gas mole fractions must sum to one
for each block in which the gas phase is present and liquid phases are not.
*PBC is available only for oleic components, that is, components based in the oil phase.
Also, *PBC is not available when *MASSBASIS is in effect. In addition, the *PBC value for
any block may not exceed the total fluid pressure for that block.
Note that some restrictions apply to K values when *PBC is used. See "Vapour Pressure" in
the EXPLANATION for keyword *KVTABLE.
Both *PBC and *MFRAC_OIL should not be specified for the same component.
EXPLANATION:
These are the tasks performed to obtain a complete set of consistent initial phase mole
fractions:
1. Apply low-level defaults (all set to zero)
2. Read keyword data
3. Perform fine-grid inheritance
4. Apply high-level defaults
5. Obtain derived mole fractions from basic values
6. Make phase consistency adjustments in two stages
In the following, wi, xi and yi are water, oil and gas mole fractions, respectively, of
component i, and Ki and KLi are the corresponding gas-liquid and liquid-liquid K values,
respectively. See EXPLANATION for *MODEL for definitions of aqueous and oleic.
Basic and Derived Mole Fractions
Phase mole fractions are related by K values and so are not independent of each other. Some
initial mole fractions are considered basic while others are derived from K values and the
basic mole fractions. Only basic initial mole fractions need be entered via keyword. Input
data that corresponds to derived initial mole fractions will be ignored. The following table
shows which initial mole fractions are basic.
Aqueous components:
Sw > 0:
Sw = 0:
Basic: wi
Derived: yi = Kiwi, xi = KLiwi
Basic: yi
Derived: wi = yi/Ki, xi = KLiwi
Oleic components:
So > 0:
So = 0:
Basic: xi
Derived: yi = Kixi, wi = KLixi
Basic: yi
Derived: xi = yi/Ki, wi = KLixi
Non-condensable gases:
Sg > 0:
Basic: yi
Stage 1 Adjustments
The first adjustment stage involves the liquid phase constraints. When the water phase is
present, the largest wi of the aqueous components is adjusted to satisfy
= 1.
When the oil phase is present, the largest xi of the oleic components is adjusted to satisfy
= 1.
When both liquid phases are present the adjustment accounts for liquid/liquid solubility.
When liquid/liquid solubility occurs (at least one KLi >0) there will be some adjustment of
liquid phase mole fractions, despite the fact that the input mole fraction data sums to 1.
Be careful with situations where an initial phase property is sensitive to the relative values of
the phase mole fractions. One of those mole fractions may be adjusted, thus changing
significantly the relative mole fractions of the phase and hence its property.
When the gas phase exists and at least one non-condensable gas component has an initial
non-zero yi, the largest yi of the non-condensable components is adjusted to satisfy
= 1.
if water phase exists. For example, group 1 mole fractions may be increased by the factor 1.8
while group 2 mole fractions may be decreased by the factor 0.6. This strategy preserves the
character of in-place gas and oil partitions represented by several components, and works also
for the basic black-oil case (dead oil and solution gas). As with Stage 1, Stage 2 adjustments
account for any liquid/liquid solubility.
Generally, you may enter the composition of undersaturated oil
< 1,
( y
= 1)
>1
= 1,
even when Sg = 0. When there is no oil phase in the gas zone, a similar adjustment is made to
yi alone.
Stage 2 adjustments are possible only if all of the following are true:
1. yi=0 for all non-condensable components
2.
Group 1 xi (e.g., solution gas) is non-zero
3.
Group 2 xi (e.g., dead oil) is non-zero
4. Ki do not change due to composition dependence during adjustment, for
example, both old and new key compositions are below xlow (see
*KVKEYCOMP).
User's Guide STARS
*CONC_SLD
PURPOSE:
Specify initial solid concentration.
ARRAY:
*CONC_SLD comp_name
DEFINITIONS:
*CONC_SLD
comp_name
Quoted component name. The component must be a solid component, as
determined by *MODEL.
DEFAULTS:
For each solid component, if *CONC_SLD is absent then that components initial
concentration is zero.
EXPLANATION:
Keyword *CONC_SLD is a single-component variation of the standard grid array input data
type.
Example:
If fuel deposition is 2 lb per cubic foot, porosity
is 30%, and coke molecular mass is 13, then
Ccoke =
thermal or isothermal
Required Data
There are no required or mandatory keywords in this section. Each keyword has a default
value which can be used. If no keywords from this section are used, then the *NUMERICAL
keyword may be omitted.
Critical Keyword Ordering
There is no critical keyword ordering.
Use of Defaults
The defaults used in the numerical solution techniques provide a robust and efficient solution
to most simulation problems. You should override the defaults only if you have a good
understanding of the solution methods involved. Inappropriate overriding of the defaults may
result in the use of much more CPU time than would otherwise be required for a problem.
For detailed explanations of the matrix solution controlling keywords (*NORTH, *SORDER,
*PIVOT, *SDEGREE, *PRECC, *ITERMAX), please refer to the AIMSOL TECHNICAL
MANUAL.
Usage in Other Sections
Most of the keywords in this section may be used also in the Well and Recurrent Data section:
May Appear in
Recurrent Data
*MAXSTEPS
*DTMAX
*CONVERGE
*MATBALTOL
*NEWTONCYC
*UPSTREAM
*PVTOSCMAX
*UNRELAX
*NORM
*NUMTYPE
*SDEGREE
*NORTH
*ITERMAX
*PRECC
*SORDER
*PIVOT
*NCUTS
*AIM
*NUMSET
*DTMIN
*MAXSTEPS
PURPOSE:
Specify the maximum allowed timestep number.
FORMAT:
*MAXSTEPS
nstop
DEFINITIONS:
nstop
Timestep number at which the simulation is stopped, unless it stops before
that from other causes such as *STOP. Integer nstop must be non-negative.
The command line argument '-maxsteps nstop' is the same as *MAXSTEPS
nstop. The command line argument '-onestep' is the same as *MAXSTEPS
1.
DEFAULTS:
*MAXSTEPS 9999
EXPLANATION:
See How To Do a Restart in the Tutorial section.
*MAXSTEPS is useful when you are very unsure how much time a new data file will take to
run. It is also useful for running your data for 1 time step for debugging purposes.
Example:
** Stop the run at time step #100
*MAXSTEPS 100
*DTMAX,
*DTMIN
PURPOSE:
Specify the maximum and minimum allowed time-step sizes.
FORMAT:
*DTMAX max_time_size
*DTMIN min_time_size
DEFINITIONS:
max_time_size
The maximum time-step size allowed (day | day | min). The allowed range is
min_time_size to 1020 days.
min_time_size
The minimum time-step size allowed (day | day | min). The allowed range is
10-20 days to max_time_size.
DEFAULTS:
*DTMAX 1035 (days)
*DTMIN 10-8 (days)
CONDITIONS:
These keywords may be located in the NUMERICAL METHODS CONTROL keyword
group as well as Recurrent Data.
The condition min_time_size < max_time_size is always enforced.
EXPLANATION:
If the time-step size calculated by the automatic time-step selector is larger than
max_time_size, it is set to max_time_size.
The time-step size is always automatically adjusted so that a timestep will end exactly at the
time specified by a *TIME or *DATE keyword in recurrent data.
Examples:
** Limit the maximum time-step size to half a day
*DTMAX 0.5
*TFORM, *ISOTHERMAL
PURPOSE:
Indicate formulation options of numerical model.
FORMAT:
*TFORM ( *SXY | *ZH | *ZT )
*ISOTHERMAL
DEFINITIONS:
*SXY
Standard use of phase saturations, phase mole fractions, and temperature as
primary variables. Phase appearance or disappearance causes variable
switching.
*ZH
Isenthalpic flash algorithm. Energy flow equation is aligned with system
fluid enthalpy Hsys as primary variable and temperature is viewed as a
function of pressure, global composition and Hsys.
*ZT
Temperature flash algorithm. Energy flow equation is aligned directly with
temperature. This approach is appropriate to thermal flow problems with
wide-boiling systems (e.g., hot/cold water problems with no steam
appearance, or combustion problems with large concentrations of noncondensable gases). This approach is equivalent to the flash associated with
compositional simulation.
*ISOTHERMAL
Flags the run as isothermal, that is, the energy equation will not be solved
and block temperatures will not change. Non-uniform initial temperatures are
permitted. Available only with *ZT.
DEFAULTS:
*TFORM *SXY
CONDITIONS:
The *TFORM option and *ISOTHERMAL setting may not be changed at a restart. This
implies that a thermal run may not be restarted from an isothermal run.
Numerical Set
*NUMSET, *NUMTYPE
PURPOSE:
Define and assign multiple numerical sets.
FORMAT:
*NUMSET key
ARRAY:
*NUMTYPE
DEFINITIONS:
key
Numerical set key. *CONVERGE and *NORM listed below will be
assigned to this numerical set number.
*NUMTYPE
Enter a numerical set key for each grid block. Only 1 and key values that
have been defined are allowed.
DEFAULTS:
The default numerical set key value is 1. *NUMSET is needed only to define multiple
numerical sets.
The default key assigned to each block is 1. *NUMTYPE is needed only to assign multiple
numerical set keys to the grid.
Unless you have multiple numerical sets, you do not need *NUMSET or *NUMTYPE.
When *CONVERGE and/or *NORM is used in the Recurrent Data Section without
*NUMSET, those values are applied to the numerical set specified by the last appearance of
keyword *NUMSET.
CONDITIONS:
This keyword must be in the Numerical Section keyword group.
EXPLANATION:
Different Numerical Sets may be needed when different parts of a reservoir need different
*CONVERGE and/or *NORM values. This may be useful in heterogeneous reservoirs,
fractured reservoirs or when Discretized Well Model is used. For example fracture *NORM
and/or *CONVERGE may be different from matrix values. Note that *CONVERGE
*TOTRES applies to the grid as a whole and so cannot be assigned different values in different
regions.
Example:
*NUMSET 1
*CONVERGE *PRESS 2.0 *TEMP 3.0
*NORM *PRESS 400.0 *SATUR 0.3
*SATUR
0.05
*NUMSET 2
*CONVERGE *PRESS 1.0 *TEMP 3.0
*NORM *PRESS 200.0 *SATUR 0.35
*SATUR
0.05
*ZAQ x
Normal change in aqueous component global mole fraction. The suggested
range is 0.05 to 4.
DEFAULTS:
*NORM
*PRESS
*SATUR
*TEMP
*Y
*X
*W
*ZO
*ZNCG
*ZAQ
*FLUIDH
500
0.2
30
0.2
0.2
0.2
0.2
0.2
0.2
2500
**kPa
** C deg
** J/gmol
CONDITIONS:
*TEMP is not used with *ISOTHERMAL.
*ZO, *ZNCG, *ZAQ and *FLUIDH are not used with *TFORM *SXY which is the default.
*Y, *X and *W are not used with the *ZT or *ZH options of *TFORM.
*FLUIDH is used only with *TFORM *ZH.
EXPLANATION:
This keyword specifies the typical changes in the basic variables during a timestep. These are
used for automatic time-step selection.
Examples:
*NORM *PRESS 145.0 *SATUR 0.08
D(I )
1.75 DNORM (I )
N
MAX
+ 0.75 * DNORM (I )
MIN OVER I
where D(I)N-max is the maximum change in each basic variable during the previous time
step.
Numerical Sets
Different values of *NORM can be assigned to different regions of the reservoir. See
*NUMSET and *NUMTYPE.
x
*LOOSER
*LOOSE
*NORMAL
*TIGHT
*TIGHTER
Value of x used
Specified value
1.0e-1
1.0e-2
1.0e-3
1.0e-4
1.0e-5
*MAXRES
Convergence is checked by comparing scaled equation residuals with the
specified tolerances, on a per-block basis. The suggested range of x is 1e-7
to 2. Smaller values of x will result in smaller material balance errors, but at
the cost of more iterations. Large values of x will defeat residual checking as
a convergence criterion. Use this keyword to disable convergence checking
based on averaging over the entire grid.
Form
*MAXRES x
*MAXRES 'comp_name' x
*MAXRES *ENERGY x
*MAXRES *PHASEQ x
applies x to
all equations
fluid component's flow equation
(see *COMPNAME)
energy flow equation
phase equilibrium constraint equation
(see *TFORM)
Numerical Methods Control 465
*VARONLY
Only the changes in variables are used as the convergence criterion. Use this
keyword to over-ride the default convergence method *TOTRES.
*PRESS x
Pressure tolerance (kPa | psi). The suggested range is 1 kPa to 100 kPa.
*SATUR x
Saturation tolerance. The suggested range is 0.0001 to 0.1.
*TEMP x
Temperature tolerance (C deg | F deg). The suggested range is 0.01 C deg to
10 C deg. Note that this quantity is a temperature difference, and so
conversion between C (or K) and F (or R) involves only the factor 1.8.
*Y x
Gas mole fraction tolerance. The suggested range is 0.0001 to 1.
*X x
Oil mole fraction tolerance. The suggested range is 1e-7 to 1.
*W x
Water mole fraction tolerance. The suggested range is 1e-7 to 1.
*BHP x
Well bottomhole pressure tolerance (kPa | psi). The suggested range is 1 kPa
to 100 kPa. Use of *WELLRES is recommended over this subkeyword to
control deviations from specified well rates.
*ZO x
Oleic component global mole fraction tolerance. Also applies to water
component. The suggested range is 0.0001 to 0.1.
*ZNCG x
Non-condensable gas global mole fraction tolerance. The suggested range is
1e-7 to 1.
*ZAQ x
Global mole fraction tolerance of aqueous component other than water. The
suggested range is 1e-7 to 1.
*FLUIDH x
Enthalpy tolerance, used only for *TFORM *ZH.
*WELLRES x
Relative tolerance of residual of each well rate constraint equation. The
suggested range of x is 1e-5 to 1. This method is recommended over *BHP
for controlling deviations from the target rate.
If the primary iterating variables have converged, and the residual of a well
rate constraint equation exceeds x times the target rate, another Newton
iteration is done. Smaller values result in smaller deviations from the
specified well rates, but at the cost of more iterations. Large values of x will
defeat residual checking as a convergence criterion.
For example, x = 0.001 means that the calculated rate after convergence will not
differ from the specified target rate by more than 0.001 of the target rate value.
*MATBALTOL x
Maximum allowed increase in the relative material balance error allowed
over a time step. The allowed range is 1e-7 to 1.
This is the maximum amount by which the relative material balance error is
allowed to increase in each time step. If the *CONVERGE criteria are
satisfied, and the material balance error over the time step exceeds x, another
Newton iteration is done.
Smaller values result in a smaller material balance error at the end of the run,
at the cost of more iterations. Smaller values also may cause excessive
iterations and timestep cuts if oscillating phase switch flags cause the
material balance error to exceed x, in which case a larger x is recommended.
DEFAULTS:
Of the three methods available for convergence control of the fluid flow equations
(*TOTRES, *MAXRES, and *VARONLY), *TOTRES *LOOSE is the default.
The default variable tolerances are (see EXPLANATION, below):
*CONVERGE
*MATBALTOL
*PRESS
*SATUR
*TEMP
*Y
*X
*W
50
0.05
5
0.05
0.05
0.05
**kPa
*BHP
*ZO
*ZNCG
*ZAQ
*FLUIDH
*WELLRES
0.0001
0.05
0.05
0.05
500.0 **J/gmol
0.001
If *MAXRES is present but x is absent, these internal default values are used. If *MAXRES
eqn_id x is used, then each equation not referenced uses its internal default.
0.5
5e-3
0.05
5e-5
1.5
0.05
If *TOTRES is in effect and *MAXRES is absent, the criteria values for maximum scaled
residual for each block are 100 times the *TOTRES criteria values.
CONDITIONS:
*TEMP is not used with *ISOTHERMAL.
*ZO, *ZNCG and *ZAQ are not used with *TFORM *SXY (which is the default *TFORM
option).
*SATUR, *Y, *X and *W are not used with the *ZT or *ZH options of *TFORM.
*TOTRES, *MAXRES and *VARONLY are mutually exclusive. If more than one of these
keywords appears, then the one that appears last in the data file is used.
EXPLANATION:
There are two basic types of convergence checking for grid-block equations: variable
changes and equation residuals.
Variable Changes
Triggered with subkeyword *VARONLY, this option specifies that convergence is achieved
when the changes of all iterating and secondary reservoir variables (e.g., pressure) for all grid
blocks over a Newton iteration are smaller than the corresponding tolerances. The default
values of these tolerances are quite large, so use subkeywords like *PRESS to over-ride the
defaults. *VARONLY corresponds to the default convergence control method used by
STARS before version 2000. This method is recommended only for certain specific purposes
like testing and debugging convergence difficulties.
Equation Residuals
When subkeyword *VARONLY is absent, convergence is achieved when the scaled gridblock equation residuals are smaller than corresponding tolerances. There are two kinds of
residual checking, per-block and grid-average, each with a separate set of tolerances. For
per-block checking, the comparison of scaled equation residual to per-block tolerance is done
for each grid block separately. For grid-average, both the unscaled residual and scale factor
for each equation (component, energy, etc.) are summed over the entire grid, and the resulting
scaled average value is compared to the grid-average tolerance.
Subkeyword *MAXRES causes residual convergence checking to be done for each equation
on a per-block basis only. No grid averaging is done. The *MAXRES keyword causes perblock tolerances to be defaulted as show above and then over-ridden with input values. This
is called the maximum method because the entire equation set is not deemed converged
until the maximum residual over the entire grid satisfies its tolerance.
468 Numerical Methods Control
To use *TOTRES but non-default per-block tolerances for water and CO2, use
*CONVERGE *MAXRES 'Water' x2
*MAXRES 'CO2' x3
*CONVERGE *TOTRES *LOOSE
To use uniform value x1 except for the flow equations of water and CO2, use
*CONVERGE *MAXRES x1
*MAXRES 'Water' x2
*MAXRES 'CO2' x3
Pseudo-Infinite Block
One way to model a constant-pressure boundary (e.g., aquifer) is via blocks with very large
volumes. This method was used before proper aquifer models became available, and may
still be used to bypass a restriction or undesirable behaviour of an aquifer model. However,
this technique may have subtle negative side effects and should be used only with great
caution.
The *TOTRES option compares the specified tolerance to a scaled residual that is averaged
over the entire reservoir volume. When large blocks are added to the reservoir this average
can be dominated by the new reservoir volume, effectively disabling *TOTRES and allowing
convergence to stop before normal blocks are converged. Therefore, when such large blocks
are used it may be better to use *MAXRES or *VARONLY.
Numerical Sets
Different convergence tolerances can be assigned to different regions of the reservoir, with a
few exceptions. *TOTRES applies to the reservoir as a whole and so cannot be assigned
different values to various regions. Also, keyword *VARONLY will switch the entire grid to
checking convergence using variable changes. All variable tolerances like *PRESS can be
assigned different values to various regions. See *NUMSET and *NUMTYPE.
*NEWTONCYC
PURPOSE:
*NEWTONCYC is used to specify the maximum number of Newtonian cycles.
FORMAT:
NEWTONCYC maxn
DEFINITIONS:
maxn
An integer indicating the maximum value. The allowed range is 1 to 30.
DEFAULTS:
*NEWTONCYC 15
EXPLANATION:
This keyword specifies the maximum number of Newton iterations allowed in a timestep for
solution of the basic reservoir equations. If a solution within the convergence tolerances is not
achieved, the simulator will reduce the timestep size and repeat the timestep.
Examples:
*NEWTONCYC 8
*UNRELAX
PURPOSE:
*UNRELAX controls the under relaxation option.
FORMAT:
*UNRELAX urpm
DEFINITIONS:
urpm
A real number to specify the under relaxation value. The allowed range is -1
to 1.
=1
<0
>0
No under-relaxation is done.
An under-relaxation parameter is calculated automatically. This
option usually performs better than URPM > 0. The maximum
value used after the third Newton iteration is -URPM. If this
option is chosen, then start with a value of -1. -URPM < 0.5 is
not recommended.
Under-relaxation parameter employed by the model after the
third Newtonian iteration to aid convergence. This option should
be used sparingly, that is, use values of URPM as close as
possible to 1. This option will improve overall convergence only
for certain types of difficult problems. Values of URPM < 0.5
are not recommended.
DEFAULTS:
*UNRELAX -1
EXPLANATION:
The under relaxation parameter is employed by the model after the third Newtonian iteration
to aid convergence. It is particularly useful for difficult problems. Values of 0.5 are
recommended when the simulator consistently fails to converge. Use of this option may slow
down the simulation if it is not required.
Example:
*UNRELAX 0.5
*UPSTREAM
PURPOSE:
*UPSTREAM controls the upstream calculation option.
FORMAT:
*UPSTREAM
(*NLEVEL)
(*KLEVEL)
DEFINITIONS:
*NLEVEL
Densities and capillary pressures are the N-level values, from the beginning
of the timestep. Use of this option usually results in less oscillations in
upstream flags.
*KLEVEL
Densities and capillary pressures are the K-level values, which are the most upto-date. Use of this option may result in more oscillations than *NLEVEL, but
may be necessary in preventing certain types of unphysical results. This value
is recommended for dual porosity options.
DEFAULTS:
*UPSTREAM *NLEVEL
EXPLANATION:
The upstream flow direction is evaluated at (1) the beginning of the timestep, (2) whenever a
phase appears or disappears, or (3) whenever a well is shut in or opened.
The upstream direction depends upon the potentials of the fluid phases which are functions of
pressure, temperature, capillary pressure (and hence saturations) and density (and hence
composition). The pressure and temperature used are always the most up-to-date values (K
level). This keyword determines what value of densities and capillary pressures to use.
(*ON/*OFF)
DEFINITIONS:
*ON
Use wellbore block properties to calculate wellbore-reservoir flow when the
wellbore block is an upstream block.
*OFF
Use downstream total mobility (reservoir gridlock mobility) when the
wellbore block is an upstream block.
DEFAULTS:
* DW-RES-UPSTREAM *OFF when the keyword is missing and DW-RES-UPSTREAM
*ON when only DW-RES-UPSTREAM is present.
EXPLANATION:
Flow between a Discretized wellbore (DW) block and a reservoir block when the
*WELLBORE keyword is used may be calculated two different ways. This calculation applies
only when the DW block is an upstream direction, i.e. fluid is injected into a reservoir.
1. with *ON keyword DW block properties are used to evaluate the flow
rate = transmissibility*delta P * DW block mobility
With this treatment the steam quality injected into the reservoir will be the flowing
fraction
Quality = gas density*gas mobility/(gas density*gas mobility + water
density*water mobility)
2. with *OFF keyword the total mobility of the reservoir block is used to evaluate
the flow
rate = transmissibility*delta P * total reservoir block mobility
With this treatment the steam quality injected into the reservoir will be the in-situ
fraction
Quality = gas density*gas saturation/(gas density*gas saturation + water
density*water saturation)
Flow between a Sink/Source injection well and a reservoir is calculated also in this
fashion (see Appendix A).
*SMALL-RATES
PURPOSE:
Over-ride the default cut-off for small well rates.
FORMAT:
*SMALL-RATES
( *OFF | *ON )
DEFINITIONS:
*OFF
*ON
DEFAULTS:
If the total reservoir pore volume is greater than 104 m3 (3.5105 ft3, 1010 cm3) then the default
is *OFF, otherwise the default is *ON.
EXPLANATION:
A computed well rate that is effectively zero may be very small but non-zero because of
numerical round-off and iterative convergence effects. In several tasks in STARS a zero well
rate is significant, such as for detection of completions and wells that should be shut in. For
these tasks the well rate is set to exactly zero if the computed rate is smaller in magnitude than
the cut-off rate. In other words, the cut-off rate determines what rates are close enough to zero
to be considered as zero.
Normal field-scale simulations can use the larger cut-off rate without problems. However,
simulations at smaller scales need to use a lower cut-off rate so that significant rates are not
artificially truncated. This is especially true of simulations working at pore scales (micrometer)
or over geological time periods (millions of years).
Zero well rates are used extensively to determine if well performance reporting is needed. In
the diary (.log file) output a zero rate is reported with a blank space but a very small non-zero
rate may appear as a single 0.
Orthogonalization (Optional)
*NORTH
PURPOSE:
*NORTH controls the maximum number of orthogonalizations to be performed before
resetting for the iterative solution method.
FORMAT:
*NORTH num
DEFINITIONS:
num
An integer defining the maximum number of orthogonalizations allowed.
DEFAULTS:
*NORTH 30
EXPLANATION:
A "matrix failure" occurs when the number of matrix solver inner iterations is cut off (see
*ITERMAX) before the desired residual reduction is reached. In general, simulations with
grids and reservoir properties that are not too far from uniform should have almost no matrix
failures. However, very non-uniform grids and/or properties may result in a significant
amount of matrix failures. Increasing *NORTH above the default can reduce the frequency of
these matrix failures.
Increasing *NORTH can increase the CPU cost of each solver iteration, but a reduced
number of iterations should result in a net savings. There is a modest cost in storage with
increased *NORTH.
There is no advantage in specifying a value for *NORTH larger than the value of *ITERMAX.
Examples:
A 1000-block simulation with uniform block sizes and permeabilities probably can use the
default.
A 40000-block simulation with widely varying block thicknesses, and permeabilities in
adjacent blocks different up to a factor of 1000, may use *NORTH 50.
*SORDER
PURPOSE:
*SORDER controls the ordering of equations in ILU factorization.
FORMAT:
*SORDER (*NATURAL | *REDBLACK | *RCM | *RCMRB)
DEFINITIONS:
*NATURAL
Use natural ordering.
*REDBLACK
Red-black reduced system preconditioning is used, similar to a D4 reordering
scheme. Elimination is performed on the reduced system of grid blocks
labelled "black", saving storage and computer time. Use of the nine-point
option will result in more "black" blocks and less savings.
*RCM
Reverse Cuthill-Mckee ordering is used. The ordering algorithm attempts to
minimize the bandwidth in the L & U factors. Compared to *NATURAL,
use of this scheme can result in significant CPU savings for higher values of
degree, especially *GAUSS. Savings are more modest when a low value of
IDEG is used, since matrix fill is small. For a regular grid with no wells and
no null blocks this method is equivalent to D2 ordering.
*RCMRB
Use reverse Cuthill-Mckee ordering, then red/black ordering. For a regular
grid with no wells and no null blocks this method is equivalent to D4
ordering.
DEFAULTS:
*SORDER *REDBLACK for 2D and 3D grids over 20 blocks, otherwise *SORDER
*NATURAL.
*SDEGREE
PURPOSE:
*SDEGREE controls the maximum degree of fill terms used in the factorization.
FORMAT:
*SDEGREE (max_deg | *GAUSS)
DEFINITIONS:
max_deg
An integer to specify maximum degree of fill terms. It must be positive.
*GAUSS
Keyword specifying that Gaussian elimination be used.
DEFAULTS:
*SDEGREE 1 for 2D and 3D grids over 20 blocks, otherwise *SDEGREE *GAUSS.
EXPLANATION:
This keyword controls the maximum degree of fill terms used in the calculation of the LU
factors via incomplete Gaussian elimination, where max_deg is an integer. A value of
max_deg greater than the matrix bandwidth or use of the *GAUSS keyword results in
complete Gaussian elimination.
In general, larger values of max_deg may be required for more difficult problems (extreme
permeability contrasts, or difficult thermodynamic problems such as in-situ combustion).
Larger values of max_deg result in more calculations and a longer simulation run time.
Examples:
** Use Gaussian elimination
*SDEGREE *GAUSS
*PIVOT
PURPOSE:
*PIVOT controls the diagonal sub-matrix inversion pivot stabilization.
FORMAT:
*PIVOT (*ON | *OFF)
DEFINITIONS:
*ON
Pivot stabilization is performed.
*OFF
No pivot stabilization is performed.
DEFAULTS:
*PIVOT *OFF
*PIVOT is the same as *PIVOT *ON.
EXPLANATION:
This keyword selects the pivot stabilization of diagonal sub-matrix inversion.
Examples:
** Use pivot stabilization.
*PIVOT *ON
*ITERMAX
PURPOSE:
*ITERMAX is used to specify the maximum number of iterations allowed in the Jacobian
matrix solution routine.
FORMAT:
*ITERMAX maxn
DEFINITIONS:
maxn
An integer indicating the maximum value. The allowed range is 1 to 300.
DEFAULTS:
*ITERMAX 30
*AIM
PURPOSE:
Indicate adaptive implicit option.
FORMAT:
*AIM ( *OFF | *STAB (*BACK freq) | THRESH frnorm )
DEFINITIONS:
*OFF
All blocks will be treated in a fully implicit manner.
*STAB
Switching blocks between adaptive and fully implicit is done using a stability
criterion. This is the recommended AIM method.
*BACK freq
The frequency of checking for backward switching (implicit to explicit) for
stability criteria option *STAB. Parameter freq is a positive integer. The
backward checking will be done for each time step whose number is evenly
divisible by freq.
*THRESH frnorm
Parameter required for the threshold-type adaptive -implicit switching
criterion. The allowed range is to 0 to 1. The recommended AIM method is
*STAB.
For steam problems FRNORM = 0.5 is typical. For combustion problems
with vigorous reactions, experience has shown that simulator performance is
very sensitive to the threshold values frnrm*dnorm. Larger values of
FRNORM will result in more blocks using the IMPES method, with
decreased CPU per iteration but also decreased stability (more iterations).
Use *AIMSET to reset at well changes.
DEFAULTS:
*AIM *OFF
*BACK 20
Frnorm 0.5 for *AIM *STAB see Explanation
CONDITIONS:
The *AIM option should not be used with multi-component water phase.
EXPLANATION:
When *AIM *STAB keyword is used, STARS uses a stability criterion check ONLY at an
implicit front (boundary between explicit and implicit grid blocks). If the stability criterion is
violated then an explicit block switches to an implicit block. Sometime, it happens that some
explicit blocks (e.g. blocks close to faults, etc.) would violate the criterion at other locations
482 Numerical Methods Control
outside of the implicit front. Stability check is CPU intensive and therefore the whole
reservoir is checked also with the threshold criterion. If it is necessary to change the default
value of frnorm, specify first the *THRESH frnorm with the required value of frnorm and
then the *AIM *STAB.
Examples:
*AIM *STAB
** Backward switching frequency is 20
*AIM *STAB *BACK 5
CONDITIONS:
1. maxpres must always be greater than minpres, and
2. maxtemp must always be greater than mintemp.
EXPLANATION:
Pressure and temperature are compared to their upper and lower limits in the following
places:
1. Initial pressure (*PRES and *REFPRES) and temperature (*TEMP).
2. Well operating condition from *OPERATE *BHP, *TINJW and *PINJW.
3. Well BHP altered with *ALTER.
4. Well and block pressures at the end of each non-linear iteration.
*MAXLAYPRE
PURPOSE:
*MAXLAYPRE controls the pre-elimination of wells before iterative matrix solution.
FORMAT:
*MAXLAYPRE nlypre
DEFINITIONS:
nlypre
A positive integer specifying the maximum number of completion layers
allowed for a well before pre-elimination of that well is defeated.
DEFAULTS:
If keyword *MAXLAYPRE is absent, then nlypre is 3.
EXPLANATION:
Pre-elimination of well completion layers amounts to applying Gaussian elimination to the
well equations. For wells with layers consisting of up to three contiguous blocks, this
elimination induces little or no fill in addition to fill associated with the block solution. The
default nlypre = 3 reflects this fact, since completion layers usually are contiguous.
A well with more than three layers will induce extra fill of around (nly-1)*(nly-2) submatrices each of neq*neq, where nly is number of completion layers and neq is number of
equations per block. For large nly this extra fill can be very significant, up to or exceeding the
fill associated with the blocks, so well equation pre-elimination should not be done.
When pre-elimination is not done, a well equation and its primary iterating variable pass
through to the iterative matrix solution. In this case a well equation enjoys the benefits of less
fill and lower CPU associated with the iterative methods. The only disadvantage over preelimination is a possible reduction in robustness, but this is rare.
Note that for versions before 96, pre-elimination was done for all cases. For version 96 and
after pre-elimination can be forced by using a large value for nlypre.
*NCUTS
PURPOSE:
Control the number of timestep size cuts allowed in a timestep before the run aborts.
FORMAT:
*NCUTS value
DEFINITIONS:
value
An integer specifying the maximum number of cuts allowed.
DEFAULTS:
If *NCUTS is absent then *NCUTS 7 is assumed.
EXPLANATION:
When convergence at a certain timestep size fails, the time step size is reduced and
convergence is attempted again. It is normal to experience some convergence failures,
depending on what process is being simulated. Sometimes a major adjustment of conditions
is needed at some point in time, such as steam breakthrough. Several cuts may be needed and
then the simulation proceeds with few cuts.
However, in some circumstances convergence cannot proceed without some intervention by
the user. This is characterized by many convergence failures in a single time step. This case is
separate from the "normal" case by the number of convergence failures in one time step.
Keyword *NCUTS lets the user adjust this criterion to suit the expected level of difficulty of
the run.
However, for most types of convergence failure, reduction of timestep size below a certain
minimum value (1.0e-8 days) is not helpful. Therefore, increasing *NCUTS above the
default value rarely helps since the run will stop if the minimum timestep size is violated.
*SOLVER
PURPOSE:
Choose which solver to use, AIMSOL or PARASOL (In order to use PARASOL, the parallel
computing licensing feature must be active).
FORMAT:
*SOLVER (*AIMSOL | *PARASOL)
DEFINITIONS:
*AIMSOL
CMGs non-Parallel Iterative Solver.
*PARASOL
CMGs Parallel Iterative Solver.
DEFAULTS:
If *SOLVER is absent then *AIMSOL is assumed.
EXPLANATION:
This keyword specifies which linear-equation solver to use. *SOLVER *PARASOL is
required in order to solve the linear system of equations in parallel. *DPLANES is required
to solve the Jacobian problem in parallel.
The CMG Launcher control parallel STARS with these command line arguments:
Command-line argument
Equivalent to keywords
-doms
*DPLANES
(overrides *DTYPE and *DPLANES)
-parasol n
*SOLVER *PARASOL
*PPATTERN *AUTOSLAB n
*PNPROSL n
*PNTHRDS m
-aimsol
*SOLVER *AIMSOL
(overrides any PARASOL keywords)
where n is an integer greater than 0, representing the desired target number of threads and m
is the minimum of n and the number of logical CPU's.
*AUTOPSLAB inum
( ipatrn | *PARTITION | *PPARTITION | *GPARTITION |
*APARTITION )
DEFINITIONS:
*AUTOPSLAB inum
inum is the target number of level 1 classes. There are inum-1 separating
plane classes plus 0 or 1 class containing demotions. The direction taken is
such that the planes do not cut the dominant transmissibility direction. Thus
inum corresponds to the target number of processors desired.
ipatrn
ipatrn can have the values 0 to 9. Figure 10.1 provides a geometrical
representation of different classes under ipatrn 1 through 7. Table 10.1
summarizes the class distribution in the ipatrns. Column 5 of the table shows
the number of level-1 classes under each ipatrn, corresponding to the target
number of threads desired.
Note: Unlike *AUTOPSLAB, the specification under *PPATTERN using
ipatrn does not adjust the partitioning automatically due to presence of null
blocks. The user is expected to select a particular ipatrn based on the
reservoir geometry, dominant flow direction, and distribution of null blocks
in the reservoir.
*PARTITION
'class partitioned' '1st major new class' '2nd major new class' 'separator class'
(*I|*J|*K) ind
Each line directs the partitioning of the first class into two major and one
separator class, with the original class no longer existing after the partition.
The partitioning is planar, with the separator parallel to the I, J, or K axis as
specified, with index value ind. Initially there is the one class 'FIELD'; each
line creates three new classes and destroys one, for a net gain of two classes
per line. The names serve only to identify the classes while the pattern is being
created; they are not referred to thereafter. In principle any number of lines
may be entered after *PPATTERN *PARTITION;
Current limit is 64 lines per *PPATTERN keyword.
*PPARTITION
'class partitioned' '1st major new class' '2nd major new class' 'separator class'
:
Like *PARTITION but simulator decides automatically what direction plane
to use and where to put it. The decisions are made to equalize class sizes as
much as possible and to minimize the size of the separator class.
*GPARTITION
'class partitioned' '1st major new class' '2nd major new class' 'separator class'
:
Uses Alan George's rooted-level-structure method to partition 'class
partitioned' into 3 parts, 2 large classes and a separator. Like *PPARTITION
but doesn't use planes.
*APARTITION
'class partitioned' '1st major new class' '2nd major new class' 'separator class'
:
"agglomeration partition" -- like *GPARTITION but provides classes
somewhat more nearly equal in size, but somewhat less regular in shape.
Example:
The 3-class, 2 level partitioning given in the initial description of the PPATTERN
keyword can be realized either with
*PPATTERN *AUTOPSLAB 2
or
*PPATTERN 2
or
*PPATTERN *PARTITION
'FIELD' 'Class 1' 'Class 2' 'Class 3' *I 51
DEFAULTS:
Optional keyword. If *PPATTERN is absent then *AUTOPSLAB 2 is assumed.
CONDITIONS:
This keyword is used only with *SOLVER *PARASOL.
EXPLANATION:
The parallelization of the solver requires the partitioning of the reservoir into disjoint sets of
blocks (classes). The classes are further organized into levels.
There must be no flow between blocks which are in different classes at the same level.
Example:
Consider a 101 x 50 x 10 reservoir.
Consider partitioning it into 3 classes as follows:
Class 1:
I = 1:50
J = 1:50
K = 1:10;
Class 2:
I = 52:101
J = 1:50
K = 1:10;
Class 3:
I = 51
J = 1:50
K = 1:10.
The large classes, 1 and 2, have no direct flow interactions because all flow between them
must go through blocks in class3. Classes 1 and 2 are at Level 1; class 3 is at level 2.
Description
Total
levels
Total
classes
Level
1
Class
Distribution
Level
2
Remarks
Level
3
Level-3 contains
demotions only
16
16
Level-3 contains
demotions only
Level-3 contains
demotions only
Level-3 contains
demotions only
32
16
15
Level-3 contains
demotions only
64
32
31
Level-3 contains
demotions only
*PNTHRDS
PURPOSE:
Choose the number of threads to be used for the simulation.
FORMAT:
*PNTHRDS ithrds
DEFINITIONS:
ithrds
Number of threads used.
DEFAULTS:
Optional keyword. If parallel Jacobian building and PARASOL are not specified, then the
*PNTHRDS default is 1; otherwise, the default is the minimum of 2 and the number of
processors in the current machine.
EXPLANATION:
If *PNTHRDS is set to a number greater than the number of processors, performance will
degrade. If *PNTHRDS is set to greater than two, then the solver *PPATTERN should be
changed in order to load balance properly, otherwise poor performance is likely to occur.
Geomechanics
Geomechanics 503
The behaviour of cyclic loading and unloading as a result of cyclical injection and production
processes can be modelled. During injection, the stress state at a location may reach a yield
condition and begins to accumulate plastic strains. Shear dilatancy is a component of the
resulting volumetric dilatation. Upon production, the material may be unloaded, resulting in
the stress state dropping-off from the yield surface. During this period, the material may lose
some of the reversible elastic strains.
For an elasto-plastic material, a cap model may be added to its yield criteria to avoid the
unlimited hydrostatic compression which may occur in the material during production.
For nonlinear elasticity, the rock behavior may be allowed to obey either a hypoelastic
constitutive model or a hyperelastic constitutive model. In the hypoelastic constitutive
model, the Poisson's ratio is kept constant whereas bulk modulus and shear modulus vary
with the mean effective stress. The model also has loading, unloading and neutral loading
cases which are distinguished by the work done criteria dW. If dW is positive, the rock is
under a loading condition. If dW is negative, the rock is under an unloading condition.
When dW equals zero, neutral loading will occur. In the hyperelastic constitutive model,
both values of Poisson's ratio and Young's modulus vary with minimum principle stresses.
The model also has loading and unloading case which is distinguished by the shear stress
criteria. If the current shear stress is greater than the reference shear stress, the loading
condition is applied. If the current shear stress is less than the reference shear stress, the
unloading condition occurs. The main advantage of these two constitutive models versus the
elasto-plastic model is the computing efficiency. However, both nonlinear elastic constitutive
models are only good for pre-failure behavior. Unlike the elasto-plastic model, once shear
failure occurs, the nonlinear elastic models can not predict the post failure phenomena.
The above constitutive models and cap models can be used in 2D or 3D problems in either
the Cartesian grid, corner-point grid or axisymmetric radial grid. A 3D radial (cylindrical)
grid is converted in the geomechanics module into a corner-point grid type with straight lines
replacing arcs between block corners. Each block's angle must not exceed 160 degrees,
thereby preventing block volumes approaching zero. Also available is a plane-strain (pseudo
3D) approach, whereby 2D computations are performed successively on each y-z (or x-z)
plane, based on the assumption that strain on the direction perpendicular to the plane is
negligible.
The geomechanics module solves for the force equilibrium of the formation and calculates
the volumetric dilatation/compression as a result of both elastic and plastic straining. The
pore volume changes may be caused by a combination of compression/tension or shear
stresses. These changes in pore volume and the associated changes in transmissibilities are
used in the reservoir model for calculating mass and energy balances in the reservoir.
Sign conventions:
Compressive stress is positive and tensile stress is negative.
Shear stress is positive when its direction follows the coordinate direction.
504 Geomechanics
*GCAPLOC
*GCAPD
*GCAPW
*GCAPR
*GCAPTEN
*GCAPMAT
*GCFACTOR
*GCINCRMT
*GCOUPLING
*GEODOMAIN
*GEOMECH
*GEOM3D
*GEORBLOCK
*GEOROCK
*GEOTYPE
*GEXPONENTN
*GLOADBC
*GPATM
*GPTOLMUL
*GULBULKMOD
*HARDEN
*MOHRCOUL
*MCOEF
*MOHRCOUL
*NB
*NE
*NINCS
*NITERGEO
*NLINEAR
*NODE4
*NODE8
*NODE9
*NTB
*NTE
*PLOADBC
*PLOADBC3D
*PLSTRAINY
*POISSRATIO
*PRESCBC
*PRESCBC3D
*PRINTGEO
*RIGIDNULL
*RIGIDTOP
*RPLTABD
*RPWTABD
*SOLVERG
*SPECGRAV
*STIFFCOM1
*STIFFCOM2
*STIFFINIT
*STIFFTANG
*STRESS
*STRESS3D
*STRESSGRAD
*STRESSGRAD3D
*TDMAX
*TDMIN
*TRESCA
*URBCOEF
*URECOEF
*UREXPN1
*UREXPN2
*URNB
*URNE
*URNTB
*URNTE
*VONMISES
*WRADIUS
*YLDSTRESS
Of these keywords some are mandatory, representing the minimum data required in order to
use the option (all other data have defaults):
*GEOMECH
*ELASTMOD
*POISSRATIO
*STRESS or *STRESS3D
*GEOM3D
There is a multiple rock-type option which is enabled with the *GEOROCK and *GEOTYPE
keywords. If these keywords are absent, it is assumed that there is only one rock type. The
following keywords are applied to the current rock type number:
*ELASTMOD, *POISSRATIO, *YLDSTRESS, *COHESION, *HARDEN,
*FRICANGLE, *BIOTSCOEF
Note: For a hyperelastic constitutive model, keywords *ELASTMOD and *POISSRATIO
are not mandatory.
Geomechanics 505
506 Geomechanics
Geomechanics 507
*SOLVERG
No geomech
Used (Gb)
Allocated (Gb)
Usage Ratio
0.45
1.11
1.00
2D Geomech
*AIMSOL
0.83
2.11
1.85
2D Geomech
*PGSOLV
0.82
2.11
1.84
*GEOM3D
*AIMSOL
3.76
6.27
8.4
508 Geomechanics
*GEOMECH
PURPOSE:
Enable the geomechanical model.
FORMAT:
*GEOMECH
DEFINITIONS:
*GEOMECH
This indicates that keywords from the optional geomechanical model section
will follow.
CONDITIONS:
Use of the geomechanical model is optional. However, if one of the sub-models is enabled,
the mandatory data for that sub-model must be provided.
EXPLANATION:
The geomechanical model consists of a collection of two sub-models:
1. Plastic and nonlinear elastic deformation, and
2. Single-well boundary unloading analysis.
Each of these sub-models is enabled by the presence of at least one of its associated
keywords. Model 1 and model 2 cannot be run together.
See the summary at the beginning of this section.
Geomechanics 509
3D Finite Element
*GEOM3D
PURPOSE:
Use 3D Finite Elements in computation.
FORMAT:
*GEOM3D
DEFAULT:
If keyword *GEOM3D and *PLSTRAINY are absent, then 2D plane strain finite elements
normal to the X (I) direction are used.
CONDITIONS:
*GEOM3D must appear immediately after keyword *GEOMECH when 3D finite elements
are used.
This keyword is not allowed together with *PLSTRAINY.
EXPLANATION:
Currently, the 3D finite element has 8 nodes which are locally ordered as follows:
Example:
*GEOMECH
*GEOM3D
510 Geomechanics
*PLSTRAINY
PURPOSE:
Specify that strains will be calculated by a series of planes normal to the Y (J) direction.
FORMAT:
*PLSTRAINY
DEFINITIONS:
*PLSTRAINY
Indicates that the 3D strains will be calculated as a series of 2D planes
normal to the Y (J) direction.
DEFAULTS:
If *PLSTAINY and *GEOM3D are absent, then the strains will be calculated by a series of
planes normal to the X (I) direction.
CONDITIONS:
This keyword works only with Cartesian and corner point grids. Radial grids are not allowed.
This keyword is not allowed together with *GEOM3D.
EXPLANATION:
Three-dimensional strain calculations are performed by a plane strain method, where strains
are calculated in a series of 2D planes normal to one grid direction. Consequently, strains are
assumed to be zero in that direction. The purpose of using this method is to improve the
speed of stress-strain calculations while maintaining appropriate mechanical responses due to
disturbances in the reservoir. In order to minimize estimating errors, it is recommended that
the user select the direction in which the strains can be ignored. Normally, strains are
smallest in the longest horizontal extent of a reservoir field.
Example:
*GEOMECH
*PLSTRAINY
Geomechanics 511
*GEOROCK, *GEOTYPE
PURPOSE:
Assign multiple deformation rock types.
FORMAT:
*GEOROCK typ_num ( *COPY old_typ_num )
ARRAY:
*GEOTYPE
DEFINITIONS:
typ_num
Current rock type number to be applied to data which depends on rock type.
See *GEOMECH. Data is read starting with type #1 as default. 'typ_num' can
be any number from 1 to the maximum dimensioned value.
old_typ_num
Previously defined rock type which is to be copied into current rock type.
*COPY is optional. This option is useful when rock types differ in only a few
properties.
*GEOTYPE
Assigns rock type numbers to the grid blocks, using any of the array reading
options. This array is initialized with rock type #1 for every block.
DEFAULTS:
*GEOROCK 1 *GEOTYPE *CON 1
CONDITIONS:
All the rock type numbers assigned using *GEOTYPE must be defined.
EXPLANATION:
See *GEOMECH for a list of the keywords which can vary with rock type.
512 Geomechanics
*ELASTMOD, *POISSRATIO,
*YLDSTRESS, *COHESION, *HARDEN, *FRICANGLE, *BIOTSCOEF, *DILANGLE
PURPOSE:
Define strength properties of the formation.
FORMAT:
*ELASTMOD
*POISSRATIO
*YLDSTRESS
*COHESION
*HARDEN
*FRICANGLE
*BIOTSCOEF
*DILANGLE
elastmod
poissratio
yldstress
cohesion
harden
fricangle
biotscoef
dil_angle
DEFINITIONS:
elastmod
Young's elastic modulus (kPa | psi).
poissratio
Poisson's ratio.
yldstress
Yield stress for Tresca and Von Mises materials (kPa | psi).
cohesion
Cohesion for Mohr-Coulomb and Drucker-Prager materials (kPa | psi).
harden
Hardening parameter for the linear strain hardening option (kPa | psi).
fricangle
Angle of internal friction for Mohr-Coulomb and Drucker-Prager materials
(degrees).
biotscoef
Biot's coefficient.
dil_angle
Dilation angle (degrees) for Mohr-Coulomb and Drucker-Prager materials.
The recommended range is 0 dil_angle fricangle. Specifying dil_angle
> fricangle may lead to numerical instability. When dil_angle = fricangle
the results of non-associated flow and associated flow must be the same.
Geomechanics 513
For some materials such as soil or sand, the use of friction angle alone
(associated flow rule) may lead to a large discrepancy in computing the
volumetric strain. For such materials, dilation angle dil_angle is used instead
to obtain more accurate results which are comparable to lab data. Generally,
the non-associated flow rule is based on the plastic potential function
whereas the associated flow rule is based on the yield function.
Since the stiffness matrix generated by the non-associated flow rule is
unsymmetrical, an appropriated solver must be used (see *SOLVERG).
DEFAULTS:
*ELASTMOD and *POISSRATIO have no defaults, and are required if this option is used.
*YLDSTRESS
*COHESION
*HARDEN
*FRICANGLE
*BIOTSCOEF
0
0
0
30
1
CONDITIONS:
Both *ELASTMOD and *POISSRATIO are required if the plastic deformation option is
used. See the *GEOMECH keyword. The other keywords are optional.
These keywords are rock-type dependent, and are applied to the rock type number in effect at
the time they are read. See the *GEOROCK and *GEOTYPE keywords.
EXPLANATION:
When the Mohr-Coulomb or the Drucker-Prager yield criteria are used, the relevant keywords
are:
*ELASTMOD *POISSRATIO *COHESION *FRICANGLE *HARDEN
*BIOTSCOEF
Mohr-Coulomb and Drucker-Prager are popular yield criteria for geological materials. By
default, the material is assumed to be cohesionless, with a friction angle of 30 degree, a good
number to use for sand, and a perfectly plastic behaviour upon yielding with no strain
hardening. Biot's coefficient is one, representing full interaction between pore pressure and
stress.
When the Von Mises or the Tresca yield criteria are used, the relevant keywords are:
*ELASTMOD *POISSRATIO *YLDSTRESS *HARDEN *BIOTSCOEF
Von Mises and Tresca are popular yield criteria for metal plasticity. Due to their simplicity,
they are included here mainly for testing purposes.
If the elasticity is applied to a rock type, only three main keywords are needed such as:
*ELASTMOD, *POISSRATIO, *YLDSTRESS. In order that the rock behaves elasticity
through the course of loading, the yield stress (*YLDSTRESS) must be a very large value.
514 Geomechanics
Yield Criterion
PURPOSE:
Assign yield criterion.
FORMAT:
*MOHRCOUL | *DRUCKER | *TRESCA | *VONMISES
DEFINITIONS:
*MOHRCOUL
Mohr-Coulomb yield criterion is used.
*DRUCKER
Drucker-Prager yield criterion is used.
*TRESCA
Tresca yield criterion is used.
*VONMISES
Von Mises yield criterion is used.
DEFAULTS:
*MOHRCOUL
CONDITIONS:
Only one of the yield criteria may be in use, i.e. they are mutually exclusive.
EXPLANATION:
A pictorial view of these yield criteria in the three dimensional stress space are shown in
Figure 10 below.
These yield surfaces prescribe the stress states below which the material will behave
elastically. As the material strain hardens, the yield surface expands as a function of the
accumulated plastic strains. Presently, the model assumes isotropic hardening where the
expansion of the yield surface is symmetric about the axis of the yield cone.
The Mohr-Coulomb and the Drucker-Prager yield criteria are popular criteria for frictional
porous material. They are typically used for analysis of soils and rocks.
The Tresca and the Von Mises criteria are popular for metal plasticity and are available here
mainly for testing.
Geomechanics 515
>0
Mohr-Coulomb
1= 2= 3
-3
Tresca
-3
1= 2= 3
=0
-2
- 2
(b)
(a)
-1
- 1
- 3
- 3
Drucker-Prager
>0
1= 2= 3
1= 2= 3
Von Mises
= 0
-2
- 2
- 1
(c)
- 1
(d)
Mohr-Coulomb
External Envelope
Internal Cone
Coincident at
o = -X/6
Internal Envelope
1
(e)
Figure 10: General and Linearized Yield Surfaces in Principal-Stress Space (from Desai & Christian, 1977)
516 Geomechanics
Cap Model
*GCAPMODEL
PURPOSE:
Using cap model for an elasto-plastic constitutive model.
FORMAT:
*GCAPMODEL
nmodel
DEFINITION:
*GCAPMODEL
Specify a cap model for a material.
nmodel
Indicate a specific cap model used in computation.
CONDITIONS:
When the keyword *GCAPMODEL appears, others keywords related to a cap model must be
accompanied with it.
EXPLANATION:
For soils, the Mohr-Coulomb criterion and Drucker-Prager criterion both suffer a deficiency
which is the material can support an unlimited hydrostatic compression, This deficiency can
be removed by adding a cap model which acts as a yield surface in the criteria. The cap
model would allow consideration of compressive plastic volumetric strains and limit the
amount of plastic dilation that occurred when loading on the Mohr-Coulomb or DruckerPrager failure surface. The cap model is allowed to expand and contract along the hydrostatic
axis. Details of a cap model will be given in the next section.
Geomechanics 517
Cap Model 1
D
W
R
tension
type
elastmod
poissratio
cohesion
fricangle
segment
DEFINITION:
cohesion
Cohesion for Drucker-Prager model (kPa | psi | kPa)
fricangle
Friction angle for Drucker-Prager model (degrees)
segment
Number of divisions for strain
DEFAULTS
*COHESION
*FRICANGLE
*GCAPR
*GCAPTEN
*GCAPLOC
*GCAPMAT
*GCINCRMT
0
30
0
0
0
2
1
CONDITION:
Accept the above default properties; other properties of the cap model must be given.
EXPLANATION:
This cap model # 1 is only used for a perfectly plastic material and is coupled with the
Drucker-Prager model. The cap surface can be a plane cap (Bath et al. and Sandler et al.) or
an elliptic cap (Chen and Mizuno) depending on the value of shape ratio R. If R equals zero,
the plane cap is used otherwise the elliptic cap is used.
J 2 Plane
Geomechanics 519
J 2 Plane
Where:
I1: First invariance of effective stresses
J2: Second invariance of effective deviatoric stresses
As seen in the above figures, the failure surfaces are consisted of three different surfaces such
as Drucker-Prager failure surface expressed by function F1, cap failure surface expressed by
function F2 and tension cut-off plane expressed by function F3. It should be mentioned that
this cap model is only applied to perfectly plastic materials and coupled to Drucker-Prager
failure criterion. Also, compressive stress is positive and tensile stress is negative.
In the above figure, there are three failure surfaces as follows:
Drucker-Prager failure surface F1 is defined by:
F1 = I1 + J 2 k = 0
Where and k are material parameters related to the cohesion and the friction angle.
Cap failure surface F2 is introduced by:
Compression plane cap surface:
F2 = I1 = 0
Compression elliptic cap surface:
F2 = I1 L ( )
+ R 2 J 2 L ( )
=0
Where:
L() = for > 0 and L() = 0 for 0
520 Geomechanics
is the cap location dependent on the plastic volumetric strain pkk and is assumed to be:
p
1 kk
= ln 1 +
D
W
D and W are cap material constants which are defined by keywords *GCAPD and *GCAPW,
respectively.
and R are and the hardening parameter of the cap and aspect ratio of the ellipse as defined
by the keywords *GCAPLOC and *GCAPR, respectively.
1
40.3E+3
0.2736
49.093
10.0
0.0
1.42E-6
0.0075
-5.0
100
5
**
**
**
**
**
**
**
**
**
**
**
References:
Bath, K.J., Snyder, M.D., Cimento, A.P. and Rolph, W.D.: On Some Current Procedures
and Difficulties in Finite Element Analysis of Elastic-Plastic Response, Comput. Struct.,
Vol. 12, pp. 607-624, 1980.
Sandler, I.S., DiMaggio, F.L. and Baladi, G.Y.: Generalized Cap Model for Geological
Materials, J. Geotech. Eng. Dic., ASCE, Vol. 102 (GT7), pp. 683-699, 1976.
Chen, W.F. and Mizuno, E.: Nonlinear Analysis in Soil Mechanics: Theory and Implementation,
Elsevier, 1990.
Geomechanics 521
*NLINEAR
PURPOSE:
Assign a nonlinear constitutive model for a type of rock.
FORMAT:
*NLINEAR
nmodel
DEFINITION:
*NLINEAR
Specify a nonlinear constitutive model for a material.
nmodel
522 Geomechanics
*GAMMA,
*GEXPONENTN, *GULBULKMOD
PURPOSE:
Define coefficients for a nonlinear elastic constitutive model # 1 as described in the keyword
*NLINEAR.
FORMAT:
*ELASTMOD
*POISSRATIO
*GAMMA
*GEXPONENTN
*GULBULKMOD
elastmod
poissratio
gamma
n
bulkmod
DEFINITION:
elastmod
Poisson's ratio.
gamma
DEFAULT
If the keyword *GULBULKMOD disappears, its value is zero.
CONDITION:
Young's modulus *ELASTMOD and Poisson's ratio *POISSRATIO must be given.
EXPLANATION:
In this constitutive model, the bulk modulus is defined as a function of mean effective stress
under the loading condition. The bulk modulus at a certain mean effective stress can be
written as:
( )
K = gamma * 'm
Geomechanics 523
Where: the coefficient gamma and power n are defined above, 'm is the mean effective
stress which is given by:
'
'
'm = 11
+ '22 + 33
/3
'
'
, '22 , 33
are effective stresses in X, Y, and Z directions respectively.
In the above formula, 11
When unloading occurs, the bulk modulus is assumed to be constant and has a value as
described by the keyword *GULBULKMOD and its value ( bulkmod ). Care should be taken
when assign a value of unloading bulk modulus so that the unloading path totally lies in the
area bounded by the loading path and the displacement axis as shown. In other words when
the unloading path is given, the value of bulkmod is selected carefully so that the unloading
path will not cut the loading path. If the keyword *GULBULKMOD is not entered for a rock
type, the unloading path is coincident to the loading path. The loading path and unloading
path are distinguished by the work done criteria.
For example:
*GEOMECH
*NLINEAR 1
*ELASTMOD
3.95E5
*POISSRATIO 0.3
*GAMMA
6125.0
*GEXPONENTN 0.4
*GULBULKMOD 2.5E+4
524 Geomechanics
*ECOEF, *BCOEF,
*GPATM, *FRATIO, *NE, *NB, *NTE, *NTB. *EXPN1, *EXPN2, *FRICANGMN,
*DFRICANGLE, *URECOEF, *URBCOEF, *URNE, *URNB, *URNTE, *URNTB,
*UREXPN1, *UREXPN2, *COHESION, *FRICANGLE, *MCOEF
PURPOSE:
Define coefficients for a hyperelastic constitutive model # 2 as described in the keyword
*NLINEAR.
FORMAT:
*ECOEF
*BCOEF
*GPATM
*FRATIO
*NE
*NB
*NTE
*NTB
*EXPN1
*EXPN2
*FRICANGMN
*FRICANGMX
*DFRICANGLE
*URECOEF
*URBCOEF
*URNE
*URNB
*URNTE
*URNTB
*UREXPN1
*UREXPN2
*COHESION
*FRICANGLE
*MCOEF
Ke
Kb
Patm
Rf
ne
nb
nte
ntb
n1
n2
phimin
phimax
dphi
Keur
Kbur
neur
nbur
nteur
ntbur
n1ur
n2ur
c
phi
m
DEFINITION:
Ke
Dimensionless loading modulus number
Kb
Dimensionless loading bulk modulus number
Patm
The atmospheric pressure (kPa | psi)
Geomechanics 525
Rf
Failure ratio which lies between zero and one
ne
Loading tangential modulus exponent for confining stress
nb
Loading bulk modulus exponent for confining stress
nte
Loading modulus exponent for temperature
ntb
Loading bulk modulus exponent for temperature
n1,n2
Loading tangential modulus exponents for failure ratio
phimin
Minimum friction angle (degrees)
phimax
Maximum friction angle (degrees)
dphi
Reduction in friction angle (degrees) for one log circle
Keur
Dimensionless unloading-reloading modulus number
Kbur
Dimensionless unloading-reloading bulk modulus number
neur
Unloading-reloading modulus exponent for confining stress
nbur
Unloading-reloading bulk modulus exponent for confining stress
nteur
Unloading-reloading modulus exponent for temperature
ntbur
Unloading-reloading bulk modulus exponent for temperature
526 Geomechanics
n1ur,n2ur
Unloading-reloading modulus exponents for failure ratio
c
Cohesion for Mohr-Coulomb and Drucker-Prager materials (kPa | psi)
phi
Angle of internal friction for Mohr-Coulomb and Drucker-Prager materials
(degrees) at a confining pressure of 1 atm.
m
Coefficient factor used to compute the reference stress. Its value is 0 or 1.
Note: the confining stress used here corresponds to the minimum principle stress.
DEFAULT:
*GPATM
*COHESION
*FRICANGLE
*NE, *NB
*URNE, *URNB
*EXPN1, *UREXPN1
*EXPN2, *UREXPN2
*NTE, *NTB
*URNTE, *URNTB
*FRICANGMN
*DFRICANGLE
*FRICANGLMX
*URECOEF
*URBCOEF
*MCOEF
1 atm
0
30
0.5
0.5
2
1
0
0
0
0
30
0
0
1
EXPLANATION:
The nonlinear elasticity constitutive model # 2 or hyperbolic model implemented in the
module is based on the works of Duncan and Chang and Settari et al. In this model, tangential
modulus as well as bulk modulus varies with minimum principle effective stress 3' and
temperature. Poissons ratio in this model is, thus, also varied. The model also has a loading
path and an unloading-reloading path which are distinguished by the reference shear stress
criteria. When keywords *URECOEF and *URBCOEF disappear, there is no loading path. In
this case, the unloading path coincides with the loading path. Furthermore, in this model, the
unloading and reloading paths are the same.
In this hyperbolic model, the Mohr-Coulomb failure criterion is used for the material failure
due to shear stress to compute the stress level. The stress level is also limited by one so that
the shear stress can not exceed the shear failure of the Mohr-Coulomb model. More details on
this model can be seen in related references.
Geomechanics 527
The material follows a loading path when it is subjected to shear stress higher than it has
previously experienced. Along this path, the constitutive model is governed by the tangential
modulus. The material follows the unloading-reloading path when its shear stress is lower than
the reference shear stress. In this case, the unloading-reloading modulus can either be affected
by the shear stress level or not depending on the selection of the exponents related to the model.
528 Geomechanics
r = 3' + m
ne
T
To
nte
c
tan (phimax )
Where:
c, Ke, Patm, phimax, ne, nte, m are defined above by the related keywords.
T
To
r
Current temperature
Initial temperature
Reference stress
Minimum principle effective stress
3'
When m = 0, the reference stress is the minimum principle effective stress which was
proposed by Duncan and Chang.
Tangential modulus Et:
n2
1' 3' (1 sin ())
E t = E i 1 R f
'
2ccos() + 23sin ()
n1
'
= phi dphi * log10 3
Patm
Where:
Ei(r): Initial tangential modulus defined in the above equation
Rf: Failure ratio defined by keyword *FRATIO
L: Stress level which is limited to one when the deviatoric effective stress reaches to the
failure envelope. Its value is determined by:
L =
1' 3'
1
1' 3' f
Wherein, for sands, the failure envelope is normally defined by Mohr-Coulomb failure
surface such as:
( ) = (
'
d f
'
1
3' f =
Geomechanics 529
In the above equation, the friction angle for a given 3' is given by:
'
= phi dphi * log10 3
Patm
and is limited within the range: phimax phimin.
Where:
Rf, c, n1, n2, phi, dphi, phimax, phimin are defined above.
If n1 = 2 and n2 = 1, the above equation has the same form as that of the Duncan and Chang
model.
Since the stress level L is limited by one, the hyperelastic model used in this module
considers the Mohr-Coulomb failure envelope as its asymptote.
Unloading-Reloading modulus Eur:
E uri
= K eur Patm r
Patm
neur
T
To
nteur
n 2 ur
'
2ccos() + 23sin ()
n1ur
Where:
n1ur and n2ur are defined above.
If the value of n2ur is set to be zero, the unloading-reloading modulus is unaffected by the
shear stress level.
Loading bulk modulus Bm:
Bm = K b Patm r
Patm
nb
T
To
ntb
Bur = K bur Patm r
Patm
nbur
T
To
ntbur
3B E
6B
Where:
B
E
Bulk modulus
Tangential modulus
The computed Poisson ratio should lie between the range: 0.01 0.49.
530 Geomechanics
Example: For a rock type which has a nonlinear elastic constitutive model 2, its parameters
are given as follows:
*GEOMECH
*NLINEAR
*ECOEF
*BCOEF
*GATM
*FRATIO
*NE
*NB
*NTE
*NTB
*EXPN1
*EXPN2
*FRICANGMN
*FRICANGMX
*DFRICANGLE
*URECOEF
*URBCOEF
*URNE
*URNB
*URNTE
*URNTB
*UREXPN1
*UREXPN2
*COHESION
*FRICANGLE
*MCOEF
2
485.0
404.2
14.7
0.85
0.3
0.3
0.0
0.0
2.0
1.0
1.0
60
0.1
700
583.3
0.6
0.6
0.0
0.0
2.0
1.0
14.5
40
0
References:
Settari, A., Ito, Y., Fukushima, N. and Vaziri, H.: Geotechnical Aspects of Recovery
Processes in Oil Sands, Can. Geotech. J., Vol. 30, pp. 22-33, 1993.
Settari, A. and Walters, D.: Advances in Coupled Geomechanical and Reservoir Modeling
With Application to Reservoir Compaction, SPE 51927, 1999.
Duncan, J.M. and Chang, C-Y.: Nonlinear Analysis of Stress and Strain in Soils, ASCE
Journal of the Soil Mechanics and Foundations Division, Vol. 96, pp. 1629-1653, 1970.
Geomechanics 531
Creep Model
*GMCREEP
PURPOSE:
Assign a creep constitutive model for a type of rock. Creep is defined as the time-dependent
strain that happens in a material at constant stress.
FORMAT:
*GMCREEP cmodel
DEFINITION:
*GMCREEP cmodel
Specify a creep constitutive model for a material, and indicate which plastic
yield surface to use via cmodel.
*GMCREEP 1 Drucker-Prager type
*GMCREEP 2 Mises type
CONDITIONS:
Keyword *GMCREEP must be followed by others keywords related to the plastic yield
surface indicated by cmodel. See manual page Creep Model 1,2, below.
EXPLANATION:
There are many constitutive models used to express creep in materials. In CMGs geomechanics
module, the elasto-viscoplastic constitutive model based on Perzynas theory is selected. The
total strain rate is decomposed into elastic strain rate and viscoplastic strain rate as follows:
.
= e + vp
Here
.
vp
vp = . (F) .
532 Geomechanics
Here
The fluidity parameter that defines the relative rate of viscoplastic strain.
(F)
=
0
For F 0
F
Plastic yield function.
Geomechanics 533
Creep Model 1, 2
PURPOSE:
Define coefficients for creep models *GMCREEP 1 (Drucker-Prager yield surface) and
*GMCREEP 2 (Mises yield surface).
FORMAT:
*VISPARA
*VISFLOWR
*VISPOWER
*VISSCHEME
*VISTIME
*VISSTEP
*VISINIT
*ELASTMOD
*POISSRATIO
*FRICANGLE
*COHESION
*YLDSTRESS
gamma
function
delta
scheme
para
increment
initime
elastmod
poissratio
fricangle
cohesion
yldstress
DEFINITION:
gamma
Scheme implicitness.
scheme = 1
scheme = 2
scheme = 3
explicit
semi-implicit
implicit
para
534 Geomechanics
increment
Increase the value of time step from the previous time step.
tn+1 = increment * tn
initime
Poisson's ratio.
cohesion
DEFAULTS:
*COHESION
*FRICANGLE
*VISFLOWR
*VISPOWER
*VISSCHEME
*VISTIME
*VISSTEP
*VISINIT
0
30
2
1.0
3
0.01
0.1
1.0
CONDITIONS:
Young's modulus *ELASTMOD, Poisson's ratio *POISSRATIO and fluidity parameter
*VISCOPARA must be given.
For a von Mises material, the yield stress (*YLDSTRESS) is used, whereas for a DruckerPrager material cohesion (*COHESION) and friction angle (*FRICANGLE) must be used.
EXPLANATION:
This type of viscoplastic constitutive model has the following assumptions:
1. Viscoplastic flow occurs only when the yield function F is greater than a uniaxial
yield stress F0.
2. The viscoplastic strain rate depends upon the current stresses only.
Geomechanics 535
vp = . (F) .
(1)
Where:
F F0
1
(F) = exp
F0
(2)
function = 2:
F F0
(F) =
F0
(3)
vp = t n (1 ) vp n + vpn +1
(4)
For the explicit scheme (scheme = 1) = 0. For the semi-implicit scheme (scheme = 2) =
0.5. For the implicit scheme (scheme = 3) = 1.
When a value of is greater than or equal to 0.5, the time integration scheme (4) is
unconditionally stable; whereas the scheme (4) is only conditionally stable when the value of
is less than 0.5. For the latter case, the time step length must be controlled. The time step
length can be computed as:
t n para *
vn
. n
v
vp
where
para:
Time increment parameter para as defined by the keyword *VISTIME.
v :
Volumetric strain
.
( v )vp :
Volumetric strain rate of viscoplasticity.
536 Geomechanics
The change in time step length between two consecutive calculations is also limited by:
t n +1 Increment * t n
where
Increment:
the increment parameter as defined by the keyword *VISSTEP.
Note that the time step length computed in the viscoplastic model is completely different
from the time step size used for fluid flow in the reservoir simulator. However, the sum of
time step length in the geomechanics module for one loading can not exceed the flow time
step. If the sum exceeds the flow time step, the steady state is not reached within the allowed
time. A warning message in the file *.geo will appear such as Steady state time is larger
than the flow time step. If such a case occurs, some parameters should be changed; for
instance, fluidity parameter which mostly influents the plastic flow rate.
Example:
1
1.5E5
0.3
15.0
14.5
1.0E-5
0.01
2
1
0.01
0.1
0.5
**
**
**
**
**
**
**
**
**
**
**
**
References:
Geomechanics 537
PURPOSE:
*PGDILA
pgdila
young1
*PGPACT
pgpact
young2
*PGPDMAX pgpdmax
young3
DEFINITIONS:
pgdila
Threshold pressure below which the material behavior changes from elastic
state to a recompaction state (kPa | psi).
young2
Threshold pressure above which the material behavior changes from dilation
state to an elastic state (kPa | psi).
young3
Youngs modulus in an elastic state beyond the dilation state (kPa | psi).
CONDITIONS:
These keywords are assigned to the current rock type specified via *GEOROCK, or to rock
type #1 if *GEOROCK is absent.
To use the pseudo dilation model the minimum required data is *PGDILA and *PGPACT.
Also required are *ELASTMOD (Youngs modulus), *POISSRATIO (Poissons ratio) and a
very large value for *YLDSTRESS (yield stress) so the material is always in elastic mode.
pgpdmax must be greater than pgdila which must be greater than pgpact.
DEFAULTS:
If keyword *PGPDMAX does not appear, pgpdmax has a very high value.
538 Geomechanics
EXPLANATION:
With *PGDILA there are two porosity coupling options available. In each case keywords
*PGDILA, *PGPACT and *PGPDMAX control the Youngs modulus for each path. See the
EXPLANATION for keyword *GCOUPLING.
Geomechanics 539
*GCOUPLING 0
Use this coupling option with *PGDILA to obtain more accurate deformation and stress
estimates while still getting the fluid-flow pressure-porosity behaviour from the STARS
*DILATION model. In this coupling, porosity is a function of pressure and temperature
only.
*GCOUPLING 2
This type of coupling is more compact than the previous one since the porosity is not only a
function of pressure and temperature but also a function of mean total stress.
Example:
*GEOROCK 1
** Rock type # 1
*ELASTMOD 5e4 ** Youngs modulus for elastic path 1
*POISSRATIO 0.3 ** Poissons ratio
*YLDSTRESS 1e10 ** Very large yield stress
** dilation keyword
threshold p
Youngs mod
*PGDILA
1536.0
1e4
*PGPACT
500.0
2e4
540 Geomechanics
*THEXPCOEF
PURPOSE:
Specify the thermal expansion coefficient for a rock type due to the thermal effect.
FORMAT:
*THEXPCOEF
thexpcoef
DEFINITION:
*THEXPCOEF
Keyword for thermal expansion coefficient.
thexpcoef
The keyword *THEXPCOEF and its value must be entered when the thermal effect is taken
into account in the geomechanical model. When the keyword is absent, changes in thermal do
not affect to the rock at all.
EXPLANATION:
When the temperature changes, the deformation as well as stress of rock also changes. Such
changes strongly depend on the thermal expansion coefficient of a rock type. When the
keyword *THEXPCOEF is absent in the geomechanical section, the thermal expansion
coefficient is zero by default; therefore, the source term due to the change in temperature is
zero in the equilibrium equation. That means the temperature does not play a part in
calculation of stresses via the rock deformation. The value of thermal expansion coefficient
can be measured or taken from a material handbook.
For example:
*GEOROCK 1
** rock type # 1
*ELASTMOD 1.0e6
*POISSRATIO .3
*YLDSTRESS 1000000
*THEXPCOEF
1.0e-6
In this example, the value of linear thermal expansion coefficient is 10-6 (unit used) for rock
type # 1.
Geomechanics 541
*GPERMVL
PURPOSE:
*GPERMLC Cn1
or
*GPERMES
{ E kx/kx0 ky/ky0 kz/kz0 }
or
*GPERMTS
{ T kx/kx0 ky/ky0 kz/kz0 }
or
*GPERMVL
{ v kx/kx0 ky/ky0 kz/kz0 }
*GULOGINT
DEFINITIONS:
*GPERMLC Cn1
Use the empirical model of Li and Chalaturnyk to specify a matrix
permeability multiplier, where Cn1 (dimensionless) is an experimental
parameter. Multiplier k/k0 = exp[ Cn1 v ] is applied to a blocks
permeability in all three directions, where v is the volumetric strain.
*GPERMES
Use a table to specify matrix permeability multiplier as a function of mean
effective stress E (kPa | psi). The stress entries must be positive and
monotonically increasing.
*GPERMTS
Use a table to specify matrix permeability multiplier as a function of mean
total stress T (kPa | psi). The stress entries must be positive and
monotonically increasing.
*GPERMVL
Use a table to specify matrix permeability multiplier as a function of
volumetric strain v (dimensionless). The strain entries must be
monotonically increasing.
kx/kx0 ky/ky0 kz/kz0
Permeability multipliers in the X, Y and Z directions, respectively
(dmensionless). These multiplier entries must be monotonic. Multipliers can
be different in the three grid directions.
542 Geomechanics
*GULOGINT
Use logarithmic interpolation for table look-up of the permeability-ratio
columns. For example, let x be the independent variable (e.g., v) and let y
be the dependent variable (e.g., kx/kx0); let subscripts 1 and 2 denote two
adjacent table rows and let unsubscripted symbols denote values between the
table rows. The logarithmic interpolation algorithm is
[log(y)-log(y1)]/[log(y2)-log(y1)] = [x-x1]/[x2-x1]
whereas the linear interpolation algorithm is
[y-y1]/[y2-y1] = [x-x1]/[x2-x1]
DEFAULTS:
If none of these permeability multiplier options is specified for a rock type, then blocks in
that rock type will experience no permeability change due to geomechanical effects.
If keyword *GULOGINT is absent then table look-up used linear interpolation.
CONDITIONS:
These keywords are assigned to the current rock type specified via *GEOROCK, or to rock
type #1 if *GEOROCK is absent.
EXPLANATION:
In order to include the geomechanical responses in the reservoir fluid flow, the permeability
multiplier can depend on geomechanical information such as volumetric strain or mean stress.
Two different approaches are available: empirical formula and three table look-up options.
Table Look-up
This approach is more flexible than the empirical formula since the permeability multipliers
may differ in the three directions. The first column of the table can be either volumetric
strain, mean effective stress, or mean total stress. The curves of multipliers (kx/kx0), (ky/ky0)
and (kz/kz0) versus stress or volumetric strain can be linear or nonlinear but they must be
monotonic.
Example
*GEOROCK 1
*GPERMLC
*GEOROCK 2
*GPERMES
** Mean effective stress
** mean eff stress (kx/kx0) (ky/ky0) (kz/kz0)
100.
1.5
1.5
2.0
200.
1.4
1.4
1.8
500.
1.1
1.1
1.2
1000.
0.8
0.8
0.7
1200.
0.75
0.75
0.6
1500.
0.7
0.7
0.5
Geomechanics 543
*GEOROCK 3
*GPERMVL
** Volumetric strain
** Vol strain
(kx/kx0) (ky/ky0) (kz/kz0)
-0.005
1.5
1.5
1.6
-0.001
1.4
1.4
1.5
-0.0005
1.3
1.3
1.4
-0.0001
1.2
1.2
1.3
-0.00005
1.1
1.1
1.2
-0.00001
1.05
1.05
1.02
0.0001
0.8
0.8
0.7
0.0005
0.7
0.7
0.6
Note that positive stress means compression and negative volumetric strain means expansion.
Empirical Formula
Based on the work of Li and Chalaturnyk (Li, P. and Chalaturnyk, R.J., Permeability
Variations Associated with Shearing and Isotropic Unloading during the SAGD Process,
CIPC Paper 2004-240), the following multiplier is applied to a blocks permeability in all
three directions
k/k0 = exp[ Cn1 v ]
where
Cn1
544 Geomechanics
*GPERMBB,
*UNFIXFDIR, GFRACBLK
PURPOSE:
*GPERMBB
Enable the Barton-Bandis fracture permeability model, for the current rock
type specified by *GEOROCK or its default.
e0
kni
Geomechanics 545
DEFAULTS:
This option is disabled for each rock type for which keyword *GPERMBB is not defined.
If *UNFIXFDIR is absent, the fracture direction is fixed when the fracture opening occurs.
For each block not specified by *GFRACBLK but using the *GPERMBB option, fracture
permeability starts on Path AB in Fig. 1.
CONDITIONS:
After *GPERMBB all six values must be entered and each value must be positive.
*GPERMBB may be used only with natural fracture grid options *DUALPERM and
*DUALPOR.
*GPERMBB model parameters can be modified in recurrent data.
EXPLANATION:
A natural-fracture grid option for fluid flow consists of the usual grid system for the porous
rock matrix couple together with a second grid system consisting of fracture blocks that
coexist with the matrix blocks on a one-to-one basis. Geomechanics calculations are coupled
only to the matrix blocks. However, fracture opening and closing can depend upon stresses
in the matrix blocks. Keyword *GPERMBB allows for calculation of the fracture block
permeability from normal fracture effective stress via the Barton-Bandis model.
Fracture closure permeability is computed by:
e
k f = kccf
e0
krcf
(1)
where:
kf
e = e 0 Vj
Vj =
( 2)
n
kni + n / Vm
krcf 1 / 4
Vm = e 0 1
kccf
Fracture permeability depends on the value and history of normal fracture effective stress n
as illustrated in Fig.1. It should be noted that the normal fracture effective stress n is
equivalent to the minimum principle effective stress.
546 Geomechanics
Path AB: Initially n is greater than opening fracture stress frs. On this path initial fracture
permeability is very small and behaviour is reversible.
Path BC: When n becomes less than frs, the fracture opens suddenly and fracture
permeability jumps from the initial value to hydraulic fracture permeability khf.
Path DCE: As long as n is less than zero, fracture permeability remains at khf.
Paths EF and FG: When n becomes greater than zero, fracture permeability jumps from
khf to fracture closure permeability kccf and then follows the Barton-Bandis model (curve
FG) specified by equation (1). Path FG has an asymptotic value at krcf as shown by the
dotted line. Thereafter, fracture permeability varies reversibly with n on path GFED.
Geomechanics 547
Example:
*GEOROCK 1
. . .
** keyword
e0
*GPERMBB
6.5e-5
. . .
*GEOROCK 2
kni
3e6
frs
-100.
khf
100.
kccf
50.
krcf
5
. . .
** keyword
e0
kni
frs
khf
kccf krcf
*GPERMBB
7.5e-5
4e6
-110.
120.
60.
3
*UNFIXFDIR
. . .
*GEOTYPE *KVAR 6*1 4*2 ** 10 layers
*GFRACBLK *IJK
1:2 1:1 1:6 ** Fracture open from beginning
1:2 1:2 7:10
548 Geomechanics
Fracture Direction
*FRACANGLE
PURPOSE:
Specify direction of fracture when the fracture permeability option *GPERMBB is used.
FORMAT:
*FRACANGLE
{ *IJK ( i1(:i2) j1(:j2) k1(:k2) | *ALL ) x y }
DEFINITIONS:
i1(:i2) j1(:j2) k1(:k2)
I-J-K address range specification.
*ALL
Specify all blocks.
x
DEFAULTS:
For each grid block that is not explicitly assigned a fracture direction via *FRACANGLE, its
fracture direction will be determined by the stress response on it.
CONDITIONS:
Each pair of angles x and y must satisfy the condition cos2(x) + cos2(y) 1.
EXPLANATION:
When rock cracks the fracture direction depends strongly upon the direction of maximum
principle effective stress acting on it. Use keyword *FRACANGLE to assign explicitly the
fracture direction independent of stress response in the block. When this option is used, the
fracture direction will remain as specified, until it is replaced with a new fracture direction
via keyword *FRACANGLE in the recurrent data.
Multiple *IJK lines can be used after *FRACANGLE to specify a non-rectangular region or
different angles for different regions.
Examples:
*FRACANGLE
*IJK 1:10 5 1:2 60 40 ** Valid (sum cos2 = 0.837 < 1)
*IJK 1:10 5 3:5 60 25 ** Invalid (sum cos2 = 1.071 > 1)
*FRACANGLE
*IJK *ALL 60 60
Geomechanics 549
*RPWTABD, *RPLTABD
PURPOSE:
Define relative permeabilities for the dilated region.
FORMAT:
*RPWTABD
sw
:
krw
:
krow
:
sl
:
krg
:
krog
:
*RPLTABD
DEFINITIONS:
sw
Water saturation. Table entries must increase, and must be separated by at
least 0.001.
kr
Relative permeability to water in the water/oil system. Table entries must
increase.
krow
Relative permeability to oil in the water/oil system. Table entries must
decrease.
sl
Liquid saturation. Table entries must increase, and must be separated by at
least 0.001.
krg
Relative permeability to gas in the liquid/gas system. Table entries must
decrease.
krog
Relative permeability to liquid in the liquid/gas system. Table entries must
increase. The last entry must be equal to krow at critical water saturation.
DEFAULTS:
If the keywords *RPWTABD and *RPLTABD do not appear, the effect of remoulding on the
relative permeability will not be taken into account.
550 Geomechanics
CONDITIONS:
Both tables are optional if the plastic deformation option is used. See the *GEOMECH
keyword.
These keywords are rock-type dependent, and are applied to the rock type number in effect at
the time they are read. See the *GEOROCK and *GEOTYPE keywords.
EXPLANATION:
The relative permeability curves for the dilation zone may be used to account for the
remoulding of the sand matrix as a result of plastic deformation. A grid block which has been
subjected to plastic yielding will be considered to consist of the remoulded zone and the
original rock matrix with a relatively low level of disturbances. It may be reasonable to
assume that the remoulded zone tends to have a more linear relative permeability
relationship. However, to avoid stability problems the relative permeability increase should
not exceed about 20 times that of the original rock matrix.
By using a set of relative permeability curves identical to that of the original rock, the effect
of remoulding on relative permeability will be removed.
Geomechanics 551
PURPOSE:
Assign limits of pore volume and transmissibility changes due to volumetric dilatation which
includes the shear dilation component.
FORMAT:
*FPVOLM
*TDMAX
*TDMIN
fpvolm
tdmax
tdmin
DEFINITIONS:
fpvolm
DEFAULTS:
*FPVOLM 0.05 *TDMAX 1 *TDMIN 1
CONDITIONS:
tdmin must not exceed tdmax.
EXPLANATION:
The volumetric dilatation of each grid block is calculated numerically by the finite-element
stress-deformation analysis at each time step. Keyword *FPVOLM allows the user to limit
the amount of volumetric dilatation.
Increase in transmissibility due to increase in the dilated zone is modelled via permeability
multipliers of which tdmin and tdmax are the upper and lower bounds. Specifying *TDMAX
1 and *TDMIN 1 will result in no transmissibility increase. The relationship between
transmissibility increase and pore-volume increase is as follows.
Let R be a blocks fractional change in fluid pore volume due to volumetric dilatation, that is,
R = (V-Vi)/Vi where Vi is the initial pore volume and V is the current pore volume; fpvolm is
the maximum allowed value of R. Let x = R/fpvolm be the blocks scaled fractional change
in pore volume, limited to the range [0,1]. The blocks permeability multiplier is
tdmin + (tdmax - tdmin)(3x2 - 2x3)
which gives tdmin at x = 0, tdmax at x = 1 and zero slopes at both points. The multiplier of
each block pair is applied to their respective permeabilities which are combined to give the
transmissibility of the inter-block connection.
Note that no transmissibility variation is applied to diagonal directions if the *NINEPOINT
grid option is used.
552 Geomechanics
Well Radius
*WRADIUS
PURPOSE:
Assign well radius where boundary conditions are to be applied for the axisymmetric radial
grid. The desired model can be either the plasticity model or plasticity with well boundary
unloading.
FORMAT:
*WRADIUS wrad
DEFINITIONS:
wrad
Well radius (m | ft).
DEFAULTS:
*WRADIUS 0
CONDITIONS:
Required only if the radial grid option is used.
EXPLANATION:
The plastic deformation model may be used with axisymmetric radial grid. In this case the
well boundary is considered to be a rigid boundary, for example, a cased wellbore. When the
well boundary unloading model is selected by using the *UNLOADSTR keyword, the
boundary stress is assumed to be unloaded at the well radius by the amount specified using
the *UNLOADSTR keyword.
Geomechanics 553
PURPOSE:
Assign stiffness matrix calculation option.
FORMAT:
*STIFFINIT | *STIFFTANG | *STIFFCOM1 | *STIFFCOM2
DEFINITIONS:
*STIFFINIT
Calculate the elasto-plastic stiffness matrix only once at the beginning of the
time step.
*STIFFTANG
Calculate the elasto-plastic stiffness matrix at every iteration of every load
increment of every time step.
*STIFFCOM1
Calculate the elasto-plastic stiffness matrix once at the beginning of every
load increment of every time step and also whenever unloading is detected.
*STIFFCOM2
Calculate the elasto-plastic stiffness matrix at the beginning of the second
iteration of each load increment of every time step, except for the first
increment when the stiffness matrix is also calculated at the first iteration.
Unloading will also trigger the recalculation of the stiffness matrix.
DEFAULTS:
*STIFFTANG
CONDITIONS:
Only one of the stiffness matrix calculation option may be in use, i.e. they are mutually
exclusive.
554 Geomechanics
PURPOSE:
Override default control parameters for plastic deformation option.
FORMAT:
*NODE4 | *NODE8 | *NODE9
*GAUSSPNT
*NINCS
*FORCETOL
*DISPLACTOL
*NITERGEO
*PRINTGEO
ngaus
nincs
tol1
tol2
niter
n
DEFINITIONS:
*NODE4
Use 4-node finite elements.
*NODE8
Use 8-node finite elements.
*NODE9
Use 9-node finite elements.
*GAUSSPNT ngaus
Specify the number of Gaussian quadrature points for each local coordinate
direction. The allowed range is 2 to 4.
*NINCS nincs
Subdivide the load increment for each timestep into nincs equal subincrements. This will increase the accuracy of the plastic analysis at an
increased computational cost. The allowed range for nincs is 1 to 10.
*FORCETOL tol1
Relative convergence tolerance (expressed as a percentage) for force balance
equations. The range is 10-10 to 1. tol1 is the rms residual of force balance at
all nodes acceptable as converged to an equilibrium condition. The
unbalanced force is carried forward into the next time step. A value of 1
represents a rather loose tolerance whereas 10-10 is very tight.
Geomechanics 555
*DISPLACTOL tol2
Convergence tolerance (m | ft) for the nodal displacement vector. The
allowed range is 10-20 m to 10-2 m. The choice should be representative of
the dimension of the model and should not be bigger than one percent of the
length of the smallest element. A large value effectively turns off the
displacement convergence criterion.
*NITERGEO niter
Maximum number of iterations allowed for solving the force balance
equations. The minimum is 30.
*PRINTGEO n
Control the amount of output to the geomechanics output (.geo) file. The
minimum that is written is a summary of input data and finite element
information. n may be any number from 0 to 12, to produce the indicated
additional output. n = 0 - 3 produce the same output as previous versions.
n
0
1, 2, 3, 4, 9, 11
1, 2, 3, 7, 8, 10
2, 3, 5, 8, 9, 12
3, 6, 10, 11, 12
Additional output
None
Principle stresses
Stress components
Displacements
Reactions at constrained nodes
DEFAULTS:
*NODE4
*GAUSSPNT 2
*NINCS 1
*FORCETOL 0.1
*DISPLACTOL 0.0001
*NITERGEO 30
*PRINTGEO 0
EXPLANATION:
The nodal locations for each of the element types *NODE4, *NODE8 and *NODE9 and the
associated element shape functions are shown in Figure 11 below.
556 Geomechanics
N i (, ) =
1
4
(1 + i ) (1 + i )
1
2
4-node Isoparametric element
()
N ie =
(1 + i ) (1 + i ) ( i + i 1) , i = 1,3,5,7
N (i e ) =
2
3
1
8-node Serendipity element
i2
(1 + i ) (1 2 ) +
n i2
2
(1 + i ) (1 2 ) , i = 2,4,6,8
()
N ie =
( 2 + i ) ( 2 + i ) , i = 1,3,5,7
2
3
1
9-node Lagrangian element
1
2
i2 ( 2 i ) (1 2 ) +
1
2
i2 ( 2 i ) (1 2 ) , i = 2,4,6,8
Figure 11: Element Types and Shape Functions Available for Geomechanical Analysis
Geomechanics 557
*SOLVERG, *PRECCG,
*PRECABG, *NORTHG, *SORDERG, *SDEGREEG, *PIVOTG, *ITERMAXG,
*ORTHOGG, *JDUMPG, *SITERPG
PURPOSE:
Indicate and control AIMSOL as the matrix solver for the geomechanics equations.
FORMAT:
*SOLVERG
*PRECCG
*NORTHG
*SORDERG
*SDEGREEG
*PIVOTG
*ITERMAXG
*ORTHOGG
*JDUMPG
*SITERPG
DEFINITIONS:
*SOLVERG ( *AIMSOL | *AIMSOLN | *PGSOLV | *PGSOLN )
Specify which matrix solver to use on the linearized geomechanics equations.
*AIMSOL and *AIMSOLN use the AIMSOL matrix solution package. This
option is required for *GEOM3D and recommended for large grids not using
*GEOM3D. The AIMSOL package implemented here has control keywords
that are separate but similar (with G appended) to the corresponding fluidflow keywords found in the Numerical Control section. This allows you to
specify AIMSOL control parameters for solving geomechanics equations that
differ from the corresponding fluid-flow values.
*PGSOLV and *PGSOLN use a frontal solution technique in which the
system is solved non-iteratively in a way which is equivalent to Gaussian
elimination.
When a non-associated flow rule is used (see *DILANGLE) then *AIMSOLN
must be used instead of *AIMSOL and *PGSOLN must be used instead of
*PGSOLV. See Non-Associated Flow below.
*PRECCG preccg
Specify relative convergence tolerance for GMRES iterations (AIMSOL only).
558 Geomechanics
*PRECABG precabs
Specify absolute convergence tolerance for the GMRES iterations (AIMSOL
only).
*NORTHG north
Specify maximum number of GMRES orthogonalizations before iteration
restart (AIMSOL only).
*SORDERG ( *NATURAL | *REDBLACK | *RCM | *RCMRB )
Specify equation ordering strategy (AIMSOL only). Natural, red-black,
reverse Cuthill-McKee, and reverse Cuthill-McKee followed by Red-Black
are supported.
*SDEGREEG ( *GAUSS | ideg )
Specify degree of LU factorization (AIMSOL only). *GAUSS indicates
Gaussian elimination; otherwise, off-diagonal sub-matrices of degree greater
than ideg are ignored. The initial non-zero off-diagonal sub-matrices are
designated as degree 1.
*PIVOTG ( *ON | *OFF)
Specify that pivoting is allowed in the inversion of diagonal sub-matrices
(AIMSOL only).
*ITERMAXG nitmax
Specify maximum number of GMRES iterations allowed before returning to
calling routine (AIMSOL only).
*ORTHOGG ( *CGS | *MGS ) ( *SINGLE | *DOUBLE )
Specify orthogonalization method used in GMRES iterations: Classical
(*CGS) or modified Gram-Schmidt (*MGS); and single or double
orthogonalization (AIMSOL only).
*JDUMPG
The geomechanical linear system matrix is dumped to the .geo
geomechanical output file (AIMSOL only).
*SITERPG
Information about GMRES dimensions and iterations is printed to the .geo
output file (AIMSOL only; not for *CHECKONLY). See the tutorial
Optimizing Memory Requirements.
Geomechanics 559
DEFAULTS:
Absent
Action
*SOLVERG
*PRECCG
*PRECABG
*NORTHG
*SORDERG
*SDEGREEG
*PIVOTG
*ITERMAXG
*ORTHOGG
*JDUMPG
*SITERPG
CONDITIONS:
All keywords except *SOLVERG are valid only when *AIMSOL or *AIMSOLN is used.
*SOLVERG subkeywords *PGSOLV and *PGSOLN may not be used with *GEOM3D.
*SOLVERG subkeyword *AIMSOLN or *PGSOLN must be used when *DILANGLE is
present.
EXPLANATION:
When a non-associated flow rule is used for an elasto-plastic material the stiffness matrix is
unsymmetrical and requires an appropriate matrix solver. *SOLVERG options *PGSOLN
and *AIMSOLN handle these unsymmetrical matrices. Use of another matrix solver option
for unsymmetrical matrices may not give the correct result. Like *PGSOLV, *PGSOLN is
available only for the 2D plane strain option (*GEOM3D absent). Like *AIMSOL,
*AIMSOLN can handle 2D plane strain or 3D strain (*GEOM3D).
*PGSOLN and *AIMSOLN can solve associated-flow problems as well as the other matrix
solution options but the storage requirement is larger. Therefore, these matrix solution
options should be used only for cases with non-associated flow, as indicated by the default.
560 Geomechanics
*MPLNE, *MCONNG,
*MDICLU_PG
PURPOSE:
Over-ride default dimension estimates obtained from the preliminary data scan.
FORMAT:
*MPLNE
mplne
*MCONNG
mconng
*MDICLU_PG mdiclu_pg
DEFINITIONS:
mplne
DEFAULTS:
Each of these keywords defaults to the value obtained from the data scan.
EXPLANATION:
Run-time dimensioning in STARS is designed to obtain all its needed information for storage
allocation from a preliminary scan of the data. However, it is possible that several
dimensioning parameters may be insufficient after this scan, in which case the user may enter
values directly.
See also Optimizing Memory Requirements in the TUTORIAL chapter.
Geomechanics 561
*STRESS, *STRESSGRAD,
*STRESSALL, *STRESI, *STRESJ, *STRESK, *STRESSH
PURPOSE:
Assign the initial stress distribution for 2D plane strain approach.
FORMAT:
*STRESS
*STRESSGRAD
or
*STRESS *IJK
DEFINITIONS:
sigma_y
562 Geomechanics
strgrd_x
DEFAULTS:
There is no default for initial stress.
CONDITIONS:
Initial stress is required if the plastic deformation option is used. See *GEOMECH.
EXPLANATION:
There are a number of methods for specifying initial stress distributions in the reservoir.
Uniform Distribution
Use *STRESS without *IJK to specify an initially uniform stress state to the entire reservoir.
Uniform by Group
Use *STRESS *IJK to assign stresses by one or more groups of blocks. The syntax is similar
to the *IJK array input option described in chapter Keyword Data Entry System, except that
each I-J-K range is followed by four values. Each grid block that is not referenced by the
*IJK ranges will have zero stress values.
Geomechanics 563
Radial Grid
The following associations exist between the radial and Cartesian stress components.
Radial
Y axis
sigma_y
*STRESJ *ALL
Axial (Z)
Z axis
sigma_z
*STRESK *ALL
Tangential
X axis
sigma_x
*STRESI *ALL
RZ plane
YZ plane
sigma_yz
*STRESSH *ALL
564 Geomechanics
*STRESS3D, *STRESSGRAD3D,
PURPOSE:
Assign the initial stress distribution for 3D finite elements.
FORMAT:
*STRESS3D
sigma_x sigma_y sigma_z sigma_xy sigma_yz sigma_xz
*STRESSGRAD3D
strgrd_x strgrd_y strgrd_z strgrd_xy strgrd_yz strgrd_xz
or
*STRESS3D
{ *IJK i1:i2 j1:j2 k1:k2
sigma_x sigma_y sigma_z sigma_xy sigma_yz sigma_xz }
or
*STRESS3D *ALL
{ sigma_x sigma_y sigma_z sigma_xy sigma_yz sigma_xz } (N lines)
or
*STRESS3D
*STRESI *ALL sigma_xy ... (N values)
*STRESJ *ALL sigma_xy ... (N values)
*STRESK *ALL sigma_xy ... (N values)
*STRESSHIJ *ALL sigma_xy ... (N values)
*STRESSHJK *ALL sigma_yz ... (N values)
*STRESSHIK *ALL sigma_xz ... (N values)
DEFINITIONS:
sigma_x
Geomechanics 565
strgrd_x
DEFAULTS:
There is no default for initialize stress.
CONDITIONS:
Initial stress is required if the plastic deformation option is used. See *GEOMECH.
Keyword *STRESS3D and subsequent values which indicate initial values of stresses on
finite elements must be entered in a coupled data set. The convention of stresses on a block is
shown in the figure.
566 Geomechanics
In the above figure, sigma_x means normal stress on a surface perpendicular to the X axis,
sigma_xy means that shear stress on a surface is perpendicular to the X axis and its traction
direction is parallel to the Y axis. In addition, the shear stresses are symmetry, therefore:
sigma_yx = sigma_xy
sigma_zx = sigma_xz
sigma_zy = sigma_yz
EXPLANATION:
There are a number of methods for specifying initial stress distributions in the reservoir.
Uniform Distribution
Use *STRESS3D without *IJK to specify an initially uniform stress state to the entire
reservoir.
Uniform by Group
Use *STRESS3D *IJK to assign stresses by one or more groups of blocks. The syntax is
similar to the *IJK array input option described in chapter Keyword Data Entry System,
except that each I-J-K range is followed by six values. Each grid block that is not referenced
by the *IJK ranges will have zero stress values.
Geomechanics 567
Example #1:
Consider a reservoir having 3x3x3 grids as shown in the below figure. Assuming that normal
effective stresses in three directions on the first layer of the reservoir are 5000 psi, stresses on
the second layer are 5500 psi and stresses on the third layer are 6000 psi. The keywords
entered in a data set are expressed as:
*STRESS3D
*IJK
1:3
5000
*IJK
1:3
5500
*IJK
1:3
6000
1:3
5000
1:3
5500
1:3
6000
1
5000
2
5500
3
6000
** layer 1
0
0
** layer 2
0
0
** layer 3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
568 Geomechanics
5000
5000
5000
5000
5000
5000
5000
5000
5000
5500
5500
5500
5500
5500
5500
5500
5500
5500
5000
5000
5000
5000
5000
5000
5000
5000
5000
5500
5500
5500
5500
5500
5500
5500
5500
5500
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
6000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
5000
5500
6000
Example #2:
If all the grid blocks have the same normal stresses, for instance 5000 psi in each direction.
The keyword is entered in the data set as:
*STRESS3D
5000
5000
5000
Example #3
Assuming the stress gradient is 5 psi/ft in the normal directions. The keyword is entered as:
*KDIR *UP
*STRESSGRAD3D
** OR
*KDIR *DOWN
*STRESSGRAD3D
-5
-5
-5
Since shear stresses are zero the corresponding keywords are absent.
Geomechanics 569
*GEORBLOCK
PURPOSE:
Specify the reference block for stress gradient option.
FORMAT:
*GEORBLOCK
*IJK i1 j1 k1
DEFAULT:
If keyword *GEORBLOCK is absent, the first grid block of the reservoir is used as a
reference block from which stress gradients are computed.
DEFINITION:
i1
EXPLANATION:
Keyword *GEORBLOCK is designed so that the stress gradient can be determined when a
reference grid block is selected among the reservoir grid blocks. Each direction index must lie
within the fundamental grid indices defined by keyword *GRID in the Reservoir Description
chapter.
Example
*STRESSGRAD
*GEORBLOCK
*IJK
1
570 Geomechanics
5
5
5
1
5
**Reference block is:
*PRESCBC
PURPOSE:
Prescribe displacement-type boundary conditions on nodal points of a finite element.
FORMAT:
*PRESCBC
{ node1(:node2) direction displacement }
or
*PRESCBC
{ *PLANE p1(:p2)
{ node1(:node2) direction displacement } }
or
*PRESCBC
{ *IJK i1:i2
j1:j2
k1:k2
{local node1(:local node2) direction displacement}}
DEFINITIONS:
*PRESCBC
Enable prescribed displacement boundary conditions. This keyword removes
the default essential boundary conditions where nodes are constrained on
the sides and bottom of the reservoir, and prepares for the users prescribed
displacement-type boundary conditions table.
node1(:node2)
Single nodal point (or range of nodal points) of a finite element to which the
boundary condition is assigned. For the case of *KDIR *DOWN (as shown
in the figure below) the nodal points on finite elements are numbered from
top to bottom and from left to right. In the case of *KDIR *UP, the nodal
points are numbered from bottom to top and from left to right.
Note that an element node that is not associated with any active element (grid
block) is not included in the node ordering. This occurs when a node lies in
the interior of a region of null blocks. Since the distribution of null blocks
can differ from plane to plane, node ordering and total nodes may differ also
between planes.
*IJK
Keyword for reservoir grid blocks
i1:i2
Geomechanics 571
j1:j2
02
01:02
displacement
CONDITIONS:
If the keyword *PRESCBC is entered in a dataset, prescribed boundary conditions must be
given.
DEFAULTS:
If keyword *PRESCBC is absent, constraints on the left, right and bottom of a plane are used.
If sub-keyword *PLANE is absent, all the planes have the same prescribed boundary conditions.
572 Geomechanics
EXPLANATION:
Keyword *PRESCBC allows you to assign prescribed boundary conditions at any node on
any finite element and on any plane which is cut from the reservoir either along the I or along
the J direction.
If keyword *PRESCBC is present, prescribed boundary conditions must be supplied for
appropriate nodes on each plane; otherwise the boundary nodes of finite elements are not
constrained by any conditions. There are two approaches:
First approach: Using global nodal points.
In this approach, finite elements as well as their nodal points on a plane must be determined
in advance before the prescribed boundary conditions can be assigned on those nodal points.
This approach is quite uncomfortable when counting elements and node numbers for a
reservoir having complicated geometry. This approach is used for 2D finite elements only.
Example:
Consider two planes i and i+1. Without keyword *PRESCBC, default boundary conditions
are shown in the following figure.
With the following *PRESCBC data, prescribed boundary conditions are given on plane i and
plane i+1 as shown in the following figure.
*PRESCBC
*PLANE
** Node
4
6
7
9:11
*PLANE
** Node
4
6
7
9
11:12
i+1
Direction
02
01:02
02
01:02
Displacement
0.0
0.0
0.0
0.0
Direction
01:02
01
01:02
01
01
Displacement
0.0
0.0
0.0
0.0
0.0
Geomechanics 573
574 Geomechanics
It should be noted that when *GRID *RAD is used, the keyword *PLSTRAINY is
automatically applied. Therefore, the notation of local nodal points is shown above must
be taken into account.
Taking the above example, on plane i and plane i+1, NJ = 3 and NK = 2. Keyword *KDIR
DOWN is used and keyword *PLSTRAINY is absent that means the plane is perpendicular
to the I direction. The prescribed boundary conditions are expressed as:
Geomechanics 575
*PRESCBC
** For plane i
*IJK
i
1
1
** j
**local node
4
*IJK
i
2
1
** j
**local node
1
4
*IJK
I
3
1
** j
**local node
1
3:4
*IJK
I
1
2
** j
**local node
3
*IJK
I
2
2
** j
**local node
2:3
*IJK
I
3
2
** j
**local node
2
4
** For plane i+1
*IJK
i+1
1
1
**
**local node
4
*IJK
i+1
2
1
**
**local node
1
4
*IJK
i+1
3
1
**
**local node
1
3
*IJK
i+1
1
2
**
**local node
3
*IJK
i+1
2
2
**
**local node
2:3
*IJK
i+1
3
2
**
**local node
2:4
576 Geomechanics
= 1, k = 1
direction
02
= 2, k = 1
direction
02
02
= 3, k = 1
direction
02
01:02
= 1, k = 2
direction
01:02
= 2, k = 2
direction
01:02
= 3, k = 2
direction
01:02
01:02
j = 1, k = 1
direction
01:02
j = 2, k = 1
direction
01:02
01:02
j = 3, k = 1
direction
01:02
01
j = 1, k = 2
direction
01
j = 2, k = 2
direction
01
j = 3, k = 2
direction
01
displacement
0.0
displacement
0.0
0.0
displacement
0.0
0.0
displacement
0.0
displacement
0.0
displacement
0.0
0.0
displacement
0.0
displacement
0.0
0.0
displacement
0.0
0.0
displacement
0.0
displacement
0.0
displacement
0.0
*PRESCBC3D
PURPOSE:
Prescribed displacement-type boundary conditions on a nodal point of a 3D finite element.
FORMAT:
*PRESCBC
*IJK i1:i2 j1:j2 k1:k2
node1(:node2) direction displacement
DEFAULT:
If keyword *PRESCBC3D is absent, the default essential boundary condition is applied.
DEFINITION:
*PRESCBC3D
Similar to the keyword *PRESCBC, the keyword *PRESCBC3D is applied
for a case of 3D finite elements. The keyword removes all the essential
boundary constraints on a reservoir and prepares for the input of prescribed
displacement-type boundary constraints on finite element nodes.
*IJK
Keyword for reservoir grid blocks.
i1:i2
Local nodal point (or a range of nodal points) of a finite element to which the
boundary condition is assigned. *KDIR *UP and *KDIR *DOWN are taken into
account when a local nodal point is used for prescribed boundary conditions.
direction
02
03
Geomechanics 577
displacement
CONDITIONS:
If the keyword *PRESCBC3D appears, prescribed boundary conditions must be given.
Otherwise, the reservoir will freely move in space. The solution, thus, is hardly predicted.
DEFAULTS:
If the keyword *PRESCBC3D is absent, essential boundary conditions are applied i.e. left,
right, front, back and bottom sides of a reservoir are constrained.
EXPLANATION:
Beside the essential boundary conditions which are default, the optional keyword
*PRESCBC3D is designed so that users can select any grid block of a reservoir and assign a
displacement value on it. When the keyword is entered in a data set, sub keyword *IJK must
also be accompanied to indicate the constrained block. Following that local node number,
direction of the displacement and value of the displacement must be given. If the keyword
*PRESCBC3D appears and the sub keyword *IJK as well as prescribed displacement are not
entered, the reservoir is moving freely. The solution, therefore, can not be predicted. The
local node numbers of a finite element also depend on the keyword *KDIR *UP or *KDIR
*DOWN. The local node numbers used in the module are shown as follows:
578 Geomechanics
Assuming the reservoir is constrained all its sides except the top side; the boundary
conditions are expressed as follows:
For a case of *KDIR *DOWN
*PRESCBC3D
** Keyword for prescribed boundary condition
**Bottom
*IJK 1:3 1:3
3 ** Keyword for grid block and I,J,K block
** local node
direction
displacement
5:8
03 0.0 ** nodes 5, 6, 7, 8 are constrained in Z direction
** Side 1
*IJK 1:3 3
1:3
** local node
direction
displacement
3:4
02
0.0
7:8
02
0.0
** Side 2
*IJK 3 1:3
1:3
** local node
direction
displacement
2:3
01
0.0
6:7
01
0.0
** Side 3
*IJK 1:3 1
1:3
** local node
direction
displacement
1:2
02
0.0
5:6
02
0.0
** Side 4
*IJK 1 1:3
1:3
** local node
direction
displacement
1
01
0.0
4
01
0.0
5
01
0.0
8
01
0.0
Geomechanics 579
** Side 2
*IJK 3
1:3
1:3
*IJK
** Side 3
1:3
1
1:3
*IJK
** Side 4
1
1:3
1:3
direction
02
02
displacement
0.0
0.0
** local node
2:3
6:7
direction
01
01
displacement
0.0
0.0
** local node
1:2
5:6
direction
02
02
displacement
0.0
0.0
** local node
direction
displacement
1
01
0.0
4
01
0.0
5
01
0.0
8
01
0.0
Assuming that the top of reservoir is pulled by an amount of 0.5 ft (or m)
indicated by the arrows on the top, the prescribed boundary conditions at
those nodal points are given as:
For *KDIR *DOWN
*IJK
1:3
1:3
1
** local node
direction
displacement
1:4
03
-0.5
** minus sign since its direction is opposite to Z direction
For *KDIR *UP
*IJK
1:3
1:3
3
** local node
direction
displacement
5:8
03
0.5
** plus sign not minus sign
It should be noted that, the keyword *PRESCBC3D is only used once. When the keyword
*PRESCBC3D appears, prescribed boundary conditions must be given.
580 Geomechanics
*PLOADBC
PURPOSE:
Specify external loads on any nodal points of a finite element.
FORMAT:
*PLOADBC
{ node1(:node2) I/J_load K_load }
or
*PLOADBC
{ *PLANE p1(:p2)
{ node1(:node2) I/J_load K_load } }
or
*PLOADBC
{ *IJK i1:i2
j1:j2 k1:k2
{local node1(:local node2) I/J_load K_load } }
DEFINITIONS:
*PLOADBC
This keyword specifies external loads applied to nodal points.
node1(:node2)
Single nodal point (or range of nodal points) of a finite element to which the
boundary condition is assigned. See the description for *PRESCBC.
*IJK
Keyword for reservoir grid blocks
i1:i2
Geomechanics 581
I/J_load
Load (kN | tonf) applied to the indicated node(s) in (1) the I direction when
strains are computed in planes normal to the J direction (*PLSTRAINY is
present), and (2) the J direction when strains are computed in planes normal
to the I direction (*PLSTRAINY is absent). The load value is positive or
negative depending on the actual load direction relative to the grid direction.
Enter a zero value if no load is applied to the node(s) on this direction (e.g.,
only K_load is non-zero).
K_load
Load (kN | tonf) applied to the indicated node(s) in the K direction. The load
value is positive or negative depending on the actual load direction relative to
the grid direction. Enter a zero value if there is no load applied to the node(s)
(e.g., only I/J_load is zero).
*PLANE p1(:p2)
See the description for *PRESCBC.
DEFAULTS:
If keyword *PLOADBC is absent then all external loads are zero.
If sub-keyword *PLANE is absent, all the planes have the same prescribed boundary conditions.
EXPLANATION:
Keyword *PLOADBC allows you to assign external loads at any node on any finite element
and on any plane which is cut from the reservoir either along the I or along the J direction.
Similar to the optional keyword *PRESCBC, there are two different approaches which are
used to describe the loading boundary as follows:
First approach: Using global nodal points
Example:
582 Geomechanics
The point loads at nodes as showed in the above figures is specified as follows.
*PLOADBC
*PLANE i
** Node
Y Load
4:6
0
10
15
12
10
*PLANE i+1
** Node
Y Load
5
100
7
0
8
-10
9
0
11
15
Z Load
100
0
10
Z Load
0
10
10
15
0
1
1
** j = 1, k = 1
**local node
Y load
3:4
0
*IJK
I
2
1
** j = 2, k = 1
**local node
Y load
1:2
0
*IJK
I
3
1
** j= 3, k = 1
**local node
Y load
4
15
*IJK
I
1
2
** j= 1, k = 2
**local node
Y load
3:4
0
*IJK
I
3
1
** j= 2, k = 2
**local node
Y load
1:2
0
*IJK
I
3
2
** j= 3, k = 2
**local node
Y load
3
10
** on plane i+1
*IJK
i+1
1
1
** j = 1, k = 1
**local node
Y load
3
100
*IJK
i+1
2
1
** j = 2, k = 1
**local node
Y load
2
100
3
-10
4
0
Z load
100
Z load
100
Z load
0
Z load
100
Z load
100
Z load
10
Z load
0
Z load
0
10
10
Geomechanics 583
*IJK
*IJK
*IJK
*IJK
584 Geomechanics
i+1
3
1
**local node
1
2
3
i+1
1
2
**local node
4
i+1
3
1
**local node
1
3
4
i+1
3
2
**local node
1
2
4
** j= 3, k = 1
Y load
0
-10
15
** j= 1, k = 2
Y load
100
** j= 2, k = 2
Y load
100
0
-10
** j= 3, k = 2
Y load
-10
0
15
Z load
10
10
0
Z load
0
Z load
0
15
10
Z load
10
15
0
*PLOADBC3D
PURPOSE:
Specify external load on any nodal points of a 3D finite element.
FORMAT:
*PLOADBC3D
{*IJK
i1:i2 j1:j2
node1(:node2) I_load
k1:k2
J_load
K_load }
DEFINTIONS:
*PLOADBC3D
The keyword indicates external loads applied to nodal points.
*IJK
Keyword for reservoir grid blocks
i1:i2
Single local nodal point (or range of nodal points) of a finite element to
which the load is assigned. See the keyword *PRESCBC3D for details of
local nodal point.
I_load
DEFAULTS:
If the keyword *PLOADBC3D is absent, there is no external load.
Geomechanics 585
EXPLANATION:
Similar to the keyword *PLOADBC for 2D plane strain, the optional keyword *PLOADBC3D
is applied for 3D finite element. With this keyword, the user can assign external loads on any
nodal points of a 3D finite element. The load value is positive or negative in one direction
depending on the actual load direction relative to the grid direction. Values of I_load, J_load
and K_load must be entered in the table even though they are zero. External loads expressed on
a finite element also strongly depends on *KDIR *UP and *KDIR *DOWN.
Example:
Assuming external loads 1 KN are applied at the bottom edge on side 2 of the above reservoir
as illustrated by arrows. Expressing the above loads in a data set is shown as:
For *KDIR *DOWN
*PLOADBC3D
*IJK
3
1:3
** node
I_load
6:7
-1.0
** negative
For *KDIR *UP
*PLOADBC3D
*IJK
3
1:3
** node
I_load
2:3
-1.0
** negative
586 Geomechanics
** I = 3, J=1 to J=3, K = 3
J_load
K_load
0.0
0.0
load due to opposite direction to X
1
** I = 3, J=1 to J=3, K = 1
J_load
K_load
0.0
0.0
load due to opposite direction to X
*DLOADBC
PURPOSE:
Specify distributed loads along an edge of a finite element.
FORMAT:
*DLOADBC
{ *ELEMENT ele
{ en1:en2 NL1
TL1
NL2
TL2 } }
TL1
NL2
TL2 } } }
{ *IJK i1:i2
j1:j2
k1:k2
{ en1:en2 NL1 TL1 NL2
TL2 } } }
or
*DLOADBC
{ *PLANE p1
{ *ELEMENT ele
{ en1:en2 NL1
or
*DLOADBC
DEFINITIONS:
*DLOADBC
Specify distributed loads for finite element edges.
*ELEMENT ele
Element number. The allowed a range is 1 to the maximum number of nonnull elements in a plane. The definition of null elements is the same as that
of null grid blocks in the reservoir section. Null elements are treated as nonexisting elements.
en1:en2 NL1 TL1 NL2 TL2
en1:en2 are the starting and ending nodes, respectively, of an edge of finite
element ele. An edge is defined by two nodes on the element. More than
one of these data lines may follow *ELEMENT ele.
The remaining four quantities are load per unit length (kN/m | tonf/ft). Enter
zero for a quantity for which no load is specified.
NL1
TL1
NL2
TL2
Geomechanics 587
*PLANE p1
See the description for *PRESCBC. Only one plane number is allowed.
DEFAULTS:
If sub-keyword *PLANE is absent, all planes have the same distributed load.
EXPLANATION:
Keyword *DLOADBC allows you to distribute loads on edges of finite elements. An edge is
determined by two sequential nodes on the element. There are 4 edges on an element
constituted by 4 nodes, and there are 8 edges on an element constituted by 8 nodes or 9
nodes. Similar to prescribed boundary conditions and point loads, there are also two different
approaches to define the distributed load on the edges of a finite element.
First approach: Based on global nodal points on a plane.
In this approach, rules for assigning starting nodes and ending nodes correctly are:
i)
For plane strains along I direction: starting nodes and ending nodes must be
entered in the counter clockwise direction.
ii) For plane strains along J direction: (i.e. when keyword *PLSTRAINY appears):
starting nodes and ending nodes must be entered in the clockwise direction.
iii) For axis-symmetric case: starting nodes and ending nodes must be entered in the
clockwise direction.
An illustration of distributed edge loads on one edge is shown in the following figure.
588 Geomechanics
If the load is positive its direction should be the same as the coordinate direction, and if the
load is negative its direction is opposite to the coordinate direction.
Example:
NL1
10
TL1
0
NL2
5
TL2
0
NL1
1
TL1
2
NL2
5
TL2
5
NL1
10
TL1
1
NL2
10
TL2
1
NL1
2
TL1
1
NL2
2
TL2
1
NL1
0
TL1
1
NL2
0
TL2
1
NL1
4
7
TL1
4
8
NL2
3
1
TL2
3
2
NL1
4
TL1
5
NL2
3
TL2
1
Geomechanics 589
Note the zero values in some column corresponding to no force. In plane i+1, there is one
null element; thus, the total number of elements in that plane is only 5 instead of 6 as shown
in plane i. Since the strains are computed in plane normal to the I direction, the starting
node and ending node are entered in the counter clockwise direction as shown in the example.
Second approach: Based on the local nodal points which are defined in the section of
keyword *PRESCBC.
Using this approach, the above example of distributed loads can be expressed as:
*DLOADBC
** on plane i
*IJK
i
1
1
** local node1:local node2
4:1
*IJK
i
1
2
** local node1:local node2
2:3
*IJK
i
2
2
** local node1:local node2
2:3
*IJK
i
3
2
** local node1:local node2
3:2
** on plane i+1
*IJK
i
2
1
** local node1:local node2
4:1
*IJK
i
3
1
** local node1:local node2
4:1
3:4
*IJK
i
3
2
** local node1:local node2
3:4
590 Geomechanics
NL1
10
TL1
0
NL2
5
TL2
0
NL1
1
TL1
2
NL2
5
TL2
5
NL1
10
TL1
1
NL2
10
TL2
1
NL1
2
TL1
1
NL2
2
TL2
1
NL1
0
TL1
1
NL2
0
TL2
1
NL1
4
7
TL1
4
8
NL2
3
1
TL2
2
2
NL1
4
TL1
5
NL2
3
TL2
1
*DLOADBC3D, *DLOADIJK
PURPOSE:
Specify distributed load on a surface of a 3D finite element.
FORMAT:
*DLOADBC3D
i1:i2 j1:j2 k1:k2
{*IJK
node1 node2 node3 node4 load }
*DLOADIJK
i1:i2 j1:j2 k1:k2
{*IJK
*Face
node loadx loady loadz }
DEFINTIONS:
*DLOADBC3D
Specify distributed normal loads on a surface of a 3D finite element.
*IJK
Keyword for reservoir grid blocks.
i1
Geomechanics 591
node3
*DLOADIJK
Specify distributed loads on three directions at each node of an element.
*Face
CONDITIONS:
When using *DLOADBC3D, four nodal points on a surface of a 3D finite element must be
entered.
When using *DLOADIJK, face of the element must be defined before the nodes are assigned.
The local nodes must lie on the surface of the element.
EXPLANATION:
Distributed Normal Loads
Keyword *DLOADBC3D allows the user to distribute loads evenly on a surface of a 3D finite
element. As mentioned in the keyword *GEOM3D, a 3D finite element consists of 8 nodal
points and each face of it is composed by 4 nodal points. Therefore, to indicate which surface of
a finite element is subject to distributed loads, a set of four nodal points must be entered but is
not necessarily in order. A uniform load is given after the nodal points. If the load value is
positive, the surface of a finite element is compressed. If the load value is negative, the surface
is stretched. Again, *KDIR *DOWN and *KDIR *UP must be taken into account.
592 Geomechanics
Example: Consider the reservoir shown below. A uniform distributed load of 1kN/m2 is
applied on one block of the reservoir. Since the load is positive, the arrows are pointing on
the surface as illustrated.
1
node2
2
node3
3
node4
4
load
1.0
3
node2
6
node3
7
node4
8
load
1.0
Geomechanics 593
(i)
(ii)
Enter keyword *IJK to determine the region on which distributed loads are applied.
(iii)
(iv)
Enter node numbers with loads in directions. The load is positive when it points to the
same direction of the coordinate.
Example 1:
Using the above example of DLOADBC3D, the equivalent data for this keyword are given as
follows:
For *KDIR *DOWN:
*DLOADIJK
*IJK 1 2 1
*TOP **loadx
1
0
2
0
3
0
4
0
loady
0
0
0
0
loadz
13.88
13.88
13.88
13.88
**
**
**
**
Unit
Unit
Unit
Unit
load
load
load
load
in
in
in
in
psi
psi
psi
psi
The positive load in this case indicates that the surface is compressed.
For *KDIR *UP:
*DLOADIJK
*IJK 1 2 1
*TOP **loadx
1
0
2
0
3
0
4
0
loady
0
0
0
0
loadz
-13.88
-13.88
-13.88
-13.88
**
**
**
**
Unit
Unit
Unit
Unit
load
load
load
load
in
in
in
in
psi
psi
psi
psi
The negative load in this case indicates that the surface is compressed.
Example 2:
When the shearing loads along the K direction are applied to side 2 and side 4, the data entry
is given as:
594 Geomechanics
*DLOADIJK
*IJK 1 1:3 1:3
*LEFT ** equivalent to side 4 of the figure
1
0
0
-13.88 ** Stretching this face
4
0
0
-13.88 ** along K direction
5
0
0
-13.88
8
0
0
-13.88
*IJK 3 1:3 1:3
*RIGHT ** equivalent to side 2 of the figure
1
0
0
13.88 ** Compressing this face
4
0
0
13.88 ** along K direction
5
0
0
13.88
8
0
0
13.88
Example 3:
When the normal distributed loads along the I direction are applied to side 4, the data entry is
given as:
For KDIR DOWN:
*DLOADIJK
*IJK 1 1:3 1:3
*LEFT ** equivalent
1
13.88
4
13.88
5
13.88
8
13.88
Example 4:
Another feature of the keyword *DLOADIJK is that the number of nodes may vary from 1 to
4. For instance, if only three nodes at the corner of the top surface of the element (1,1,1) in
the figure with KDIR DOWN are loaded, the data entered in the geomechanical section is:
*DLOADIJK
*IJK 1 1
*TOP
1
2
4
1
0
0
0
0
0
0
13.88
13.88
13.88
Here there are only three nodes on a TOP face subject to distributed loads. In this case, the
loads are distributed on the area defined by nodes 1, 2 and 4.
Geomechanics 595
It should be noted that the above distributed loads are different from these distributed loads.
*DLOADIJK
*IJK 1 1
*TOP
1
2
4
3
1
0
0
0
0
0
0
0
0
13.88
13.88
13.88
0.0
In this case the loads are distributed on the area defined by 4 nodes 1, 2, 3 and 4.
596 Geomechanics
*GLOADBC, *SPECGRAV
PURPOSE:
Specify direction and magnitude of body forces on a per-plane basis.
FORMAT:
*GLOADBC
{ p1(:p2) theta }
*SPECGRAV spec_grav
DEFINITIONS:
*GLOADBC
Specify gravity load direction on a per-plane basis.
p1(:p2)
Single plane number, or range of plane numbers. See the description for
*PRESCBC.
theta
CONDITIONS:
Keywords *GLOADBC and *SPECGRAV must appear together if at all, that is, they must be
either both absent or both present.
DEFAULTS:
If keyword *GLOADBC is present but does not refer to a particular plane, then the angle is
zero for that plane.
There is no default for *SPECGRAV. If *SPECGRAV is absent then *GLOADBC must be
absent as well.
EXPLANATION:
Keyword *GLOADBC allows you to assign a body force on any plane. Specific gravity
controlled by keyword *SPECGRAV is used to compute the body force per unit volume for
each element in the plane. Keyword *GLOADBC is active only when *SPECGRAV is given.
Geomechanics 597
Example:
*GLOADBC
** plane #
1
2:5
*SPECGRAV 1.2
** theta (degrees)
10
20
** density is 1.2x9806.65 = 11767 kg/m3
On plane # 1 the K axis is 10 degrees from vertical, whereas on planes 2, 3, 4 and 5 the K
axis is 20 degrees from vertical.
598 Geomechanics
*GLOADBC3D
PURPOSE:
Specify direction and magnitude of body forces on a per-plane basis in 3D.
FORMAT:
*GLOADBC3D
{ p1(:p2)
theta1
theta2 }
*SPECGRAV spec_grav
DEFINITIONS:
*GLOADBC3D
Specify gravity load direction on a per-plane basis when 3D finite element is
used in computation.
p1(:p2)
Single plane number, or range of plane numbers. The plane number for 3D
finite element is equivalent to the index I on X axis.
theta1
CONDITIONS:
Keywords *GLOADBC3D and *SPECGRAV must appear together if at all, that is, they must
be either both absent or both present.
DEFAULTS:
If keyword *GLOADBC3D is present but does not refer to a particular plane, then the angles
theta1 and theta2 are 90 degrees.
There is no default for *SPECGRAV. If *SPECGRAV is absent then *GLOADBC must be
absent as well.
Geomechanics 599
EXPLANATION:
Keyword *GLOADBC3D allows you to assign a body force in space. Specific gravity
controlled by keyword *SPECGRAV is used to compute the body force per unit volume for
each element in the plane. Keyword *GLOADBC3D is active only when *SPECGRAV is
given.
Note: The angles with respect to X axis and Y axis must satisfy the following condition:
{cos(theta1)}2 + {cos(theta2)}2 1
Example:
*GLOADBC3D
** plane #
1
2:5
*SPECGRAV 1.2
** theta1 (degrees)
** theta2
70
80
90
60
** density is 1.2x9806.65 = 11767 kg/m3
On plane # 1 (i.e. I = 1) , the gravity vector made an angle 70 degrees with respect to X axis
and an angle 80 degrees with respect to Y axis. Whereas, on plane 2:5 (I=2 to I=5), the angles
are 90 degrees and 60 degrees with respect to X axis and Y axis.
600 Geomechanics
*RIGIDNULL
PURPOSE:
Assign fixed boundary to nodes around a null block.
FORMAT:
*RIGIDNULL *ALL
or
*RIGIDNULL *ELEMENT
{ plane element }
DEFINITIONS:
*RIGIDNULL *ALL
Specifies fixed boundary for nodes around all null blocks.
*RIGIDNULL *ELEMENT
Specifies fixed boundary for nodes around null blocks associated with the
indicated elements.
plane element
CONDITIONS:
If keyword *RIGIDNULL is present, only one of sub-keyword *ALL or *ELEMENT may be
used.
DEFAULT:
When keyword *RIGIDNULL is absent, movement is allowed for nodes on the edge
common to a null block and a non-null block in the plane in which strain is calculated. Note
that, by definition, node movement is not allowed in the direction perpendicular to the strain
plane.
EXPLANATION:
Keyword *RIGIDNULL allows you to specify null blocks whose surrounding nodes will be
completely rigid, that is, will not be allowed to move during calculation of the strain problem.
Thus, all nodal points on the attached edges around the specified null block are not moving in
any direction.
Example:
In the figures, plane i contains two null blocks while plane i+1 contains 3 null blocks.
Geomechanics 601
602 Geomechanics
Geomechanics 603
*RIGIDTOP
PURPOSE:
Constrain vertical movement on the cap rock of a reservoir.
FORMAT:
*RIGIDTOP
DEFINITIONS:
*RIGIDTOP
This single keyword causes the cap rock of a reservoir to be vertically
constrained at the top.
DEFAULT:
If keyword *RIGIDTOP is absent, then the cap rock of the reservoir is either not constrained
or is constrained by another keyword such as *PRESCBC.
EXPLANATION:
Keyword *RIGIDTOP allows you to assign constrained boundary conditions at the top of the
reservoir on the vertical direction. This keyword is an alternative to using keyword
*PRESCBC to assign displacement boundary conditions on a reservoir. However, keyword
*RIGIDTOP is more convenient because the essential boundary conditions are not
removed automatically as they are when keyword *PRESCBC is used. Essential boundary
conditions are defined as laterally constrained movements on vertical sides of a reservoir and
vertically constrained movements at the bottom of a reservoir.
604 Geomechanics
Geomechanics Domain
*GEODOMAIN
PURPOSE:
Specify grid sub domains in which geomechanics calculations are performed.
FORMAT:
*GEODOMAIN *ALL
or
*GEODOMAIN *IJK
{ i1:i2 j1:j2 k1:k2 }
DEFINITIONS:
*GEODOMAIN *ALL
Geomechanics calculations are performed for all active grid blocks.
*GEODOMAIN *IJK
Geomechanics calculations are performed only in selected regions of grid
blocks called geomechanics domains.
i1:i2 j1:j2 k1:k2
Range of grid indices in the I, J and K directions. Each index value must fall
within 1 to the maximum number of blocks in that direction (see keyword
*GRID). Each lower index must not exceed the corresponding upper index.
Enter a single index as a range, for example, 5:5.
DEFAULT:
If keyword *GEODOMAIN is absent, then *GEODOMAIN *ALL is assumed.
If keyword *GEODOMAIN *IJK is present, then geomechanical calculations are not done
for blocks that are not referenced explicitly.
EXPLANATION:
Keyword *GEODOMAIN allows you to restrict coupled geomechanics calculations to
specified sub domains of a reservoir, resulting in increased efficiency and saving in CPU time.
Geomechanical response results (stresses, strains, Young modulus, Poisson ratio, etc.) are
calculated only for blocks in the geomechanics domains. However, to satisfy textual and
graphical output requirements these quantities are given zero values for blocks that are not in
a geomechanics domain.
Example: In an axis-symmetry reservoir with NI = 9, NJ = 1, NK = 8, there are two
geomechanics domains defined as follows:
*GEODOMAIN *IJK
** i1:i2
j1:j2
1:3
1:1
9:9
1:1
k1:k2
1:8 ** domain 1
1:8 ** domain 2
Geomechanics 605
As shown in the figure, the marked grid blocks belong to geomechanics domains and the
blank grid blocks are outside the geomechanics domains.
606 Geomechanics
Coupling Options
*GCOUPLING
PURPOSE:
Select porosity formula for coupling between flow and deformation.
FORMAT:
*GCOUPLING ( 0 | 1 | 2 | 3 )
DEFINITIONS:
*GCOUPLING 0
Fluid flow porosity does not depend upon deformation.
*GCOUPLING 1
Porosity is a function of pressure, temperature and volumetric strain.
*GCOUPLING 2 & 3
Porosity is a function of pressure, temperature and total mean stress.
DEFAULT:
If keyword *GCOUPLING is absent, then *GCOUPLING 2 is assumed.
EXPLANATION:
Background
Fluid flow and formation deformation (geomechanics) are coupled together in a sequential
manner, that is, the two calculations alternate while passing information back and forth. The
fluid flow calculation updates the pressures and temperatures over an interval specified by
*GCUPDATE. The geomechanics module updates the formation deformation in response to
the new pressures and temperatures. To complete the loop, the geomechanics module sends
the new deformation information back to the fluid flow calculation for use in the next time
interval. It is clear that information flows from fluid flow to geomechanics via pressure and
temperature. However, it is not obvious how information flows back the other way.
The fluid flow module calculates porosity as a function of pressure and temperature, in a way
that pore volume and hence mass is conserved between time steps. Here conserved means
that the porosity at the beginning of a time step is equal to the porosity at the end of the
previous time step, at that particular pressure and temperature. When the porosity function
(p,T) itself does not change with time, mass conservation across time steps is ensured.
However, the porosity function can vary between time steps and still conserved mass. Let pn
and Tn be the solution for a grid block for time step n that used porosity function n(p,T).
The next time step n+1 starts with p = pn and T = Tn but has a different porosity function
n+1(p,T). Porosity and hence mass will be conserved between these two time steps if
n(pn,Tn) = n+1(pn,Tn). However, n and n+1 may have different derivatives with respect to
dependent variables p and T at p=pn and T=Tn.
Geomechanics 607
The geomechanical deformation response is expressed in the fluid flow calculation through
changing parameters in the porosity function. These parameters are kept constant during time
step convergence but are updated between time steps such that porosity and hence mass is
conserved. The deformation response is accounted for on a block-by-block basis since each
grid block has its own set of porosity function parameters.
Keyword *GCOUPLING allows you to select the particular form of porosity function for the
coupling of reservoir flow equations and geomechanical calculations. In the model
descriptions below, superscript n denotes the nth fluid-flow update, n-1 denotes the
previous update, and 0 denotes initial conditions.
(1 2 )(1 + )
0 C R (1 )
where:
E
: Poissons ratio
: Initial porosity
CR
: Rock compressibility
*GCOUPLING 1:
Porosity is a function of pressure, temperature and volumetric strain and has the form:
n +1
where:
p
T
Vp
)(
)
Vpn 1
Vpn Vpn 1
= 0 + 0 n
p pn
Vp
Vp p p n 1
0
) (T T )
:
:
:
:
608 Geomechanics
*GCOUPLING 2:
Porosity is a function of pressure, temperature and total mean stress formula and has the form
(Tran et al, SPE/ISRM 78192):
n +1 = n + (c 0 + c 2 a 1 ) p p n + (c1 + c 2 a 2 ) T T n
where:
c0 =
c1 =
1 dVp
d m
dT
+ Vb c b
V p
0 dp
dp
dp
Vb
Vp
Vb0
c2 =
Vb
Vb0
c b
2 E
a 1 = factor
c b
9 (1 )
2 E
a 2 = factor
9 (1 )
cb
E
Vb
:
:
:
:
:
:
This porosity model is expected to give similar results to *GCOUPLING 1 when the stress
response is small but may give different results when the stress response is significant.
*GCOUPLING 3:
Porosity is a function of pressure, temperature and total mean stress formula and has the form
n +1 = n + c 0 p + c1T + c 2 m
where c0, c1 and c2 are the same as for *GCOUPLING 2.
Example:
*GEOMECH
*GCOUPLING 2
References:
Tran, D., Settari, A. and Nghiem, L.: New Iterative Coupling between a Reservoir Simulator
and a Geomechanics Module, SPE/ISRM 78192, 2002.
Geomechanics 609
*GCFACTOR
PURPOSE:
This optional multiplier factor is only used along with the second coupling formula in the
geomechanical module, i.e. *GCOUPLING 2.
FORMAT:
*GCFACTOR
factor
DEFAULT:
When the second formula of coupling (*GCOUPLING 2) is used, the optional keyword
*GCFACTOR is designed along with its value factor to handle different types of constrained
boundary conditions which are assigned on a reservoir. For instance, when the value of factor is
zero (by default), the reservoir is constrained only at its bottom and freely moves in other
directions (Type 1). If the reservoir is constrained laterally and is free to move vertically (Type
2), the factor has a value of one. If the reservoir is constrained in all directions (Type 3), the
value of factor equals to (1- )/(1-2 ); where is the Poissons ratio of porous rock. For other
types of constrained boundary conditions, the value of factor may be approximated by a real
number between 0 and (1- )/(1-2 ). The above three types of boundary constraints are
illustrated in 2D forms as follows:
610 Geomechanics
*GPTOLMUL
PURPOSE:
Adjust pressure tolerance for computing porosity formulae given in keyword *GCOUPLING.
FORMAT
*GPTOLMUL
multiplier
DEFINITIONS:
*multiplier
A positive real number
DEFAULT:
By default, the pressure tolerance used in computing coefficients for porosity formulae in the
section of coupling options is 1 psi or 6.89475 kPa. This tolerance can be adjusted by an
amount such as: tolerance = tolerance * multiplier; where multiplier is a positive real
number ranging from 1E-6 to 1E+6. As seen in porosity formulae and the coefficients in the
coupling options, because there is existence of the term 1/dp, the pressure tolerance must be
used to avoid the case of infinitive when dp is zero. Depending on the problem, the pressure
tolerance should be adjusted to suit with the pressure change between two consecutive time
steps. For instance, if the pressure change is always less than 1 psi, value of multiplier should
be less than 1.
For example:
*GPTOLMUL
0.5
Geomechanics 611
*GCUPDATE
PURPOSE:
*GCUPDATE
Specify frequency or time of updating geomechanical conditions and the
resulting porosities as specified by keyword *GCOUPLING. *GCUPDATE
may appear more than once in a data set, perhaps with different sub-options.
The action indicated by the default or specified sub-option stays in effect
until the new appearance of this keyword.
freq
Non-negative integer freq indicates that an update is done for each time step
number evenly divisible by freq, in addition to each recurrent data time.
Setting freq = 0 disables updating. This option may result in geomechanics
updating that is unnecessarily frequent when time step sizes are small.
*TIME
Updating is done for each recurrent data time. This is equivalent to setting a
large value for freq. This option may result in geomechanics updating that is
unnecessarily frequent, especially for recurrent data containing many closelyspaced times.
*TNEXT
Updating is done only for the next recurrent data time after which updating is
disabled, resulting in one update per keyword occurrence. This option is
useful when specifying updates at infrequent but know times in recurrent
data.
DEFAULTS:
This keyword is valid also in the Well and Recurrent Data section.
EXPLANATION:
For larger runs the time spent in performing geomechanics calculations can be a significant
fraction of the total simulation run time. If geomechanical changes are small or slow
compared to fluid flow changes, geomechanical coupling can be done less frequently thereby
resulting in shorter total run times. Frequency sub-options *TIME and *TNEXT allow you to
tailor a large run for optimal run times with adequate geomechanical representation.
612 Geomechanics
Keyword *GCUPDATE affects the frequency at which the deformed geomechanics grid is
dumped to the SR2. At the dump times specified by *WSRF *GRIDDEFORM in the
Input/Output Control data section, the grid is dumped only if it has been changed via
geomechanics updating after the last dump time. This prevents dumping of the same grid
more than once to the SR2. For example, suppose that you wish to dump the geomechanics
grid every time that the update is done as specified by *GCUPDATE. Do this with *WSRF
*GRIDDEFORM 1, since the grid will not be dumped until it changes. This is much easier to
specify in data than manually synchronizing *WSRF *GRIDDEFORM with *GCUPDATE.
Keyword *GCUPDATE affects the frequency of dumping geomechanics quantities specified
by *OUTSRF *GRID to the SR2. At dump times specified by *WSRF *GRID, these
geomechanics quantities are dumped only if the geomechanical response has been updated
since the last dump time. This prevents dumping a geomechanics solution that is out-of-date.
The dumping of non-geomechanics quantities does not depend upon *GCUPDATE.
Keyword *GCUPDATE affects the frequency at which geomechanics quantities are updated
for special histories like *OUTSRF *SPECIAL *BLOCKVAR. But special histories are
assigned every time step and interpolation is not done between update times. Therefore, less
frequent geomechanics updates may result in a corresponding special history plot that
exhibits artificial stair-step behaviour. In this case it may be more appropriate to use the
RESULTS Graph source option Add Block Property Versus Time which will not attempt to
plot values between the actual dump times.
Example:
*GCUPDATE 10
** Update every 10 time steps.
*GCUPDATE *TIME ** Update each *TIME/*DATE.
*GCUPDATE *TNEXT ** Update only next *TIME/*DATE.
*TIME 100
*TIME 110
... many well changes from history match
*TIME 245
*GCUPDATE *TNEXT
*TIME 250 ** Geomechanics update time
*TIME 260
...
Geomechanics 613
Porosity Calibration
*CALIB_POR
PURPOSE:
*CALIB_POR
DEFAULTS:
The purpose of this option is to improve the accuracy of porosity computed from a second
order formula of *GCOUPLING 2 given in the EXPLANATION for *GCOUPLING. Since
the current reservoir porosity is computed on the basis of porosity coefficients which were
estimated in the geomechanics module in a previous time step, the reservoir porosity may not
be as accurate as desired. Because of the explicit calculation of those coefficients and the
approximate nature of the porosity function, there is a difference between the porosity
calculated in STARS simulator and the actual porosity calculated by GEOMECH. The
difference could become substantial, especially for plastic deformation and shear dilation.
After the reservoir porosity is determined, it is compared to the actual porosity which is computed
in the geomechanics module. The actual porosity at time step n is defined here as a ratio between
a pore volume at time step n and the initial bulk volume of a grid block. The difference between
the reservoir porosity and actual porosity at the end of one time step will be used to calibrate the
next time step porosity through a weighting function. The main goal of this option is to bring
reservoir porosity close to the corrected porosity gradually at the later time steps.
The porosity formula used in *GCOUPLING 2 in the Coupling Options Section can be
written in an extended form as:
= + (c + c a ) (p p ) + (c + c a ) (T T ) + (k ) c
n +1
2 1 n
2 2 n
where:
cn =
Vnp
V0b
Vnp
V0b
(k )
: Weighting function at kth iteration is expressed as:
(k ) = p f kp + T f Tk
( )
614 Geomechanics
( )
Where:
( )
f kp
( )
f Tk
1
= 1 exp
(
k
)
p
p (nk+11)
1 n +1
pn
1
= 1 exp
(
k
)
Tn +1 Tn(k+11)
1
Tn
(c 0 + c 2 a 1 )n (p n p n 1 )
(c 0 + c 2 a 1 )n (p n p n 1 ) + (c1 + c 2 a 1 )n (Tn Tn 1 )
(c1 + c 2 a 1 )n (Tn Tn 1 )
T =
(c 0 + c 2 a 1 )n (p n p n 1 ) + (c1 + c 2 a 1 )n (Tn Tn 1 )
p =
Example:
*GCOUPLING 2
*CALIB_POR
Geomechanics 615
*NCOUPLING, *PRESSTOL,
*STRESSTOL, *POROSTOL
PURPOSE:
Specify parameters that control iterative coupling to the fluid-flow solution.
FORMAT:
*NCOUPLING
*PRESSTOL
*STRESSTOL
*POROSTOL
ngeo_iter
pres_tol
stress_tol
poros_tol
DEFINITIONS:
*NCOUPLING ngeo_iter
Maximum number of geomechanics updates performed per fluid-flow time
step, where ngeo_iter is an integer greater than or equal to 1. If the multiupdate option is used then normally ngeo_iter is given a large number (e.g.,
20) so that an adaptive convergence criterion like *PRESSTOL can operate
freely.
*PRESSTOL pres_tol
Maximum allowed pressure difference allowed for each grid block, between
consecutive Newton cycles, before the couple geomechanics-fluid-flow
solution is deemed converged. The unit of pres_tol is (kPa | psi) and the
allowed range is o to 10 kPa.
*STRESSTOL stress_tol
Maximum allowed stress difference allowed for each grid block, between
consecutive Newton cycles, before the couple geomechanics-fluid-flow
solution is deemed converged. The unit of stress_tol is (kPa | psi) and the
allowed range is 0 to 10 kPa.
*POROSTOL poros_tol
Maximum allowed porosity difference allowed for each grid block, between
consecutive Newton cycles, before the couple geomechanics-fluid-flow
solution is deemed converged. The quantity poros_tol is dimensionless and
the allowed range is 0 to 10.
DEFAULTS:
If keyword *NCOUPLING is absent then ngeo_iter = 1 is assumed.
If ngeo_iter > 1 and keywords *PRESSTOL, *STRESSTOL and *POROSTOL are absent,
the criterion is pressure difference with pres_tol = 0.01 kPa (?).
616 Geomechanics
CONDITIONS:
At most one of *PRESSTOL, *STRESSTOL and *POROSTOL is used. If more than one of
these keywords is appears, the last one is used.
EXPLANATION:
In most cases only one geomechanics update is performed per time step, which usually is
sufficient for convergence and acceptable results. However, some geomechanics problems
such as arching or Mandels effects may require more than one geomechanics update to
obtain a satisfactory result. In a time step, each geomechanics update occurs before a fluidflow Newton cycle. The number of such updates depends upon the parameters specified by
these keywords as well as the number of fluid-flow Newton iterations (*NEWTONCYC).
Geomechanics 617
*UNLOADSTR
PURPOSE:
Assign total stress to be unloaded at the well boundary.
FORMAT:
*UNLOADSTR
kl
:
(:k2)
:
stress
:
DEFINITIONS:
*UNLOADSTR
This keyword turns on the single-well boundary stress unloading option.
k1(:k2)
Range of grid layers where boundary stress unloading applies.
stress
Radial boundary stress to be unloaded (kPa | psi).
DEFAULTS:
Required keyword for the single-well boundary stress unloading option. There are no
defaults.
CONDITIONS:
Boundary stress unloading option works only with a radial grid. Cartesian grid is not allowed.
EXPLANATION:
This keyword allows the user to specify the amount of external boundary stress to be
unloaded at the wellbore boundary. The actual radius where the unloading occurs is specified
by the *WRADIUS keyword. This unloading may occur as a result of fluid and sand
production close to the wellbore. A large reduction in external boundary support stress may
lead to tension failure for the elements adjacent to the well.
A scheme for removing elements which is shown to fail in tension has NOT been implemented.
Therefore, it is advisable to run the model with some cohesion in this case to avoid stability
problems. As well, consideration of sand flow with petroleum fluid is NOT considered in this
model. These will be considered as a part of CMG's ongoing research in the area.
618 Geomechanics
** Starting time
** Starting timestep size
*WELL
** Well definition (at least one set)
*INJECTOR or *PRODUCER
*INCOMP (injector only)
*TINJW (injector, thermal only)
*OPERATE
*PERF or *PERFV
*TIME or *DATE
** Stopping time
*QUAL
*OPERATE
until it is overwritten by another well type keywords well list. For example, to
assign injection temperature 350 deg and quality 70% to two injectors, use
*INJECTOR 'Injector 1' 'Injector 3'
*TINJW 350
*QUAL .7
*INCOMP *WATER w(1) .. w(numx)
*OPERATE .
Wildcarding Well Names
There are two wild-card characters, ? and *. Only lists of well names, and not lists of
group names, can use the wild-carding. When wild-card characters are used, a list of the
wells matched is printed in the output file so that the user may check the list generated.
Any number of ? can appear in a well name character string. Each ? matches any
character in the same position in a well name, including embedded blanks but not final
blanks. For example, 'WELL??' matches 'WELL 1' but 'WELL?' does not match 'WELL'.
A single * can appear as the last non-blank character in a well name character string. When
* is present only the characters preceding * are checked for lack of match. For example,
the character string '*' matches all wells, and 'WELL*' matches 'WELL'.
Wild characters ? and * can appear in the same string. For example 'WELL????PROD*'
would match 'WELL_NW_PROD_15' and 'WELL_SE_PROD_2'.
Well Fraction
There are two kinds of well fraction, and each one has a different function.
1. The keyword *WELL has the subkeyword *FRAC which directs the simulator to
use internally a fraction of the well rates and indices that appear in the input data.
The most common usage is with symmetry patterns, where a well on the boundary
is a known fraction of a full well. The familiar full-well rates and indices can be
entered and *FRAC specifies the fraction (e.g., 1/2 on the side, 1/4 in a 90 deg
corner, 1/8 in a 45 deg corner).
The definition of symmetry elements may involve the use of geometry block
modifiers (*VAMOD) and completion fractions ( *PERF *GEO ff ).
2. The keyword *GEOMETRY defines information used to estimate well index given
the configuration of the well and its grid block (Appendix A.1). This is flagged by
the *GEO or *GEOA options in *PERF and *PERFV. If you are not using the
*GEO or *GEOA option, then you will not use 'wfrac'.
If *GEO or *GEOA is chosen, the most common usage is to define *GEOMETRY
for a full well in the centre of a block in a repeated grid (Figure A.1(a), wfrac = 1),
and then to apply the well fraction *FRAC as described above. This method should
be used if the well is on the boundary of a symmetry element (see Figures 6, 7 and
8 in the Reservoir Description section).
Configurations from Figure A.1 other than (a) are meant for non-symmetry element
cases, or where the well in not in the center of the grid block. The same comments
apply to the radial grid: use fig. A.1a, but set *FRAC to the fraction of a full circle.
Perforation Options
There are three options for assigning well perforation locations, and three options for
assigning well indices. These options may be mixed.
1. *PERF is the normal option, requiring the I-J-K locations for a single well.
2. *PERFV can be used to assign the same K layers to a list of vertical wells whose IJ locations were defined in their *WELL definitions.
3. The default well index option is to read the value directly for each layer.
4. An option is available in the *GEOMETRY keyword for obtaining the well index
from assuming a linear pressure drop between the block centre and the block face;
this is used for tube-end situations.
The sub-options *GEO and *GEOA indicate that the geometric part of the well
index is estimated with information from the current *GEOMETRY keyword (radial
inflow model or linear-pressure-drop). The inflow model uses completion fraction ff
and near-well permeability wlprm for each layer, which may vary with layer.
5. Limited Entry Perforations (LEP) can be assigned to wells via *LEP-WELL.
6. Multiple active wells are allowed in a grid block. It means that different wells may
have the same I-J-K location.
Liquid Level Control of Pumped-Off Wells
A production well that is pumped off to atmosphere often is operated on a liquid level
control. This modeled by using keyword *LAYERGRAD to force the use of gas-like head
gradient above the liquid level, and liquid-like value below. In addition, you can control the
position of the liquid level via keyword *BHPDEPTH. These keywords effectively replace
the modelling of pumped-off wells that was done with the obsolete *PUMPOFF sub-option
of *OPERATE *BHP.
Specifying Injected Phase
Use *INCOMP to specify which phase(s) to inject. You may inject either one phase or coinject steam with solvent which could be in oil or gas phase or both at STC per well.
For example,
*WELL 2 'INJGAS'
*INCOMP GAS 1 0 0
*TINJW 250.0
*PINJW 3973
*OPERATE STG 1.19E6
Numerical Methods:
Remember, when using the array-reading option *IJK to assign grid arrays (such as
*KRTYPE), that you are allowed to refer to only select grid blocks if you wish, instead of the
entire grid (as in the other data sections). See the description for array-reading option *IJK.
Fine-Grid Inheritance
In the initialization data sections, inheritance is performed after all the initialization data is
read. Data assigned explicitly to refined blocks via array qualifier *RG will override values
that could have been inherited from the parent block, independent of the order of appearance
of the parent and child grid keywords. For example, assume block (1,2,1) is refined. The
keyword data in the Initial Conditions section
*TEMP *CON 70
*TEMP *RG 1 2 1 *CON 100
and the data (in reversed order)
*TEMP *RG 1 2 1 *CON 100
*TEMP *CON 70
have the same result, that is, a value of 100 in all the fine blocks in (1,2,1) and 70 everywhere
else. Here, data assigned via *RG takes precedence.
On the other hand, inheritance in the recurrent data section is slightly different. All ARRAY
format data have valid initial values either carried from initialization sections (such as
*KRTYPE) or indicating a disabled option (such as *HEATR). Inheritance is performed
immediately upon reading ARRAY format data, and the result may depend upon the order of
appearance of keywords. Using the previous example, the keyword data
*UHTR *CON -2
*UHTR *RG 1 2 1 *CON -5
will result in the value -5 for the fine blocks in (1,2,1) and the value -2 everywhere else. On
the other hand, reversing the order
*UHTR *RG 1 2 1 *CON -5
*UHTR *CON -2
will result in a value of -2 everywhere since the second line causes an immediate inheritance
of -2 to the fine blocks, overwriting the result of the first line. Here, the order of keywords
takes precedence.
A good strategy is to specify such keyword data in the order of fundamental grid first and
successively finer grids after if the values differ from the fundamental grid.
Immediate inheritance is done also for transmissibility multipliers *TRANSI, etc.
Inheritance of Connection-Based Quantities
There is no inheritance of connection-based quantities *PTRANSx. Therefore, you must
assign values explicitly to refined blocks instead of relying on inheritance.
Compatibility with IMEX Recurrent Data
STARS can use the following keyword data from IMEX without change:
*DATE
*WELL
*OPEN
*ALTER
*MRC-RESET
*GCPOFF
*TIME
*NULL-PERF
*AUTODRILL
*BHPDEPTH
*GCONM
*GCIOFF
*DTMAX
*PRODUCER
*BHPGRAD
*DRILLQ
*STOP
*GROUP
*SHUTIN
*LAYERIJK
*LAYERGRAD
*LAYERXYZ
*GAPPOR
*DTMIN
STARS can use the following keyword data from IMEX with the noted differences. IMEX
keywords that do not appear in these tables are not supported in STARS.
*DTWELL
*AIMSET
*HEAD-METHOD
*INJECTOR
*IWELLBORE
*PWELLBORE
*INCOMP
*OPERATE
*MONITOR
*GLIFT
*GEOMETRY
*GCONP, *GCONI
*APPOR-METHOD
*PRIOR-FORM
*GUIDEP, *GUIDEI
7. The well list defined by keywords *INJECTOR and *PRODUCER is not retained
across *TIME and *DATE lines. Therefore, keywords *INCOMP, *TINJW,
*PINJW, *QUAL and *OPERATE must come after the corresponding keywords
*INJECTOR and *PRODUCER within a time segment.
8. For *ALTER the new values must fall on a new line, and may not be on the same
line as the well names.
9. *PERF or *PERFV must not occur without the corresponding *OPERATE.
10. The wellbore heatloss model enabled by *HEATLOSS is no longer available. Use
*PHWELLBORE instead.
11. For *PERF and *PERFV the UBA qualifiers WB and TU are not supported.
For a non-circulating wellbore change WB to / 1 1 1. For a circulating
wellbore change WB to / 2 1 1 and TU to / 1 1 1.
12. *SAMINFO is no longer a sub-keyword of *PHWELLBORE, but one occurrence
controls output for all wells using *PHWELLBORE.
13. Keyword *WIOLD is no longer available.
14. Specify non-default depth of the BHP position via primary keyword *BHPDEPTH
instead of the *PERF (and *PERFV) sub-keyword *BHPDEPTH.
15. Specify non-default head gradient in a well via primary keyword *LAYERGRAD
instead of the *PERF (and *PERFV) sub-keyword *HEADGRAD.
16. Specify well constraint choosing option via *MRC-RESET instead of
*CONSTRNCHK.
17. The *OPERATE remedial action *CONT in previous versions actually
corresponds to *CONT *REPEAT in v2002. Therefore, to reproduce the previous
behaviour, add *REPEAT after *CONT.
18. Keyword *INCOMPGL syntax is changed.
19. If old keyword *GROUPWT was used, merge the *GROUP and *GROUPWT
definitions into *REPORTING-GROUP.
20. Sub-keyword *KRCYC of cyclic group keywords *INJ_C_SWT and
*PROD_C_SWT is no longer available.
21. *PTUBE and the *TABLE option of *PHWELLBORE are not longer supported.
Use *PHWELLBORE *SAMODEL instead.
*RUN
PURPOSE:
*RUN identifies the beginning of all well and recurrent data keywords.
FORMAT:
*RUN
DEFAULTS:
Required keyword. No default.
CONDITIONS:
The WELL AND RECURRENT DATA keyword group follows the NUMERICAL keyword
group in the data file. It is the last keyword group in the input data file.
PURPOSE:
Control start, stop, well change and printout times.
FORMAT:
*TIME time
*DATE yyyy mm dd
*STOP
DEFINITIONS:
time
Simulation reference time (days | days | mins).
yyyy mm dd
Year, month and day of the reference time. The time-of-day is given by the
decimal fraction of dd from midnight. For example, a well change at noon of
August 19, 1988, is entered as: *DATE 1988 08 19.5. Only years from 1901
to 5000000 are allowed. In the conversion between years and days, leap
years are accounted for correctly only up to 2099.
DEFAULTS:
If the first reference time is specified with *DATE, then the corresponding time is 0.
If *STOP is absent from the data file, then the run will terminate after the last reference time.
CONDITIONS:
A reference time must appear immediately after the *RUN keyword.
Recurrent data must be organized into segments, where each segment has a beginning reference
time, some recurrent data and an ending reference time, in that order. A good practice is to leftjustify the reference time keywords while indenting recurrent data that falls between.
If the first reference time was specified with *TIME then *DATE is not accepted in the
remaining recurrent data.
Reference times must increase, going in sequence from *RUN to the end of the data.
*STOP, if present, should be placed immediately after the corresponding reference time
(*TIME or *DATE).
*STOP must not appear immediately after the first reference time, since at least two time
points are required to specify one recurrent data segment.
EXPLANATION:
To indicate a reference time you must use *TIME or *DATE.
A change to data corresponding to a recurrent data keyword is deemed to happen immediately
after the reference time preceding the keyword. For example,
*TIME 100
*OPERATE *STO 100
*TIME 200
causes the rate to be 100 in the interval from 100 to 200 days. Be careful of keywords whose
data apply to points in time instead of time intervals.
For example,
*WRST 0
. . .
*TIME 100
*WRST *TIME
*TIME 200
causes the first restart to be written at 200 days since *WRST *TIME is applied after 100
days. *STOP is the only keyword which does not strictly follow this rule.
*TIME or *DATE may be defined at a time with no recurrent data change, causing the
simulator to obtain a solution at this time, perform any output and then proceed.
Example:
Start producing oil at 750 bbl/day, get results at 150 days and stop at 365 days.
*TIME 0
*PRODUCER 2
*OPERATE *MAX *STO 750
*TIME 150
*TIME 365 *STOP
*TIME 900
Restart from 150 days with 500 bbl/day, obtain solution at 365 days; and stop at 900 days.
*TIME 0
*PRODUCER 2
*OPERATE *MAX *STO 750
*TIME 150
*ALTER 2 500.
*TIME 365 **STOP
** *STOP commented out
*TIME 900 *STOP
** *STOP is optional
*STOP causes the simulation to terminate after the solution is obtained, at the corresponding
reference time.
*STOP may appear any number of times in your date, but only the first one encountered is
used and all data after the reference associate with that *STOP is ignored. For a restart run,
any *STOP associated with a time before the restart time will be ignored.
If other keywords appear between reference time and *STOP, then the simulation will stop at
the next reference time.
Example
. . .
*TIME 2555.0
*STOP
. . .
*TIME 3500
Simulation Pause
*PAUSE
PURPOSE:
Pause simulator execution temporarily to allow another application to run.
FORMAT:
*PAUSE nsec pause_file
DEFINITIONS:
nsec
Length of the pause cycle in seconds.
pause_file
Quoted name of the pause file.
DEFAULTS:
If *PAUSE is absent then no pausing is done.
CONDITIONS:
If *PAUSE is present then it is assumed that the file named pause_file is deleted by the other
application when it is finished each of its run segments.
This keyword should be placed immediately after *TIME/*DATE or *STOP if present.
At most one *PAUSE keyword is allowed per segment of recurrent data.
EXPLANATION:
*PAUSE is particularly useful before an *INCLUDE keyword that specifies an auxiliary data
file that is to be created or updated by another application. For example, the other application
may obtain information from STARS output files up to the pause time and generate new data
for STARS via an *INCLUDE statement.
When *PAUSE is encountered STARS takes the following steps in this order:
1. A file named pause_file is created.
2. STARS pauses for nsec seconds.
3. If file pause_file still exists, control passes to the previous step. If file pause_file
is absent, control passes to the next step.
4. STARS continues execution of the simulation.
Steps 2 and 3 together effectively put STARS into pause mode until the other application is
finished. The pause is an OS-level sleep command that causes STARS to use almost no
CPU while it is paused. The purpose of pause_file is to signal that the other application may
execute. The other application may be in pause mode itself while STARS runs, periodically
testing for the existence of pause_file. The other application must delete pause_file when it is
finished, signaling that STARS may continue the simulation.
The pause option can support more than one other application in the same run, merely by
using different pause file names. Also, the signaling file name is flexible. For example, if the
other application has name xxx then pause_file could be named xxx.run.
User's Guide STARS
Note that the schedule of updates is pre-determined so that the recurrent data can be
constructed. However, the content of heater.dat is entirely dynamic. For example, different
blocks could be referenced at different times, corresponding to heaters being added or
removed as conditions in the reservoir evolve. Also, different auxiliary data file names could
be used at different times after the *INCLUDE keyword, or multiple *INCLUDE keywords
could be specified at some or all the pause times.
*DTWELL
PURPOSE:
Provide starting timestep size.
FORMAT:
*DTWELL time_size
DEFINITIONS:
time_size
Size of the timestep immediately following the reference time (days | days | min).
DEFAULTS:
If *DTWELL is absent, then the timestep size after *TIME or *DATE is carried from the
previous timestep.
CONDITIONS:
*DTWELL is required between the first and second reference times, after which it is optional.
EXPLANATION:
Use *DTWELL to specify the size of the first time step after the previous reference time. For
example,
*TIME 100
*DTWELL 0.01
...
*TIME 200
*GROUP
PURPOSE:
*GROUP is used to identify gathering centres, groups and platforms. The information entered
with this keyword is used to build a tree structure of groups.
*GROUPWT is obsolete. Use *REPORTING-GROUP instead.
FORMAT:
*GROUP 'child_1' ... 'child_n' *ATTACHTO 'parent'
DEFINITIONS:
'child_1', child_2 .. , child_n
Names of child groups that are attached to the 'parent' group. Each group is
identified by a unique name up to 16 characters long and enclosed in single
quotes. The *ATTACHTO keyword is not optional and must be present.
*ATTACHTO
Defines the parent group of all groups named in the list following *GROUP.
'parent'
Name of the parent group.
DEFAULTS:
Optional keyword. If no *GROUP line appears in the data, no group structure exists in the
simulation and well rates and cumulatives are summed directly into a field cumulative. This
is reported as the FIELD cumulative in output, but no group called 'FIELD' actually exists in
this case and no group control of production or injection is possible.
When a *GROUP line is encountered in the data a group structure is established, which
always consists of at least two groups : a top-level group and the 'Default-Group'.
The top-level group has no default name; its identity is determined by finding the unique
group which appears in the list of parent groups but not in the list of child groups. If there is
no such group or more than one, an error is generated and simulation terminates.
Wells can only be attached to groups other than the field (top-level) group. Any wells which
are not explicitly associated with a parent group are automatically attached to an internallycreated group which has the name 'Default-Group' and which has the top-level group as its
parent group.
For example if no reference is made to group hierarchy in the data, the following conceptual
structure (not truly a group structure) will exist by default:
FIELD
'WELL-2'
'WELL-1'
...
'WELL-n'
Quotes were purposely omitted around FIELD above to emphasize that no group with the
name 'FIELD' actually exists in this case. No group control is possible in this case.
If the single line
*GROUP 'Default-Group' *ATTACHTO 'Field'
'Default-Group'
'WELL-1'
'WELL-2'
...
'WELL-n'
2. Level 2. These groups have the top-level group as their parent. When a group
structure exists, there is always at least one group in this category, with the name
'Default-Group'. 'Default-Group' has connected to it any wells not explicitly attached
to a parent group. Level 2 groups can have either wells or groups attached to them,
but not a mixture of the two. That is, if a level 2 group is named after the
*ATTACHTO subkeyword in a *WELL line, then that group must not appear after
the *ATTACHTO subkeyword in any *GROUP line, and vice versa.
3. Level 3. These groups have level 2 groups as their parents. There may or may not
be level 3 groups present in a group structure; if all level 2 groups have wells
attached directly to them then there are no level 3 groups. Level 3 groups can only
have wells attached to them, since having groups attached would create a 4th level
in the group structure, which is not currently supported.
Examples of valid and invalid well control trees are given below.
Valid example of a well control hierarchy:
'FIELD'
Level 1
Level 2
Level 3
'GNAME-2'
'GNAME-1'
'GNAME-4'
'GNAME-5'
'GNAME-6'
'W4'
'W6'
'W8'
'W5'
'W7'
'GNAME-3'
'Default-Group'
'GNAME-7'
'W9'
'W10'
'W11'
'W-1'
'W-2'
'W-3'
GNAME-1
GNAME-4
GNAME-6
W-1
W-2
W-3
W4
W5
W6
W7
W8
W9
W10
W11
GNAME-2
GNAME-5
GNAME-7
GNAME-3
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
*ATTACHTO
FIELD
GNAME-1
GNAME-2
GNAME-3
GNAME-3
GNAME-3
GNAME-4
GNAME-4
GNAME-5
GNAME-5
GNAME-6
GNAME-6
GNAME-7
GNAME-7
'GNAME-1'
'GNAME-4'
'W4'
'W5'
'GNAME-2'
'GNAME-5'
'W6'
'W7'
'GNAME-6'
'W8'
'W9'
'Default-Group'
'GNAME-7'
'W10'
'W11'
'GNAME-8'
'W1'
'GNAME-3'
'WELL-2'
'WELL-3'
*WELL
PURPOSE:
*WELL is used to identify wells.
FORMAT:
*WELL (wnum) well_name
DEFINITIONS:
wnum
Well number is obsolete. Use well_name instead. Well number is still read
by both STARS and Builder for compatibility with existing data files, but
Builder does not write well number. This applies to all keywords that require
a well identifier.
well_name
Well name in quotes (maximum 40 characters). See Well Identifiers and
Wildcarding Well Names at the beginning of this chapter.
*VERT ibl jbl
This optional subkeyword indicates that the well is vertical and all completion
layers have the same I and J grid block indices. ibl and jbl are the I and J
direction grid block index for the vertical well, respectively. There are no default
values. If present, *FRAC must follow immediately after well_name.
*FRAC frac
This optional subkeyword indicates that the rates and indices used internally
will be the fraction frac of those specified directly in the well data. The
allowed range for frac is 0 to 1. All rates and indices can be entered for a full
well, and they will be multiplied by frac for internal use.
*ATTACHTO group_name
This optional subkeyword attaches this well to the parent group named
group_name, where group_name is a quoted string of up to16 characters.
See the manual page for keyword *GROUP. If *ATTACHTO is absent then
the well is connected to an internally-generated group named 'Default-Group'
by default.
DEFAULTS:
Required keyword. No defaults. Minimum required is:
*WELL well_name
Wells cannot be attached to the top-level group (the group which represents the whole field).
For information on how to specify the name of the top-level group, please see the manual
page for the *GROUP keyword. If there are no second-level groups defined in a data set then
all wells are attached to a group called 'Default-Group' automatically. For example if the line
*GROUP 'Default-Group' *ATTACHTO 'Field'
appears in the data and a target rate for 'Field' is specified using the *GCONP keyword, the
following tree structure will exist by default.
'Field'
'Default-Group'
'WELL-1'
'WELL-2'
...
'WELL-n'
If *ATTACHTO is absent, then the well is not attached to a non-default group. The well may
be attached to one or more groups via *GROUP.
CONDITIONS:
Well names must be unique, since they are the only way to refer to wells.
EXPLANATION:
This keyword identifies the well name, and optionally assigns it to a well group.
*FRAC is useful for defining fractions of wells when simulating parts of field patterns, e.g.,
symmetry elements. Rates and well indices for a full well may be entered as data, and *FRAC
will specify what fraction of these values to use. *FRAC affects the following quantities:
1. Rates specified by *OPERATE.
2. Well indices entered directly via *PERF or *PERFV, that is, without *GEO. The
index used will be wifrac.
3. Well index calculated from parameters entered via *GEOMETRY and *PERF (or
*PERFV) *GEO. Specify *GEOMETRY parameters for the full well (wfrac = 1);
the well fraction from *FRAC will be applied to the resulting full-well index.
For example, consider a 1/8 symmetry element of an inverted nine-spot pattern where the
near and far producers have the same physical description and operating conditions. These
two wells would have the same well data, except for frac = 0.25 for the near producer and
frac = 0.125 for the far producer.
*GEOMETRY .4 .249 1 0
*PERFV *GEO 1 2 ** k
1:4
** Full well
See the section entitled "Well Fraction" at the beginning of this chapter.
For a well which uses frac different from 1, all the reported well performance statistics correspond
to the fractional well. Note: In addition to *FRAC, it may be necessary to account for partial
blocks in *PERF as well. See Well Completion in a Partial Block in the *VAMOD entry.
Well Groups
*ATTACHTO allows you to associate the well with a group for reporting purposes.
Alternatively, a well can be attached to one or more groups via the *GROUP keyword. See
*GROUP for a description of well groups.
You may change later in the run the group to which a well is attached by using *WELL with
a different group_name. This will remove the well from all group lists and then attach the
well to group_name if *ATTACHTO is present.
Discretized Wellbores
Discretized wellbores are defined via keyword *WELLBORE in the Reservoir Description
chapter. Each discretized wellbore has one stream for each non-circulating wellbore and two
streams for each circulating wellbore (tubing and annulus). Each wellbore stream will be
associated with a source/sink well via *PERF.
Example: There are 2 non-circulating discretized wellbores, 1 circulating discretized
wellbore, and 2 normal source/sink wells. Keyword data for this situation might be
*WELLBORE rw
*RANGE . . .
*WELLBORE rw
** Circulating steam injector
*CIRCWELL ra i j k nwbwt
*RANGE . . .
*WELLBORE rw
*RANGE . . .
*WELL
*WELL
*WELL
*WELL
*WELL
*WELL
**
**
**
**
**
**
'HorzProd 1'
'Inj Tubing'
'Inj Vent '
'HorzProd 2'
'VertWell 1'
'VertWell 2'
See the EXPLANATION for keyword *WELLBORE in the Reservoir Description chapter.
*REPORTING-GROUP
PURPOSE:
*REPORTING-GROUP allows the user to define a set of wells with differing membership
weights which has data reported just as for the hierarchical groups which are the basis for group
control (see the manual entry for *GROUP, *GCONP, and related keywords). No group
controls can be specified for reporting groups, but there are no restrictions upon well
membership in reporting groups. A well may be a member of an arbitrary number of reporting
groups, and a well can have any non-negative membership weight in a reporting group.
FORMAT:
*REPORTING-GROUP
reporting_group_name
well_list
weight_list
DEFINITIONS:
reporting_group_name
A character string containing not more than 16 characters. The character strings
Default-Field and Default-Group are not allowed as the name of a reporting
group as they are reserved for internal use. Reporting group names must be
distinct from group names. If reporting_group_name has already been used as
the name of a reporting group, then the current instance of *REPORTINGGROUP has the effect of redefining the named reporting group.
well_list
One or more quoted well names assigned via *WELL. The reporting group
will include all wells in the list. See Wildcarding Well Names at the
beginning of this chapter.
weight_list
Non-negative real numbers specifying the membership weights in the
reporting group of the wells in well_list. If weight_list contains only a single
number, that weight is applied to all of the wells in the list; otherwise the
number of entries in weight_list must equal the number of wells in the
well_list. The numbers in the weight_list must be real numbers with the
decimal point included, in order that the beginning of the weight list can be
distinguished from a continuation of a list of well numbers. Repeat counts
are allowed, e.g. 6*0.5.
DEFAULTS:
Optional keyword. If *REPORTING-GROUP does not appear in the data set, no reporting
groups exist during the simulation. All of the indicated elements in the format
(reporting_group_name, well_list, and weight_list) must be present.
CONDITIONS:
If it appears, this keyword must be located in the WELL AND RECURRENT DATA keyword
group. It must appear AFTER (but not necessarily immediately after) the first *DATE line. All
wells appearing in the well list must already have been defined with *WELL lines. The
reporting_group_name must not already have been used (through the *GROUP keyword) as a
group name. The weights must be entered as non-negative real numbers with the decimal point
explicitly included. The number of weight values must either be one, in which case the single
value will be applied to all listed wells, or else must equal exactly the number of wells listed.
The well list and the weight list can be spread over several lines; the weight list can begin
immediately after (and on the same line as) the end of the well list.
EXPLANATION:
The quantities displayed for the reporting group (e.g. cumulative amounts or rates) are
calculated as
Q(reporting group) = w(well)Q(well),
where the summation is over the wells in the well_list, w(well) is the weight value for the
particular well, and Q(well) is the quantitys value for the well. Note that w(well) is the weight
value as entered by the user; no automatic normalization is performed upon the weights.
Example:
*REPORTING-GROUP Producers PROD1 PROD2
1.
This establishes a reporting group with the name Producers consisting of the two wells
PROD1 and PROD2. The single weight value 1. applies to both wells in the list.
A well's contribution to a group is based on its fraction defined via *WELL *FRAC. For
example, a well with *FRAC 0.5 and *OPERATE *STW 100 will contribution 50 to the
group if its group weighting is not changed from 1. To contribute a full-well value to the
group, use a group weighting factor equal to the inverse of the well fraction.
*HEAD-METHOD
PURPOSE:
*HEAD-METHOD is used to identify the head method to be used.
FORMAT:
*HEAD-METHOD well_list
method
where method is
*GRAVITY
or
*GRAV-FRIC (*HEADRROUGH rrough) (*DUKLER-BANKOFF)
or
*GRAV-FRIC-HLOS (*HEADRROUGH rrough) (*DUKLER-BANKOFF)
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this definition
applies. See Wildcarding Well Names at the beginning of this chapter.
*GRAVITY
The head between well layers is calculated based on mobility weighted
densities.
*GRAV-FRIC
The head between well layers is calculated using a correlation which
accounts for fluid densities, frictional effects, and kinetic energy effects.
*GRAV-FRIC-HLOS
*GRAV-FRIC with additional conductive heat transfer calculation between a
wellbore and a reservoir. Rock and phase heat conductivities are taken from
rock type 1. Those values must be the actual values and not some average
value for water saturated rock. See the explanation about frictional pressure
drop and heatloss calculation under *PHWELLBORE.
*HEADRROUGH rrough
Specify relative roughness (dimensionless) to be used in the frictional head
calculation for the listed wells.
*DUKLER-BANKOFF
Specify another method of friction calculation. See EXPLANATION below.
DEFAULTS:
If *HEAD-METHOD is absent for a well, that well uses head method *GRAVITY.
If *HEADRROUGH is absent for a well that uses a frictional head method, that well uses
rrough = 10-4.
If *DUKLER-BANKOFF is absent for a well that uses a frictional head method, that well
uses the method of Xiao et al.
CONDITIONS:
When *GRAV-FRIC or *GRAV-FRIC-HLOS is used then the first layer on the *PERF card
must be leading to the surface.
EXPLANATION:
This keyword identifies the well head method to be used for a given list of wells.
Example:
*WELL 'Producer1'
*WELL 'Injector1' *VERT 12 14
*WELL 'Prod. 54-233a'
*HEAD-METHOD 'Producer1' 'Prod. 54-233a' *GRAV-FRIC
*HEAD-METHOD 'Injector1' *GRAVITY
Two different methods are used to calculate the friction pressure drop and liquid holdup in
the wellbore. The default method calculates friction pressure drop and liquid holdup according
to a flow regime existing in the wellbore. These correlations are valid only for co-current flow.
This method is based on "A Comprehensive Mechanistic Model for Two-Phase Flow in
Pipelines", J.J. Xiao, O. Shoham, J.P. Brill, Proceedings from 65th Annual Technical
Conference of SPE, September 23-26, 1990, New Orleans, USA, SPE 20631.
The method invoked with *DUKLER-BANKOFF uses Bankoff's correlation to evaluate
liquid holdup and Dukler's correlation to calculate friction pressure drop. These correlations
are valid only for co-current vertical upward or horizontal flow. A more detailed description
can be found in "Aspects of Discretized Wellbore Modelling Coupled to
Compositional/Thermal Simulation", V. Oballa, D.A. Coombe, W.L. Buchanan, JCPT, April
1997, Volume 36, No. 4, page 45.
*NULL-PERF
PURPOSE:
*NULL-PERF specifies how perforations in inactive (null or pinched out) grid blocks are to
be handled.
FORMAT:
*NULL-PERF well_list
(*STOP-SIM | *CLOSED)
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this definition
is to be applied. See Wildcarding Well Names at the beginning of this
chapter.
*STOP-SIM
If the simulator detects an attempt to perforate a well in an inactive grid
block, an error message identifying the well and block is printed and the
simulation is terminated.
*CLOSED
If the simulator detects an attempt to perforate a well in an inactive grid
block, a warning message is printed and the perforation is given CLOSED
status. With CLOSED status, no fluids flow from or to the reservoir in the
layer, but the layer is retained in the well and enters the wells head
calculation.
DEFAULTS:
The default is *CLOSED.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group.
EXPLANATION:
This keyword specifies the treatment of attempts to perforate a well in an inactive (null or
pinched out) grid block. The attempt may either be considered an error, resulting in the
termination of the simulation, or may result in the layers being perforated with a status of
*CLOSED. A layer with closed status is allowed to be the reference layer for the well (the
layer in which the wells bottomhole pressure is defined).
Example:
*WELL 1 'Producer1'
*WELL 2 'Injector1'
*WELL 3 'Prod. 54-233a'
*NULL-PERF 'Producer1' 'Injector1' *CLOSED
*NULL-PERF 'Prod. 54-233a' *STOP-SIM
*XFLOW-MODEL
PURPOSE:
*XFLOW-MODEL is used to identify the method used to model well backflow and
crossflow in a specified set of wells.
FORMAT:
*XFLOW-MODEL well_list (*FULLY-MIXED | *ZERO-FLOW)
DEFINITIONS:
well_list
One or more quoted well names assigned with the *WELL keyword. See
Wildcarding Well Names at the beginning of this chapter. The wells may
be producers or injectors.
*FULLY-MIXED
Backflow or crossflow in the wellbore is modelled using an assumption of
complete mixing in a wellbore of zero volume (Coats et al, SPE 29111,
1995).
*ZERO-FLOW
Backflow or crossflow is handled by setting layer flows to zero. The layer is
not explicitly closed, and layer flow resumes if pressures changes result in
forward flow.
DEFAULTS:
For each well not referenced by keyword *XFLOW-MODEL, *ZERO-FLOW is assumed.
If neither *FULLY-MIXED nor *ZERO-FLOW appears after *XFLOW-MODEL well_list,
then *FULLY-MIXED is assumed for each well in well_list.
*FULLY-MIXED and *ZERO-FLOW are mutually exclusive options and cannot be applied
simultaneously to the same well.
CONDITIONS:
The *FULLY-MIXED option is not available for (1) unweighted injectors and (2) limited
entry perforation (LEP) wells.
EXPLANATION:
This keyword specifies the backflow model to be used for the listed wells.
Example: Wells 1,2, and 4 are to use the fully-mixed crossflow, and well 3 is to use the zeroflow treatment.
*WELL 1 'Producer1'
*WELL 2 'Injector1' *VERT 12 14
*WELL 3 'Prod. 54-233a'
*WELL 4 'Pozo 4'
*XFLOW-MODEL 1:2 4 *FULLY-MIXED
*XFLOW-MODEL 'Prod. 54-233a' *ZERO-FLOW
(*CHANGE)
(*TIMESTEP)
(*CHANGE)
(*TIMESTEP)
DEFINITIONS:
CHANGE
Indicates that bottom hole pressure of wells with a constraint different from
BHP are to be reinitialized only after significant changes in well operating
conditions.
TIMESTEP
Indicates that bottom hole pressure of wells with a constraint different from
BHP are to be reinitialized at the beginning of each time step, after new
wellbore head values have been calculated for the coming time step.
well_list
A set of 'well_names' or well_numbers; see below. The presence or absence
of the well_list identifies to the simulator whether the global initialization
frequency is being set or particular frequencies are being set.
well_names
Any number of well names (in quotes) to specify the wells to which this
alteration of initialization frequency applies. Limited wildcarding is available
for the list of well names; please see the manual page for the *SHUTIN
keyword for an explanation of the wildcard facility.
well_numbers
Any number of integers, or ranges of integers to specify the well numbers to
which this alteration of initialization frequency applies.
User's Guide STARS
DEFAULTS:
Optional keyword. If *WELLINIT does not appear in the data set, *WELLINIT *CHANGE
is the default global well initialization frequency in STARS.
The global initialization frequency may be reset by entering *WELLINIT in the first format
above without the well list; the global frequency may be overridden for particular wells by
using the second format above with the well list.
CONDITIONS:
If it appears, this keyword must be located in the WELL AND RECURRENT DATA
keyword group. It must appear AFTER (but not necessarily immediately after) the first
*DATE line. If a well list is included in the *WELLINIT line, then the *WELLINIT line
must follow all of the *WELL lines which define the wells in the list.
EXPLANATION:
*WELLINIT *CHANGE may give a sufficiently accurate initial bottom hole pressure that
the Newtonian iterations for the well constraint equation converge rapidly. In difficult cases,
however, the well equations may converge slowly; in such cases, invoking *WELLINIT
*TIMESTEP may facilitate convergence of the Newtonian iterations. Sometimes only a few
wells in a large field require the *WELLINIT *TIMESTEP treatment; in such cases the
default treatment may be set to *CHANGE using the first format above and the problem
wells may be flagged for special treatment using the second format above, including a well
list.
Initialization frequencies specified for a well under the second format above (i.e. by inclusion
of the well's name or number in a well list following *WELLINIT) are always honored,
regardless of the well's current operating constraint and the current setting of the global
initialization frequency.
Example:
If the *TIMESTEP frequency suffices for most wells in the field, but *CHANGE suffices for
'WELL1', the following sequence is appropriate:
*WELLINIT
*WELLINIT
*TIMESTEP
'WELL1' *CHANGE
*MODELSHUT,
*EQUILIBRATE
PURPOSE:
Allow fluid equilibration in shut-in wells via crossflow between layers.
FORMAT:
*MODELSHUT well_list (*ON | *OFF)
*EQUILIBRATE epsmds
DEFINITIONS:
well_list
One or more quoted well names assigned with the *WELL keyword. See
Wildcarding Well Names at the beginning of this chapter.
epsmds
Fluid equilibration criterion epsmds (m3/day | bbl/day | cm3/min) must be a
non-negative, real number.
DEFAULTS:
For each well not referenced by keyword *MODELSHUT, *OFF is assumed.
If neither *ON nor *OFF appears after *MODELSHUT well_list then *ON is assumed for
each well in well_list.
If keyword *EQUILIBRATE is absent then epsmds is assumed to be 103.
CONDITIONS:
This keyword must be located after a well is defined via *WELL but before the well is shut in
via *SHUTIN or another operation control.
*MODELSHUT cannot be applied to a discretized wellbore; use *TRANSIENT *ON to
model transient behaviour in a discretized wellbore.
The *MODELSHUT option cannot be applied to a well whose type does not support the
*FULLY-MIXED back/cross flow model; these types are (1) unweighted injectors and (2)
limited entry perforation (LEP) wells.
EXPLANATION:
Various actions can cause a well to become shut in: *SHUTIN, effective *WLISTSHUT,
*ALTER or *OPERATE with a zero rate value, or violation of operation constraints. The
default method for shutting in a well (fully shut) is to close immediately all of its active
layers. However, keyword *MODELSHUT allows fluid to equilibrate for some time in the
wellbore before all the layers are closed (model-shut).
Keyword *MODELSHUT itself does not cause a well to shut in. Instead, it gives a well the
permission to go through an equilibration stage when the well is shut in for the reasons listed
above. During this equilibration stage the well is operated on a total rate constraint of zero,
which allows cross-flow in the wellbore to redistribute fluid between layers in the reservoir
(*FULLY-MIXED cross flow model). This occurs even if a different *XFLOW-MODEL
User's Guide STARS
option was specified for that well. In the text output file, a well operating in an equilibration
stage is identified by the well status MSHT (as opposed to SHUT).
As the equilibration stage continues, pressure drops and layer flow rates may gradually
decrease. Depending on the reservoir, well completion and operation conditions, such a fluid
equilibration process may last months or even much longer in cases with persistent back flow.
When each layers rate falls below the criterion defined by *EQUILIBRATE the well leaves
the equilibration stage to become fully shut, that is, all the wells active layers are closed
immediately. A message is issued when the equilibration criterion has been satisfied.
Once a well has switched from the equilibration stage to fully shut, fluid equilibration is no
longer checked unless it is activated by another *MODELSHUT action. When it is fully
shut, a *MODELSHUT well will not be involved in any group target apportionment. The
keyword *AUTODRILL will not put an autodrillable well in an equilibration stage unless
such a well has been drilled previously.
*MODELSHUT is not effective for a single-perforation well, which will equilibrate instantly.
Various actions can cause a shut-in well to open: *OPEN, effective *WLISTOPEN,
*ALTER or *OPERATE with a non-zero rate value. If an open action is encountered while
the well is in an equilibration stage, the well is immediately put back on its usual (most
restrictive) operating constraint with its assigned or defaulted backflow model. However, the
well retains its *MODELSHUT status, that is, its ability to use an equilibration stage upon the
next shut-in action. If you want to remove this ability, use *MODELSHUT *OFF explicitly.
Example:
well_list
(*MOBWEIGHT (*IMPLICIT| *EXPLICIT)
| *UNWEIGHT ) well_list
well_list
well_list
well_name
DEFINITIONS:
well_list
One or more quoted well names assigned with the *WELL keyword. See
Wildcarding Well Names at the beginning of this chapter.
*PRODUCER well_list
The specified wells are production wells.
*INJECTOR well_list
The specified wells are injection wells.
*MOBWEIGHT ( *IMPLICIT | *EXPLICIT )
This subkeyword defines a total mobility weighted injector. The total
mobility of a grid block which contains the well is used in rate calculations.
For *IMPLICIT the total mobility is treated implicitly, that is, the most upto-date value is used. This option may be necessary when there are large
changes in fluid total mobility between time steps. For *EXPLICIT (the
default) the total mobility is updated only at the beginning of the time step.
*UNWEIGHT
This subkeyword defines an unweighted injector. Injected fluid mobility
should be part of a well index.
*SHUTIN well_list
The specified wells are shut in. SHUTIN can be entered for a well as soon as
it has been defined with *WELL. Another way to shut in a well is to specify
a zero rate for it via *OPERATE or *ALTER.
*OPEN well_list
The specified wells are reopened after having been fully defined and then
shut-in. Another way to open a well is to specify a non-zero rate for it via
*OPERATE or *ALTER.
User's Guide STARS
*AUTODRILL well_name
The specified well is currently not drilled (shut in) but will be drilled
(opened) automatically to meet the target rates of its group, if the group has
*AUTODRILL *ON specified under the *GAPPOR keyword. See the
manual entries for *DRILLQ and *GAPPOR for more information.
DEFAULTS:
If both *UNWEIGHT and *MOBWEIGHT are absent after *INJECTOR, then
*UNWEIGHT is assumed.
If *IMPLICIT and *EXPLICIT are absent after *MOBWEIGHT, *EXPLICIT is assumed.
CONDITIONS:
A well is either an injector or a producer type, and may not be switched from one type to
another. This means that after a well has appeared in an *INJECTOR well_list it may not
appear in a *PRODUCER well_list and vice versa.
A well may appear also any number of times in a *SHUTIN well_list, or in an *OPEN well
list after it has been typed with *INJECTOR or *PRODUCER.
A given well may be declared *SHUTIN only after it has been defined with *WELL.
The *MOBWEIGHT option is required for single-well co-injection. See *INCOMP.
EXPLANATION:
Keywords *PRODUCER, *INJECTOR, *SHUTIN and *OPEN are used for well type
definition. They also define the current well type list used by the following keywords:
*OPERATE
*MONITOR
*TINJW
*QUAL
*PINJW
*PHWELLBORE
*INCOMP
Each time a keyword from this list appears, the data associated with that keyword is assigned
to all the wells in the current well type list.
A well may be defined at one time using *WELL, have its completions specified at a later
time with *PERF, and at a still later time have its type defined with *PRODUCER or
*INJECTOR and go into operation at this time.
If a well has been fully defined and then shut in, *OPEN will open the well at the starting
operating condition. The value of that operating condition can be modified using *ALTER.
*OPEN, *ALTER, and *AUTODRILL cannot be applied until the wells type has been
specified and all its perforations and operating constraints have been specified.
*MOBWEIGHT and *PHWELLBORE
If an injector uses *PHWELLBORE it is recommended to use *MOBWEIGHT. If the
specified operating rate is the maximum rate for the specified wellbore dimensions, then
*IMPLICIT must be used. If *EXPLICIT were to be used, the calculated rate at the
beginning of a new timestep may be much higher than the specified rate due to the explicit
treatment of total block mobility, in which case the wellbore size can not handle the higher
rates and friction pressure drop will be excessive.
*WLISTSHUT,
*WLISTOPEN
PURPOSE:
*WLISTSHUT and *WLISTOPEN provide a means to shut temporarily a large list of wells
and later re-open them without disturbing the pattern of shut and auto-drillable wells.
FORMAT:
*WLISTSHUT
*WLISTOPEN
well_list
(well_list)
DEFINITIONS:
*WLISTSHUT well_list
Shut in, and if applicable temporarily remove auto-drillable status from, each
well in well_list. Remember well_list for possible use with *WLISTOPEN.
If multiple *WLISTSHUT keywords are not separated by *WLISTOPEN
then their well lists are combined. See EXPLANATION, below.
*WLISTOPEN (well_list)
Reopen, or restore the auto-drillable status to, each well in well_list if it is
present or in the effective well list defined by the immediately previous
*WLISTSHUT. See EXPLANATION, below.
well_list
One or more quoted well names assigned with the *WELL keyword. See
Wildcarding Well Names at the beginning of this chapter. Numbers and
names cannot be mixed in the same list.
DEFAULTS:
These are optional keywords, and there are no defaults.
If no well list follows *WLISTOPEN then all of the *WLISTSHUT list will be opened.
CONDITIONS:
These keywords must be located in, but may appear anywhere in, the WELL AND
RECURRENT DATA keyword group.
EXPLANATION:
*WLISTSHUT and its paired keyword *WLISTOPEN are used to pause the operations of a
list of wells within the time period defined by their appearance in recurrent data. Wells that
have already been shut-in, or whose operational types not yet defined prior to the entry of the
keyword, are automatically excluded from the list. If there is an explicit action that could
potentially modify the status for a particular well during this period (such as *OPEN,
*SHUTIN, *AUTODRILL, *PRODUCER, *INJECTOR, *CYCLPROD, *ALTER,
*TARGET, *ALTERCP), the change is made and that well is removed from the well list.
Wells being reopened or having their auto-drillable status re-acquired by *WLISTOPEN are
taken out of the remaining well list.
Keywords *WLISTSHUT and *SHUTIN are different in that *WLISTSHUT has a dynamic
well list that paired keyword *WLISTOPEN can operate upon to reopen the listed wells
without disturbing the pattern of shut and open wells that existed when the *WLISTSHUT
keyword was applied.
Example:
*TIME 0.
*PRODUCER W1 W2 W3
*OPERATE *MAX *STO 500.
*INJECTOR W4 W5
*INCOMP *WATER
*OPERATE *MAX *STW 150.
*SHUTIN W1
*AUTODRILL W3
*TIME 100.
*WLISTSHUT W1 W2 W3 W4 W5
** Since Well W1 has already been shut in, it will be
** automatically excluded from the list.
** Well W3 is temporarily disallowed to be auto-drilled.
*TIME 200.
*ALTER W2
400.
** Well W2 is explicitly altered and is thus
** removed from the *WLISTSHUT list.
*TIME 300.
*WLISTOPEN **Reopening wells on the remaining list
** issued by *WLISTSHUT, i.e. Well W4 and W5. Meanwhile,
** Well W3 re-acquires the auto-drillable candidacy.
| *RTUBOUT x
| *RCASOUT x
| *EMINS x
| *CONDTUB x
| *CONDCEM x
| *GEOGRAD x
| *WLENGTH x
| *INSLENGTH x
| *PUMP_DEPTH x
| *RINSUL x
| *RCASIN x
| *EMCAS x
| *CONDINS x
| *CONDFORM x
| *DEPTH x
| *RELROUGH x
| *KICKOFF_DEPTH x
| *PUMP-POWER x
DEFINITIONS:
*SAMODEL
This keyword specifies that a semi-analytical model will be used to calculate
a wellbore pressure drop and a heatloss.
*REGIME
This keyword indicates a method to be used to calculate a wellbore friction.
See EXPALNATIONS below.
*DUKLER-BANKOFF
This keyword indicates another method for wellbore friction calculation. See
EXPALNATIONS below.
*RTUBIN x
A real number specifying the inner tubing radius (m | ft | cm).
*RTUBOUT x
A real number specifying the outer tubing radius (m | ft | cm). Difference
between *RTUBOUT and *RTUBIN is the tubing wall thickness.
*RINSUL x
A real number specifying the insulation radius (m | ft | cm). Difference
between *RINSUL and *RTUBOUT is the insulation thickness.
*RCASIN x
A real number specifying the casing inner radius (m | ft | cm). Difference
between *RCASIN and *RINSUL is the annular space.
*RCASOUT x
A real number specifying the casing outer radius (m | ft | cm). Difference
between *RCASOUT and *RCASIN is the casing thickness.
*RHOLE x
A real number specifying hole radius (m | ft | cm). Difference between
*RHOLE and RCASOUT is the cement thickness.
*EMTUB x
A real number specifying emissivity of the tubing (dimensionless). It is used
to calculate the radiation heat transfer coefficient in the annular space when
insulation is not present.
*EMINS x
A real number specifying emissivity of insulation (dimensionless). It is used
to calculate the radiation heat transfer coefficient in the annular space.
*EMCAS x
A real number specifying emissivity of the casing (dimensionless). It is used
to calculate the radiation heat transfer coefficient in the annular space.
*EMFORM x
A real number specifying emissivity of formation around the wellbore
(dimensionless). It is used to calculate the radiation heat transfer coefficient
in the annular space when casing is not present.
*CONDTUB x
Thermal conductivity of a tubing wall (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
*CONDINS x
Thermal conductivity of insulation (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
*CONDCAS x
Thermal conductivity of a casing wall (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
*CONDCEM x
Thermal conductivity of cement (J/m-day-C | Btu/ft-day-F | J/cm-min-C).
*CONDFORM x
Thermal conductivity of formation around the wellbore (J/m-day-C | Btu/ftday-F | J/cm-min-C).
*HCAPFORM x
Volumetric heat capacity of the formation around the wellbore (J/m3-C |
Btu/ft3-F | J/cm3-C).
*GEOGRAD x
Average geothermal gradient (C/m | F/ft).
*DEPTH x
Wellbore depth (m | ft | cm). It is the vertical distance from a surface to the
center of a reference layer.
*CASLENGTH x
Actual casing length (m | ft | cm). Wellbore without a casing is assumed to be
open hole.
*WLENGTH x
Actual wellbore length (m | ft | cm). It is a distance from a surface to the center
of a reference layer.
*RELROUGH x
Relative tubing roughness (dimensionless).
*SURFACE_TEMP x
Surface formation temperature (C | F).
*INSLENGTH x
Insulation length (m | ft | cm). This keyword is used when the tubing
insulation is shorter than the wellbore length.
*KICKOFF_DEPTH x
Kickoff depth (m | ft | cm). It is a depth at which the wellbore deviates from
vertical. When a horizontal well is drilled from a surface at an angle different
from 90 degrees then the kickoff depth is equal to zero. The angle entry will
be calculated from a wellbore length and a wellbore depth.
*NUMBER-OF-DIVISIONS x
Dimensionless number specifying number of sections along a wellbore. All
wells located at the same position MUST have the same number of divisions.
*PUMP_DEPTH x
Pump depth (m | ft | cm) is a depth at which a pump is located when fluid can
not be lifted naturally. When the same location is used for a producer and an
injector e.g. Tubing and Annulus or injector/producer, then the injector must
also have this keyword. Pump depth keyword together with other locations
keywords is used to calculate the wellbore sections. The same wellbore must
have the same number of sections due to heatloss calculation.
*PUMP-POWER x
Pump power (W | Horse Power | W) value will be used to calculate pressure
increase at the pump location. The obtain pressure together with other
existing parameters is used to calculate the producers friction and heatloss
from the pump location upwards. Do not use this keyword for injectors even
when the injector has the *PUMP-DEPTH keyword.
*PUMP-MAX-PRESSURE-INCREASE x
Maximum pressure increase for a pump with a specified power (kPa | psi | kPa).
DEFAULTS:
If *PHWELLBORE is absent then wellbore pressure drop and heatloss is not calculated. If
*PHWELLBORE is present, the following parameter defaults are available:
*REGIME
*RHOLE = *RCASOUT = *RCASIN = *RINSUL = *RTUBOUT
*EMTUB, *EMCAS = 0.8; *EMINS = 0.9; *EMFORM = 0.94
*CONDTUB, *CONDCAS = 3.738e6 J/m-day-C; 576.85 Btu/ft-day-F;
*CONDINS = 7776 J/m-day-C; 1.2 Btu/ft-day-F;
*CONDCEM = 3.024e4 J/m-day-C; 4.8 Btu/ft-day-F;
*CONDFORM = 1.496e5 J/m-day-C; 24 Btu/ft-day-F;
*HCAPFORM = 2.347e6 J/m3-C; 35 Btu/ft3-F;
*CASLENGTH = *WLENGTH = *DEPTH
*GEOGRAD = 0;
*RELROUGH = 0.0001;
*SURFACE_TEMP = *TSURF
*INSLENGTH = 0 m; 0 ft;
*KICKOFF_DEPTH = 0 m; 0 ft;
*NUMBER-OF-DIVISIONS - 30 or 25m sections whichever is less
*PUMP-DEPTH = 0 m; 0 ft;
*PUMP-MAX-PRESSURE-INCREASE = 1.e4 kPa
CONDITIONS:
*PHWELLBORE is applied to the current well list defined by the last *PRODUCER or
*INJECTOR keywords, and so must immediately follow them. *PHWELLBORE is required
if one of the operating constraints is *WHP or when the wellbore model is desired. Water, oil
and gas heat conductivities are also needed in the calculation. These values must be the actual
heat conductivities because they are used to calculate dimensionless quantities such as
Prandtl number. Do not use the average values. Properties from ROCKTYPE 1 are used.
A warning message is issued if a SAM *DEPTH does not match the depth of the block
containing the attached well. A common cause is that depth is not specified for the reservoir.
The first perforation on the *PERF card must be the one that connects directly to this model.
The *PHWELLBORE data must be repeated every time *INJECTOR or *PRODUCER is
specified at later times. When this data is not repeated then friction pressure drop and heatloss
are no longer calculated. STARS issues a message when this happens. When *ALTER is
used then the *PHWELLBORE data is retained and does not need to be repeated.
658 Well and Recurrent Data
EXPLANATIONS:
Pressure drop along the wellbore and radial heatloss from a wellbore is calculated semianalytically. The basic idea is from a paper: J. P. Fontanilla, K. Aziz, Prediction of bottom-hole
conditions for wet steam injection wells., JCPT, March-April 1982, p.82-88. This idea was
generalized to both types of wells injectors, producers, injection or production of any fluid
and the use of any STARS operating conditions. The Semi-analytical Model (SAM) may be
used with Sink/Source wells and also Discretized wells. A well can enter the formation under
any angle. The angle is calculated from a depth and wellbore length data. When a horizontal
well is drilled and the angle changes from 90 degrees to another value then the keyword
*KICKOFF_DEPTH should be used to indicate the depth at which the angle changes.
Momentum and energy equations must be solved simultaneously to evaluate pressure and
enthalpy changes along the wellbore. Pressure drop depends on friction, gravity and kinetic
energy. Two methods are used to calculate friction pressure drop and gravity. The default method
which is invoked with *REGIME calculates friction from correlations which depend on a flow
regime and type of a fluid (two phase or homogeneous). These correlations are valid only for cocurrent flow. This method is based on "A Comprehensive Mechanistic Model for Two-Phase
Flow in Pipelines", J.J. Xiao, O. Shoham, J.P. Brill, Proceedings from 65th Annual Technical
Conference of SPE, September 23-26, 1990, New Orleans, USA, SPE 20631.
The second method which is invoked with *DUKLER-BANKOFF uses Bankoffs
correlation to calculate liquid holdup and friction pressure drop according to Dukler. These
correlations are valid only for co-current vertical upward or horizontal flow. A more detailed
description can be found in "Aspects of Discretized Wellbore Modelling Coupled to
Compositional/Thermal Simulation", V. Oballa, D.A. Coombe, W.L. Buchanan, JCPT, April
1997, Volume 36, No. 4, page 45.
Kinetic energy is calculated from velocity and fluid properties. Changes in thermal properties
along the wellbore are accounted for by evaluating the enthalpy at various depths. Enthalpy,
instead of temperature must be used because of steam injection. Enthalpy changes depend on
gravity, kinetic energy, radial wellbore heatloss and the amount of fluid flowing in the wellbore.
Radial wellbore heatloss is a product of an overall heat transfer coefficient and a difference
between fluid and formation temperature. The overall heat transfer coefficient is calculated
from the input data. It depends on resistivity in the fluid film, tubing wall, insulation, annular
space, casing wall and cement. Radial heatloss will decrease with time because the formation
temperature will increase. It is necessary to know the fluid rate to evaluate the total enthalpy. It
is sometimes difficult to calculate the correct rate after a well change when a well operates on a
constraint different from a rate constraint. The problem is more complex for Discretized
wellbore with dual stream (tubing, annulus) and pseudo-steady state initialization
(*TRANSIENT OFF). In this case the tubing and annulus must be initialized to such conditions
that are very close to pseudo-steady state without prior knowledge of a wellbore pressure or
fluid composition at the bottom hole conditions. The estimated rates may be too high or too
low just with a small error in wellbore pressure estimation (difference less than 0.1 kPa) due to
high wellbore permeability (well index). When the estimated rate is too high then high friction
is calculated and unphysical pressure values are encountered. When the rates are very low then
the available heat is not enough to service the heatlosses and a spontaneous condensation occurs
in the wellbore. Because of this complexity only certain combinations of starting operating
conditions are allowed for tubing and annulus. Currently, wellhead pressure (WHP) may not be
used as starting operating condition for a producer. However, it may be used as a second or
User's Guide STARS
subsequent operating constraint. WHP may be used as a starting operating constraint for an
injector only when the other stream (tubing or annulus) operates at constant rate. WHP may be
used with other combinations as a subsequent operating constraint. STARS checks all
combinations and will stop with an error when it can not initialize a dual stream wellbore.
SAM model is fully coupled with the simulator except the formation temperature. Temperature
gradient between Thole and Te (see Figure below) is calculated in the wellbore model and has
an effect on the radial heatloss. However, the heatloss/gain will not affect a grid block
temperature when specified wellbore depth is in the pay (for example the heel of a horizontal
well). If the grid block temperature change is important then the SAM well should end at the
top of the pay when Discretized wells or Sink/Source wells with heatloss calculation are used. It
does not matter for regular Sink/Source wells because conductive heat transfer is not accounted
for anyway.
Wellbore schematic
A simple option for pumping a producer is also installed in STARS. The pump depth and
pump output power is a user specified value. The pump output power is the product of the
power at the pump inlet and its efficiency. The total dynamic head (pressure increase) is
calculated as a ratio of pump power and existing volumetric flow rate. The calculated
pressure increase is added to the existing wellbore pressure value at the pump location and
wellbore friction and heatlosses are evaluated at each wellbore section towards the well-head
location. When the pump option is not specified and wellbore pressure decreases to
atmospheric before it reaches the well-head location STARS issues a message that it can not
lift the producing fluid. The option assumes that the pump power is high enough to satisfy the
minimum required Net Positive Suction Head.
Example:
*WELL 2 'INJECTOR'
*INJECTOR 2
** For injector use SAM to calculate bottom-hole pressure and quality. It
is a horizontal well that enters the formation under and angle different
from 90 degrees. A sink/Source well model is used.
*PHWELLBORE *SAMODEL
RTUBIN 0.15
DEPTH 460.0
WLENGTH 600.0
:
*OPERATE .........
:
PERF 2
1:19 1 24 ** horizontal section
*PHWELLBORE *SAMODEL
*RTUBIN rti
*RTUBOUT rto
*RINSUL rin
*RCASIN rci
*RCASOUT rco
*RHOLE rh
*EMTUB eto
*EMCAS eci
*EMINS ein
*EMFORM ee
*CONDFORM xke
*CONDINS xkin
*CONDCEM xkcm
Well and Recurrent Data 661
*XAE xae
*DEPTH depth
*CDEPTH cdepth
*ANG ang
*AGD agd
*WBHLOUT
*HCAPFORM xke/xae
*WLENGTH wlength
*CASLENGTH cdepth
*DEPTH wlength*sin(ang)
*GEOGRAD agd
*SAMINFO
PURPOSE:
Assign and override defaults of attributes of the injected stream.
FORMAT:
*TINJW tinjw
*QUAL qual
*PINJW pinjw
DEFINITIONS:
tinjw
Temperature of the fluid injected into the well (C | F). It must lie within the
allowed temperature range (see *MINTEMP and *MAXTEMP).
If the water phase injection rate includes steam expressed in its equivalent of
cold water, then tinjw is the temperature of the water-steam mixture coming
out of the boiler.
If the wellbore heatloss model is used, then tinjw is the temperature of water
entering the wellbore. Otherwise, it is the temperature of water entering the
reservoir.
qual
Steam quality, expressed as mass or mole ratio of vapour to vapour plus liquid,
of water (component #1). The allowed values are 0 to 1. Injection rate of the
steam-water mixture is expressed as the rate of equivalent condensed water
(component #1) at the steam boiler intake (cold water equivalent). This
equivalent rate is entered in the water phase, and the water phase injectivity
index will be used. See CWE Water Component, below.
pinjw
Pressure of the injected single-phase fluid (kPa |psi). It is used in enthalpy
and density calculation, even when *QUAL is not used. It must lie within
the allowed pressure range (see *MINPRES and *MAXPRES). It is
recommended that *PINJW be defined when *QUAL 1 is used.
DEFAULTS:
If *QUAL is absent, then the enthalpy is based on a single phase and is a function of both
*TINJW and *PINJW.
The default of *PINJW depends on the value of qual. If *QUAL is present and qual lies
between 0 and 1, pinjw is the steam saturation pressure at temperature tinjw. If *QUAL is
absent or qual is equal to 0 or 1, pinjw is equal to the pressure of the grid block containing the
well. It is recommended that *PINJW be defined when *QUAL 1 is used.
CONDITIONS:
*TINJW is required for thermal runs.
*TINJW must appear after *INJECTOR and before *OPERATE.
*PINJW is used when qual is 0 or 1, or *QUAL is absent. When qual = 0, tinjw must be less
than Tsat(pinjw), and when qual = 1, tinjw must be greater than Tsat(pinjw).
CWE Water Component
The CWE (Cold Water Equivalent) data entry option *QUAL for steam injection applies in
general only to component #1. Normally component #1 is the only water component in the
simulation. When a simulation has more than one water component (e.g., injected versus
in-place) the injected water must be component #1 in order to use the CWE option. Note that
this restriction does not apply to non-water components which may be found in the aqueous
phase, such as dissolved gases, solvents or tracers, since a non-water component is not
included in the *QUAL fraction.
Example: Inject 100 m3/d CWE of 70% quality steam with 2 m3/d of aqueous tracer. If mL
and mG are the masses of liquid and vapour water component, respectively, then steam
quality mG/(mG+mL) is independent of the tracer. Water and tracer surface condition densities
are 5.5104 gmole/m3 and 5103 gmole/m3, respectively.
*INJECTOR *MOBWEIGHT 'INJECTOR'
*TINJW 400
*QUAL 0.70
*INCOMP *WATER 0.998185 0.001815 0 ** water, tracer
*OPERATE *STW 102 ** 100 water + 2 tracer
*INCOMP
PURPOSE:
Specifies which phases are to be injected, along with their compositions.
FORMAT:
*INCOMP *WATER
*INCOMP *OIL
*INCOMP *GAS
*INCOMP *WATER-GAS
*INCOMP *WATER-OIL
*INCOMP *WATER-GAS-OIL
DEFINITIONS:
*WATER w(1) ... w(numx)
Mole fractions of injected water phase. The allowed range for each is 0 to 1.
They should sum to one, but will be normalized if not. See keyword *MODEL.
*OIL x(1) ... x(numx)
Mole fractions of injected oil phase. The allowed range for each is 0 to 1. They
should sum to one, but will be normalized if not. See keyword *MODEL.
*GAS y(1) ... y(numy)
Mole fractions of injected gas phase. The allowed range for each is 0 to 1. They
should sum to one, but will be normalized if not. See keyword *MODEL.
*WATER-GAS v(1) .v(numy)
Inject water or steam together with a component that exists in the gas phase
at surface conditions, for example, gaseous solvent with steam.
*WATER-OIL v(1) .v(numx)
Inject water or steam together with a component that exists in the oil phase at
surface conditions, for example, liquid solvent with steam.
*WATER-GAS-OIL v(1) .v(numy)
Inject water or steam together with multiple components, each of which
exists in either the oil or gas phase at surface conditions. This is a
generalization of *WATER-GAS and *WATER-OIL and can mimic them
with suitable surface K values.
v(i)
Volume fraction of component injected at surface conditions. The allowed
range is 0 to 1. The v(i) should sum to one, but will be normalized if not. The
value for water v(1) must be non-zero. See Multi-phase Co-injection, below.
DEFAULTS:
There are no defaults.
CONDITIONS:
*INCOMP is a required keyword for injectors, located before its corresponding list of
*OPERATE keywords.
Single-well co-injection requires *INJECTOR *MOBWEIGHT and non-zero v(1).
EXPLANATION:
See Specifying Injection Phase at the beginning of the Recurrent and Well Data chapter.
Multi-phase Co-injection
Gas and/or oil phases can be co-injected with water or steam in the same well at the same time
using *INCOMP subkeywords *WATER-GAS, *WATER-OIL and *WATER-GAS-OIL. An
example is steam injected with gaseous or liquid solvent. A total phase rate constraint must be
specified with *OPERATE *STF, but pressure-type constraints can be used as well. The
*MOBWEIGHT option of *INJECTOR must be used, and v(1) must be non-zero.
For the purpose of specifying the composition of the injection stream, each component
volume is referenced to a single phase at surface conditions with an associated density.
Fraction v(i) is the volume of each injected component divided by the total injected volume.
Water component (number 1) is referenced to the water phase, and non-condensable gas
components (number numx+1 to numy) are referenced to the gas phase. Oleic components
(number numw+1 to numx) are referenced to the gas phase for *WATER-GAS and to the oil
phase for *WATER-OIL. For *WATER-GAS-OIL an oleic component is referenced to the
gas phase if its surface-condition gas-liquid K value is greater than one, and is referenced to
the oil phase otherwise. In any case, a component must exist in its reference phase at surface
conditions as specified by *MODEL, K value data and possibly *SURFLASH.
For consistency of the v(i), the injected volumes of all the components must have the same
unit. Specifically, in field units the volume of a component referenced to the gas phase must
be calculated in units of bbl/day.
In order to relate the injection surface and downhole rates, water uses the steam quality
option but the remaining injected components use a flash calculation to determine the
downhole gas-oil phase split and ratio between surface and downhole densities. This gas-oil
split is calculated only once per time step (explicit), but the density ratio is updated
continuously (implicit) to account for pressure changes in the wellbore.
Rates and accumulations of co-injected components are reported in their respective surface
reference phase. The columns of the diary (log) report are adjusted to accommodate oil phase
injection, since by default the injection columns are only for water and gas phases.
Example
*OPERATE
PURPOSE:
*OPERATE defines a well operating constraints, and the remedial action to be taken when it
is violated.
FORMAT:
*OPERATE ( *MAX | *MIN ) type value ( action )
or
*OPERATE ( *MIN ) *STEAMTRAP value ( uba ) ( action ) (*FLUID-TEMP)
where type is one of:
*STO, *BHO,
*STG, *BHG,
*STW, *BHW,
*STL, *BHL,
*STF, *BHF,
*WHP (*IMPLICIT), *BHP,
*DWN, *DWA, *DWB,
*STEAM
*OXYGEN
*STO_COMP comp_name
*STG_COMP comp_name
and action is one of:
*CONT (*REPEAT)
*SHUTIN (*REPEAT)
*STOP
*NEXTSEG
*ONETIME
DEFINITIONS:
*MAX, *MIN
Specifies a maximum or minimum constraint type. If neither are present, the
constraint uses the default which is *MAX unless explicitly noted below.
*STO, *BHO
Constraint type is oil phase rate, and value has units (m3/day | bbl/day |
cm3/min). Reference condition is surface for *STO, reservoir for *BHO. A
zero rate will shut in an open well, and a non-zero rate will open a shut-in
well. Only *MAX is allowed.
*STG, *BHG
*STW, *BHW
Constraint type is gas phase rate, and value has units (m3/day | ft3/day| cm3/min).
Reference condition is surface for *STG, reservoir for *BHG. A zero rate will
shut in an open well, and a non-zero rate will open a shut-in well. Only *MAX
is allowed.
Constraint type is water phase rate, and value has units (m3/day | bbl/day |
cm3/min). Reference condition is surface for *STW, reservoir for *BHW. A
zero rate will shut in an open well, and a non-zero rate will open a shut-in
well. Only *MAX is allowed.
*STL, *BHL
Constraint type is total liquid (water phase plus oil phase) rate, and value has
units (m3day | bbl/day | cm3/min). Reference condition is surface for *STL,
reservoir for *BHL (producer only). A zero rate will shut in an open well, and
a non-zero rate will open a shut-in well. Only *MAX is allowed.
*STF, *BHF
Constraint type is total fluid (water phase plus oil phase plus gas phase) rate,
and value has units (m3/day | bbl/day | cm3/min). Reference condition is
surface for *STF (injectors only), reservoir for *BHF (producer only). A zero
rate will shut in an open well, and a non-zero rate will open a shut-in well.
Only *MAX is allowed. Use *STF for co-injection of steam and gas or
steam and solvent.
*WHP (*IMPLICIT), *BHP
Constraint type is pressure, and value has units (kPa | psi | kPa). The location
is bottomhole for *BHP and wellhead for *WHP. *WHP requires that
pressure-drop data be entered via keywords *PHWELLBORE.
Each producer should have a minimum pressure type constraint *BHP or
*WHP; the recommended value is 100 kPa, but whatever is used must lie
within the allowed pressure range (see *MINPRES and *MAXPRES).
If neither *MIN nor *MAX is present, then *MAX is assumed for an injector
and *MIN is assumed for a producer.
Maximum WHP or BHP constraints are not allowed for producers under
*OPERATE, but may be imposed using *MONITOR. Similarly, minimum
WHP or BHP constraints for injectors are not allowed under *OPERATE,
but may be imposed using *MONITOR.
Wellhead pressure option *WHP has only one implicitness setting,
corresponding to subkeyword *IMPLICIT in the other CMG simulators.
Pd = (Pblockref Pwellref )
*DWB specifies the average drawdown for all open (sink-source) layers,
weighted by the total productivity or injectivity (PI) at reservoir conditions.
Pd =
PI (Pblock
l
Pwelll )
l , open
PI
l , open
This has the same effect as running the well on an equivalent, timedependent BHF rate constraint. In situations where the pressure differences
between completions in the wellbore differ considerably from the
corresponding differences in reservoir pressures, the actual drawdown in
each layer may differ considerably from the average value.
*STEAM
Constraint type is steam rate, and value has units (m3/day | bbl/day | cm3/min).
Water (component #1) produced in the vapour phase at downhole conditions is
expressed in cold water equivalent (CWE). A zero rate will shut in an open
well, and a non-zero rate will open a shut-in well. This constraint type may not
be used with an injector and only *MAX is allowed.
*OXYGEN
Obsolete. Use *STG_COMP instead.
*STEAMTRAP value ( uba ) (*FLUID-TEMP)
Constraint type is production in steam trapping mode (see EXPLANATION,
below). The value is by how much the steam saturation temperature
(corresponding to well bottomhole pressure) exceeds the temperature of the
produced water. The unit is temperature difference (C deg | F deg | C deg).
670 Well and Recurrent Data
The associated *PRODUCER well list must contain a single well. This
constraint type may be applied to multiple wells simultaneously, but there
must be a separate set of *PRODUCER and *OPERATE keywords for each
well. *MAX may not be used with this constraint type. This constraint type
may not be used with an injector or the ZT formulation (*TFORM *ZT).
User block address uba is the optional steam trap location and is needed only
when it is different from the default location. For a source/sink well uba
must appear in the wells *PERF or *PERFV definition. uba may not be
specified for a discretized wellbore. See section User Block Address in
Keyword Data Entry System chapter.
Optional fluid temperature *FLUID-TEMP may be specified only for a
source/sink well when *HEADMETHOD *GRAV-FRIC-HLOS is used. In
this case the wellbore fluid temperature instead of a grid block temperature is
used in the steam trap calculation.
*STO_COMP comp_name
Constraint type is rate of the specified component in oil phase at surface
conditions, and value has units (m3/day | bbl/day | cm3/min). This constraint is
available for producers only. A zero rate will shut in an open well, and a nonzero rate will open a shut-in well. Only *MAX is allowed.
*STG_COMP comp_name
Constraint type is rate of the specified component in gas phase at surface
conditions, and value has units (m3/day | ft3/day | cm3/min). This constraint is
available for producers only. A zero rate will shut in an open well, and a nonzero rate will open a shut-in well. Only *MAX is allowed.
comp_name
Component name in quotes. The component must be found in the phase
indicated by the keyword, as determined by *MODEL and the K value data
entered.
*CONT
The action on violation is to switch to operating on this constraint, and
continue the simulation. When *REPEAT is used then a timestep will
reconverge with the new operating constraint.
*SHUTIN
The action on violation is to shut in the well.
*REPEAT
The time step will be reconverged (repeated) after the action is taken.
*STOP
The action on violation is to stop the simulation.
*NEXTSEG
The action on violation is to immediately read and apply the well changes for
the next *TIME or *DATE.
*ONETIME
This subkeyword specifies that the constraint will not be checked for violation
when another constraint is operating. For this option to be effective, this must
be the first operating constraint chosen; this can be forced by defining this
constraint first in the constraint list and using *MRC-RESET *NO-RESET.
This option makes it possible to reproduce the behaviour of versions 96 and
earlier, in which operation always started on the first constraint and it was
never checked for violation once control left it.
DEFAULTS:
At least one operating constraint must appear for each active well in the data set. When a well
does not have BHP constraint then the simulator will assign *OPERATE *MIN 101.3 kPa or
14.7 psia for producers and *OPERATE *MAX 1.0e+6 kPa or 147,000 psia for injectors.
Except for *BHP, *WHP and *STEAMTRAP noted above, if *MAX and *MIN are absent,
then *MAX is assumed.
If uba is absent after *STEAMTRAP then the steam trap location is: a) Sink/Source wells block/layer where steam first appears; b) Discretized Wellbore - block where Sink/Source
end is attached. For a horizontal-only section it would be the heel; when both vertical and
horizontal leg is simulated then it would be the surface.
If *FLUID-TEMP is absent in *STEAMTRAP then a grid block temperature is used in
calculation.
The default remedial action for a constraint violation is *CONT *REPEAT.
If *ONETIME is absent, then the first constraint is checked for violation just like any other.
CONDITIONS:
Each occurrence of *PRODUCER or *INJECTOR must be followed by at least one *OPERATE.
When automatic constraint choosing is defeated, the first *OPERATE after *PRODUCER or
*INJECTOR is the starting operating constraint for the recurrent time segment defined by the
two bracketing *TIME or *DATE keywords. Other operating constraints are added by
consecutive occurrences of *OPERATE.
The first constraint entered is called the primary operating constraint. The simulator will
initially attempt to operate the well on this constraint (i.e. to enforce this constraint as an
equality) and monitor all other constraints regardless of whether the other constraints are
operating constraints or monitored constraints.
If one of the other specified operating constraints is violated while being monitored and
*CONT has been specified, then this violated constraint becomes the operating constraint,
and is enforced as an equality constraint (target constraint) instead of being monitored as an
inequality constraint.
If more than one constraint is violated and the most serious action is *CONT, the constraints
are checked to determine which constraint is the most restrictive, and the most restrictive
constraint becomes the well's target constraint.
The hierarchy of actions from most serious to least serious is as shown:
most serious
*STOP
*SHUTIN
*CONT *REPEAT
*CONT
least serious
Each constraint type (e.g., *STO, *BHP) may appear only once in a constraint list. For
example, both *MIN *BHP and *MAX *BHP constraints may not appear in the same list.
The same rule applies to constraint types that differ only in their reference condition, e.g.,
*STO and *BHO.
In general, any combination of *MIN and *MAX for injector or producer and operating
constraint type is allowed. Exceptions are explicitly noted above.
All constraint types may be used for production. The constraint types that may not be used
for injection are *BHO, *BHG, *BHW, BHL, *STEAM, *OXYGEN and *STEAMTRAP.
The keyword *ALTER can be used to change the value of the first operating constraint.
However, all the *OPERATE and *MONITOR must be repeated if any of the other constraint
values are to be changed from a previous definition.
See "Specifying Injection Phase" at the beginning of the Recurrent and Well Data chapter.
EXPLANATION:
*OPERATE defines a well's operating constraints and the remedial action to take when a
constraint is violated. (Use *MONITOR for constraints which cannot be used for operating
the well, such as WOR). See Appendix F.4 for a discussion of well equation treatment.
A starting operating constraint may be chosen automatically from the list of *OPERATE (see
*MRC-RESET). When automatic constraint choosing is defeated, then the simulator will
initially attempt to operate the well on the first operating constraint. It will check the other
constraints for violation only when the timestep converges. If the first *OPERATE is not
realistic, the simulation may stop due to numerical problems.
The list of operating constraints is checked for violation at the end of each timestep. If one of
the other signified operating constraints is violated and *CONT or *CONT *REPEAT has
been used, then this constraint becomes the operating constraint.
If more than one constraint, regardless of type, is violated at the same time, then the most
drastic assigned action is taken, in this order of priority: *STOP, *SHUTIN, *CONT
*REPEAT and *CONT.
The value of the first operating constraint is changed easily at a subsequent simulation time
for a well list with the *ALTER keyword.
A value for each constraint, regardless of the type of constraint, is required.
For example, to start producing a well at a rate of 500 m3/D, with a minimum bottomhole
pressure at 2500 kPa, and with monitoring constraints of GOR at 2000 m3/m3 and water cut at
98%, the input is:
*OPERATE *MAX *STO 500
*OPERATE *MIN *BHP 2500 *SHUTIN
*MONITOR *MAX *GOR 2000 *STOP
*MONITOR *MAX *WOR 0.98 *STOP
While the primary constraint is active and the bottomhole pressure falls below 2500 kPa, then
the bottomhole pressure constraint becomes the operating constraint and the well is shut in.
Steam Trap
The steam trap constraint is used to prevent the production of live steam. It does this by
keeping the well's flowing bottomhole pressure (and hence the pressure in the grid block
containing the well) high enough that live steam does not appear in the well block.
Effectively, with *STEAMTRAP the well is constrained to a specified BHP as it is with the
*BHP option, but the BHP is a function of well block temperature instead of being constant.
The well equation that is solved is
Tsat(BHP) - T(block) = value
where Tsat(BHP) is the steam saturation temperature corresponding to pressure BHP,
T(block) is the temperature in the well block, and val is the desired difference between these
temperatures. Another way to think of this constraint is
BHP = Psat ( T(block) + value )
When *FLUID-TEMP is specified the location at which the constraint is applied may be user
specified. It is important for:
a) Slanted Sink/Source wells in heterogeneous reservoirs
-
When the location is specified then a complete user block address must
be used. For example: a Sink/Source well is perforated in a block 10 1 5
that is refined into 3 1 1. The actual well location is in the refined block
1 1 1. The user block address will be 10 1 5 / 1 1 1.
When *FLUID-TEMP is specified then the wellbore fluid temperature is used in the above
equations instead of T(block). Numerically these calculations are more difficult especially for
backflowing wells because of wellbore fluid temperature discontinuity. As a consequence the
CPU time may increase.
*MONITOR
PURPOSE:
*MONITOR defines the monitored well constraints, and the remedial action to be taken when
a monitored constraint is violated. Monitored constraints differ from operating constraints in
that a monitored constraint can never be imposed directly as a well target. The constraints are
checked and the actions are applied only after a time step has been completed; actions are not
applied part way through a time step.
FORMAT:
*MONITOR monitored_constraint value action
Where:
monitored_constraint for producers is one of:
*MAX
*MAX
*MAX
*MAX
*BACKFLOW
*WHYSTAB
*MIN
*MIN
*MIN
*MAX
*MAX
*MAX
*MAX
*MAX
*MAX
*MAX
*GOR
*WCUT
*WOR
*WGR
*STO
*STODWN
*STG
*STG
*STW
*STL
*WHP
*BHP
*O2CONC
*TEMP
*STG
*STW
*WHP
*BHP
*GOR
*WGR
*BACKFLOW
This subkeyword identifies backflow monitoring. No value is required for
this monitor, but an action is required. The default action is to print a
message with no further action taken.
*WHYSTAB
This subkeyword identifies wellbore hydraulics stability monitoring. A real
well can operate only above a certain rate at which the bottom-hole pressure
remains in the stable region of the well-head pressure curve (a region in
which the curve of WHP vs. BHP has a positive slope). It can only be used
for wells for which a method of computing WHP has been introduced with
the *PHWELLBORE keyword. No value is required for this monitor, but an
action is required. The default action is to print a message with no further
action taken.
*STO
*STODWN
*STG
*STW
*STL
*WHP
This subkeyword identifies a maximum (producers) or minimum (injectors)
well-head pressure (kPa | psi) monitor. It can only be used for wells for which
a method for computing WHP has been introduced with the *PHWELLBORE
keywords.
*BHP
This subkeyword identifies a maximum (producers) or minimum (injectors)
bottom hole pressure (kPa | psi) monitor.
*O2CONC
Maximum oxygen (component #numy) gas mole fraction of all the blocks
completed in this well.
*TEMP
Maximum temperature (C | F) of all blocks completed in this well. It must lie
within the allowed temperature range (see *MINTEMP and *MAXTEMP).
value
A real number specifying the constraint value.
*STOP
This subkeyword specifies that the simulation is to be terminated if the
constraint is violated.
*SHUTIN
This subkeyword specifies that if the constraint is violated, the well should
be shut-in.
*REPEAT
The time step will be reconverged (repeated) after the action is taken.
*NEXTSEG
This subkeyword specifies that if the constraint is violated, the next *TIME or
*DATE keyword and well changes should be immediately read and applied.
*AUTOWELL
Similar to *SHUTIN except that well productivity is checked periodically
and the well is reopened automatically if the previously violated monitored
constraint ceases to be violated. The *AUTOWELL action is valid only for
the following monitors used by producers: *MIN *STO, *MIN *STG,
*GOR, *WCUT, *WGR, *MAX *WHP and *MAX *BHP.
*SHUTLAYER
Plug the most offending layer and continue the simulation.
DEFAULTS:
Optional keywords. No defaults.
If an action subkeyword is absent, then *SHUTIN is assumed.
CONDITIONS:
If it appears at all, this keyword must follow the list of operating conditions specified via
*OPERATE.
In general any combination of *MIN and *MAX for injector or producer and monitor type is
allowed; the following combinations are not:
*WOR with injector
*GOR with injector
*WGR with injector
*O2CONC with injector
EXPLANATION:
*MONITOR defines which performance variables to monitor, as well as the remedial action
to take when a constraint is violated. (Use *OPERATE for constraints which can be used for
operating the well, such as oil rate or pressure).
See the EXPLANATION for *OPERATE.
*GEOMETRY
PURPOSE:
*GEOMETRY specifies well's geometric characteristics to be used by the simulator to
calculate the well index internally. See Appendix A.1.
FORMAT:
*GEOMETRY ( *I | *J | *K ) rad geofac wfrac skin
DEFINITIONS:
*I, *J, *K
These subkeywords associate a direction with the well index calculation. For
a normal wellbore, it is the grid axis which is parallel to the wellbore; for the
linear-pressure-drop option, it is the direction of flow. For purposes of well
index calculations, layer thickness refers to the distance across the block in
the specified grid direction, that is, well length, and well permeability refers
to that in the plane perpendicular to the specified grid direction.
rad
A real number specifying the well radius. (m | ft | cm).
geofac
A real number specifying the geometric factor for the well element. See
Appendix A, Figure A.1. This quantity is not used when *GEOA or *KHA
is used after keyword *PERF or *PERFV (see Appendix A.3).
wfrac
A real number between 0 and 1, specifying the fraction of a circle that the
well models. See Appendix A, Figure A.1.
skin
A real number specifying the well skin factor.
DEFAULTS:
If *GEOMETRY is absent then rad = 8.6 cm and skin = 0, and geofac and wfrac correspond
to a full well in the middle of a block (Fig. A.1(a), in Appendix A).
CONDITIONS:
*PERF and *PERFV followed by *GEO, *GEOA, *KH, *KHA or *TUBE-END will use the
*GEOMETRY values preceding them to calculate well index, and will use the default values
if *GEOMETRY is absent. Therefore, each well with different *GEOMETRY values should
have its own *GEOMETRY keyword.
EXPLANATION:
For example, to define two wells with identical well geometry, and a third with a larger
radius, the input data would appear as:
** 3 wells are defined.
*WELL 1 'Producer 1' *VERT 12 14
*WELL 2 'Producer 2' *VERT 15 19
*WELL 3 'Producer 3' *VERT 21 23
...
** The well geometries are input for wells 1,2
**
rad
geofac
wfrac
skin
*GEOMETRY *K 0.375 0.2488
1.0
0.0
** The well completion is defined for wells 1,2
*PERFV *GEO 1:2
** kf
wi
2:4
1.
** Well geometries are input for well 3
**
rad
geofac
wfrac
skin
*GEOMETRY *K 0.5
0.2488
1.0
0.0
** The well completion is defined for well 3
*PERFV *GEO 3
** kf
wi
2:4
1.
Symmetry Elements
A well on the boundary of a repeated symmetry element modelled with a Cartesian grid
almost always corresponds to case (a) in Figure A.1. This is because the grid is defined so
that wells fall on block centres. The resulting element boundaries then determine which
portions of the raw grid to eliminate via block modifier keyword *VAMOD. Therefore, the
index is calculated for the full well with wfrac = 1 and geofac = .249. Finally, the appropriate
fraction is applied via *WELL *FRAC.
If a radial grid is used to model a symmetry element, then case (f) in Figure A.1 is used for
the well at the centre of the grid. In this case, you can apply the desired well fraction to wfrac
or to *WELL *FRAC but not both. Use case (a) for a well not at the centre of the grid.
*PERF
PURPOSE:
Specify the well completion locations and indices.
FORMAT:
*PERF *WI well_name
{ location wi (status) (connection) }
-or*PERF ( *GEO | *GEOA | *TUBE-END ) well_name
{ location ff (status) (connection) }
-or*PERF ( *KH | *KHA ) well_name
{ location kh (status) (connection) }
DEFINITIONS:
*WI
Enter well indices wi directly.
*GEO, *GEOA
Well index of each layer is calculated from the geometric information on the
preceding *GEOMETRY keyword, the dimensions and permeability of the
grid block in which the completion occurs and the partial completion factor
ff. For option *GEOA, geofac = 0.249 is assumed (see *GEOMETRY
keyword and Appendix A.3).
*TUBE-END
Well indices of layers are calculated from a linear flow model instead of the
usual radial flow model and the partial completion factor ff. See Tube-End
Option, below.
*KH, *KHA
Well index of each layer is calculated from kh (permeability times
completion length) and the geometric information on the preceding
*GEOMETRY keyword. For option *KHA, geofac = 0.249 is assumed (see
*GEOMETRY keyword and Appendix A.3).
well_name
Well name in quotes.
location
if jf kf ( / ( / irn jrn krn )) (*SS)
if, jf and kf are integer or integer ranges specifying the grid block index of the
fundamental grid in the I, J or K direction, respectively, through which the well
is completed. (See explanation). At most one direction may have a range.
Optional irn, jrn and krn are similar to if, jf and kf, but at the nth level of
refinement (if applicable) for the perforated grid block. At most one
direction may have a range. See User Block Address in the manual
chapter Keyword Data Entry System. UBA qualifiers are not allowed.
Optional *SS indicates that this is an additional Sink/Source well attached to
a discretized wellbore. See EXPLANATION.
wi
Well index for the layer. See Appendix A.2 for typical well index
calculations. See Appendix A.4 for a discussion of backflow in multi-layer
wells. Use wi = 0 to indicate a shut-in layer.
Producer: The layer rate for each phase at reservoir conditions is
q = wi * (Phase mobility) * (Pblock - Pwell)
Quantity wi is the constant geometric part of the well index, has unit (md-m |
md-ft | md-cm) and does not contain a mobility factor.
*MOBWEIGHT Injector: The layer rate for the injected phase at reservoir
conditions is
q = wi * (Total mobility) * (Pblock - Pwell)
Quantity wi is the constant geometric part of the well index, has unit (md-m |
md-ft | md-cm) and does not contain a mobility factor. The total mobility is
that of the fluid phases in the grid block into which the well is injecting, so this
is a type of downstream mobility weighting.
*UNWEIGHT Injector: The layer rate for the injected phase at reservoir
conditions is
q = wi * (Pblock - Pwell)
Quantity wi contains both the constant geometric part of the well index and
the downhole mobility of the injected phase, and has unit (m3/kPa-day |
bbl/psi-day or ft3/psi-day | cm3/kPa-day). The volume unit corresponds to
the phase (liquid or gas) being injected.
ff
The well index calculated in the *GEO, *GEOA or *TUBE-END option is
multiplied by this factor. It can be used to account for partial completions
through a grid block. Values of ff must be greater than zero.
You may need to over-ride the default of ff for a layer completed in a partial
block. See Well Completion in a Partial Block in the *VAMOD entry.
kh
Permeability times completion length for the layer (md*m | md*ft). Layer
production and injection rates are calculated as:
status
*OPEN | *AUTO | *CLOSED
*OPEN
This subkeyword specifies that the well layer is open (perforated). If no
status keyword is present, then *OPEN is assumed.
*AUTO
This subkeyword specifies that the well layer is currently plugged but is a
candidate for automatic recompletion. This automatic recompletion is
specified by using the *RECOMPLETE action of the *MONITOR keyword.
*CLOSED
This subkeyword specifies that the well layer is a geometrical node point for the
purpose of defining the well trajectory. The layer will remain plugged unless
overridden by a new *PERF card selecting the layer status at that location as
*OPEN or *AUTO. A closed layer may be the reference layer for a well. The
pressure drop through a well segment with closed status is accounted for in
computing the wellbore pressure differences between completions. No fluid
flows from wellbore to reservoir or from reservoir to wellbore in a closed layer.
connection
(*FLOW-TO ily | *FLOW-FROM ily) (*REFLAYER)
*FLOW-TO
This keyword is used to establish a "child to parent" relationship between the
current layer and a layer ALREADY specified under the current *PERF card
for a producer. For the first layer specified under the *PERF the parent is the
surface. This default is applied if this keyword is missing for the first layer.
For subsequent layers the default is the previous layer specified in the
sequence. The index used to reference a given layer for the "child to parent"
relationship is simply the count of the number of well layers entered to that
point that the parent layer is specified under the current *PERF card. The
range specification operator : can still appear, but only once per layer card.
These points are best illustrated with an example of a dual lateral well with
legs or "branches" parallel to the i and j axis:
*PERF
** i
1
1
1
1
2
3
*GEO 1
j
k
1 1:3
1
4
2
4
3
4
1
4
1
4
ff
1.0
1.0
1.0
1.0
1.0
1.0
connection
FLOW-TO 'SURFACE'
FLOW-TO
3
FLOW-TO
4
FLOW-TO
5
FLOW-TO
4
FLOW-TO
7
**
**
**
**
**
**
1-3
4
5
6
7
8
2
k
3
4
7
The first line under the *PERF specifies layers 1-3. If the *FLOW-TO keyword
was not specified for this line then *FLOW-TO 'SURFACE' would have been
defaulted. The range in k direction is interpreted as well layer 1 connected to 2.
Well layer 2 connected to 3. Layer flow is connected to layer 3. In general if the
*FLOW-TO keyword is missing for layer N+1, then *FLOW-TO N is assumed.
Therefore the *FLOW-TO keyword for layer 4 is not strictly required. In this
case by default the reference layer for BHP calculation is the first layer.
However, any of the layers 1-4 could have been designated as reference layer
with the keyword *REFLAYER. Layers 5-8 are not eligible as the reference
layer since branching has occurred prior to those layers being defined.
ily
The index of the parent layer used to establish a "child to parent"
relationship. The parent layer must already have been defined under the
current *PERF card to be referenced. The character string SURFACE can
be used in place of ily for the first layer listed under *PERF.
*FLOW-FROM
This keyword is used to establish a "child to parent" relationship between the
current layer and a layer ALREADY specified under the current *PERF card
for an injector. Please see documentation under the *FLOW-TO keyword
above. FLOW-TO is also accepted for injectors with exactly the same effect
that FLOW-FROM would have in the same place.
*REFLAYER
By default the first layer specified under the current *PERF card is used to
measure the wellbore flowing pressure (pwf). The user may select a different
layer for this purpose by the use of this keyword. This keyword can only
appear once per *PERF card.
DEFAULTS:
Once the wells type has been defined with *PRODUCER or *INJECTOR, each well must
have at least one open perforation defined.
If *WI, *GEO, *GEOA, *KH, *KHA and *TUBE-END are absent, then *WI is assumed.
CONDITIONS:
One of *PERF or *PERFV is required.
Each line of I-J-K addresses is allowed to have a range in at most one direction.
*SS may be used only for attaching a source/sink well to a discretized wellbore block.
EXPLANATION:
This keyword specifies the grid blocks in which a well is completed.
*PERF is used for horizontal or deviated wells, where the completions are not in a single
vertical column of grid blocks. For vertical wells you may use the *PERFV keyword.
If the perforation location integers identify an inactive grid block (for example, a null or
pinched-out block), the user can choose one of two possible actions:
(1) The perforation can be completed with a status of CLOSED, in which case the
perforation will be included for the purposes of head calculation but no fluid will
flow in the completion; or
(2) The completion can be rejected by the simulator with a message identifying the
suspect perforation so that data may be modified.
Action (1) is the default. Action (2) can be specified with the *NULL-PERF keyword.
*WELL
*WELL
*WELL
*WELL
*WELL
1
2
3
4
5
'Producer 1'
'Producer 2'
'Tubing'
'Annulus'
'Pump'
...
**
rad
*GEOMETRY *K 0.375
*PERF *GEO 1
** i j
k
ff
12 6 2:4 1.
13 6
5
.5
*PERF
2
** i j k
wi
16 8 4 1.56
17 8 5 2.34
18:20 8 6 12.4
wfrac
1.0
skin
0.0
*PERF GEO
3
** i j k
1 1 15 / 1
*PERF GEO
4
** i j k
1 1 15 / 2
*PERF GEO
5
** i j k
1 1 12 / 2
**surface
*SS
Note for Radial Grid: The innermost radial block is never discretized in the angular direction.
This means that a well at the centre (i = 1) is completed only for j = 1; any j > 1 are called null
blocks.
This keyword specifies the grid blocks in which a well is completed within refined grids
*WELL 1 'Producer 1'
*PERF 1
** if jf
kf / ir
12
6 2:4 / 2
13
6 5
/ 2
*WELL 2 'Injector 2'
*PERF 2
** if jf
kf / ir
12
6 2:4 / 1
jr
2
2
kr
1:3
1:3
wi
1.78
1.5
kr
1
wi
1.78
Use *PERF for a well located in both refined and unrefined blocks. For example, if block
(2,3,4) is refined to 3 x 3 x 3 but block (2,3,5) is not refined, use the following.
*PERF *GEO 1
** if jf kf
2
3
4
2
3
5
/
/
ir
2
jr
2
kr
1:3
To attach a source/sink well to one end of a discretized wellbore embedded in a hybrid grid,
use *PERF to refer to the innermost hybrid grid block:
*PERF
*GEO iw
** i j k / ir
3 4 5 / 1
jr
1
kr
1 /
**regular wellbore
The one exception to the definition of quantity wi is the *UNWEIGHT injector. Here wi is
Cg * Mp, where Mp is the mobility of the phase being injected (see Appendix A.2). The unit
of wi is the converted one but without the viscosity, e.g., bbl/psi-day. In field units the
volume unit depends on which phase (liquid or gas) is being injected. The *QUAL option
will require mixing the water and gas phase indices to get the cold-water-equivalent value.
Well Index Reference Conditions
STARS assumes that wi does not contain the density ratio, and applies an appropriate density
ratio to the downhole rate when constrained by or reporting a surface condition rate. This
density ratio is calculated for each Newton iteration, so the ratio is correct for each converged
time step.
Unweighted Injector with *GEO-Like Options
All *GEO-like options are available with an *UNWEIGHT injector. The density ratio is
calculated and applied as described above. A mobility factor is estimated from wellbore
temperature *TINJW and composition *INCOMP, flashed to reservoir conditions at the time
the well is opened. This constant mobility factor is used for subsequent time steps.
Flashing and density assumptions in this model may not be applicable to the users particular
situation. The use of *GEO-like options with *UNWEIGHT is intended to be used only in
the absence of actual index data, perhaps to get an initial feel for the well performance. The
user can always specify desired well index and mobility via the *WI option where wi contains
mobility.
Defining the "Bottom Hole" Location
The very first completion layer defined by the list of block addresses is the "bottom hole"
layer; the exact location is the center of this block. This is the location at which the *BHP
pressures will be applied to the wellbore calculations. This block should be at one of the ends
of a multi-layer well.
The short form k1(:k2) to refer to grid K layers is convenient if K = k1 for the block that you
want as "bottom hole". However, if you want K = k2 instead as "bottom hole" then use the
long form, that is, one line for each layer with K = k2 the first one.
Changing the Number of Layers
The number of completion layers of a well may be increased or decreased in subsequent
invocations of *PERF or *PERFV. It is not necessary to shut in unused layers by using wi = 0
or ff = 0. Accumulations for shut-in layers will be printed along with open layers since they
contribute to the well's accumulation.
Direction Default of *GEO-Like Options
When using a *GEO-like option be aware of what "layer direction" is being used to calculate
well index. The following are the sources for this direction, listed in decreasing order.
1. Layer direction specified via keyword *LAYERIJK.
2. Layer direction implied by the relationship between the I-J-K indices. If two
layers that are adjacent in the data entry order differ in I-J-K index in exactly one
direction, that direction is used. This is an expansion of the previous method that
used the index range syntax.
User's Guide STARS
In this case, if you want to force direction J for (9,6,2), use the *LAYERIJK keyword.
Invalid Completions
Well completions are not allowed in null blocks or zero-porosity blocks. When such a block
is referenced in *PERF a warning message is issued and that block is skipped.
Discretized Wellbore Option
A discretized wellbore is merely a collection of grid blocks in a certain configuration, and it
needs a source/sink well to specify its operation. This is achieved by attaching a source/sink
well to one end, that is, a grid block that is part of the discretized wellbore.
When the horizontal part of a well is discretized but the vertical leg not, the source/sink well
should be attached at the heel of the well. When the vertical leg is discretized then the
source/sink well should be attached to the wellbore block closest to the surface.
Sometimes fluid is drawn off by a pump located part way down the discretized wellbore (e.g., to
control the liquid level). In this case, the pump should be modelled with an additional source/sink
well. In the example specified above, a pump (well No. 5) is located three blocks below the
surface (well No. 4). Due to gravity effects, fluid will segregate in the wellbore. Therefore, the
pump may draw only liquid to the surface while the other well may produce only gas phase.
Discretized wellbore qualifiers *TU and *WB are not allowed. The addressed block (UBA)
must be at the heel or surface location of the discretized wellbore. An additional Sink/Source
well may be attached to a Discretized wellbore anywhere in the vertical section. This additional
well mimics the withdrawal of fluid by a pump. In this case the UBA must be followed by *SS.
See Appendices A.7 and A.8 for a detailed discussion of the discretized wellbore option.
Tube-End Option
A linear flow model may be used instead of the usual radial well model to estimate well
index. The geometrical part of the index is the same as the linear transmissibility calculation
for blocks, but the separation distance is from the block centre to the block face (i.e., half the
block length). If grid parameters are uniform, the index is twice the transmissibility of the
face in the corresponding direction.
This model is appropriate for the end of a core face, such as found in lab-scale core
experiments. However, it can be used in any situation in which each well completion block
satisfies the following conditions:
1. the block is a fundamental grid block, that is, the block is not the result of local
grid refinement;
2. the block lies on the external surface of grid, i.e., its (I,J,K) address satisfies at least
one of the following conditions: I = 1, I = NI, J = 1, J = NJ, K = 1 and K = NK.
A candidate direction for transmissibility calculations is one for which all the completion
blocks satisfy condition (2) above in that direction. If there is more than one candidate
direction for the chosen blocks (e.g., they are all on the edge of the grid), then the following
additional criteria are used:
3. If the direction given by the current *GEOMETRY keyword is a candidate
direction, it is chosen, so you may use *GEOMETRY to manually resolve multiple
candidate directions. However, since the *GEOMETRY direction is the last one
defined or defaulted, the result may be unexpected unless *GEOMETRY is
provided explicitly for this well.
4. A candidate direction is eliminated if the grid is not resolved in that direction. For
example, candidate direction J would be dropped if NJ = 1 from grid definition
keyword *GRID.
If these additional criteria are insufficient then the data is in error, and *GEOMETRY must
be used to resolve it manually (use the desired direction keyword and zero for each of the
remaining numbers). This option is evoked with *PERF *TUBE-END.
Limited Entry Perforations
An injector may be assigned Limited Entry Perforations (LEP) using keyword *LEP-WELL
which replaces the *MOBWEIGHT or *UNWEIGHT injection flow calculations described
above with steam-specific critical or sub-critical flow rates.
*VERT
*VERT
*VERT
*VERT
12 16
10 5
21 3
17 12
geofac
0.2488
wfrac
1.0
skin
0.0
DEFINITIONS:
well_name
Single quoted well name specifying the well to which the following deviated
layer specifications apply. No wildcarding is allowed.
{location}
if jf kf / ir1 jr1 kr1 { / { / irn jrn krn} }
These block addresses specify the layers of the well to be treated as deviated
layers. It is valid to name some of the wells layers and not others in the
*LAYERXYZ lines, but layers not mentioned do not acquire the deviated
status and will be treated as *I, *J, or *K perforations. Any layer named under
*LAYERXYZ must already have been defined for the well using a *PERF or
*PERFV keyword.
{deviated layer information}
(x1 y1 z1 x2 y2 z2 plength | *UNDEVIATED)
x1 y1 z1
Coordinates (m|ft) of the entry point of the wellbore into the perforated
grid block. See explanation.
x2 y2 z2
Coordinates (m|ft) of the exit point of the wellbore from the perforated grid
block. See explanation.
plength
Perforated length (m|ft) of the deviated wellbore within the named grid
block. See explanation.
*UNDEVIATED
Subkeyword indicating that the layer is henceforth to be treated as an
undeviated layer with the direction (*I,*J, or *K) which the layer had when
initially perforated.
User's Guide STARS
DEFAULTS:
Layers named under *LAYERXYZ with geometric information (as opposed to the
*UNDEVIATED subkeyword) are flagged as deviated within the simulator; undeviated is the
default status assigned at the beginning of the run. The undeviated status can be re-imposed
through the *UNDEVIATED subkeyword.
CONDITIONS:
The named layers must all have been previously created for the specified well with *PERF or
*PERFV lines using the *GEO or *GEOA option for computation of well indices. If another
well index calculation was specified, the layer is rejected as invalid for deviated perforation.
If geometric information is supplied, all seven of the real numbers x1, y1, z1, x2, y2, z2,
plength must be specified or an error is generated. Not all of a wells layers need to be
named under *LAYERXYZ; those omitted are treated as undeviated according to the original
*PERF specification.
EXPLANATION:
This keyword specifies geometric information which allow the well indices to be calculated for
perforations in which the wellbore direction does not parallel one of the grid block coordinate
axes. The point coordinates x1, y1, z1 and x2, y2, z2 must be expressed in the Cartesian
coordinate system underlying the simulation grid. The entry point and exit point specify the
direction of the wellbore; the perforation length gives the actual perforation length through the
named grid block. It is valid for plength to exceed the distance between (x1, y1, z1) and (x2, y2,
z2) in order to allow more freedom in matching well indices. However the distance between
(x1, y1 ,z1) and (x2, y2, z2) must be positive; if (x1, y1, z1) and (x2, y2, z2) are the same point
an error is generated. The identities of entry and exit points can be exchanged with no difference
in the well index calculation. The ff factor entered under the *PERF, or *PERFV line when the
layer was created still applies to the deviated layer. If the user intends that plength alone control
the well index calculation, ff should be entered as 1.0 on the *PERF line for the layer.
The deviated well index is calculated as
WI = 2*wfrac*K*plength*ff/(ln(re/rw) + ss)
The well angular fraction wfrac, the completion factor ff, the well radius rw, and the skin
term ss are entered on the relevant *GEOMETRY or *PERF.. lines. plength is read directly
in the *LAYERXYZ data.
The drainage radius re is computed from the information entered under *LAYERXYZ as
follows. When the wellbore is parallel to the D axis (D is I, J, or K), re(D) is calculated as
Re(D) = geofac*sqrt(V/(*xh(D)*wfrac))
Where, V is the bulk volume of the perforated grid block, xh(D) is the grid block thickness in
the direction D, and geofac is the geometric factor entered with the *GEOMETRY keyword.
Once re(D) has been calculated for the three directions I,J,K, an interpolation to the deviated
wellbore direction is done as follows. Let u be a unit vector in the wellbore direction (x2x1,y2-y1,z2-z1). It makes no difference whether u points with or against the fluid flow in the
wellbore. Let i, j, and k be unit vectors pointing in the local I, J, and K directions for the
block in which the layer is perforated. These are determined from data entered for the block
in the RESERVOIR DESCRIPTION section of the data set. Note that for corner-point grids
(see the RESERVOIR DESCRIPTION section of this manual) these directions are not
692 Well and Recurrent Data
necessarily aligned with the underlying Cartesian axes of the grid (those in which the
coordinates x1, y1, etc. are defined) nor are the vectors i, j, and k necessarily mutually
orthogonal.
Define cos(thetaI) as the dot product ui, and let cos(thetaJ) and cos(thetaK) be similarly
defined. Define sin**2(thetaI) as 1 cos**2(thetaI) and similarly for J and K. Then the
interpolated value of re to apply in the direction of the wellbore is
re(u)
(re(I)*cos**2(thetaI)*sin**2(thetaJ)*sin**2(thetaK) +
re(J)*cos**2(thetaJ)*sin**2(thetaK)*sin**2(thetaI) +
re(K)*cos**2(thetaK)*sin**2(thetaI)*sin**2(thetaJ))/S,
where S is the sum of the three trigonometric weighting factors in the numerator.
The completion planar averaged permeability K is computed similarly except that re(I), re(J),
and re(K) are replaced with
K(I)
K(J)
K(K)
=
=
=
sqrt(Ky*Kz)
sqrt(Kz*Kx)
sqrt(Kx*Ky)
EXAMPLES:
Example 1:
*LAYERXYZ WELL-NNE17
65 23 5
** x1
y1
z1
2287.49 1457.64 3949.09
x2
y2
z2
plength
2284.34 1460.23 3944.28 2.67
A completion for well WELL-NNE17 in block 65 23 5 must already have been created with
a *PERF.. line for the above to be valid.
Example 2:
*LAYERXYZ WELL-MULTI-REF
16 48 11 / 1 1 2 / 2 2 1
** x1
y1
z1
x2
102.11 493.74 2285.53
102.48
y2
z2
plength
494.87 2284.13
2.67
{layer direction}
:
DEFINITIONS:
well_name
Single quoted well name specifying the well to which the following deviated
layer specifications apply. No wildcarding is allowed.
{location}
if jf kf / ir1 jr1 kr1 { / { / irn jrn krn} }
These block addresses specify the layers of the well to be treated as deviated
layers. It is valid to name some of the wells layers and not others in the
*LAYERIJK lines. Layers not mentioned do not acquire the deviated status;
layer direction is then defined by the currently active GEOMETRY keyword.
Layer range is not allowed. Any layer named under *LAYERIJK must already
have been defined for the well using a *PERF or *PERFV statement.
{layer direction}
(*I | *J | *K | *UNDEVIATED)
*I
Signifies the layer is perforated in the local I direction.
*J
Signifies the layer is perforated in the local J direction.
*K
Signifies the layer is perforated in the local K direction.
*UNDEVIATED
Sub-keyword indicating that the layer is henceforth to be treated as an undeviated layer with the direction (*I,*J, or *K) which the layer had when
initially perforated (defined by active *GEOMETRY keyword).
DEFAULTS:
Layers named under *LAYERIJK with geometric information *I, *J or *K (as opposed to the
*UNDEVIATED subkeyword) are flagged as deviated within the simulator; un-deviated is
the default status assigned at the beginning of the run. The un-deviated status can be reimposed through the *UNDEVIATED sub-keyword.
CONDITIONS:
The named layers must all have been previously created for well wn with *PERF or *PERFV
lines using the *GEO or *GEOA option for computation of well indices. If another well
index calculation was specified (example *KH), the layer is rejected as invalid for deviated
perforation. Not all of a wells layers need to be named under *LAYERIJK; those omitted
are treated as un-deviated according to the original *PERF specification.
EXPLANATION:
This keyword specifies geometric information that allows the well indices to be calculated for
perforations in which the wellbore direction is parallel to one of the grid block coordinate
axes but varies by layer. The ff factor entered under the *PERF or *PERFV line when the
layer was created still apply to the deviated layer.
The deviated well index is calculated in a manner identical to the LAYERXYZ keyword with
the following additional assumptions made. It is assumed a perforation enters a block at the
center (barycenter) of one face perpendicular to the layer direction (*I, *J, or *K) and exits at
the center (barycenter) of the other face. The length of the perforation is the length of the line
connecting one face center to the other.
For example, a *LAYERIJK *I perforation would follow the path defined by connecting the
center of the lower I face (the face connecting block I with block I-1) to the center of the upper I
face (the face connecting the block I with the block I+1). The length of the connection is the
distance between the centers of the lower I face and upper I face. Using the notation defined in
the *LAYERXYZ keyword explanation, we also assume that re(u) equals re(I) and K(u) = K(I).
A *LAYERIJK *J or *LAYERIJK *K perforation would have its perforation length,
effective radius, and well permeability calculated in an analogous fashion (references to I
would be replaced by J or K in the above paragraph).
EXAMPLES:
Example 1:
*LAYERIJK WELL-NNE17
65 23 5 *I
A completion for well WELL-NNE17 in block 65 23 5 must already have been created with
a *PERF.. line for the above to be valid, the well perforation is parallel to the I direction
Example 2:
*LAYERIJK WELL-MULTI-REF
16 48 11 / 1 1 2 / 2 2 1 *J
*LEP-WELL,
*LEP-DIAMETER, *LEP-DISCHARGE-COEFF, *LEP-DISCHARGE-COEFF-CNST
PURPOSE:
Use limited entry perforations (LEP) for specified injectors.
FORMAT:
*LEP-WELL well_list
*LEP-DIAMETER well_list
diam_list
*LEP-DISCHARGE -COEFF well_list
dcoef_list
*LEP-DISCHARGE -COEFF-CNST well_list
dcoef_list
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this definition
applies. These names must be on the same line as the keyword. If more than
one line is required for the well list, the keyword must be repeated. See
Wildcarding Well Names at the beginning of this chapter.
diam_list
List of perforation diameters (m), one for each well in order in well_list. All
values must appear on a new line immediately after the *LEP-DIAMETER line.
*LEP-DISCHARGE COEFF
Discharge coefficient will be altered with gas content.
*LEP-DISCHARGE COEFF-CNST
Discharge coefficient is constant.
dcoef_list
List of discharge coefficients (dimensionless), one for each well in order in
well_list. All values must appear on a new line immediately after the *LEPDISCHARGE -COEFF line.
DEFAULTS:
When *LEP-WELL is absent for a well, that wells flow rates are calculated in a standard
way as described in APPENDIX A.
When *LEP-DIAMETER is absent for a well, that wells perforation diameter is assumed to
be 0.0125 m (12.5 mm).
When *LEP-DISCHARGE-COEFF and *LEP-DISCHARGE-COEFF-CNST are absent for a
well, that wells discharge coefficient is assumed to be 0.87 and constant.
CONDITIONS:
These keywords must be located in the WELL AND RECURRENT DATA keyword group.
EXPLANATION:
These optional keywords are used to describe a special way of perforating wells Limited
Entry Perforations (LEP). LEP are used in the field to achieve a desired steam distribution in
the reservoir by designing the correct number, size and placement of these perforations. LEP
are designed in such a way that a choked (critical) flow occurs when fluid flows through the
perforation. The implementation of LEP in STARS is based on published papers: Critical and
Subcritical Flow of Multiphase Mixtures Through Chokes, T.K. Perkins; SPE Drilling &
Completion, December 1993, Critical Flow of Wet Steam Through Chokes, Sze-Foo Chien;
JPT, March 1990 and Targeted Steam Injection Using Horizontal Wells with Limited Entry
Perforations, T.J. Boone, D.G. Youck, S. Sun; JCPT, January 2001, Vol. 40, No. 1.
The LEP option replaces the perforation flow calculations described in *PERF (e.g., for
*MOBWEIGHT or *UNWEIGHT injector) with the following critical or sub-critical flow
rates. When a Discretized well is specified as an LEP well then the flow between a reservoir
block and a wellbore block is substituted with the following calculations. Critical flow occurs
when the ratio of downstream to upstream pressure is less than the critical pressure ratio Fp*.
Quantity Fp* is evaluated from a maximum possible mass flow rate [kg/s-m2] as dqm/dFp=0.
Mass flow rate is calculated as follows:
qm
2Pup g 1 Fp k 1 / k + (1 Fp )
=
2
(fgFp 1 / k + ) 2 A dw
/ A 2up (fg + ) 2
0.5
= fg +
cvg, cvo, cvw = heat capacities of gas, oil and water at constant volume [J/kg-C]
M = molecular mass [kg/mole]
Z = compressibility factor
R = gas constant
Critical volumetric flow [m3/s] is calculated as:
q* = A Cd
[(
) (
q = q * 1 Fp Fp* / 1 Fp*
) ]
0.5
(pressure_gradient_value | *DEFAULT)
:
DEFINITIONS:
well_name
Single quoted well name specifying the well to which the layer pressure
gradient specifications apply. No wildcarding is allowed.
{location}
if jf kf / ir1 jr1 kr1 { / { / irn jrn krn} }
These block addresses specify the layers of the well to be assigned userspecified head pressure gradients. It is valid to name some of the wells layers
and not others in the *LAYERGRAD lines, but layers not named do not
acquire a special gradient value and have heads calculated in the normal way.
Any layer named under *LAYERGRAD must already have been defined for
the well using a *PERF or *PERFV statement. The gradient specified will be
used for the head calculation between the named layer and the next heel-ward
completion (the completion to which the named completion flows see the
discussion in the manual page for the *PERF keyword).
pressure_gradient_value
Non-negative real value ( kPa/m | psi/ft ) specifying the gradient to be used
for the pressure difference calculation.
*DEFAULT
Specifies that the pressure difference between the named layer and the next
heel-ward layer should be calculated normally, not using a specified pressure
gradient value.
DEFAULTS:
Layers named under *LAYERGRAD with a gradient value (as opposed to the *DEFAULT
subkeyword) are flagged as receiving special treatment during the layer head calculation.
The default status is assigned to all layers at the beginning of the run. The default status can
be re-imposed through the *DEFAULT subkeyword.
User's Guide STARS
CONDITIONS:
The named layers must all have been previously created for the specified well with *PERF or
*PERFV lines. Either a non-negative real number or the subkeyword *DEFAULT must
follow the layer identification or an error is generated. Not all of the wells layers need to be
named under *LAYERGRAD; those omitted have heads calculated in the default manner.
EXPLANATION:
When no pressure gradient is specified for a layer, the pressure difference in the wellbore
between one layer and the layer to which it flows is calculated statically, using a pressure
gradient depending on local fluid densities. When a head pressure gradient hgrad is specified
with *LAYERGRAD, the pressure difference between the named layer and the next heelward completion in the well (which is unique) is calculated as
Delp = (P_next P_named) = hgrad*(depth_next depth_named)
See the manual entry for the *PERF keyword for an explanation of how the identity of the
next heel-ward layer (the layer to which the named layer flows) is determined. The layer
named first in the *PERF.. lines flows to the surface and no layer head is associated with the
corresponding pressure difference; hence any specification of a head gradient for such a
layer is ignored (but is valid).
The *LAYERGRAD keyword can be used to model pumped-off producing wells by specifying
zero or gas-like pressure gradients between completions which are above the pump level,
effectively maintaining a liquid level control. For example, a pump is placed in a wellbore 6
ft below the desired liquid level, and the pump is set to flow when the pressure at the pump
exceeds atmospheric pressure plus the liquid head at a 6 ft depth. This situation would be
modelled by assigning head gradients of air (~0) above the liquid level and the expected
liquid gradient (water is 9.8 kPa/m or 0.43 psi/ft) below the liquid level.
In addition, the *BHPDEPTH option allows you to specify the BHP reference depth at a pump
location that does not fall at a grid block centre. The user must ensure that the resulting wellbore
pressures are not below the physical minimum (e.g., 1 atm). In addition, keyword *BHPGRAD
allows you to specify the pressure gradient value which will be used to compute the difference
between the wellbore pressure in the reference completion and the bottom-hole reference depth.
EXAMPLES:
Example 1:
*LAYERGRAD
65 23 5
65 23 6
WELL-NNE17
0.5
0.4
Completions for well WELL-NNE17 in blocks 65 23 5 and 65 23 6 must already have been
created with a *PERF.. line for the above to be valid.
Example 2:
*LAYERGRAD
16 48 11
16 48 12
16 48 13
16 48 14
PUMPED-WELL
0.
0.
0.
0.
If well PUMPED-WELL has completions in blocks 16 48 10:15, with layer 15 deepest, the
above represent a pump located just above the perforation in block 16 48 14. The pressure
difference in the wellbore between blocks 16 48 15 and 16 48 14 is calculated by the usual
head method for the run, but all heads above this are set to zero, to simulate the absence of
liquids above the completion in layer 14. Note that no gradient specification for the
completion in block 16 48 10 is necessary because this layer flows to the surface.
depth_values
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this
specification of reference depth applies. See Wildcarding Well Names at
the beginning of this chapter.
depth_values
A list consisting of either non-negative real numbers ( m | ft) or the
subkeyword *DEFAULT. If the depth_values list contains only a single
entry then this entry will be applied to all wells in well_list; if there are more
than a single entry in the depth_values list, the number of entries must match
the number of wells in well_list and the first depth value is applied to the first
well, etc. The numbers representing depths must contain a decimal point to
identify them as real numbers and distinguish them from well numbers.
*DEFAULT
When *DEFAULT occurs in the depth_value list, it restores the well to the
default state in which the bottom hole pressure is the wellbore pressure in the
reference completion.
DEFAULTS:
Optional keyword. If BHPDEPTH does not appear in the data set, all wells have bottom hole
pressure equal to the wellbore pressure in the reference completion. The occurrence of
BHPDEPTH does not affect the operation of any well not named in a well list following
BHPDEPTH.
CONDITIONS:
If it appears, this keyword must be located in the WELL AND RECURRENT DATA keyword
group. It must appear AFTER (but not necessarily immediately after) the first *DATE line. All
wells appearing in the well list following *BHPDEPTH must already have been defined in
*WELL lines. The effect of multiple *BHPDEPTH lines is cumulative; that is, if
*BHPDEPTH appears first followed by one well list and later followed by another, at the end
of the second occurrence the wells in both lists will have the specified BHP reference depths. A
well which has previously had a reference depth defined can be restored to having the BHP be
702 Well and Recurrent Data
the wellbore pressure in the reference completion by entering *DEFAULT for that well in
another *BHPDEPTH line. If a well has one reference depth set in an earlier *BHPDEPTH
line and then appears in a later *BHPDEPTH list with a different depth value, the more recently
specified value overwrites the earlier value and is used in BHP calculations after its entry. The
depth values must contain a decimal point to identify them as real numbers and distinguish
them from well numbers. There is no restriction upon the distribution of the well list or depth
value list over different lines in the data set; the depth values may begin on the same line as the
last well identifier in the list and continue over as many lines as necessary. The well list too
may be spread over more than a single line.
EXPLANATION:
When a BHP reference depth is entered for a well using *BHPDEPTH, the BHP differs from
the wellbore pressure in the wells reference completion. The pressure difference is equal to
delp = g*rho*(ref_depth completion_depth)
Here g is the gravitational acceleration and rho is a mobility-weighted fluid density
characteristic of the reference completion. Using the *BHPGRAD keyword the user may
enter a pressure gradient which replaces g*rho in the above formula. See the manual entry
for the *PERF keyword for details of how the reference layer is specified.
Example: The sequence
*BHPDEPTH Prod1 Prod2 Inj1 Inj2
1500. 1500. 1000. 1000.
Assigns BHP reference depths of 1500 units (feet or meters) to the two producers and of 1000
units to the two injectors. In this example the depth value list begins (but need not have
begun) a new line of the data set.
gradient_values
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this
specification of pressure gradient applies. See Wildcarding Well Names at
the beginning of this chapter.
gradient_values
A list consisting of either non-negative real numbers (kPa/m | psi/ft) or the
subkeyword *DEFAULT. If the gradient_values list contains only a single entry
then this entry will be applied to all wells in well_list. If there are more than a
single entry in the depth_values list, the number of entries must match the
number of wells in well_list and the first gradient value is applied to the first
well, etc. The numbers representing gradients must contain a decimal point to
identify them as real numbers and distinguish them from well numbers.
*DEFAULT
When *DEFAULT occurs in the gradient_value list, it restores the well to the
default state in which a mobility-weighted fluid density in the reference
completion is used to determine the pressure difference between reference
depth and the reference completion.
DEFAULTS:
Optional keyword. If BHPGRAD does not appear in the data set, all wells specified under a
*BHPDEPTH list have the pressure difference between reference completion and reference
depth calculated using a fluid density characteristic of the reference completion. The
occurrence of BHPGRAD does not affect the operation of any well not named in a well list
following BHPGRAD, and has no effect unless the well also occurs in a list following the
*BHPDEPTH keyword.
CONDITIONS:
If it appears, this keyword must be located in the WELL AND RECURRENT DATA
keyword group. It must appear AFTER (but not necessarily immediately after) the first
*DATE line. All wells appearing in the well list following *BHPGRAD must already have
been defined in *WELL lines. The effect of multiple *BHPGRAD lines is cumulative; that
704 Well and Recurrent Data
is, if *BHPGRAD appears first followed by one well list and later followed by another, at the
end of the second occurrence the wells in both lists will have the specified BHP reference
depths. A well which has previously had a reference gradient defined can be restored to the
default calculation using a weighted density by entering *DEFAULT for that well in another
*BHPGRAD line. If a well has one gradient set in an earlier *BHPGRAD line and then
appears in a later *BHPGRAD list with a different gradient value, the more recently specified
value overwrites the earlier value and is used in BHP calculations after its entry. The
gradient values must contain a decimal point to identify them as real numbers and distinguish
them from well numbers. There is no restriction upon the distribution of the well list or
gradient value list over different lines in the data set; the gradient values may begin on the
same line as the last well identifier in the list and continue over as many lines as necessary.
The well list too may be spread over more than a single line.
EXPLANATION:
When a BHP pressure gradient is entered for a well using *BHPGRAD, the pressure
difference between the reference completion and the reference depth is calculated as
delp = p_grad*(ref_depth completion_depth)
See the manual entry for the *PERF keyword for details of how the reference layer is
specified.
Example: The sequence
*BHPGRAD Prod1 Prod2 Inj1 Inj2
0.5 0.5 0.4 0.4
assigns reference pressure gradients of 0.5 psi/ft to the two producers and of 0.4 psi/ft to the
two injectors. In this example the gradient value list begins (but need not have begun) a new
line of the data set.
If a primary constraint value of zero is specified using *ALTER for an open well then that
well is shut-in. If a non-zero value is specified for a shut-in well then that well is opened.
Examples:
*PRODUCER 'Prod'
*OPERATE *MAX *STO 500.00
.
.
.
*ALTER 'Prod'
750
The *ALTER keyword may also look like this when several wells have been defined:
*WELL 1 'Producer 1'
*WELL 2 'Producer 2'
*WELL 3 'Producer 3'
*WELL 4 'Injector 1'
.
.
.
*PRODUCER 'Producer 1'
*OPERATE *MAX *STO 500.00
*PRODUCER 'Producer 2'
*OPERATE *MAX *STO 750.00
*PRODUCER 'Producer 3'
*OPERATE *MAX *BHP 2500.0
*INJECTOR 'Injector 1'
.
.
.
*TIME 1200.
** At a later date, want to adjust the operating
** constraint values.
*ALTER 'Producer 1' 'Producer 2' 'Producer 3'
** values
2*1000.0 800.0
(*RESET)
(*NO-RESET)
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this alteration
of initialization frequency applies. See Wildcarding Well Names at the
beginning of this chapter.
RESET
Specifies that a determination of the most restrictive well operating constraint
should be done for all wells in well_list after a constraint value is changed
through data. The currently most restrictive constraint should be set as the
current operating constraint for the wells before the next time step is carried out.
NO-RESET
Specifies that no operating constraint change should be made for the wells in
well_list after a change in constraint values through data entry. Changes in
operating constraint may occur after the next time step as a result of
constraint violations. The first operating constraint in the list is used.
DEFAULTS:
Optional keyword. All wells are set in the *RESET mode at the beginning of the simulation
by default; any changes entered under *MRC-RESET are cumulative. If no subkeyword
appears after the well list, *RESET is assumed.
CONDITIONS:
If it appears, this keyword must be located in the WELL AND RECURRENT DATA
keyword group. It must appear AFTER (but not necessarily immediately after) the first
*DATE line. If a well list is included in the *MRC-RESET line, then the *MRC-RESET line
must follow all of the *WELL lines which define the wells in the list.
EXPLANATION:
When operating constraint values are changed the type of the most restrictive constraint may
also change; for example, when a rate constraint value is increased, the bottom hole pressure
may become the most restrictive constraint. If no checking is done for this shift in the most
restrictive constraint, the simulator must converge a time step on the original constraint and
let the constraint switch be accomplished as a result of constraint violation. If this next time
step must, for example, be run at a very high rate, to converge the time step may be quite
difficult. To circumvent this potential difficulty, the default is to check all wells which have
undergone a change in constraint value through use of the *OPERATE or *ALTER keywords
to determine the most restrictive constraint and set the well on this most restrictive constraint
before the next time step. The *NO-RESET option is provided if, for some reason, the user
wishes to over-ride this automatic constraint switch.
Example: The sequence
*MRC-RESET
*ALTER *STO
'SPECIAL-PRODUCER' *NO-RESET
500.0
would have the oil rate constraint value of well SPECIAL-PRODUCER set to 500 units per
day and the operating constraint would stay as it is (presumably on the oil rate constraint),
regardless of whether the oil rate constraint is the most restrictive constraint at the beginning
of a time step.
Choosing the optimal operating constraint for a discretized circulating wellbore is very
complex because the tubing and annulus streams are closely coupled but have separate
operating conditions. In some situations all specified operating conditions in the annulus can
not be satisfied because of the tubing operating conditions. When tubing or annulus is shut in,
specify the same operating conditions for both. This helps in pseudo-steady state initialization
(see keyword *TRANSIENT in Reservoir Description Section).
*CYC_GROUP
PURPOSE:
Specify well groups for Cyclic Steam operation.
FORMAT:
*CYC_GROUP group-number *INCLUDES { well-name }
DEFINITIONS:
group-number
An integer representing the cyclic wells group sequence number. Numbering
must start from 1 and increase sequentially.
well-name
Well name enclosed in quotes. These names were defined in a series of *WELL
keywords. Only two wells (injector and a producer) are allowed per group.
DEFAULTS:
If *CYC_GROUP is absent and steam stimulation option is used, then only one well cyclic
group is assumed.
CONDITIONS:
All the wells referred to by *CYC_GROUP must have been defined previously in the data.
EXPLANATIONS:
When cyclic steam stimulation process is used in a field operations with more than one well
pair (injector + producer) then it is necessary to define a well group for each well pair. Wells
in a group will alternate cycles as specified.
(group_number)
*PROD_C_SWT
(group_number)
*IN_PR_SHUT
(group_number)
*PR_IN_SHUT
(group_number)
(*MAX_BHP)
(*TOT_TIME)
(*TOT_WATR)
(*TOT_HEAT)
(*MIN_QWTR)
(*DTWCYC)
(*MIN_BHP)
(*TOT_TIME)
(*MIN_QOIL)
(*TOT_LIQ)
(*DEPL_NDX)
(*DTWCYC)
(*TOT_TIME)
(*DTWCYC)
(*TOT_TIME)
(*DTWCYC)
x
x
DEFINITIONS:
*INJ_C_SWT
This keyword identifies injection cycle switching conditions.
group-number
An integer or list of integers representing the cyclic well group sequence
number which was defined with *CYC_GROUP.
*MAX_BHP x
This keyword specifies a maximum bottom-hole pressure (kPa | psi | kPa) as
a condition for injection cycle duration.
*TOT_TIME x
This keyword specifies total time for cycle duration (day | day | min).
*TOT_WATR x
This keyword specifies a total steam (CWE) injection (m3 | bbl | cm3) per
each cycle as a switching condition.
*TOT_HEAT x
This keyword specifies a total heat injection (J | BTU | J) per each cycle as a
switching condition.
User's Guide STARS
*MIN_QWTR x
This keyword specifies a minimum steam (CWE) injection rate (m3/day |
bbl/day | cm3/min) as a switching condition. This switching is activated only
after steam injection rate was higher than the specified value.
*DTWCYC x
This keyword specifies the timestep size (days | days | min) at the beginning
of a cycle.
*PROD_C_SWT
This keyword identifies production cycle switching conditions.
*MIN_BHP x
This keyword specifies a minimum bottom-hole pressure (kPa | psi | kPa) as a
condition for a production cycle duration.
*MIN_QOIL x
*TOT_LIQ x
*DEPL_NDX x
This keyword specifies a depletion index for a cycle group in each cycle. It is
the ratio of produced liquid to injected steam in CWE in a current cycle.
*IN_PR_SHUT
This keyword identifies switching conditions for a soak between injection
and production cycle.
*PR_IN_SHUT
This keyword identifies switching conditions for a soak between production
and injection cycle.
DEFAULTS:
If keywords *INJ_C_SWT, *PROD_C_SWT, *IN_PR_SHUT and *PR_IN_SHUT are
absent then there is no automatic switching between cycles.
When keyword *INJ_C_SWT, *PROD_C_SWT, *IN_PR_SHUT or *PR_IN_SHUT is
specified without the group number, then the group number is assumed to be 1.
CONDITIONS:
Each occurrence of *INJ_C_SWT or *PROD_C_SWT or *IN_PR_SHUT or *PR_IN_SHUT
must be followed by at least one switching condition. When a well fraction *FRAC is used it
will be applied to all rates or cumulative values. Only one well in a group may be active.
EXPLANATION:
When automatic switching between cycles is activated for a cyclic steam stimulation process
then the simulator will check switching conditions for each group. When one of the
conditions in a group is violated a message is printed and a grid output and restart will be
written if requested. Then the next cycle will start for that group. The other groups will
continue with the original cycle until that is violated. Cycles will alternate until the last
specified *TIME is reached. A *TIME card may be used as in a regular data set. Switching
conditions may be changed when a keyword *INJ_C_SWT, *PROD_C_SWT,
*IN_PR_SHUT or *PR_IN_SHUT is specified with new conditions after a *TIME card.
It is recommended that a maximum time for cycle duration is specified with *TOT_TIME,
especially for a production cycle. Sometimes the other specified switching criteria are
approached only asymptotically causing the cycle to last for very long time. For example,
this may happen when *MIN_QOIL is specified as a switching criterion.
For example: A cyclic steam stimulation is used in a field that has 3 well pairs. Well 1:3 are
injectors and 4:6 are producers. Well pairs are well 1 and 4, 2 and 5 and 3 and 6. After wells
are defined and operating conditions specified then the switching may be specified.
*CYC_GROUP
*CYC_GROUP
*CYC_GROUP
*INJ_C_SWT
1 *INCLUDES 1 4
** Define well pair
2 *INCLUDES 2 5
** groups
3 *INCLUDES 3 6
1:3
** switching conditions for an
injection cycle for group 1:3
*TOT_TIME 10.0
*TOT_WATR 2100.0
*DTWCYC 0.02
*IN_PR_SHUT 1:3 ** switching condition for soak
*TOT_TIME 7.0
*PROD_C_SWT 1
** switching conditions for a
production cycle for group 1
*TOT_TIME 348.0
*MIN_QOIL 128.0
*DTWCYC 0.02
*PROD_C_SWT 2:3 ** switching conditions for a production
cycle for groups 2 and 3
*TOT_TIME 30.0
*DTWCYC 0.02
*TIME 30.0
*PROD_C_SWT 2:3 ** redefine switching conditions for a
production cycle for groups 2 and 3
*TOT_TIME 300.0
*MIN_BHP 20.0
*DTWCYC 0.02
*TIME 1095
*GLIFT, *INCOMPGL
PURPOSE:
*GLIFT specifies gas lift rates for a given set of production wells.
*INCOMPGL specifies composition of an injected gas.
FORMAT:
*GLIFT *RATE ( well_list ) values
*INCOMPGL ( well_list ) y(1)..y(numy)
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this setting of
lift gas rates or composition applies. These names must be on the same line as
the *GLIFT or *INCOMPGL keyword. All listed wells must be producers. If
more than one line is required for the well list, then the *GLIFT keyword
must be repeated. See Wildcarding Well Names at the beginning of this
chapter.
*RATE
Gas lift injection rates must be specified directly. This is the only sub-option
allowed.
values
One number for each well identified by well_list specifying the new value of
the lift gas rate. values must appear on one or more new lines immediately
following the *GLIFT keyword. No values may appear on the same line as
the *GLIFT keyword. The unit is ( m3/day | SCF/day). The lift gas rates
must be entered for a full well (not partial).
*INCOMPGL
This keyword indicates that composition of injected gas is entered. It is used
for the Semi-analytical wellbore model (*SAMODEL) only.
y(i)
Mole fractions of injected gas phase. The allowed range for each is 0 to 1.
They should sum to one, but will be normalized if not. See keyword
*MODEL. . Values must appear on one or more new lines immediately
following the *INCOMPGL keyword.
DEFAULTS:
When the keyword *GLIFT is missing then it is assumed that there is no gas lift.
CONDITIONS:
These keywords must be located in the WELL AND RECURRENT DATA section. *GLIFT
is used together with *PHWELLBORE. When an element of symmetry is simulated, then the
gas rate value must be entered for a full well.
All wells appearing in well_list must already have had their type defined with *PRODUCER.
If any listed well has not yet had its type defined, or is an injector, an error message is issued
and the run is terminated.
EXPLANATIONS:
*GLIFT allows for the specification of a gas lift injection rate for any producing well. These
rates may be modified at different *DATE or *TIME keywords by using the *GLIFT
keyword again. When gas lift rates or composition are different for different wells then they
must be specified for each well individually. Each of these injected gas rates are added to the
corresponding producer's formation gas rate before calculating the wellbore heatloss and
pressure drop. When *PHWELLBORE *SAMODEL is used then composition of injected
gas must be specified by *INCOMPGL.
When *GLIFT is in effect, specified rates are not included in reporting of field gas rates or
cumulative gas produced.
Example:
When *SAMODEL is used
*GLIFT *RATE 1 3:5 7
1000.0
(all wells will have a rate of 1000.0)
*INCOMPGL 1 3:5 7
0.0 0.0 1.0 (components must have the same order as in *MODEL)
- or*GLIFT *RATE 1
200.0
*INCOMPGL
1
0.0 0.0 1.0 (components must have the same order as in *MODEL)
*GLIFT *RATE 2
3000
*INCOMPGL 2
0.0 0.0 1.0 (components must have the same order as in *MODEL)
*TRANSIENT, *SAMINFO
PURPOSE:
Specify other well attributes.
FORMAT:
*TRANSIENT well_list ( *ON | *OFF )
*SAMINFO ( *ON ) ( *TIME | freq )
- or*SAMINFO ( *OFF )
DEFINITIONS:
*TRANSIENT
*ON indicates that the transient behaviour of the discretized wellbore
associated with this well will be simulated, whereas *OFF indicates that the
transient behaviour will not be simulated.
This keyword allows switching of this option with time in the recurrent data.
well_list
One or more quoted well names assigned with the *WELL keyword.
*SAMINFO
*ON enables a detailed printout for all wells that use *PHWELLBORE. The
quantities printed are pressure, temperature, steam quality (injectors), gas
phase fraction (producer), formation temperature at *RHOLE location and
enthalpy at various depths. Printout frequency is controlled by the value of
freq or *TIME.
*TIME
Write Semi-analytical wellbore model results to the output file at every time
specified by subsequent recurrent *TIME or *DATE keywords in the input
file.
freq
Write Semi-analytical wellbore model results to the output (.out) file every
freq time steps, where freq is a positive integer. If freq is 0, no results are
written.
DEFAULTS:
The *TRANSIENT option in effect remains unchanged until it is explicitly modified.
When *SAMINFO is absent, *SAMINFO *OFF is assumed. When *SAMINFO *TIME or
freq is present then *ON is assumed. If *SAMINFO is not followed by freq, *ON or *OFF,
*SAMINFO *ON *TIME is assumed.
CONDITIONS:
Both keywords are optional but, if present, they must appear after *PERF cards if present or
after *OPERATE cards.
Example:
*WELL 2 'INJECTOR'
*INJECTOR 2
** For injector use SAM to calculate bottom-hole pressure and
** quality. It is a horizontal well that enters the formation
** under and angle different from 90 degrees. A sink/Source
** well model is used.
*PHWELLBORE *SAMODEL
RTUBIN 0.15
DEPTH 460.0
WLENGTH 600.0
.
.
*INCOMP WATER 1.0 0.0 0.0
*QUAL 0.8 *TINJW 250.0
*OPERATE .........
.
.
PERF 2
1:19 1 24 ** horizontal section
.
*PRODUCER 3
*OPERATE MIN BHP 150.0
.
.
*TRANSIENT 3 *ON
**Well No. 3 is a discretized well and will be
** initialized to pseudo-steady state
*SAMINFO *ON *TIME ** Results for SAM well will be written every
** time card
*GCONP
PURPOSE:
*GCONP is used to specify group production controls.
FORMAT:
*GCONP 'group_name_1' 'group_name_2' ... 'group_name_n'
(*MAX)
(*STO)
(*STG)
(*STW)
(*STL)
(*BHF)
value
(*TARGET)
(*STO)
(*STG)
(*STW)
(*STL)
(*BHF)
value
(*VREP)
(*RECYCLE)
(*PMAINT)
(*IPP)
(*GAS)
(*WATER)
(*PMSECT)
(*PMTARG)
(*PMCOEF)
obsolete
(*STOP)
(*CONT)
(*SHUTALL)
(*SHUTMOWS)
(*SHUTMOW)
(*SHUTMOL)
(*SHUTMOLDOWN)
(*SHUTMOLUP)
vrep_frac
recyc_frac
sector_name
p_targ
c1 c2 c3
DEFINITIONS:
'group_name_1', group_name_2, ... , group_name_n
Are the groups to which the following constraints apply. The wells that are
connected to each group must already have been specified using the *WELL
keyword. Production targets are apportioned using one of the available
apportionment methods specified by *APPOR-METHOD.
*MAX
Specifies that the constraint is a maximum constraint. This value becomes a
target for the group only as the result of a violation with the *CONT action.
*TARGET
This subkeyword specifies a target production rate for the group. The
specified stream rate is set as a target to be met by the group. If another
constraint with action *CONT is violated, the rate target shifts to that
constraint and the target set by the *TARGET keyword ceases to have an
effect. There is no action associated with *TARGET since a target is not
checked for violation.
718 Well and Recurrent Data
*VREP
This subkeyword specifies a voidage replacement production target. This
indicates that the production wells connected to this group produce an
amount of the bottom-hole fluid in proportion to the total bottom-hole fluid
injected into the reservoir by the injection wells connected to this group.
*RECYCLE
This subkeyword specifies a recycling production target. This indicates that
the production wells connected to this group produce such that the phase
injected by the injection wells connected to this group as specified by *GAS,
or *WATER is reproduced (recycled) out of the reservoir.
*PMAINT
This subkeyword specifies that the group production rates shall be adjusted
so as to maintain the hydrocarbon volume weighted average pressure in a
particular region/sector (*PMSECT) at a desired level (*PMTARG).
*STO
*STG
*STW
*STL
*BHF
*PMSECT
Introduces a single sector identified by the name sector_name whose
average hydrocarbon pore-volume pressure is to be maintained.
sector_name must be 16 characters maximum and must have already been
defined in the RESERVOIR DESCRIPTION section in the input data.
Defaulted to Entire Field.
*PMTARG
Introduces the targeted average hydrocarbon pore-volume pressure (kPa | psi
| kPa) for the sector. The value p_targ must be a real number larger than one
atmosphere. Defaulted to the current sector pressure.
*PMCOEF
Introduces the control coefficients used in the pressure control strategy. The
values (c1, c2, c3) must be non-negative real numbers. Defaulted to the
internally estimated values.
*IPP
Obsolete, use *APPOR-METHOD *IP instead.
value
Constraint value -- see above for units.
vrep_frac
When the voidage replacement subkeyword is used (*VREP) the vrep_frac is
the voidage replacement ratio. A ratio of 1.0 indicates that the bottom-hole
fluid injected is completely produced.
recyc_frac
When the recycle subkeyword is used (*RECYCLE) the recyc_frac is the
recycled fraction of the indicated surface stream, which is imposed as a
group production target. A fraction of 1.0 indicates complete
reproduction/recycling of the injected surface stream.
*STOP
Action subkeyword indicating that if the constraint cannot be met then the
simulation should be stopped.
*CONT
Action subkeyword indicating that the simulation continues with the violated
constraint that becomes the target constraint. This is the default action if no
action subkeyword is specified.
*SHUTALL
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then all currently open wells in the group should be shut.
*SHUTMOWS
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then a list of prioritized most offending wells (MOWS -- the
ones with the higher rates of the named surface stream) should be shut.
*SHUTMOW
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then the most offending well (MOW -- the one with the highest
rate of the named surface stream) should be shut.
*SHUTMOL
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then the most offending layer (MOL) in the most offending well
(the one the highest rate of the named surface stream) should be shut.
*SHUTMOLDOWN
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then the most offending layer (MOL) and the layers below it in
the most offending well (the one with the highest rate of the named surface
stream) should be shut.
*SHUTMOLUP
Action subkeyword indicating that if a maximum stock tank rate is exceeded
for a group, then the most offending layer (MOL) and the layers above it in
the most offending well (the one with the highest rate of the named surface
stream) should be shut.
DEFAULTS:
Optional keyword. Default is no production constraints on any group except the Field; for
every rate (e.g. STO, STG, etc.) for which a target is assigned, the Field receives a default
target of 1.0d+15 in order to initialize the apportionment algorithm. Any user-entered Field
target overrides this default. Default action is *CONT.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group must be defined before it can be given any constraint values. Constraint types *TARGET,
*VREP, *RECYCLE and *PMAINT are exclusive on one timecard, and only the latest entry
counts. If a group is assigned by *GCONP with any of the following dependent constraints:
*VREP, *RECYCLE, or *PMAINT, such a group cannot be assigned by *GCONI with these
constraints for any of its injection streams. Error message will be issued if the consistency of the
dependent constraints is violated.
EXPLANATION:
*GCONP is used to specify constraints on how much fluid is produced in the group. A number
of apportionment methods (e.g. guide rate, instantaneous potential, priority ranking, and
internal guide rate) can be used to distribute a group production target among the contributing
wells or groups through the keyword *APPOR-METHOD (which is described on a separate
manual page). *GCONP can also be used to specify voidage replacement, recycling or pressure
maintenance targets (see explanations for keyword *GCONI). This allows group controls to
adjust production rates in response to injection.
Example:
*GCONP 'Group1'
*MAX
*STG 100000.0
*TARGET *STO
1000.0
*GCONI
PURPOSE:
*GCONI is used to specify group injection controls.
FORMAT:
*GCONI 'group_name_1' 'group_name_2' ... 'group_name_n'
(*MAX)
(*TARGET)
(*VREP)
(*RECYCLE)
(*PMAINT)
(*IIP)
(*STG)
(*STW)
(*BHG)
(*BHW)
(*STG)
(*STW)
(*BHG)
(*BHW)
(*GAS)
(*WATER)
(*GMKUP)
(*WMKUP)
(*GAS)
(*WATER)
(*GAS)
(*WATER)
value
(*STOP)
(*CONT)
value
vrep_frac
recyc_frac
(*PMSECT) sector_name
(*PMTARG) p_targ
(*PMCOEF) c1 c2 c3
obsolete
DEFINITIONS:
'group_name_1', group_name_2, ... , group_name_n
Are the groups to which the following constraints apply. The wells that are
connected to each group must already have been specified using the *WELL
keyword. The injection targets are apportioned using one of the available
apportionment methods specified by *APPOR-METHOD.
*MAX
Specifies that the constraint is a maximum constraint, which is checked for
violations. This value becomes an injection rate target for the group only as
the result of a violation with the *CONT action.
*TARGET
This subkeyword specifies a target injection rate for the group. The specified
stream rate is set as a target to be met by the group. If another constraint with
action *CONT is violated, the rate target shifts to that constraint and the
target set by the *TARGET keyword ceases to have an effect. There is no
action associated with *TARGET since a target is not checked for violation.
*VREP
This subkeyword introduces a voidage fraction injection target. This
indicates that the injection wells connected to this group inject such that the
voidage created by the producers connected to this group is replaced. In this
case *GAS or *WATER specifies which phase is to be injected to replace the
voidage. If more than one phase is being injected to replace the voidage then
there must be one *VREP keyword for each phase. These primary voidage
replacement streams are handled independently. One make-up stream can be
supplemented with *GMKUP or *WMKUP to meet a total voidage
replacement fraction. One of *GAS, *WATER, *GMKUP or *WMKUP
must be present for each *VREP keyword.
*RECYCLE
This subkeyword introduces a recycling injection target. This indicates that
the injection wells connected to this group inject such that the phase
produced by the production wells connected to this group as specified by
*GAS or *WATER is recycled (re-injected) into the reservoir at the same
surface conditions specified for the injectors.
*PMAINT
This subkeyword specifies that the group injection rates shall be adjusted so
as to maintain the hydrocarbon volume weighted average pressure in a
particular region/sector (*PMSECT) at a desired level (*PMTARG).
*STG, *BHG
*STW, *BHW
*PMSECT
Introduces a single sector identified by the name sector_name whose
average hydrocarbon pore-volume pressure is to be maintained.
sector_name must be 16 characters maximum and must have already been
defined in the RESERVOIR DESCRIPTION section in the input data.
Defaulted to Entire Field.
*PMTARG
Introduces the targeted average hydrocarbon pore-volume pressure (kPa | psi
| kPa) for the sector. The value p_targ must be a real number larger than one
atmosphere. Defaulted to the current sector pressure.
*PMCOEF
Introduces the control coefficients used in the pressure control strategy. The
values (c1 c2 c3) must be non-negative real numbers. Defaulted to the
internally estimated values.
*IIP
Obsolete, use *APPOR-METHOD *IP instead.
*GAS, *WATER
Specifies that the gas or water phase is to be injected for voidage
replacement, recycle or pressure maintenance.
*GMKUP, *WMKUP
Specifies that gas or water phase is the make-up stream supplemented to
meet the total voidage replacement fraction.
value
Constraint value -- see above for units.
vrep_frac
When the voidage replacement subkeyword is used (*VREP) the vrep_frac is
the voidage replacement ratio. A ratio of 1.0 indicates complete voidage
replacement by the specified phase. When several values are entered (one for
each of several phases) then the vrep_frac entered for a non make-up phase is
applied as a target for that phase independently of the other specified values.
recyc_frac
When the recycle subkeyword is used (*RECYCLE) the recyc_frac is the
recycled fraction of the indicated surface stream, which is imposed as a
group injection target. A fraction of 1.0 indicates complete recycling of the
surface stream.
*STOP
Action subkeyword indicating that if the constraint cannot be met then the
simulation should be stopped.
*CONT
Action subkeyword indicating that the simulation continues with the violated
constraint switched to target constraint.
DEFAULTS:
Optional keyword. Default is no constraints on groups.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group must be defined, by appearing in the list directly following *GROUP in a *GROUP line
or after the *ATTACHTO keyword on a *GROUP line, before it can be given any constraint
values. Constraint types *TARGET, *VREP, *RECYCLE and *PMAINT are exclusive in one
timecard for the same injection stream (gas or water), and only the latest entry counts. If a
group is assigned by *GCONI with any of the following dependent constraints: *VREP,
*RECYCLE, or *PMAINT for any of the injection streams, such a group cannot be assigned by
*GCONP with these constraints for group production. In addition, only one injection stream
can be assigned with voidage make-up (*VREP *GMKUP / *WMKUP) or pressure
maintenance (*PMAINT) for the same targeted group. Error message will be issued if the
consistency of the dependent constraints is violated.
EXPLANATION:
*GCONI is used to specify maximum or target fluid injection rates for the group. *GCONI
can also be used to specify voidage replacement, recycling or pressure maintenance targets.
This allows group controls to adjust injection rates in response to production.
Example: This is an example using voidage replacement. Here, 50% of the voidage is being
replaced by water injection, and the other 50% by gas injection. Note that voidage
replacement is done at reservoir conditions and consequently surface rates will not agree with
the ratio of 50%, even though the reservoir rates will be in a ratio of 50%.
*GCONI 'Group1'
*VREP *WATER 0.5
*VREP *GAS
0.5
Pressure Maintenance: *PMAINT specifies one special group control which instructs a
group or groups to adjust the production or injection rates (at reservoir condition) in order to
maintain the average hydrocarbon pore-volume pressure in a particular region (sector) at a
desired level. The group runs essentially on a production (or injection) target rate Qtarg of
bottom-hole fluid in reference to that of the group injection (or production), Qref:
Qtarg = Qref Q
where Q is the bottom-hole correction rate needed to reach or maintain a certain pressure.
The sign designates for production (+) or injection () target. Q has been set to zero for
normal voidage replacement constraints (*VREP under *GCONP / *GCONI). However,
setting Q = 0 may not exactly maintain the pressure due to the involvement of compressible
fluids, and the different reservoir conditions under which Qtarg and Qref are calculated.
With the pressure control strategy, the correction volumetric rate is calculated as
t
1
dP
P Ptarg dt
Q = c1 P Ptarg + c 2 + c 3
t
dt
t t
where P is the sector pressure at the current time t, and t is the integration interval over the
last several timesteps. The empirical constants c1, c2 and c3 penalize/minimize the object
terms of (1) the difference between current pressure and the target, (2) the pressure
derivative, and (3) the time-averaged pressure difference.
There is little to guide the choice of values of c1, c2, c3. Heuristically, c1 is a damping term
which determines how quickly P will move toward P_targ, and controls the overall accuracy.
Larger values of c1 give a quicker approach to P_targ but may lead to pressure oscillations or
even divergence if it is set too high. As P gets close to P_targ, the derivative term becomes
significant and acts to decrease the magnitude of the time derivative of pressure to avoid
overshooting. The larger c2 is the less likely is overshoot, but the approach to P_targ is
slowed. c3 acts to prevent long-term persistence of pressures either above or below the target.
Larger values of c3 more quickly overcome differences from P_targ, at the possible cost of
some oscillatory behavior.
The Well Management estimates and sets the above constants internally at the beginning of
pressure maintenance if the subkeyword *PMCOEF is absent after *PMAINT, by assuming
that the pressure follows an exponential decline to the set target under pure depletion of an
isothermal point reservoir. It should be noted that there is no guarantee that such a rough
estimate may work most favorably in general situations. Nevertheless, the user is
recommended to run the simulator with the internally-set coefficients. By judging the
pressure convergence behavior in terms of fluctuation and/or shifting, optimal values might
then be achieved by tuning the internally-set values at possibly the same orders and input
through subkeyword *PMCOEF.
Example:
*DATE 1985 1 1
*GCONP Grp-1 *TARGET *BHF 300.
*GCONI Grp-1 *TARGET *STW 150.
*GCONI Grp-1 *TARGET *STG 29000.
** (1)
** (2)
** (3)
*DATE 1987 1 1
*GCONI Grp-1 *PMAINT *GAS
** (4)
Maintain sector Entire Field (default) average pressure at the current value as dated
(default) by adjusting group Grp-1 gas injection rate, using the internally-set control
parameters (default). Line (3) is overridden by line (4). The production and injection rates are
apportioned using the instantaneous potential method (default).
*GCONM
PURPOSE:
*GCONM is used to specify monitored group production constraints. Unlike the controls
specified under *GCONP and *GCONI, the quantities specified under *GCONM cannot be
assigned as group targets, and no action resulting in setting the violated value as a target is
possible.
FORMAT:
*GCONM 'group_name_1' 'group_name_2' ... 'group_name_n'
*GOR
*WCUT
*WGR
*MAXGAS
*MAXSTW
value
*MINOIL
*MINGAS
*MINBHF
value
value
value
(*STOP)
(*SHUTALL)
(*SHUTMOWS)
(*SHUTMOW)
(*SHUTMOL)
(*SHUTMOLDOWN)
(*SHUTMOLUP)
(*STOP|*SHUTALL)
(*STOP|*SHUTALL)
(*STOP|*SHUTALL)
DEFINITIONS:
'group_name_1', group_name_2, ... , group_name_n
Are the groups to which the following constraints apply. The wells that are
connected to each group have already been specified using the *WELL
keyword. The injection and production targets are met by using one of the
available apportionment methods specified by *APPOR-METHOD.
*GOR
*WCUT
This subkeyword identifies a maximum water-cut (fraction) monitor for group
production. . The *STOP, *SHUTALL, *SHUTMOWS, *SHUTMOW,
*SHUTMOL, *SHUTMOLDOWN, and *SHUTMOLUP actions are valid
for this monitor.
*WGR
This subkeyword identifies a maximum water-gas ratio (m3/m3 | STB/scf |
cm3/cm3) monitor for group production. The *STOP, *SHUTALL,
*SHUTMOWS, *SHUTMOW, *SHUTMOL, *SHUTMOLDOWN, and
*SHUTMOLUP actions are valid for this monitor.
728 Well and Recurrent Data
*MAXGAS
*MAXSTW
*MINOIL
*MINGAS
*MINBHF
value
Constraint value -- units are given under *GOR, *WCUT, *WGR,
*MAXGAS, *MAXSTW, *MINOIL, *MINGAS, and *MINBHF above.
*STOP
Action subkeyword indicating that if the monitored constraint is violated for
a group then the simulation should be stopped. This is the default action for
all constraints if no action is entered explicitly.
*SHUTALL
Action subkeyword indicating that if a monitored constraint is violated for a
group, then all currently open wells in the group should be shut.
*SHUTMOWS
This specifies that if a GOR, WCUT, WGR, MAXGAS, or MAXSTW
monitor is violated then a list of prioritized most offending wells (MOWS -the ones with the greater values of GOR, WCUT, or WGR) should be shut.
User's Guide STARS
*SHUTMOL
This specifies that if a monitor is violated then the most offending layer (MOL)
in the most offending well (the one with the greatest GOR, WCUT, or WGR)
should be shut.
*SHUTMOLDOWN
This specifies that if a GOR, WCUT, WGR, MAXGAS, or MAXSTW
monitor is violated then the most offending layer (MOL) and the layers
below it in the most offending well (the one with the greatest value of GOR,
WCUT, or WGR) should be shut.
*SHUTMOLUP
This specifies that if a GOR, WCUT, WGR, MAXGAS, or MAXSTW
monitor is violated then the most offending layer (MOL) and the layers
above it in the most offending well (the one with the greatest value of GOR,
WCUT, or WGR) should be shut.
*SHUTMOW
This specifies that if a GOR, WCUT , WGR, MAXGAS, or MAXSTW
monitor is violated then the most offending well (MOW -- the one with the
greatest value of GOR, WCUT, or WGR) should be shut.
DEFAULTS:
Optional keyword. Default is no monitoring on groups. *STOP is the default action for all
constraints.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group must be defined before it can be given any monitored values.
EXPLANATION:
*GCONM is used to specify monitored constraints. Unlike the constraints which are read under
*GCONP and *GCONI, the values entered under *GCONM cannot be applied as targets.
Automatic drilling of wells can be triggered when a group fails to meet a rate target by using a
*GAPPOR *AUTODRILL *ON line for the group and specifying the well's status as
*AUTODRILL. Please see the manual pages describing these keywords for more information.
Example: Automatic shutting of the producer in group GROUP1 having the highest WCUT
when the group surface water rate exceeds 50 STB/day (if field units are used).
*GCONM 'GROUP1'
*MAXSTW 50. *SHUTMOW
DEFINITIONS:
*IPP
Specifies that the instantaneous production potential of producing wells with
status *AUTODRILL will be used to determine the order in which these
wells will be drilled, with wells of higher potential opened first. *IPP must be
used for producers.
*IIP
Specifies that the instantaneous injection potential of injection wells with
status *AUTODRILL will be used to determine the order in which these
wells will be drilled, with wells of higher potential being opened first. *IIP
must be used for injectors.
well_list
One or more quoted well names that give the priority in which wells will be
drilled. The first well on the list will be drilled first and so on. Producers and
injectors may be specified in the same list. See Wildcarding Well Names at
the beginning of this chapter.
DEFAULTS:
Optional keywords. Default is to use the instantaneous injection / production potential to
determine drilling priority.
CONDITIONS:
*DRILLQ must be located in the WELL AND RECURRENT DATA keyword group, and the
listed wells must have been defined with the keyword *WELL. Wells that are listed but do
not have autodrillable status nor subordinate to the targeted group will be ignored.
EXPLANATION:
This optional keyword is used to specify the priority in which wells that have *AUTODRILL
as their status will be drilled. One may either use the instantaneous injection / production
potentials or supply a list to give a drilling priority order.
The opening of *AUTODRILL wells is triggered during the apportionment of group rate
targets if a group fails to be able to meet its rate target and if the group has had the
*AUTODRILL feature turned on through the pair of lines.
*GAPPOR 'group_name'
*AUTODRILL *ON
User's Guide STARS
Please consult the documentation for the *GAPPOR keyword for more information.
If a well_list is given then wells will be opened in the order in which they appear on the list
until the list is exhausted. A second well_list following *DRILLQ will reset the whole
sequence of automatic drilling.
Example:
*GCONP 'Group1'
*MAX *STO 1000.0
*DRILLQ 'well-4' 'well-5'
'well-6'
*GAPPOR
PURPOSE:
*GAPPOR introduces subkeywords which control how the apportionment of group target
among contributing wells or subgroups is to be done. Currently *AUTODRILL is the only
subkeyword supported.
FORMAT:
*GAPPOR
DEFINITIONS:
'group_name_1', ... , group_name_n
Are the groups to which the following constraints apply. The wells that are
connected to each group have already been specified using the *WELL
keyword. The injection and production targets are apportioned using one of
the available apportionment methods specified by *APPOR-METHOD.
*AUTODRILL (*ON | *OFF)
The *AUTODRILL apportionment option is turned on or off. *ON specifies
that if one of the listed groups is attempting to meet a rate target, and the
group apportionment routine predicts that the contributing wells have
insufficient injection or production potential to meet this target, any
potentially contributing wells which are shut but have *AUTODRILL status
may be opened automatically to meet the target. *OFF disables the option.
DEFAULTS:
Optional keyword. Default is no *AUTODRILL action in the apportionment. If *AUTODRILL
appears with no following *ON or *OFF directive, *ON is assumed.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group must be defined before it can be assigned options under *GAPPOR.
EXPLANATION:
*GAPPOR is used to specify options used in the course of apportioning a group's rate target
among the contributing wells.
Example
The following line directs that if group GROUP1 is unable to meet its current rate target (if there
is one), any wells connected directly or indirectly to GROUP1 which have AUTODRILL status
should be opened in order until either no more AUTODRILL wells are left or until the target can
be met. The order in which the wells are to be opened is determined by the *DRILLQ keyword;
the default is to open the wells in decreasing order of instantaneous injection/production potential.
*GAPPOR 'GROUP1' *AUTODRILL *ON
among the remaining wells or groups whose assignments do not exceed the
maximum rates. The guide rates of a proper surface reference stream are
specified via keyword *GUIDEP for production or *GUIDEI for injection
(refer to the explanation therein for details).
*INGUIDE
This sub-keyword specifies the use of internal guide rates to determine the
apportionment of production or injection targets among contributing wells.
The idea is very similar to the above *GUIDE, except that the guide rates are
now generated internally by the simulator as the instantaneous productivity
or injectivity potential under a very restrictive bottom-hole pressure
constraint: 1 atm for production and 3500 atm for injection. Unlike the usersupplied guide rate (*GUIDE), the internally-generated guide rates are time
dependent.
*PRIOR
This sub-keyword specifies the use of priority ranking to determine the
apportionment of group targets among contributing wells. Wells are ranked
and opened in order of decreasing priority until reaching a swing well. The
user-supplied priority formulae and numerical controls are specified by
keyword *PRIOR-FORM (refer to the explanation therein for details).
DEFAULTS:
Optional keyword. Default is to use the instantaneous potential (*IP) to determine rate
distributions among wells to meet the group target rate.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. It
should appear after the group hierarchy is available. Defining an apportionment method for
non-targeted groups or non-targeted injection streams does NOT have an effect. Priority
ranking apportionment currently does not support the manifold groups.
EXPLANATION:
*APPOR-METHOD defines how to distribute a group target within its pool the collection
of all the contributing wells or groups. The pool for a targeted group consists of all its child
groups and the wells directly attached. Groups and wells can only contribute to one particular
target. They will be excluded from the pool created for a higher-level target if they are
currently contributing to a subordinate target. The idea can be best demonstrated with the
following group hierarchy sketch: if only the FIELD target is defined, all the groups and
wells listed will contribute to it; however, if GROUP-2 is targeted additionally, then its child
groups (GROUP-201, GROUP-202 and GROUP-203) and their wells (W05W10) will
contribute directly to the GROUP-2 target instead of the top-level FIELD target. The pool
created originally for FIELD now consists of only GROUP-1 and its wells (W01W04).
FIELD
GROUP-1
GROUP-2
GROUP-201
GROUP-202
GROUP-203
W08 W09
W10
For a given group target, a proper apportionment method needs to be specified. Different
apportionment method can in principal be applied\mixed to different group targets in a single
run. CMGs multi-level well management module currently supports the following methods:
For the above example, the FIELD target can be apportioned, say, with the instantaneous
potential method (*IP) while the priority ranking method (*PRIOR) may be used for the
targeted GROUP-2 in a single run.
Example
*GCONP
*GCONP
FIELD
GROUP-2
*APPOR-METHOD
*APPOR-METHOD
*TARGET
*TARGET
*PROD
*PROD
*STO
*STO
FIELD
GROUP-2
*PRIOR-FORM
*PROD 'Group-2'
*PRIOR-NUMER
0.
1.
0.
*PRIOR-DENOM
0.
0.
1.
1000.
600.
*IP
*PRIOR
0.
0.
0.
0.
0.
0.
In case that the GROUP-2 target is to be apportioned using the guide rates method
(*GUIDE), the group rates for contributing groups GROUP-201, GROUP-202 and GROUP203 and/or well rates for contributing wells W05 W10 shall be supplied by *GUIDEP.
Guide rates supplied for non-contributing groups\wells are ignored. On the other hand,
instantaneous potential (IP) is defaulted as the guide rate if it has not been supplied by the
user for a contributing group or well that is under the guide rates control.
*APPOR-METHOD
*GUIDEP *STO
**and/or
*GUIDEP *STO
*PROD GROUP-2
*GUIDE
GROUP-201 GROUP-202 GROUP-203
300.
200.
100.
W05
100.
*W06
W07
W08
W09
W10
The group and/or well guide rates used in the guide-rate apportionment are supplied
following keywords *GUIDEP and *GUIDEI as in the previous versions. However, they do
not set the apportionment flag anymore. The guide-rate apportionment has to be invoked by
entering the keyword *GUIDE under *APPOR-METHOD for either production or injection
targets. The backward compatibility is still maintained by interpreting *GUIDEP and
*GUIDEI as the old ones if *APPOR-METHOD does not appear ahead in a dataset.
Therefore, old datasets containing *GUIDEP and *GUIDEI will run exactly the same.
*GUIDEPold ref stream guide_rates
= *APPOR-METHOD *PROD all_groups *GUIDE
*GUIDEP ref stream guide_rates
*GUIDEIold *STG guide_rates
= *APPOR-METHOD *GASI all_groups *GUIDE
*GUIDEI *STG guide_rates
*GUIDEIold *STW guide_rates
= *APPOR-METHOD *WATI all_groups *GUIDE
*GUIDEI *STW guide_rates
DEFINITIONS:
*PROD
Indicates that group production targets should be apportioned with the
specified method.
*GASI
Indicates that group gas injection targets should be apportioned with the
specified method.
*WATI
Indicates that group water injection targets should be apportioned with the
specified method.
group_names
A list of group names to which the apportionment method is applied. No
wildcard characters may be used in the group names.
*PRIOR-RATE
This sub-keyword defines what type of rates is to be used in calculating the
well priorities. *MRC indicates that the well priorities are to be calculated
using the stream rates under the most restrictive condition. *BHP indicates
that the well priorities are to be calculated using the production or injection
potentials at a specified bottom hole pressure, bhp_val. If bhp_value does
not appear after *BHP, the default value will be applied: 1 atmosphere for
production targets and 3500 atmosphere for injection targets.
*PRIOR-CTRL
This sub-keyword introduces the numerical parameters that control the
priority ranking apportionment. freq is the minimum time interval in days
between well priority calculations. tcr_min is the lower limiting value of
the ratio between the pool target and its capacity, above which the priority
ranking apportionment will be applied. tcr_max is the upper limiting value
of the ratio between the pool target and its capacity, below which the priority
ranking apportionment will be applied.
*PRIOR-NUMER
This sub-keyword introduces the priority weighting coefficients for the
numerator Ai (i = 0, nph). nph is the number of surface production or
injection streams allowed for group targets.
*PRIOR-DENOM
This sub-keyword introduces the priority weighting coefficients for the
denominator Bi (i = 0, nph).
DEFAULTS:
Conditional keyword. If any of the sub-keywords (*PRIOR-CTRL, *PRIOR-RATE,
*PRIOR-NUMER, *PRIOR-DENOM) is absent after *PRIOR-FORM, its default value(s)
will be applied:
*PRIOR-RATE
*PRIOR-CTRL
*PRIOR-NUMER
*PRIOR-DENOM
*MRC
0.0 0.0
1.0 0.0
1.0 0.0
1.0
0.0 ...
0.0 ...
0.0
0.0
Otherwise, all the required values by that sub-keyword must be filled in.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group after
the group hierarchy is available. If a group target is apportioned with the priority ranking
method set by *APPOR-METHOD, a priority formula for that targeted group must be supplied
by *PRIOR-FORM. Defining priority formula for non-targeted groups or non-targeted injection
streams does NOT have an effect.
EXPLANATION:
*PRIOR-FORM is used for the priority ranking apportionment in which wells contributing to a
target are ranked in order of decreasing priority. When the pool target-capacity ratio falls
between the threshold values [tcr_min, tcr_max], wells with highest priorities are assigned to
operate at tcr_max fraction (upper limit) of their maximum rates according to the most restrictive
constraints. If they have sufficient capacity to meet the group target, one 'swing' well will be
reached such that the target will be exceeded if this well were also assigned tcr_max fraction of
its maximum rate. Wells with lower priorities than that of the swing well are assigned tcr_min
fraction (lower limit) of their max rates. The swing well is then assigned a makeup rate exactly
equal to the deficit. Wells with lower priority, including the swing well, are flagged so that they
are not shut-in by well management in case of violating the minimum rate constraints.
The priority index for an individual well iw contributing to a targeted group ig is defined as
A 0 (ig ) +
Priority(iw ) =
B 0 (ig ) +
nph
A i (ig)Q i (iw )
i =1
nph
Bi (ig)Q i (iw )
i =1
where Ai and Bi (i = 0, nph) are the weighting coefficients for the numerator and denominator,
respectively, introduced by sub-keywords *PRIOR-NUMER and *PRIOR-DENOM. It is
assumed that all wells contributing to a common group target should have the same priority
definition. However, different targeted groups or different targeted injection streams may have
different specifications of well priorities. Coefficients A0 and B0 are constants whilst the rest are
the stream weighting coefficients to be multiplied correspondingly by Qi, the stream rate under
the most restrictive constraints (*MRC) or the production/injection potential at the given bottom
hole pressure (*BHP) distinguished by sub-keyword *PRIOR-RATE. The allowable surface
reference streams for the simulator are outlined in the table below. They are defined in details
elsewhere on the manual page for keywords *GUIDEP and *GUDEI. All the weighting
coefficients are non-negative real numbers and at least one Ai and one Bi must be non-zero.
STARS (Production: nph = 5)
i
CONST STO
STG
NUMER
A0
A1
A2
DENOM
B0
B1
B2
STW
A3
B3
STL
A4
B4
BHF
A5
B5
The first value read by sub-keyword *PRIOR-CTRL, freq, indicates the elapsed minimum
time in days between priority calculations. Default is to update the well priority at every
timestep (freq = 0.0). It is designed to reduce in some cases the frequent alternating of swing
well among wells that may have very comparable priority values.
The last two values after sub-keyword *PRIOR-CTRL, tcr_min and tcr_max, are the threshold
values for the pool target-capacity ratio (between 0-1), within which the ranking apportionment
will be applied. The instantaneous potential (IP) apportionment will otherwise be adopted if the
said ratio is out of the range [tcr_min, tcr_max]. Default is [0, 1], meaning that the priority
ranking apportionment will always be in place regardless of the pool target-capacity ratio.
The upper limit tcr_max is designed to avoid the constant violation (and therefore switch) of
the most restrictive constraints that might happen to some wells if they were forced to
produce or inject at their maximum rates (tcr_max = 1). Another consideration is that as the
pool has a very low capacity to meet a certain target (i.e. high pool target-capacity ratio), all
contributing wells are required to operate at their maxima. The ranking apportionment may
take the least effect because of the few candidacies for the swing well.
The lower limit tcr_min, on the other hand, provides a flexible control over the wells with
lower priorities than the swing well. These wells can operate at the tcr_min fraction of their
maximum rates allowable instead of at the zero rate.
Example
Supply the priority formula for targeted groups Group-1 and Group-2. As invoked by
*APPOR-METHOD for the priority ranking method, wells will be opened in decreasing
order of GOR when the pool target-capacity ratios fall between [0.0, 0.8]. Well priorities are
evaluated using the *MRC rates (default) and recalculated at least every 30 days.
*APPOR-METHOD *PROD 'Group-1' 'Group-2' *PRIOR
*PRIOR-FORM
'Group-1' 'Group-2'
**freq
tcr_min
tcr_max
*PRIOR-CTRL
30.
0.0
0.8
**CONST STO STG STW STL BHF
*PRIOR-NUMER
0.
1.
0.
0.
0.
0.
*PRIOR-DENOM
0.
0.
1.
0.
0.
0.
0.
0.
1.
0.
0.
0.
1.
1.
0.
0.
0.
0.
or at minimizing gas and water production as a whole. Proper weight for the gas is needed
since rate values of gas production are generally higher by magnitudes than those of water:
*PRIOR-NUMER
*PRIOR-DENOM
0.
0.
1.
0.
0.
1.
0.01 1.
0.
0.
0.
0.
*GUIDEP, *GUIDEI
PURPOSE:
*GUIDEP specifies the guide rates as needed if the guide rate apportionment method is set by
*APPOR-METHOD *GUIDE to distribute the production rates to groups or wells so as to
meet the production target.
*GUIDEI specifies the guide rates as needed if the guide rate apportionment method is set by
*APPOR-METHOD *GUIDE to distribute the injection rates to groups or wells so as to meet
the injection target.
FORMAT:
*GUIDEP
*GUIDEI
*STO
*STG
*STW
*STL
*BHF
(group_names)
(well_names)
guide_rates
guide_rates
DEFINITIONS:
*STO
This subkeyword indicates that the oil stream is the reference stream to
which the guide rates apply; i.e., that the guide rate values entered should be
interpreted as oil rates or as being proportional to oil rates. Rates should be
entered as (m3/day | STB/day). Not valid for use with *GUIDEI.
*STG
This subkeyword indicates that the gas stream is the reference stream to
which the guide rates apply; i.e., that the guide rate values entered should be
interpreted as gas rates or as being proportional to gas rates. Rates should be
entered in (m3/day|SCF/day).
*STW
This subkeyword indicates that the water stream is the reference stream to
which the guide rates apply; i.e., that the guide rate values entered should be
interpreted as water rates or as being proportional to water rates. Rates
should be entered in (m3/day|STB/day).
*STL
This subkeyword indicates that the guide rates apply to the total of the liquid
stream rates (oil+water); i.e., that the guide rate values entered should be
interpreted as total liquid rates or as being proportional to total liquid rates. Not
valid for use with *GUIDEI. Rates should be entered in (m3/day|STB/day).
*BHF
Identifies that guide rate values are Bottom hole fluid rates. Rates should be
entered in (m3/day|rbbl/day). Not valid for use with *GUIDEI.
group_names
A list of 'group_names' to which the guide rates are applied.
well_names
One or more quoted well names to which the guide rates are applied. See
Wildcarding Well Names at the beginning of this chapter. well_names
cannot be mixed with group_names in the same list.
guide_rates
A list of guide rates for the list of groups or wells. See the entries for the
stream designation strings for the proper units.
DEFAULTS:
Optional keywords. Default is to use the instantaneous injection / production potential (IIP or
IPP) as the guide_rates. *GUIDEP and *GUIDEI do not have an effect if the apportionment
method is defined other than the guide rate method (*GUIDE) by *APPOR-METHOD.
CONDITIONS:
* GUIDEP AND *GUIDEI must be located in the WELL AND RECURRENT DATA
keyword group after the wells or groups have been defined.
EXPLANATION:
Guide rates are set for each of the wells specified in 'well_names' or each group specified by
the 'group_names'. If the guide rates apportionment method (*APPOR-METHOD *GUIDE)
is being used then all producers or injectors connected to that group must have their
guide_rates specified with *GUIDEP or GUIDEI. If no guide rates at all have been specified
for the apportionment of the target of a particular group, then instantaneous
injection/production potentials are used as the guide rates. Please consult the documentation
for more information on the guide rate method under the keyword *APPOR-METHOD.
When *GUIDEI is used, the guide rates apply only for the target specified with the stream
identifier; e.g., water injectors have their guide rates specified under *GUIDEI *STW.
When *GUIDEP is used, the guide rates apply for the listed wells or groups to all target
types, with the proper conversion made for the ratios at which the wells produce the different
streams. That is, the target is apportioned so that the wells produce the reference stream set
with the *GUIDEP keyword in the ratios indicated by the rates entered with *GUIDEP. For
example, if the following lines are entered when SI units are used,
*GUIDEP
*STO
and an STG group target is to be apportioned among these producers, then if Well 1 has a
GOR of 600., Well 2 a GOR of 300., and Well 3 a GOR of 200., then the STG guide rates
used for the wells would be 60000, 60000, and 60000 respectively and the STG target would
be distributed equally among the wells if no other constraints were violated in the process.
Example:
*GUIDEP
*STO
*GUIDEP
*STO
*GUIDEP
*STL
*GUIDEP
*STG
*GUIDEI
*STW
'GR-PA'
300.00
'PA1'
100.0
'PB1'
100.0
'PC1'
100.0
'IA1'
100.0
'GR-PB'
100.00
'PA2'
100.0
'PB2'
100.0
'PC2'
200.0
'IB1'
200.0
'GR-PC'
400.00
'PA3'
100.0
'PB3'
100.0
'IC1'
100.0
(group_names)
(well_names)
-or*GCIOFF
*GAS
*WATER
(group_names)
(well_names)
DEFINITIONS:
*GAS
Indicates not under group control for gas injection calculations.
*WATER
Indicates not under group control for water injection calculations.
group_names
A list of 'group_names' to which the group constraint from higher level
should not be applied.
well_names
One or more quoted well names to which the group constraint from higher
level should not be applied. See Wildcarding Well Names at the beginning
of this chapter. well_names cannot be mixed with group_names in the same
list.
DEFAULTS:
Optional keywords. Default is to apply the group constraint from higher level.
CONDITIONS:
*GCPOFF AND *GCIOFF must be located in the Well and Recurrent Data keyword group,
and must follow the *GCONI, *GCONP or *GCONM keywords.
EXPLANATION:
This keyword isolates the groups or wells so that they can produce or inject according to their
own rate and pressure constraints, without being controlled by higher level constraints.
Example:
*GCPOFF
*GCPOFF
*GCIOFF
*GCIOFF
*ON-TIME
PURPOSE:
*ON-TIME specifies the fraction of time during which a well or group operates.
FORMAT:
*ON-TIME
( well_list | group_list )
otf_list
DEFINITIONS:
well_list
One or more quoted well names to specify the wells to which this on-time
fraction data applies. See Wildcarding Well Names at the beginning of this
chapter. These names must be on the same line as the *ON-TIME keyword.
If more well names are to be specified than can fit on one line, then another
*ON-TIME keyword must be entered.
group_list
One or more quoted group names to specify the groups to which this on-time
fraction data applied. No wildcard characters may be used in the group
names. These names must be on the same line as the *ON-TIME keyword. If
more group names are to be specified than can fit on one line, then another
*ON-TIME keyword must be entered.
otf_list
List of on-time fractions, one for each well in order in well_list or group in
order in group_list. All values must appear on a new line immediately after
the line containing *ON-TIME. Repeat counts are allowed. Values must be
between 0.001 and 1.0, inclusive. Values less than 0.001 are modified to
0.001 with notification.
DEFAULTS:
If no *ON-TIME keyword is encountered, an on-time fraction of 1 are assigned to each
well/group. Wells/groups never listed under *ON-TIME retain the on-time fraction of 1
throughout the simulation.
CONDITIONS:
A well or group must be defined before it can be assigned data via *ON-TIME.
The on-time fraction for a given well/group may be altered by an additional *ON-TIME line
at a subsequent well change.
The on-time fraction option is not available for a well attached to a discretized wellbore.
Well and group names may not appear together after the same *ON-TIME keyword.
EXPLANATION:
Wells and groups are treated in the same manner as wells at the lowest level. The user input ontime factor (OTF_input) for a particular well/group is the on-time fraction relative to the on-time
fraction of its parent group. For the field (top level) group, it is relative to the total simulated
time. The actual (absolute) on-time factor (OTF_actual) computed internally at a point in the
hierarchy tree is the product of the OTF_input factors on the path from that point to the field
(top) level. If no group structure is specified then the well on-time fractions are relative to the
conceptual Default-Field, i.e., the total simulated time (and thus OTF_input = OTF_actual). In
normal cases, the on-time factors are assigned on only one level of the well/group hierarchy.
The instantaneous rate (Q_instant) for a well refers to the rate when the subject well is
running on its full-flow conditions. The instantaneous rate for a group, by definition, is the
summation of the on-time averaged rates from all its child groups or wells directly attached,
which takes into account the lower-level down-time effect. The on-time averaged rate
(Q_average) for a well/group is the relative mean rate over the period while its parent group
is operating. The actual rate (Q_actual), resulting directly from the material balance, is the
reported true volume produced from or injected into the reservoir per unit time. It can also be
interpreted as the absolute on-time average, and is used to calculate all the cumulative flows.
At any well/group level, the following relationships hold:
Q_average = Q_instant * OTF_input
Q_actual = Q_instant * OTF_actual
(relative)
(absolute)
For any well/group, the instantaneous rate and the on-time averaged rate are the same if
OTF_input = 1, since this well/group has no down-time relative to its parent group. This
does not necessarily mean that the actual rate equals to the instantaneous rate as well.
Theoretically, these three rates might have different values. In case that all group on-time
fractions are unity but only well on-time fractions are not, one expects for all levels
OTF_actual = OTF_input
Q_actual = Q_average
Moreover, Q_actual = Q_instant, for all groups (but not the wells). This is the setting in the
earlier versions of CMGs Well Management before incorporating the group on-time fraction.
It should be noted that these equivalences hold true only at the field (top) level once the group
on-time fractions are set < 1.
Any flow constraints, targets and limits specified for a well (e.g., *OPERATE, *MONITOR)
or group (e.g. *GCONP, *GCONI, *GCONM) will apply to its instantaneous rate. For wells,
reported values of the bottom-hole pressure, drawdown, well layer pressure, and well head
pressures correspond to the specified (instantaneous) rates. When the well is operating on a
bottom-hole pressure or well-head pressure constraint, the rate which results is the actual rate,
which has been reduced by the actual on-time fraction. The group on-time factors are meant
to model situations in which all wells in a group are brought down at the same time and
restored to service at the same time; however, wells are still allowed to have individually a
non-unit on-time factor when the group factors are in force.
Example:
Assign on-time fractions of 0.95 to wells 1, 3, 7, 8, 9, and 10.
*ON-TIME
1 3 7:10
6*0.95
In a very general but unusual case, the group on-time fractions are input as
*ON-TIME FIELD GRP-2 GRP-3 GRP-201 GRP-202 GRP-203
0.75
0.8
0.8
0.85
0.85
0.85
which specifies that: Field operates at 75% of the total simulated time; groups GRP-2 and
GRP-3 (level 2) operate at 80% of the time while Field is on-time; groups GRP-201, 202, 203
(level 3) operate at 85% of the time while their parent group GRP-2 is operating. The on-time
factors for all wells default to unity (OTF_input = 1), suggesting that they operate (100%) as
long as their parent groups are operating.
In this example, if no well constraints have been violated and the group target has been met,
the actual on-time fractions and various flow rates at different levels computed by the
simulator would be:
On-Time Factor (OTF)
Group Hierarchy
FIELD
GRP-2
GRP-201
GRP-202
GRP-203
GRP-3
Default-Group
Input
0.75
0.80
0.85
0.85
0.85
0.80
1.00
Actual
0.75
0.60
0.51
0.51
0.51
0.60
0.75
Rates (Q)
Instant.
[500.0]
375.0
73.5
147.0
220.5
250.0
/
Average
375.0
300.0
62.5
125.0
187.5
200.0
/
Actual
375.0
225.0
37.5
75.0
112.5
150.0
/
All wells under group GRP-2 have the actual on-time fractions of 0.51, and those for wells
under group GRP-3 are 0.6. The field instantaneous rate by which the target is set is the
summation of the on-time averaged rates of its child groups GRP-2 and GRP-3, which can also
be converted directly from the field actual rate (500.0 = 300.0 + 200.0 = 375.0/0.75). Similarly,
summing the on-time averaged rates of groups GRP-201,202,203 yields the instantaneous rate
of their parent group GRP-2, which can also be converted from GRP-2s actual rate by dividing
it with GRP-2s actual on-time fraction (375.0 = 62.5 + 125.0 + 187.5 = 225.0/0.6).
As far as the behavior of lower level groups (and wells) are concerned, the above dataset
would run exactly the same if the user were to directly (and only) define OTF_input = 0.51
for group GRP-2 and OTF_input = 0.6 for group GRP-3. The actual rates and accumulations
for all the wells/groups remain unchanged. However, since now the Field has a unity on-time
fraction, that is, the instantaneous rate is indeed the actual rate for the field, the field target
should be adjusted to 375.0 to render a fair comparison.
On-Time Factor (OTF)
Group Hierarchy
FIELD
GRP-2
GRP-201
GRP-202
GRP-203
GRP-3
Default-Group
Input
1.00
0.51
1.00
1.00
1.00
0.60
1.00
Actual
1.00
0.51
0.51
0.51
0.51
0.60
1.00
Rates (Q)
Instant.
[375.0]
441.0
73.5
147.0
220.5
250.0
/
Average
375.0
225.0
73.5
147.0
220.5
150.0
/
Actual
375.0
225.0
37.5
75.0
112.5
150.0
/
Meaning
Stock Tank Oil - Rate of Production
Stock Tank Oil - Cumulative Production
Stock Tank Oil Rate of Injection
Stock Tank Oil Cumulative Injection
Stock Tank Water Rate of Production
Stock Tank Water Cumulative Production
Stock Tank Water Rate of Injection
Stock Tank Water Cumulative Injection
Stock Tank Gas Rate of Production
Stock Tank Gas Cumulative Production
Stock Tank Gas Rate of Injection
Stock Tank Gas Cumulative Injection
Stock Tank Liquid Rate of Production
Stock Tank Liquid Cumulative Production
Bottom Hole Fluid Rate of Production
Bottom Hole Fluid Cumulative Production
Bottom Hole Fluid Rate of Injection
Bottom Hole Fluid Cumulative Injection
Stock Tank Intermediate liquid Rate of Production
Stock Tank Intermediate liquid Cumulative Production
Wet Gas Rate of Production
Wet Gas Cumulative Production
Bottom Hole Pressure
Well Head Pressure
Gas-Oil Ratio (production)
User's Guide STARS
WCUT
WGR
GLR
MXX
BKFLOW
*ON_GROUP
This subkeyword indicates that the test condition is to be applied to a group
or list of groups (if a wildcard is used in the group name or a list of groups is
specified). The group hierarchy must be previously defined to enable group
based triggers to be used. One of *ON_WELL or *ON_GROUP or
*ON_SECTOR or *ON_LAYER or *ON_FIELD or *ON_ELAPSED is a
required token immediately following the trigger name string.
group_names
Any number of group names (in quotes) to specify the groups to which this
trigger applies. The groups(s) must be previously defined. There are no
groups created by default. The names must all be specified on a single line.
Note: wildcards may be used in the 'group_names' string as follows:
* replaces any number of characters at the end of a group name or can be used
on its own to replace all groups (e.g. *TRIGGER trig1 *ON_GROUP '*' or
*TRIGGER trig1 *ON_GROUP 'grp*').
? Replaces any single character anywhere in the group name (e.g.
*TRIGGER trig1 *ON_GROUP '?rp1').
The two wild cards can be combined on any list and when wild cards are
used the group list generated is printed out for the user to check.
At least one group name must immediately follow the *ON_GROUP
keyword. Required token.
Group_condition:
The valid list of quantities for groups and for the field is shown in Table 2 below:
Table 2: Group and Field quantities:
Subkeyword
STO-RP
STO-CP
STW-RP
STW-CP
STW-RI
STW-CI
STG-RP
STG-CP
STG-RI
Meaning
Stock Tank Oil Rate of Production
Stock Tank Oil Cumulative Production
Stock Tank Water Rate of Production
Stock Tank Water Cumulative Production
Stock Tank Water Rate of Injection
Stock Tank Water Cumulative Injection
Stock Tank Gas Rate of Production
Stock Tank Gas Cumulative Production
Stock Tank Gas Rate of Injection
STG-CI
STL-RP
STL-CP
BHF-RP
BHF-CP
BHF-RI
BHF-CI
STI-RP
STI-CP
WTG-RP
WTG-CP
GOR
WCUT
WGR
GLR
MPWS MXX
GWGR
WWGR
RECYSTG
RECYSTW
VOIDRPG
VOIDRPW
VOIDRPT
*ON_LAYER
This subkeyword identicates that the test condition is to be applied to a well
layer. The well must be fully defined previously for a trigger based on a layer
condition to be specified.
well_name
A single string (in quotes) of less than 40 characters representing a well name
must immediately follow the *ON_LAYER keyword. The name identifies
the well to which the layer belongs.
Layer_UBA
To identify the layer, enter the layer user block address immediately
following the well name. The user block address is specified in the following
general format: i1 j1 k1 / i2 j2 k2 / please review the manual pages on the
*PERF keyword for more information.
Do NOT encapsulate the user block address in quotes.
Layer_condition:
The valid list of quantities for layers is shown in table 3 below:
Meaning
Stock Tank Oil Rate (sign tells whether Prod or Inj)
Stock Tank Water Rate
Stock Tank Gas Rate
Stock Tank Intermediate Liquid Rate
Gas-Oil Ratio (production)
Water Cut (production)
Water Gas Ratio (production)
Gas Liquid Ratio (production)
Layer bottom-hole pressure
Layer drawdown absolute value of block P layer P
*ON_SECTOR
This subkeyword identicates that the test condition is to be applied to a
sector. GEM creates a default sector named FIELD which includes all grid
blocks and all wells. IMEX creates a default sector named (Entire Field).
Please note that there are 2 spaces between the word Entire and Field.
Any other sector name used with a trigger must be previously defined.
sector_name
A single string representing a sector name (in quotes) of less than 16
characters to specify the sector to which this trigger applies. The sector must
be previously defined. Only the FIELD for GEM is created by default. The
name must be on the same line as the *TRIGGER keyword.
Sector_condition:
The valid list of quantities for sectors is shown in table 4 below:
Table 4 : Sector quantities:
Subkeyword
PAVE
SOAVE
SWAVE
SGAVE
STOIP
STWIP
STFGIP
STGIP
Meaning
Pore-volume weighted pressure
Pore-volume weighted oil saturation
Pore-volume weighted water saturation
Pore-volume weighted gas saturation
Stock tank oil in place
Stock tank water in place
Stock tank free gas in place
Stock tank gas in place, including free and dissolved
*ON_FIELD
This subkeyword identicates that the test condition is based on a field level
quantity. Note: The string FIELD in single quotes must immediately follow
the *ON-FIELD keyword. The ON_FIELD keyword on its own adequately
identifies a trigger on the entire field. However to maintain consistency in
format with other keywords such as ON_WELL and ON_GROUP, the field
User's Guide STARS
name string has been retained for ON_FIELD as well. The user should enter
the string FIELD for the field name token even if the actual field level
group or sector name assigned is different from FIELD. If a string other
than FIELD is entered following ON_FIELD, a warning message will be
generated and the simulation will proceed normally.
Field_condition:
The valid list of quantities for field is identical to that of groups as shown in
table 2:
Operator:
The operator for the triggering condition must be one of:
< Less than
> Greater than
One of < or > (not in quotes) is required immediately following the
specification of the test quantity using keywords such as *STO-RP
condition_value:
The value of the trigger condition. Enter a value based on the trigger
condition and unit system selected for the simulation.
*ON_ELAPSED
This subkeyword identicates that the test condition is based on a time elapsed
since the beginning of the simulation OR time elapsed after the time the trigger
is defined (that is, when the trigger keyword lines are parsed by the reader). The
trigger definition time could simply be the time specified by the DATE or
TIME card. For an inner trigger of a nested trigger, it is the time that the
immediate outer trigger condition is satisfied. Consider the following examples:
Example 1:
*TIME 10.0
trigger 'trig1' on_elapsed
apply_times 1
*TARGET *BHP
'P1'
200
end_trigger
In this case the trigger will be read in after exactly 10 days have elapsed
trigger definition time is therefore 10 days. The time specified for the trigger
condition is relative to the time the trigger is created therefore at the bottom
of the first time step that results in simulation time greater than 10+4.99 =
14.99 days the trigger condition will be met.
Example 2:
*TIME 10.0
trigger 'trig1' on_elapsed
apply_times 1
*TARGET *BHP
'P1'
200
trigger 'trig2' on_elapsed
apply_times 1
*TARGET *BHP
'P1'
100
trigger 'trig3' on_elapsed
apply_times 1
*TARGET *BHP
'P1'
50
end_trigger
end_trigger
end_trigger
In this case the outermost trigger named TRIG1 is defined at 10 days based
on the time card entry. The inner trigger TRIG2 will be defined or comes
into existence when the outer trigger TRIG1 condition is satisfied (some
time after 14.99 days because the time step sizes are not known apriori it is
not possible to state exactly when this time will be). The inner TRIG3 will
be defined when the outer trigger TRIG2 condition is satisfied, this can
occur after at least 10+4.99+5.99 = 20.98 days have elapsed.
Note: The string TIME in single quotes must immediately follow the *ONELAPSED keyword. If a string other than TIME is entered following
ON_ELAPSED, a warning message will be generated and the simulation will
proceed normally.
Time_condition:
Either the time elapsed from the start of the simulation can be entered or the
time elapsed relative to the time when the trigger is first defined can be
specified. To specify the absolute time use the sub keyword *TIMSIM
followed by a value. To specify elapsed time relative to the time when the
trigger is parsed or defined use the sub keyword *TRELTD followed by a
value. The time should be in days for FIELD/SI/MODSI units and in minutes
for laboratory (LAB) units.
TIMSIM:
Indicates that the time value entered is time elapsed from the start of the
simulation, also referred to as absolute time.
TRELTD:
Indicates that the time value entered is relative to the time the trigger is
defined, also referred to as relative time.
Operator:
The operator for the triggering condition must be one of:
< Less than
> Greater than
One of < or > (not in quotes) is required immediately following the
specification of the test quantity using keywords such as *TIMSIM
condition_value:
The value of the trigger condition. Enter a value based on the time elapsed
condition selected in units of days for field/SI units.
*APPLY_TIMES:
Subkeyword used to specify the maximum number of times that the actions
specified with the trigger can be taken. An integer number must immediately
follow this subkeyword. This subkeyword is optional.
napt:
Enter a single integer representing the maximum number of times that the
specified list of actions can be executed. If no value is entered, then the
default is 1. With the default of 1 the trigger condition is tested at the end of
every timestep. As soon as the trigger condition is satisfied the list of actions
is implemented and the trigger is removed from the list of active triggers. If
more than 1 (say n times) is selected then the trigger remains active until
the trigger condition is satisfied (n) times.
*INCREMENT:
Subkeyword used to specify the increment to the trigger value. A single real
number must follow this subkeyword. An integer number must immediately
follow this subkeyword. This subkeyword is optional.
Trigger Increment:
Enter a single real value representing an increment to be applied to the
trigger value, each time the trigger condition is satisfied. The trigger
increment can be a negative number. The trigger increment does not need to
be entered. The trigger increment can only be entered if the preceding
number for the repetition times is also entered. The trigger increment is used
only if a value greater than 1 is specified for the number of times the trigger
condition can be satisfied. Once a trigger condition is satisfied the trigger
value is recalculated as value_new = existing_value + increment. The new
value is then used in testing the trigger condition for subsequent times until
the trigger condition is once again satisfied.
758 Well and Recurrent Data
*TEST_TIMES:
Subkeyword used to specify the maximum number of times that the trigger
can be tested to ascertain if the trigger condition is satisfied. A single integer
number must follow this subkeyword. This subkeyword is optional.
ntestt:
Enter a single integer representing the maximum number of times that the
trigger can be tested to ascertain if the trigger condition is satisfied. If no
value is entered, then the default is to test the trigger every time step. If a
value of 1 is entered then the trigger condition is tested only once at the end
of the time step during which the trigger is defined. The trigger is then
removed from the active trigger list whether or not the trigger condition itself
is satisfied. If more than 1 (say n times) is selected then the trigger
condition is tested for n time steps after the trigger is defined.
*TEST_AFTER_TIMER:
Subkeyword used to specify the time delay which must elapse before the
trigger condition will be tested. This time delay is relative to the time that the
trigger comes into existence or is defined. A single real number must follow
this subkeyword. This subkeyword is optional.
rtimedr:
Enter a single real number representing the delay in time (in days) after the
time that the trigger is defined or parsed that the user wishes the trigger
condition to be tested. If no value is entered, then the default is to assume a
time delay of zero.
*TEST_AFTER_TIMEA:
Subkeyword used to specify the time delay in days which must elapse before
the trigger condition will begin to be tested. This time delay is relative to the
start of the simulation or absolute time elapsed. A single real number must
follow this subkeyword. This subkeyword is optional.
rtimeda:
Enter a single real number representing the delay in days after the start of the
simulation that the user wishes to elapse before the trigger condition is tested
going forward. If no value is entered, then the default is to assume a time
delay of zero.
{action_list}
The list of actions in the form of valid well and recurrent data keyword lines
may be specified following the *TRIGGER keyword and its subkeywords.
The action list must start on a new line. The action list is optional. Following
the action lines specify the keyword *END_TRIGGER on a new line to
signal the end of the trigger definition. It is okay to not specify any action
lines within a trigger.
*END_TRIGGER
This keyword marks the end of the list of actions or keyword lines associated
with a given trigger. It must be on a new line. The *TRIGGER and
*END_TRIGGER must be used as a pair. For each *TRIGGER keyword, an
*END_TRIGGER keyword is required.
*STO-RP
Oil production rate at surface conditions. For SI units enter a value in m3/D
and for field units in STB/D.
*STO-R
Oil phase rate at surface conditions for a layer. A positive number implies
fluid is flowing in a normal direction. Specifically flow is expected to be
from reservoir to well bore for a layer belonging to a producer and from well
bore to reservoir if the layer belongs to an injection well. On the other hand if
a negative number is entered, then the user is testing for a back flowing layer.
The magnitude of the number indicated the severity of the back flow. For SI
units enter a value in m3/D and for field units in STB/D.
Example 1:
*TRIGGER trig1 *ON_LAYER well1 1 1 1 / 2 2 2 *STO-R > 300.0
If well1 is an injector, then the condition will be satisfied if flow for the layer
is from the well to the reservoir (injection) and the flow rate is greater than
300. However if well1 is a producer, then the condition will be satisfied if
flow is from reservoir to well bore (production) and the oil flow rate is
greater the 300.0.
Example 2:
*TRIGGER trig2 *ON_LAYER well1 1 1 1 / 2 2 2 *STO-R > -300.0
The condition will be satisfied if the layer is back flowing, for an injector flow
is from the reservoir to the well bore and the magnitude of the back flow rate is
greater than 300.0. For a producer, the condition will be satisfied if flow is
from well bore to reservoir and the magnitude of the back flow rate is greater
than 300.0. Therefore if the back flow rate is 350, then the condition is
satisfied, if the back flow rate is 250 the condition is not satisfied.
*STW-R
Water phase rate at surface conditions for a layer. A positive number entered
for a layer belonging to an injection well implies flow is expected to be from
well bore to reservoir, that is the well layer is injecting into the reservoir. A
positive number entered for a layer belonging to a production well implies
flow is from reservoir to well bore. A negative number implies a back flowing
layer. For SI units enter a value in m3/D and for field units in STB/D.
*STG-R
Gas phase rate at surface conditions for a layer. A positive number entered
for a layer belonging to an injection well implies flow is expected to be from
well bore to reservoir, that is the well layer is injecting into the reservoir. A
positive number entered for a layer belonging to a production well implies
flow is from reservoir to well bore. A negative number implies back flowing
layer. For SI units enter a value in m3/D and for field units in STB/D.
*STI-R
Intermediate stream rate at surface conditions for a layer. A positive number
entered for a layer belonging to an injection well implies flow is expected to be
from well bore to reservoir, that is the well layer is injecting into the reservoir.
A positive number entered for a layer belonging to a production well implies
flow is from reservoir to well bore. A negative number implies back flowing
layer. For SI units enter a value in m3/D and for field units in STB/D.
*STO-CP
Oil cumulative production at surface conditions. For SI units enter a value in
m3 and for field units in STB.
*STW-RP
Water production rate at surface conditions. For SI units enter a value in
m3/D and for field units in STB/D.
*STW-CP
Water cumulative production at surface conditions. For SI units enter a value
in m3 and for field units in STB.
*STW-RI
Water injection rate at surface conditions. For SI units enter a value in m3/D
and for field units in STB/D.
*STW-CI
Water cumulative injection at surface conditions. For SI units enter a value
in m3 and for field units in STB.
*STG-RP
Gas production rate at surface conditions. For SI units enter a value in m3/D
and for field units in scf/D.
*STG-CP
Gas cumulative production at surface conditions. For SI units enter a value
in m3 and for field units in scf.
*STG_RI
Gas injection rate at surface conditions. For SI units enter a value in m3/D
and for field units in scf/D.
*STG-CI
Gas cumulative injection at surface conditions. For SI units enter a value in
m3 and for field units in scf.
*STI-RP
Intermediate liquid stream production rate at surface conditions. For SI units
enter a value in m3/D and for field units in STB/D.
*STI-CP
Intermediate liquid stream cumulative production at surface conditions. For
SI units enter a value in m3 and for field units in STB.
*WTG_RP
Wet gas stream production rate at surface conditions. For SI units enter a
value in m3/D and for field units in scf/D.
*WTG-CP
Wet gas stream cumulative production at surface conditions. For SI units
enter a value in m3 and for field units in scf.
*STL_RP
Liquid (oil + water) stream production rate at surface conditions. For SI units
enter a value in m3/D and for field units in STB/D.
*STL_CP
Liquid (oil + water) stream cumulative production at surface conditions. For
SI units enter a value in m3 and for field units in STB.
*BHF_RP
The oil plus water plus gas phase production rate at bottom hole or reservoir
conditions. For SI units enter a value in reservoir m3/D and for field units in
reservoir barrels BBL/D.
*BHF_CP
The oil plus water plus gas phase production cumulative at bottom hole or
reservoir conditions. For SI units enter a value in reservoir m3 and for field
units in reservoir barrels BBL.
*BHF-RI
The oil plus water plus gas injection rate at bottom hole or reservoir
conditions. For SI units enter a value in reservoir m3/D and for field units in
reservoir barrels BBL/D.
*BHF-CI
The oil plus water plus gas phase injection cumulative at bottom hole or
reservoir conditions. For SI units enter a value in reservoir m3 and for field
units in reservoir barrels BBL.
*GOR
Gas oil ratio at surface conditions. For SI units enter a value as surface m3/D
of gas production per m3/D of surface oil production and for field units in scf
of gas per STB of oil.
*WCUT
Water cut at surface conditions. The water cut is the ratio of surface production
of water divided by the total surface liquid or water + oil production. For SI
units enter a value as surface water production rate (m3/D) divided by the sum
of surface production rates of water and oil (m3/D) and field units in STB/D of
water per STB/D of water + oil production.
*WGR
Ratio of water production rate at surface conditions divided by the surface
gas production rate. For SI units enter a value as surface water production
rate (m3/D) divided by the surface production rates of gas (m3/D) and field
units in STB/D of water per scf/D of gas production.
*GLR
Ratio of gas production rate at surface conditions divided by the surface
liquid (sum of water + oil phases) production rate. For SI units enter a value
as gas production rate (m3/D) divided by the sum of surface production rates
of water and oil (m3/D) and field units in scf/D of gas per STB/D of water +
oil production.
*MPWS *Mxx
Mole percent of component m in the well stream. Mole percent is
calculated as the molar rate of component m flowing into the well divided
by the total molar hydrocarbon flow rate multiplied by 100. The total rate is
the sum of all hydrocarbon components (does not include water). Enter the
component number after the letter M. For example for component number 5
in the components list (as determined by the order that components are
specified with *COMPNAME keyword) use *MPWS *M5 <value>.
*MPVS *Mxx
Mole percent of component m in the surface gas stream. Mole percent is
calculated as the molar rate of component m in the separator gas stream
divided by the total molar hydrocarbon flow rate of the separator gas stream
multiplied by 100. The total rate is the sum of all hydrocarbon components
(does not include water). For example for component number 5 in the
components list (as determined by the order that components are specified
with *COMPNAME keyword) use *MPVS *M5 <value>.
User's Guide STARS
*MPLS *Mxx
Mole percent of component m in the separator liquidstream. If there is
no intermediate liquid stream, then the liquid stream equals the surface oil
stream, otherwise the liquid stream includes the oil and the intermediate
liquid streams. Mole percent is calculated as the molar rate of component
m in the separator liquid stream divided by the total molar flow rate of the
separator liquid stream multiplied by 100. The total rate is the sum of all
hydrocarbon components (does not include water). Enter the component
number after the letter M. For example for component number 5 in the
components list (as determined by the order that components are specified
with *COMPNAME keyword) use *MPLS *M5 <value>.
*BHP
Bottom hole pressure of the well. Enter a value in kPa for SI units and psi for
field units.
*WHP
Tubing head pressure of the well. Enter a value in kPa for SI units and psi for
field units.
*GWGR
Ratio of gas production rate at surface conditions divided by the wet gas
production rate at surface conditions. For SI units enter a value as surface gas
production rate (m3/D) divided by the surface production rate of wet gas
(m3/D) and field units in scf/D of gas per scf/D of wet gas production.
*WWGR
Ratio of water production rate at surface conditions divided by the wet gas
production rate at surface conditions. For SI units enter a value as water
production rate (m3/D) divided by the wet gas surface production rate
(m3/D) and field units in STB/D of water per scf/D of wet gas production.
*BKFLOW
If any layer of the well is back flowing then this condition is satisfied. Note:
To specify the case where action(s) are to be taken if the well IS backflowing
use the *BKFLOW keyword followed by the greater than operator and a
value of 0. Alternatively to specify the case where the action(s) are to be
taken if the well IS NOT back flowing use the *BKFLOW keyword followed
by the less than operator and a value of 0. If an increment is specified with
the *INCREMENT keyword, then that value will be ignored.
*BKFLOW > 0 take actions if the well IS BACK FLOWING
*BKFLOW < 0 take actions if the well IS NOT BACK FLOWING
*GLR
Ratio of gas production rate at surface conditions divided by the surface
liquid (sum of water + oil phases) production rate. For SI units enter a value
as gas production rate (m3/D) divided by the sum of surface production rates
of water and oil (m3/D) and in field units in scf/D of gas per STB/D of water
plus oil production.
*RECYSTG
Minimum group gas recycling rate. Group injection rate is calculated by
summing the injection rates at surface conditions of all cycling gas injectors
that belong to the group. For SI units enter a value in m3/D and in field units
in scf/D.
*RECYSTW
Minimum group water recycling rate. Group injection rate is calculated by
summing the injection rates at surface conditions of all cycling water
injectors that belong to the group. For SI units enter a value in m3/D and in
field units in STB/D.
*DWN
Difference in absolute value well layer pressure minus the pressure of well
block where well layer is completed. Enter a value in kPa for SI units and psi
for field units.
*PAVE
Sector average pressure calculated on the basis of total pore volume. For SI
units enter a value in kPa and for field units in psi.
*SOAVE
Sector average oil saturation calculated on the basis of total pore volume.
*SWAVE
Sector average water saturation calculated on the basis of total pore volume.
*SGAVE
Sector average gas saturation calculated on the basis of total pore volume.
*STOIP
Sector oil in place at standard conditions. For SI units enter a value in m3
and in field units in STB.
*STWIP
Sector water in place at standard conditions. For SI units enter a value in m3
and in field units in STB.
*STFGIP
Sector gas in place based on reservoir gas phase alone at standard conditions.
For SI units enter a value in m3 and in field units in scf.
*STGIP
Sector gas in place based on both reservoir gas and reservoir oil phase at
standard conditions. For SI units enter a value in m3 and in field units in scf.
*TIMSIM
Condition based on time elapsed since the beginning of the simulation in days.
*TRELTD
Condition based on time elapsed relative to the time when the trigger is
defined, in days.
DEFAULTS:
*TRIGGER is an optional keyword.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group.
EXPLANATION:
This keyword allows for certain actions to be implemented when a specified condition or trigger
is satisfied. The actions are specified in the form of a block of valid keywords encapsulated within
the *TRIGGER and *END_TRIGGER keywords. With the exception of the following keywords:
*DATE, *TIME, *REFINE, *AMALGAMATE, *DEALMAGAMATE, *DEREFINE,
*REREFINE, *AMALGAMATE-C, *DEREFINE-C, *AIMSET, *TRANSI, *TRANSJ,
*TRANSK, *TRANLI, *TRANLJ and *TRANLK, *RANGE, *TRANSIJ+, *TRANSIJ-,
*TRANSIK-, *TRANSIK+, *TRANSIENT, *THTYPE, any other valid keywords that can
otherwise be used in the WELL and RECURRENT data section of a GEM input data file can be
used with triggers.
The trigger condition of each active trigger is tested at the bottom (end) of the time step (that
is after the time step is considered to be completed, the cumulatives have been updated and
the simulation is ready to proceed to the next time step). If the trigger condition is satisfied
then the list of associated actions are processed at the top (beginning) of the next time step.
The order of the triggers in the trigger list depends entirely on the sequence on which the
triggers are defined. The triggers are not sorted in any other way. If nesting is used (that is a
trigger is defined within another trigger) then the inner trigger is defined or becomes active
only if the outer trigger condition is satisfied such nesting may impact on the order that
triggers appear in the trigger list.
Once a trigger condition is met, the count of the number of times remaining that the trigger
can be satisfied is reduced by 1. If for example the default value of 1 is used for the
maximum number of times the trigger can be satisfied, then the count remaining is 0 and the
trigger is removed from the list of active triggers. The trigger is also removed from the active
trigger list once the trigger condition has been tested for the maximum number of times as
specified with the *TEST_TIMES keyword.
766 Well and Recurrent Data
If a well change time (as specified with *DATE or *TIME card) coincides with the time that
the trigger actions are to be processed, then the trigger actions are implemented FIRST
followed by the list of actions or keywords following the *DATE or *TIME card.
It is possible to nest triggers by including the definition of the inner trigger within the
keyword set of the outer trigger (that is before specification of the *END_TRIGGER
keyword of the outer trigger). This offers great flexibility, however such nesting should be
properly thought out to avoid unintended consequences. For example it is possible to define a
trigger recursively using nesting. That is the inner and outer triggers can be assigned the
same name. In this case when the outer trigger condition is first satisfied, the trigger redefines
itself based on the inner trigger definition. For example consider the following block of
keywords in the well and recurrent data section of a GEM data file
*TIME 0.0
*WELL well1
*OPERATE *STO 750.0
*OPERATE *MIN *BHP 3000.0
*WELL well2
*OPERATE *STO 250.0
*OPERATE *MIN *BHP 3000.0
*WELL well3
*OPERATE **STO 250.0
*OPERATE *MIN *BHP 3000.0
*SHUTIN well2 well3
*TIME 50.0 **Time when Trigger is defined
*TRIGGER trig1 *ON_WELL well1 *STO-RP < 500.0 *APPLY_TIMES 3
*INCREMENT -25.0
** outer trigger
*WTMULT well2 *STO 1.25
*TRIGGER trig1 *ON_WELL well1 *GOR > 4500.0
**inner trigger, same name
*OPEN well3
*END_TRIGGER
*END_TRIGGER
At time equal to 50 days, the outer trigger is defined. At the end of the next and subsequent time
steps the trigger condition is tested until it is satisfied or the simulation stops. Suppose at time
equal to 65 days the oil production rate for well well1 drops to below 500 STB/D. The trigger
condition is satisfied, well 2 is opened with an initial oil rate target of 250 *1.25 or 312.50.
However because the inner trigger has the same name as the outer trigger, the trigger trig1 is
also redefined at this time according to the inner definition. The maximum repeat count of 3 as
well as the increment to the trigger condition of -25 STB/D specified with the outer trigger
definition is redundant and can never be used. After 65 days the new trigger condition is based
on GOR and if satisfied will open well 3 with an initial target of 250 STB/D.
The list of actions (keywords) appearing within a trigger definition are not validated in any
way (that is checked for syntax or consistency with previous well and recurrent data etc) until
the trigger condition is satisfied. In *CHECKONLY mode however each line of the well and
recurrent data including keywords (actions) within the trigger definition are processed.
With the implementation of trigger actions GEM restart runs are now handled differently.
With previous versions of GEM, well management information required for a restart run was
synthesized from both data saved to a restart file and from parsing the recurrent data to the
last date/ time card prior to restart time. With the new version of GEM all information
User's Guide STARS
required for restart is written and read from the restart file. No recurrent data is read prior to
restart time. Therefore whereas it was previously possible to have certain keywords (actions)
take effect immediately upon restart by changing the recurrent data prior to the restart time,
this is no longer possible.
The @ symbol in quotes may be used as a place holder for a list of wells or groups that have
satisfied the trigger condition. This list will be a subset of the list of wells or groups specified
as part of the trigger definition. For example consider the following trigger:
*TIME 50.0
*TRIGGER trig1 *ON_WELL pr* *GOR > 5000
*SHUTIN @
*END TRIGGER
Suppose production wells named pr1, pr2, pr3, pr4 that match the wild card well list pr* exist
prior to the time that trigger trig1 is defined, that is at 50 days. Then when 50 days of
simulation time has elapsed the GOR of each well pr1, pr2, pr3 and pr4 respectively will be
tested against the trigger value of 5000. Suppose that at some subsequent time, say 70 days,
wells pr1 and pr3 have GOR > 5000. In that case the trigger condition is satisfied and wells
pr1 and pr3 will be shutin as directed, that is the *SHUTIN @ statement is equivalent to the
user having specified *SHUTIN pr1 pr3. **NOTE: When the @ place holder is used
ALL keyword(s) that PRECEDE the place holder must on the same line as the place holder.
Therefore for example
*TARGET *STO @
1.5
is valid, but
*TARGET *STO
@
1.5
or
*TARGET
*STO @
1.5
are not, since in the latter cases TARGET and STO and @ are not on the same line. Because
of the special significance of the @ symbol, please do not use this symbol as part of a well,
group, sector or trigger name.
(*STO)
(*STW)
(*STG)
(*STL)
(*STI)
(*BHP)
(*WHP)
(*DWN)
(*DWA)
(*DWB)
(*BHF)
(*BHG)
(*STR)
(well_numbers)
Multiplier(s)
OR
('well_names')
OR
@
place holder
DEFINITIONS:
*STO
This subkeyword identifies a surface oil rate (m3/day | STB/day) constraint.
*STW
This subkeyword identifies a surface water rate (m3/day | STB/day)
constraint.
*STG
This subkeyword identifies a surface gas rate (m3/day | scf/day) constraint.
*STL
This subkeyword identifies a total surface liquid rate (oil+water) (m3/day |
STB/day) constraint.
*STI
This subkeyword identifies a surface intermediate liquid rate (m3/day |
STB/day) constraint. Please see the manual entry for the *WELSEP keyword
for more information about the intermediate liquid stream.
*BHF
This subkeyword identifies a total reservoir fluid rate (oil + water + gas +
solvent) (m3/day | STB/day) constraint. This constraint is applicable to
producers only.
*BHW
This subkeyword identifies a reservoir water rate (m3/day | STB/day)
constraint.
*BHP
This subkeyword identifies a bottom hole pressure (kPa | psi) operating
constraint.
*WHP
This subkeyword identifies a well-head pressure (kPa | psi) constraint.
*DWN, *DWA, *DWB
This subkeyword identifies a draw-down pressure (kPa | psi) constraint.
*BHG
This subkeyword identifies a reservoir gas rate (m3/day | ft3/day) constraint.
This keyword is applicable to injectors only.
*STR
This subkeyword identifies a volume or molar percentage recycling rate
constraint. This constraint is applicable to cycling injectors only.
well_numbers
Any number of integers, or a range of integers to specify the well numbers to
which this target applies. These well numbers must be on the same line as the
*WTMULT keyword. If more than one line is required to specify all the
wells, then the *WTMULT keyword must be repeated.
well_names
Any number of 'well_names' in quotes to specify the wells to which this target
applies. These names must be on the same line as the *WTMULT keyword. If
more than one line is required for the well list, then the *WTMULT keyword
must be repeated. Limited wild-carding is available for this list; please see the
explanation on the manual page for the *SHUTIN keyword.
@
When the @ symbol in quotes is specified in place of well numbers or well
list, then it is considered to be a place holder for the list of wells that have
satisfied the trigger condition. This list is necessarily a subset of the well list
input with the trigger keyword. The place holder should only be used in
conjunction with trigger actions. All keywords that precede the @ place
holder must appear on the same line as the @ place holder. Therefore
WTMULT and a keyword specifying a stream, such as STO must be on the
same line as the @ place holder. See the EXPLANATION section of
*TRIGGER keyword for examples of the use of @ place holder.
Multiplier(s)
One number for each well identified by well_numbers or 'well_names'
specifying a multiplying factor to be applied. The new value of the specified
constraint = old value of the constraint * the multiplier. Multipliers must
appear on one or more new lines immediately following the *WTMULT line.
Multipliers must NOT appear on the same line as the list of well names or
well numbers. A single multiplier can be applied to all wells in a well list.
DEFAULTS:
Optional keywords. No defaults.
CONDITIONS:
*WTMULT must be located in the WELL AND RECURRENT DATA keyword group, and
may appear anywhere in this keyword group following the initial *OPERATE declaration.
EXPLANATION:
This optional keyword is used to alter a constraint value for wells without having to redefine
all of the additional operating constraints. It is an effective method of altering constraints
when performing a history match.
*WTMULT also opens a well if the well has been shut in by a previous action or if the well
has been initially defined as a shut in well. When *WTMULT is encountered in a data set, the
simulator checks if the altered constraint with the new value becomes the most restrictive
well constraint. If so, the well is switched to this new constraint type. If not, the new value is
entered for the constraint but the well is switched to (or continues to run on) the currently
most restrictive constraint.
The constraint type is specified by using one of *STO, *STG, *STW, *STL, *STI, *BHP,
*WHP, *DWN, *DWA, *DWB, *BHF, *BHW, *BHG, or *STR. One of these qualifiers
must be present.
The *WTMULT keyword should NOT be used to define a new operating constraint. The
multiplier specified with the *WTMULT keyword will ONLY be applied if the constraint of
the type specified with *WTMULT already exists for the well based on earlier input using the
*OPERATE keyword.
Examples:
*PRODUCER 1
*OPERATE *MAX *STO 500.0
*MONITOR *MIN *STO 10.00 *SHUTIN
:
*WTMULT *STO 1 ** This alters the target constraint of *STO
1.5
** based on the *OPERATE keyword above, i.e.
** from 500 to 500 *1.5 = 750
The *WTMULT keyword may also look like this when several wells have been defined:
Multiplier
Multiplier
DEFINITIONS:
'group_name_1', group_name_2, ... , group_name_n
Are the groups to which the following constraint multiplier applies.
*STO
This subkeyword identifies a surface oil rate (m3/day | STB/day) constraint.
Zero multipliers are allowed and will have the same effect as shutting in all
the wells connected to that group.
*STG
This subkeyword identifies a surface gas rate (m3/day | SCF/day) constraint.
Zero multipliers are allowed and will have the same effect as shutting in all
the wells connected to that group.
*STW
This subkeyword identifies a surface water rate (m3/day | STB/day)
constraint. Zero rates are allowed and will have the same effect as shutting in
all the wells connected to that group.
*STL
This subkeyword identifies a surface liquid rate (oil + water + intermediate
liquid) (m3/day | STB/day) constraint. Zero rates are allowed and have the
same effect as shutting all the wells connected to the group.
*STI
This subkeyword identifies a surface intermediate liquid rate (m3/day |
STB/day) constraint. Zero rates are allowed and have the same effect as
shutting all the wells connected to the group. For more information on the
intermediate liquid stream please see the description of the *WELSEP
keyword in this manual.
*WTG
This subkeyword identifies a surface wet gas rate (m3/day | SCF/day)
constraint. Zero rates are allowed and have the same effect as shutting all the
wells connected to the group. For more information on the wet gas stream
please see the description of the *WELSEP keyword in this manual.
*BHF
This subkeyword identifies a bottom hole fluid rate (m3/day | rbbl/day)
constraint. Zero rates are allowed and have the same effect as shutting all the
wells connected to the group.
*MNP
This subkeyword introduces a manifold pressure (kPa | psi) constraint. This
may only be applied if the listed groups have all had production specified as
going through a manifold with the *MANIFOLD keyword.
*CPP
This subkeyword introduces a compressor (surface) pressure (kPa | psi)
constraint. This may only be applied if the listed groups have all had
production specified as going through a manifold with the *MANIFOLD
keyword.
*VREP
This subkeyword identifies a voidage replacement production target. This
indicates that the production wells connected to this group produce an
amount of the bottom-hole fluid in proportion to the total bottom-hole fluid
injected into the reservoir by the injection wells connected to this group.
*PMAINT
This subkeyword identifies that the group production rates shall be adjusted
so as to maintain the hydrocarbon volume weighted average pressure in a
particular region/sector at a desired level. The multiplier applies only to the
sector pressure target defined by *PMTARG.
@
When the @ symbol in quotes is specified in place of group names, then it is
considered to be a place holder for the list of groups that have satisfied the
trigger condition. This list is necessarily a subset of the group list input with the
trigger keyword. The place holder should only be used in conjunction with
trigger actions. The keyword *GCONPMULT and the @ place holder must
appear on the same line. See the EXPLANATION section of *TRIGGER
keyword for examples of the use of @ place holder.
Multiplier
Multiplier to be applied to the existing constraint value -- see above for units.
DEFAULTS:
Optional keyword.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group together with the target constraint for the particular stream or control must be defined
using the *GCONP grp_name *TARGET keyword before the target constraint multipliers can
be applied. Do not use the *GCONPMULT keyword to define new group target constraints.
EXPLANATION:
*GCONPMULT is used to modify group production constraints which have previously been
defined using the *GCONP grp_name *TARGET keyword.
Example:
*GCONPMULT
Field
*STW
0.75
This directs the specified Field group stock tank water production to be modified such that
the new constraint value is 75% of the value specified with the last *GCONP Field
*TARGET *STW card.
Example:
*GCONPMULT Group-1
*MNP 1.25
This sets a manifold pressure target of 125 % of the value specified with the last *GCONP
Group-1 *TARGET *MNP card. This group must have had its production assigned
manifold treatment with the *MANIFOLD keyword. Group-1 must have wells directly
attached to it.
Multiplier
(*VREP)
(*GAS)
(*WATER)
(*GMKUP)
(*WMKUP)
(*GAS)
(*WATER)
(*PMAINT)
Multiplier
Multiplier
DEFINITIONS:
'group_name_1', group_name_2, ... , group_name_n
Are the groups to which the following constraint multiplier(s) apply.
*STG
This subkeyword identifies a surface gas rate (m3/day | SCF/day). Zero rates
are allowed and have the same effect as shutting in all the gas injection wells
connected to that group.
*STW
This subkeyword identifies a surface water rate (m3/day | STB/day). Zero
rates are allowed and have the same effect as shutting in all the water
injection wells connected to that group.
*BHG
This subkeyword identifies a reservoir gas rate (m3/day | SCF/day). Zero
rates are allowed and have the same effect as shutting in all the gas injection
wells connected to that group.
776 Well and Recurrent Data
*BHW
This subkeyword identifies a reservoir water rate (m3/day | STB/day). Zero
rates are allowed and have the same effect as shutting in all the water
injection wells connected to that group.
*GMP
This subkeyword identifies a gas manifold pressure (kPa | psi) injection
constraint. This subkeyword can only be entered if all of the listed groups
have had gas injection identified as going through a manifold with the
*MANIFOLD keyword.
*WMP
This subkeyword identifies a water manifold pressure (kPa | psi ) injection
constraint. This subkeyword can only be entered if all of the listed groups
have had water injection identified as going through a manifold with the
*MANIFOLD keyword.
*GCP
This subkeyword identifies a gas compressor (surface) pressure (kPa | psi)
injection constraint. This subkeyword can only be entered if all of the listed
groups have had gas injection identified as going through a manifold with the
*MANIFOLD keyword. Also, a hydraulics table for calculation of the gas
manifold-to-surface pressure drop must have been identified for all of the
listed groups with the *GPTABLE keyword.
*WCP
This subkeyword identifies a water surface pressure (kPa | psi) injection
constraint. This subkeyword can only be entered if all of the listed groups
have had water injection identified as going through a manifold with the
*MANIFOLD keyword. Also, a hydraulics table for calculation of the water
manifold-to-surface pressure drop must have been identified for all of the
listed groups with the *GPTABLE keyword.
*VREP
This subkeyword identifies a voidage fraction injection target. This indicates
that the injection wells connected to this group inject such that the voidage
created by the producers connected to this group is replaced. In this case
*GAS or *WATER specifies which phase is to be injected to replace the
voidage. If more than one phase is being injected to replace the voidage then
there must be one *VREP keyword for each phase. These primary voidage
replacement streams are handled independently. One make-up stream can be
supplemented with *GMKUP or *WMKUP to meet a total voidage
replacement fraction. One of *GAS, *WATER, *GMKUP, or *WMKUP
must be present for each *VREP keyword.
*PMAINT
This subkeyword identifies that the group injection rates shall be adjusted so
as to maintain the hydrocarbon volume weighted average pressure in a
particular region/sector at a desired level. The multiplier applies only to the
sector pressure target defined by *PMTARG.
*GAS
Specifies that the gas phase is to be injected for voidage replacement,
recycle, or pressure maintenance.
*WATER
Specifies that the water phase is to be injected for voidage replacement,
recycle, or pressure maintenance.
*GMKUP
Specifies that gas phase is the make-up stream supplemented to meet the
total voidage replacement fraction.
*WMKUP
Specifies that water phase is the make-up stream supplemented to meet the
total voidage replacement fraction.
@
When the @ symbol in quotes is specified in place of group names, then it is
considered to be a place holder for the list of groups that have satisfied the
trigger condition. This list is necessarily a subset of the group list input with the
trigger keyword. The place holder should only be used in conjunction with
trigger actions. The keyword *GCONIMULT and the @ place holder must
appear on the same line. See the EXPLANATION section of *TRIGGER
keyword for examples of the use of @ place holder.
Multiplier
Constraint multiplier value.
DEFAULTS:
Optional keyword.
CONDITIONS:
This keyword must be located in the WELL AND RECURRENT DATA keyword group. A
group must be defined, by appearing in the list directly following *GROUP in a *GROUP
line or after the *ATTACHTO keyword on a *GROUP line. The group target constraint for
the particular constraint type multiplier being specified with GCONIMULT must be also be
previously defined using the keyword *GCONI.
EXPLANATION:
*GCONIMULT is used to specify multipliers which can be used to modify existing injection
group constraint targets. *GCONIMULT can also be used to modify previously specified
voidage replacement targets.
Examples:
*GCONIMULT Group-1 Group-2
*STG 3.0
This resets stock tank gas injection targets to 300 % of the previously specified values for
Group-1 and Group-2. The stock tank gas injection target must be previously specified with a
data line such as:
*GCONI Group-1 Group-2 *TARGET *STG 5.555E+07
Example: This is an example using voidage replacement. The water voidage replacement
fraction is reduced by half whereas the gas voidage replacement fraction is increased by a
factor of 2.
*GCONIMULT 'Group1'
*VREP *WATER 0.5
*GCONIMULT 'Group1'
*VREP *GAS
2.0
The voidage replacement targets must be previously specified with data lines such as:
*GCONI Group-1 Group-2 *VREP *WATER 0.6
*GCONI Group-1 Group-2 *VREP *GAS 0.4
*HEATR,
*TMPSET, *UHTR, *UHTRAREAI-, *UHTRAREAI+, *UHTRAREAJ-, *UHTRAREAJ+,
*UHTRAREAK-, *UHTRAREAK+, *AUTOHEATER, *AUTOCOOLER
PURPOSE:
Assign data for constant and convective heat transfer models.
ARRAY:
*HEATR
*TMPSET
*UHTR
*UHTRAREAI*UHTRAREAI+
*UHTRAREAJ*UHTRAREAJ+
*UHTRAREAK*UHTRAREAK+
FORMAT:
*AUTOHEATER ( *ON | *OFF ) uba_range
*AUTOCOOLER ( *ON | *OFF ) uba
DEFINITIONS:
*HEATR
Assign constant heat transfer rate to grid blocks (J/day | Btu/day | J/min).
This constant rate is added to the proportional part given by *UHTR and
*TMPSET.
*UHTR
Proportional heat transfer coefficient, used in conjunction with *TMPSET
(J/day-C | Btu/day-F | J/min-C).
>0
<0
>0
With this option, a blocks cooling rate is the minimum of (a) the constant rate
specified via *HEATR and (b) the rate calculated from *UHTR, etc., and
*TMPSET. Typically, *HEATR is the maximum cooling rate that can be
sustained in that block. The minimum desired temperature is assigned to
*TMPSET. The value to assign to *UHTR is the constant rate from *HEATR
divided by the desired difference between block temperature and *TMPSET at
switchover from the constant model to the proportional model.
Normally a block starts cooling at constant rate, and switches over to the
proportional model as T nears TMPSET. If T < TMPSET, the cooling rate is
zero. A larger value of UHTR will sharpen the transition from constant to
proportional cooling, but usually at the expense of more Newton iterations.
A typical switchover temperature difference (HEATR/UHTR) is 10 degrees.
DEFAULTS:
*HEATR *CON 0
*UHTR *CON 0
*UHTRAREAI-, etc., all default to zero.
*AUTOHEATER *OFF for all blocks.
*AUTOCOOLER *OFF for all blocks.
CONDITIONS:
With the array-reading option *IJK, referring to only select grid blocks is allowed.
For the convective heating model, it is recommended that you use either *UHTR or
*UHTRAREAI-, etc., but not both. *UHTR will overwrite previous data (on a block by block
basis), whereas with *UHTRAREAI-, etc., contributions will be added to what has been
specified by *UHTR up to that point.
*TMPSET must be entered for each block which has a none-zero *UHTR or *UHTRAREAI-,
etc.
*AUTOHEATER may not be used with heat loss, that is, negative values of *HEATR or
*UHTR. *AUTOCOOLER may not be used with heat gain, that is, positive values of
*HEATR or *UHTR. *AUTOHEATER and *AUTOCOOLER may not be used together in
the same block at the same time.
A heater model may be applied only to a non-null block that is not the parent of a refine grid.
EXPLANATION:
Data Echo and Output
Heater control data is echoed in the .out file under Summary of Current Heater
Specifications each time heater data is changed. Resulting heater rates can be dumped to
SR2 via *OUTSRF *GRID *CCHLOSS and to the .out file via *OUTPRN *GRID
*CCHLOSS. The .out output includes a detailed summary Heater Rate Split which
reports how much of each blocks heating rate comes from the three different heating models
(constant, proportional or adiabatic). This is especially useful with *AUTOHEATER and
*AUTOCOOLER which switch automatically between constant and proportional models.
782 Well and Recurrent Data
Inheritance Issues
Extrinsic quantities *HEATR, *UHTR and *UHTRAREAI-, etc., use inheritance only to
assign values to fine blocks. The parent value is not split amongst the child blocks. For
example, fundamental block (1,1,1) is refined into a grid of 2x2x2 = 8 fine blocks which
inherit their *HEATR values from their parent block.
*HEATR *IJK 1:2 1 1 200.
assigns the value 200 to each of the 8 fine blocks (not 200 / 8 = 25) as well as to block
(2,1,1). On the other hand, if you had intended that the value of *HEATR be the same on a
per-volume basis for these blocks, then the data should be
*HEATR *IJK 2 1 1 200.
*HEATR *IJK 1 1 1 25.
-or*HEATR *IJK 1:2 1 1 200.
*MOD 1 1 1 / 8
Care must be taken to assign values appropriate to the individual quantity. For example,
*HEATR could be regarded as a quantity based either on volume or on area in some
direction. Also, *UHTR and *UHTRAREAI-, etc., usually are assigned to blocks on a grid
boundary. When a boundary block is refined, not all the fine blocks are on the boundary so
*UHTR must be assigned to only the fine blocks on the boundary, requiring the use of *RG
instead of inheritance.
Matrix/Fracture Addressing Defaults
Use of *AUTOHEATER or *AUTOCOOLER together with a natural fracture grid option
can lead to unexpected results when matrix/fracture address defaulting is used. This
defaulting occurs when reference is made to a block without explicitly indicating matrix or
fracture. This situation usually occurs when a natural fracture option is enabled in a preexisting single-porosity data set.
Keyword *AUTOHEATER uses a User Block Address (UBA) to refer to one or more blocks.
The UBA default is fracture, so in a natural fractured grid the UBA i,j,k implies the
fracture alone which would be equivalent to UBA i,j,k FR. On the other hand, keyword
*HEATR is a grid array (see Input of Grid Property Arrays in the Keyword Data Entry
System chapter). The grid array default is matrix and fracture, so in a natural fractured grid
an assignment to block (i,j,k) via
*HEATR *IJK i j k value
Since *AUTOHEATER and *HEATR have different matrix/fracture addressing defaults, the
autoheater control (on fracture only) does not match the heater (on matrix and fracture),
leading to unexpected results.
For this reason, it is recommended that block assignments be given explicit matrix/fracture
addresses, that is, (i,j,k FR) and/or (i,j,k MT) for UBA and *MATRIX and/or *FRACTURE
for grid arrays.
*ADHEAT
PURPOSE:
Assign data for controlling adiabatic heat gain.
FORMAT:
*ADHEAT heat_blk heat_coef (T_diff) *REF ref_blk
*ADHEAT heat_blk heat_coef (T_diff)
DEFINITIONS:
heat_blk
List of blocks to which heat will be added, in UBA single or range format. A
warning is issued for each block that is null and an error is issued for each
block that is the parent of a refined grid. See section User Block Address in
Keyword Data Entry System chapter.
heat_coef
Proportional heat gain coefficient (J/day-C | Btu/day-F | J/min-C). This
number includes the cross-sectional area through which heat is transferred,
similar to *UHTR > 0. The value must not be negative. A zero value implies
no heat gain.
T_diff
Temperature difference cut-off ( C deg | F deg ). The difference between
heater and reference temperature must be greater than T_diff for heat transfer
to occur. T_diff must not be less than 0. This quantity is optional and is
assumed to be unchanged if absent. The unit is temperature difference, so the
value will be the same in C and K, and will be the same in F and R.
*REF ref_blk
List of blocks whose temperatures help control the rate of heat gain, in UBA
single or range format. A warning is issued for each block that is null and an
error is issued for each block that is the parent of a refined grid.
This subkeyword establishes the association between heat_blk and ref_blk,
and is required the first time heat_blk's *ADHEAT parameters are defined in
the data. Changes to heat_coef and T_diff may be made later in the run
without *REF ref_blk if ref_blk does not change.
ref_blk must refer to the same number of blocks as heat_blk, so that a one-toone correspondence can be made. See User Block Address in the Keyword
Data Entry System chapter for comments on UBA range ordering.
DEFAULTS:
If *ADHEAT is not specified for a block, heat_coef is assumed to be zero. However, other
heater options like *HEATER or *UHTR may produce a non-zero rate.
Each heat_blk's T_diff has the value 0 until it is explicitly changed.
784 Well and Recurrent Data
CONDITIONS:
The adiabatic control of a range of blocks may be specified via heat_blk, but there must a
one-to-one correspondence between the heat_blk range and the ref_block range.
Each heat_blk's ref_blk must be explicitly defined when heat_coef is first defined. A heat_blk
may not be its own ref_blk, that is, two distinct blocks must be used.
EXPLANATION:
The rate of heat gain to block heat_blk as a function of the temperatures T in heat_blk and
ref_blk is
= heat_coef * [ T(ref_blk) - T_diff - T(heat_blk) ]
when T(heat_blk) < T(ref_blk) - T_diff;
= 0 otherwise.
In this expression, T(ref_blk) is the value at the beginning of the time step, to maximize stability.
On the other hand, T(heat_blk) is the most current value since it is one of the primary iterating
variables for the heater block. The chief difference between *ADHEAT and *UHTR is that the
temperature setpoint is constant with *UHTR but is a block temperature with *ADHEAT.
*ADHEAT may be used together with *UHTR which can model the heat loss from the outer
heater block independently of the heater action. A summary of heater specifications is
echoed in the output (.out) file each time *ADHEAT appears, and a summary of adiabatic
heater block rates is printed at full grid printouts (controlled by *WPRN *GRID).
Example: Assume heating coefficient of 10, loss coefficient of 1.2, ambient temperature of
20 deg and temperature cut-off of 2 deg. The grid is cylindrical with ni = 5, nj = 1 and nk =
40. The following are some valid uses of *ADHEAT.
** Adiabatic control of skin heater
using probe T in center, with heat loss
*ADHEAT 5 1 1 10. 2. *REF 1 1 1
*UHTR
*IJK 5 1 1 1.2
*TMPSET *IJK 5 1 1 20.
** Adiabatic control of series of heaters
*ADHEAT 5 1 1:40 10. 2. *REF 1 1 1:40
*UHTR
*IJK 5 1 1:40 1.2
*TMPSET *IJK 5 1 1:40 20.
** Change value of heat_coef later in run
*ADHEAT 5 1 1:40 16.
** Turn off heater but not heat loss
*ADHEAT 5 1 1:40 0.
** Control of several heaters from single
reference block; T_diff = 0.
*ADHEAT 5 1 1 10. *REF 1 1 1
*ADHEAT 5 1 2 10. *REF 1 1 1
*HEATSLAVE
PURPOSE:
Assign data for slaved heater control.
FORMAT:
*HEATSLAVE slave_block factor_option master_block
*HEATSLAVE slave_block *OFF
DEFINITIONS:
slave_block
Address in UBA format of slave block to which heat will be added. An
error is issued when slave_block is null.
factor_option
Specifies the factor to use when calculating the slave blocks heater rate from
the master blocks heater rate. In the following table, ratio refers to the
slave blocks value divided by the master blocks value.
*OFF
*USER x
*GROSSVOL
*IAREA
*JAREA
*KAREA
master_block
Address in UBA format of master block whose heat rate determines the
heat rate for the slave block. An error is issued when master_block is null.
Master_block must not appear when factor_option is *OFF.
DEFAULTS:
If *HEATSLAVE is not specified for slave_block, factor is assumed to be zero. However,
other heater options *HEATER or *UHTR may produce a non-zero heat rate.
CONDITIONS:
The slave block must not be the same as the master block.
The master blocks heat rate must not depend on the slave block through *HEATSLAVE.
The master block may not be heated via *ADHEAT.
Both slave and master blocks must not be the parent of a refined grid.
786 Well and Recurrent Data
EXPLANATION:
The heater rate of the slave_block is
slave_block heater rate = factor * master_block heater rate
where factor is determined by factor_option.
Any heating option may be used for master_block, with the exception that its heat rate must
not depend directly on slave_block via *ADHEAT or *HEATSLAVE.
*HEATSLAVE may be used together with other heater options. A summary of heater
specifications is echoed in the output (.out) file each time *HEATSLAVE appears, and a
summary of adiabatic heater block rates is printed at full grid printouts (controlled by
*WPRN *GRID).
Example
A radial grid with 20 nonuniform K direction layer thickness has a strip heater in the centre
that passes through layers 8 to 15. The reservoir temperature at layer 10 controls the output
of the entire strip. The grid is refined near the centre in layer 11. The following keywords
represent this situation.
** Single-point control of multi-layer strip heater
. . .
*GRID *RADIAL 15 1 20
** 20 K layers
*DK 5*5. 4. 3. 2. 1.4 1.2 1.1 1.5 2.1 3.5 6*5.
*REFINE 1 1 11 *INTO 1 1 3 ** Layer 11 is refined
. . .
*TIME 100.
*UHTRAREAI- *IJK 1 1 10 30.5 ** Heater control
*TMPSET
*IJK 1 1 10 360.
*HEATSLAVE 1 1 8 *IAREA 1 1 10
*HEATSLAVE 1 1 9 *IAREA 1 1 10
*HEATSLAVE 1 1 11 / 1 1 1 *IAREA 1 1 10
*HEATSLAVE 1 1 11 / 1 1 2 *IAREA 1 1 10
*HEATSLAVE 1 1 11 / 1 1 3 *IAREA 1 1 10
*HEATSLAVE 1 1 12 *IAREA 1 1 10
*HEATSLAVE 1 1 13 *IAREA 1 1 10
*HEATSLAVE 1 1 14 *IAREA 1 1 10
*HEATSLAVE 1 1 15 *IAREA 1 1 10
*TIME 140.
*UHTRAREAI- *IJK 1 1 10 0.
** Turn off heater
. . .
*TIME 240.
*UHTRAREAI- *IJK 1 1 10 30.5 ** Heater on again
*TMPSET
*IJK 1 1 10 450.
** Horizontal well
- vertical (from surface)
- horizontal
See "Keywords from Other Sections" at the beginning of this chapter regarding fine-grid
inheritance.
*PFRAC,
*PFRACF, *PTRANSI, *PTRANSJ, *PTRANSK, *PTRANSIJ+, *PTRANSIJ-,
*PTRANSIK+, *PTRANSIKPURPOSE:
Assign pressure-dependent transmissibility multiplier parameters and locations.
ARRAY:
*PFRAC
*PFRACF
*PTRANSI
*PTRANSJ
*PTRANSK
*PTRANSIJ+
*PTRANSIJ*PTRANSIK+
*PTRANSIKDEFINITIONS:
*PFRAC
Lower reference pressure (kPa | psi), at which the fracture is practically
closed. The suggested range is zero to the value given by *PFRACF.
*PFRACF
Upper reference pressure (kPa | psi), at which the fracture is practically
opened. The suggested range is from the value given by *PFRAC to 10 MPa.
*PTRANSI
I-direction variable transmissibility multiplier at maximum pressure effect.
The suggested range is from zero to 1e5.
*PTRANSJ
J-direction variable transmissibility multiplier at maximum pressure effect.
The suggested range is from zero to 1e5.
*PTRANSK
K-direction variable transmissibility multiplier at maximum pressure effect.
The suggested range is from zero to 1e5.
*PTRANSIJ+
I+J+ diagonal direction variable transmissibility multiplier at maximum
pressure effect. The suggested range is from zero to 1e5.
*PTRANSIJI+J- diagonal direction variable transmissibility multiplier at maximum
pressure effect. The suggested range is from zero to 1e5.
*PTRANSIK+
I+K+ diagonal direction variable transmissibility multiplier at maximum
pressure effect. The suggested range is from zero to 1e5.
*PTRANSIKI+K- diagonal direction variable transmissibility multiplier at maximum
pressure effect. The suggested range is from zero to 1e5.
DEFAULTS:
By default the option is disabled. When the option is enabled, the default multipliers are 1.
CONDITIONS:
With the array-reading option *IJK, referring to only select grid blocks is allowed.
EXPLANATION:
If the higher and lower reference pressures (*PFRAC and *PFRACF) are equal, then the
variable multiplier calculation is not done.
The variable multiplying factor for transmissibility is
F = R + (1-R) * ptrans
where ptrans is one of *PTRANSI, etc.. The ratio R is
R = 1 / (1 + exp(x) )
where x is the pressure dependent argument
x = 10 * ( P - Pav ) / ( pfracf - pfrac ).
Here P is the pressure in the grid block just upstream (with respect to water) of the block face
in question, and Pav is the average of pfrac and pfracf in the same upstream block. When P =
Pav then x = 0 and R = 0.5 corresponding to a midpoint effect of ptrans. Note that at low
pressures R will be very nearly equal to 1, not exactly 1.
At pressure pfrac the variable multiplying factor is 0.9933 + 0.0067 * ptrans. At pressure
pfracf the variable multiplying factor is 0.0067 + 0.9933 * ptrans. where PTMX is one of
PTMRXI, PTMRXJ or PTMRXK. For example, if ptrans = 1000 then the variable part of the
transmissibility multiplier is 993 at pressure pfracf.
Because P and Pav are taken from the upstream block, unexpected results may occur at the
boundary between regions of different values of pfrac, pfracf and *PTRANSI, etc.
Inheritance for Refined Grids
There is no fine-grid inheritance of connection-based quantities *PTRANSx. Therefore, you
must assign values explicitly to refined blocks instead of relying on them inheriting values
from parent blocks.
Recommendation
The pressure-dependent transmissibility multiplier option is considered obsolete and may
become unavailable in a future release. This option cannot be applied to some types of
interblock connections, for example, hybrid grids, matrix-fracture and discretized wellbore.
The full-feature variable permeability options (*PERMCK, etc.) are recommended instead.
790 Well and Recurrent Data
*KRSWITCH, *KRRESET,
*SGLIM, *TEMLIM, *KRNOPR, *KRPRGRID, *KRPRDET
PURPOSE:
Specify data and printout for automatic rock-fluid switching.
FORMAT:
*KRSWITCH
*KRRESET
*SGLIM
*TEMLIM
*KRNOPR
*KRPRGRID
*KRPRDET
(*OFF | ikswch )
ikreset
sglim
temlim
DEFINITIONS:
*OFF
Prevents further switching from this point on in the simulation, or until
*KRSWITCH is encountered.
ikswch
Rock-fluid data is switched to this set number when the following switching
criterion is satisfied:
( Sg > or = sglim ) and (T > or = temlim )
The checking and switching is done just before the time step is started. No
switching is done during convergence.
ikreset
All grid blocks are reset to this rock-fluid set number.
sglim
Gas saturation limit. The allowed range is 0 to 2. A zero value makes
switching independent of Sg, and a value of 2 prevents switching.
temlim
Temperature limit (C | F). The allowed range is 0 to 2000 K. A zero value
makes switching independent of temperature. A value larger than the highest
expected temperature prevents switching.
*KRNOPR
Printout for this option is turned off.
*KRPRGRID
Rock-fluid data set number for the entire grid is printed at the same time as
the other reservoir properties.
*KRPRDET
In addition to the printout caused by *KRPRGRID, a message is printed
when a grid block switches data set number due to the criteria.
DEFAULTS:
*KRSWITCH *OFF
*KRNOPR
*SGLIM 0
*TEMLIM 0
*AIMSET
PURPOSE:
Over-ride automatic adaptive implicit switching.
ARRAY:
*AIMSET
DEFINITIONS:
The value assigned to a block via *AIMSET causes that block to assume an implicitness state
given by
0 - IMPES
1 - Fully Implicit
If the *STAB option is being used, then *AIMSET acts like an implicitness mask: each block
flagged as fully implicit will never be allowed to switch to IMPES.
If the *THRESH option is being used, this is the only way to switch a block from fully
implicit to IMPES since the threshold criteria has no method for switching automatically
from implicit to IMPES.
DEFAULTS:
If *AIMSET is absent, the distribution of IMPES and fully implicit blocks is not over-ridden.
CONDITIONS:
This keyword is useful only if an adaptive implicit switching option has been specified via
*AIM.
EXPLANATION:
Example:
** With stability adaptive implicit, keep all blocks
fully implicit in a communication path.
. . .
*AIM *STAB
. . .
** Recurrent data
*AIMSET *CON 0
*MOD 3:4 8:9 3:3 = 1
** Communication path
See Appendix F.9 for a detailed discussion of the Adaptive Implicit option.
*DYNAGRID
PURPOSE:
Create, or remove, amalgamated grid cells and refinements statically, or under simulator
control.
FORMAT:
*DYNAGRID *AMALGAMATE
{ i1:i2 j1:j2 k1:k2 }
*DYNAGRID *DEREFINE
{ i1:i2 j1:j2 k1:k2 }
*DYNAGRID *DEAMALGAMATE
{ i1:i2 j1:j2 k1:k2 }
*DYNAGRID *REREFINE
{ i1:i2 j1:j2 k1:k2 }
where
control_list =
( control_list ) ( *EVEN-IF-CMPLX )
*INTO nir njr nkr
( control_list )
*DYNAGRID-TSINT tsint
*DYNAGRID-TINT tint
*DYNAGRID-IGN-DIR (*IDIR | *JDIR | *KDIR | *IJ | *IK | *JK )
*DYNAGRID-WLN-A iwlna
*DYNAGRID-WLN-V iwlnv
*DYNAGRID-PICK-TYPE (*MIN | *MAX | *1ST )
DEFINITIONS:
*AMALGAMATE ( control_list ) (*EVEN-IF-CMPLX) *INTO nir njr nkr
Over the specified cell region, amalgamate each regular group of nir njr
nkr cells together into a single cell. Smaller groups near the edges of the
region are amalgamated if a whole number of the requested amalgamations
cannot be made to fit.
If one or more keywords from control_list appear, then amalgamation (or deamalgamation) occurs dynamically, triggered by the degree of uniformity of
properties specified by the control_list keywords being satisfied (or not) by
the cells in and around each group.
If keyword *EVEN-IF-CMPLX appears then amalgamation is permitted in the
specified cell groups even when complex connections are present. See Complex
Connections, below.
*DEREFINE ( control_list )
De-activate a refinement created by *REFINE, for the specified parent cells.
This keyword causes all the child cells in each specified cell to be replaced
with the corresponding fine grids single parent cell, effectively reversing the
refinement process.
If one or more keywords from control_list appear, then de-refinement (or rerefinement) occurs dynamically, triggered by the degree of uniformity of
properties specified by the control_list keywords being satisfied (or not) by
the cells in and around each group.
*DEAMALGAMATE
Return a previously amalgamated cell range to its constituent cells,
effectively reversing the amalgamation process. Only an amalgamated
region may be de-amalgamated. For the cancellation to occur, a range
following *DEAMALGAMATE must match a range specified for an earlier
*AMALGAMATE keyword.
*REREFINE
Re-activate a refinement that was created by *REFINE and then de-activated by
*DEREFINE, for the specified fundamental cells.
{ i1:i2 j1:j2 k1:k2 }
A list of triples of cell I-J-K ranges, one per line, specifying groups of
fundamental cells. There must be at least one I-J-K range. See the Keyword
Data Entry System section (for instance, the discussion of *IJK) for how
ranges work.
control_list
One or more of the following tolerance specifiers.
*SATUR dsn
*TEMPER dtn
*GMOFRC dgn
*OMOFRC don
*WMOFRC dwn
*GMOLAR dzn
*PRESS prs
*ENTHAL den
*DYNAGRID-TSINT tsint
Specify a minimum number of time steps tsint that should exist between checks
for grid changes due to dynamic amalgamation and de-refinement. Specifically,
such checks are done before time steps whose number minus 1 is evenly
divisible by tsint. For example, if tsint = 5 then grid change checks are done
before time step numbers 1, 6, 11, 16, 21, etc. Smaller values of tsint will cause
a larger fraction of the total run time to be spent in grid change checking but may
User's Guide STARS
result in overall CPU savings and/or increased accuracy. On the other hand,
very small values (e.g., tsint = 1) may not produce the optimal combination of
CPU and accuracy, so some calibration may be beneficial.
*DYNAGRID-TINT tint
Specify a minimum interval of time tint (days) that should exist between
checks for grid changes due to dynamic amalgamation and de-refinement.
*DYNAGRID-TSINT (time step base) is recommended over this option
(time base) since time steps more successfully track the rate of change of
process variables.
*DYNAGRID-IGN-DIR ( *IDIR | *JDIR | *KDIR | *IJ | *IK | *JK )
Specify a direction or plane that will be ignored when checking for
amalgamations. *KDIR is often a useful choice.
*IDIR
*JDIR
*KDIR
*IJ
*IK
*JK
Ignore I direction
Ignore J direction
Ignore K direction
Ignore I-J plane
Ignore I-K plane
Ignore J-K plane
*DYNAGRID-WLN-A iwlna
Specify how far away from active wells in the areal directions to protect from
dynamic amalgamation and de-refinement checks. Integer iwlna refers to
counting on the finest grid.
*DYNAGRID-WLN-V iwlnv
Specify how far away from active wells in the vertical direction to protect
from dynamic amalgamation and de-refinement checks. Integer iwlnv refers
to counting on the finest grid.
*DYNAGRID-PICK-TYPE ctype
Specify the rock type for the coarse cell that results from the amalgamation
of fine cells. This keyword is needed only when an amalgamation region
contains fine cells possessing different rock types. The choices for ctype are:
*MIN
*MAX
*1ST
DEFAULTS:
All these keywords are optional.
If there are no keywords from control_list following *AMALGAMATE or *DEREFINE, the
corresponding action is done immediately, that is, at the current (reading) time.
If the keyword *EVEN-IF-CMPLX is absent, then amalgamation is not done for any cell
group that contains a complex connection.
If *DYNAGRID-TSINT and *DYNAGRID-TINT are absent and grid checking is dynamic,
then grid checking is done each time step (tsint = 1).
If *DYNAGRID-PICK-TYPE is absent, then *MIN is assumed.
CONDITIONS:
None of these keywords may be used with any of the following grid options in the Reservoir
Description section: discretized wellbore (*WELLBORE), natural fracture (*DUALPOR,
DUALPERM, *SUBDOMAIN and *MINC) and nine-point discretization (*NINEPOINT).
Keywords *DYNAGRID-TINT, *DYNAGRID-TSINT, *DYNAGRID-IGN-DIR,
*DYNAGRID-WLN-A and *DYNAGRID-WLN-V are applicable only for dynamic gridding.
If *DEREFINE is used, then keyword *REFINE in the Reservoir Description data section
must have been used to form the refinement.
In a given recurrent data segment, any *DYNAGRID keywords should appear at the end of
that segment, following any well specification keywords.
EXPLANATION:
The recurrent gridding features are designed to save computing time during a simulation by
reducing the number of grid cells used in the model. The keywords described here can alter
the grid in both a static or dynamic manner. If keywords from control_list do not appear,
then the grid alterations are static, in that they are applied immediately at a time specified by
a *DATE or *TIME keyword. If keywords from control_list do appear, the changes are
dynamic and depend on the specified trigger criteria interacting with the changing conditions
in the specified cell ranges.
Amalgamation and De-refinement
The *AMALGAMATE keyword causes specified groups of cells, described by the triples of cell
range descriptors listed after the keyword, to be lumped together into larger cells for further
computation. When this lumping is done, new cell properties are assigned to the amalgamated
cells in such a way as to preserve the total mass of the simulators components and energy, and
to provide appropriate averaged properties for the new cell. The extended variables are then
computed accordingly. Inter-cell connections are done differently (see below). Amalgamation in
and around wells and fault-type connections is not recommended (see below).
The *DEREFINE subkeyword is similar to the *AMALGAMATION subkeyword, although
the ranges following this keyword are interpreted in a slightly different way. Each cell
referred to in the list of ranges that is a parent cell (and hence was refined earlier using the
*REFINE keyword) will be reformed back into its original state, just as if an amalgamation
had been applied to the group consisting of all the child cells in the refinement. The parent
cell thus becomes active, acting as if it was never refined, and the child cells are ignored in
the on-going simulation.
The *DEAMALGAMATE, or *REREFINE, subkeywords cancel the actions of earlier
encountered *AMALGAMATE, or *DEREFINE, subkeywords, respectively. Ranges following
these keywords need only partially overlap earlier ranges to cause the cancellations to occur.
Note that if a group of cells on a grid were specified for *AMALGAMATE, and one or more of
these cells had themselves been refined at earlier times, then amalgamation would still proceed.
What would happen is that all refinements of any child cells in the region would be averaged up
to their parents (using primarily volume weighted averaging as described earlier), after which the
final group of cells would be averaged up as described above. Similarly, if the parent of a group
of child cells was selected for *DEREFINE, and some or all of those cells were themselves
refined, then averaging would be done throughout all refinement levels until the parent described
by the cell descriptor for the *DEREFINE keyword had been reformed.
Dynamic Trigger Criteria
The control_list specifies what level of activity in which properties will be tolerated before
cells are amalgamated or de-amalgamated. At a time when the amalgamation state of a cell
(or group of cells) is to be evaluated, the values of the properties are examined. For a range
of cells described in the *AMALGAMATE keywords list, if values of each property for the
cells and its neighbours are the same within that propertys specified threshold, that group
will be marked for amalgamation. For example, if *TEMPER 1.0 is used and a cell group
and neighbours has temperatures all within 0.5 of each other, then that cell group would be
amalgamated. On the other hand, if a group of cells had passed these tests previously and
were amalgamated under the *AMALGAMATE keyword, that amalgamated cells value
would be checked against its neighbours using the thresholds. If the difference of cells value
and its neighbours lie outside of the specified threshold(s), then the group will be marked for
de-amalgamation. Similar calculations are done in the case of *DEREFINE. Thus, groups of
cells will be amalgamated and de-amalgamated dynamically, depending on grid activity.
Dynamic grid keywords are first applied at the time specified by the *TIME or *DATE
keyword at which they appear. However, dynamic amalgamation or de-refinement will be reconsidered each time step thereafter, except as controlled by the *DYNAGRID-TSINT and
*DYNAGRID-TINT qualifiers.
Addressing Grid Cells
All references made in the data set to cells, such as those made for grid property input,
initialization, well perforations, etc., must always be made with respect to the finest grid,
which is the grid resulting from the removal of all *DYNAGRID data. In fact, if all
*DYNAGRID keywords were removed then the data set would (and must) still be a valid
data set and would run a normal simulation. The simulator makes all the internal changes
required to run a simulation with amalgamated cells and does not allow the user to address
the amalgamated cells directly.
Interblock Connections
Flow connections between cells constructed by *AMALGAMATE or *DEREFINE are built up
from the flow connections calculated on the finest grid, that is, from the usual connections that
are constructed when no amalgamations or de-refinements of any type are present. When a
connection between an amalgamated cell and some other cell (amalgamated or not) needs to be
calculated, the connection is built by summing over the connection pairs between finest grid
cells, where one member of the pair is in the amalgamated region and the other member is the
other cell (or a member of its amalgamation, if there is one). The overlap areas (which
incorporate transmissibility multipliers, if present) are summed and an overall permeability is
formed by taking an area-weighted sum of the harmonically-averaged permeabilities that come
798 Well and Recurrent Data
Amalgamation of a cell group into one coarse cell replaces those cells property models with
the coarse cells property model. If a property model is homogeneous in that cell group then
the coarse cell will have the same property model as the cell group, which lends a degree of
consistency to grid changes. When a coarse cell is split into fine cells, each fine cell inherits
the coarse cells reservoir conditions; if a property model is homogeneous in that fine cell
group then the resulting property values will be homogeneous as well, which corresponds
most consistently to the coarse cell representation.
In a practical amalgamation case, conditions differ somewhat but not greatly between fine
cells according to tolerances in the control_list. If the fine cells have the same property
model then the coarse cell solution will be close to all the fine cell solutions, resulting in a
well-behaved amalgamation. On the other hand, if the fine cells have different property
models, the coarse cell solution will be arbitrarily different from the fine cell solutions merely
because of a property model change, which is undesirable behaviour.
In-Place Amounts
To ensure that solutions of the conservation equations are physical and consistent, property
models that contribute to the amounts of flowing components and energy in-place (K
values, phase densities and phase enthalpies) must be homogeneous in time. In STARS the
above property models are applied homogeneously so amalgamation of a cell group will not
lead to change in these property models.
Adsorption also contributes to in-place amounts, but the adsorption property model can be
applied heterogeneously with keywords *ADSROCK and *ADSTYPE. To maintain
consistency of adsorbed amounts upon amalgamation or refinement, the adsorption property
model must be applied homogeneously inside each cell group flagged for amalgamation.
Porosity contributes to in-place amounts by providing the pore volume Vrf(p,T) where V
is the gross cell volume, r is the reference porosity entered via *POR and f(p,T) gives the
pressure and temperature dependence entered via keywords *CPOR, etc. The property model
for f(p,T) can be applied heterogeneously with keywords *ROCKTYPE and *THTYPE. This
expression for pore volume applies to both a coarse cell and each of its corresponding fine
cells. Internally, the coarse cell r is given a value such that Vr for the coarse cell is equal
to the sum of the fine cell values, that is, Vr is conserved upon a grid change. To conserve
the current pore volume Vrf(p,T) as well, the property model for f(p,T) must be applied
homogeneously inside each cell group flagged for amalgamation.
Porosity parameters and rock heat capacity in the *ROCKTYPE keyword group can be
changed in recurrent data but the manual recommends that only compressibility be changed.
In fact, manually changing rock types in recurrent data is no longer recommended and has
been replaced by options made specifically for compaction and dilation hysteresis.
Heterogeneous Property Models
Heterogeneities in properties that do not contribute to in-place amounts behave more like
varying well rates; these do not present the same consistency problems and so are more
acceptable. Other type-capable properties which affect only the flow between cells include
rock-fluid (*RPT), variable permeability (*ROCKTYPE) and viscosity (*VISCTYPE). Any
different *ROCKTYPE data types intended for amalgamation should differ only in the
variable permeability and thermal conductivity data.
800 Well and Recurrent Data
Even for flow-based properties amalgamation can be problematic when fine cell models
differ significantly in response to the same conditions, leading to ill defined and arbitrary
results. When fine cells in an amalgamation group have different relative permeability rock
types (*KRTYPE), there is no explicit method to choose any one rock type for the coarse
cell. Especially problematic are the per-cell relative permeability end-points (e.g., *BSWR).
The coarse cells volume-weighted average probably does not reflect the flowing behaviour
that a more rigorous upscaling technique would provide. Also, the averaged value is used for
all flow directions, which again may not be appropriate.
Per-cell absolute permeabilities (*PERMI/J/K) can vary between fine cells; the coarse cell
value may be a suitable average but does not contain blocking information not found in the
first plane of fine cells (see Interblock Connections, above).
Therefore, if significant rock-type heterogeneity is important to capture the desired physics, a
cell region containing such heterogeneity should not be in the *DYNAGRID cell list. When
the degree of heterogeneity is not great and dynamic gridding is specified for those regions,
you can use keyword *DYNAGRID-PICK-TYPE to select one of the rock types for the
coarse cell, but with caution.
Properties with Hysteresis
Even if the fine cells in a region possess the same rock type, the determination of some
properties of the region is still problematic when hysteresis is involved. Specifically, a cell
property depends not only on the current value but also the history of the independent
variable. If the histories of a group of fine cells deviated significantly from each other, it is
uncertain what history the coarse cell should assume upon amalgamation of that cell group.
The remedy is to avoid such deviation by specifying a lower amalgamation tolerance value
for the independent variable via the control_list, ensuring that the histories of that variable in
the fine cells are not far apart upon amalgamation. This will result in somewhat less
amalgamation overall, but it will greatly increase the accuracy of simulations involving
hysteresis. Amalgamation of cells with different hysteresis definitions is not recommended.
Property
*DYNAGRID Control
*DILATION
*HYS_KRO
*HYS_KRW
*HYS_KRG
*HYS_PCOW
*HYS_PCOG
*PRESS
*SATUR
*SATUR
*SATUR
*SATUR
*SATUR
rwo
rins
rao
rcas
hcww
hcins
hcaw
hccas
nwbwin
nwbwca
DEFINITIONS:
See Reservoir Description Section.
DEFAULTS:
See Reservoir Description Section.
CONDITIONS:
See Reservoir Description Section.
If *WELLBORE is present, then *RANGE must be present also.
EXPLANATION:
See Reservoir Description Section.
The only difference between specifying a discretized wellbore (DW) in Reservoir Description
and Recurrent data is in the assignment of relative permeability curves. When DW is
specified in Reservoir Description and relative permeability is not specified via *KRTYPE
then STARS will automatically assign straight line relative permeability curves.
When DW is specified in Recurrent data and relative permeability is not specified via
*KRTYPE then the DW will inherit the relative permeability curves of the block where it is
located. The same is valid for *THTYPE.
DW may be removed with the same *DYNAGRID *DEREFINE keywords as any other
reservoir block.
When DW needs to be altered, e.g., tubing is pulled, then remove the existing DW with the
*DYNAGRID *DEREFINE keyword and specify a new DW with the *WELLBORE-REC
keywords.
*ELBOUND,
ELTARGET
PURPOSE:
Specify electrical heating boundaries and operating conditions.
FORMAT:
*ELBOUND 'name' uba_range (dir)
*ELTARGET
*ELTARGET
*ELTARGET
*ELTARGET
*POTENTIAL
*CURRENT
*POWER
*NOFLASH
DEFINITIONS:
*ELBOUND 'name' uba_range (dir)
String 'name' is the name of the boundary in quotes. Characters after the first
12 are ignored.
uba_range is the address of a single block or range of blocks in UBA format.
See section User Block Address in chapter Keyword Data Entry System. A
range is allowed in any number of directions at any grid level. Reference to
a null block, a zero-porosity block (if that blocks rock conductivity is zero
for any direction or temperature) or a refined parent block will result in a
warning message and that block will be skipped. If an electrical boundary is
attached to the inside of the inner-most ring of a hybrid-type locally refined
block, be sure to specify a non-zero value for the well radius via *REFINE
*HYBRID *RW (the default value of zero represents a zero area for
electrical conduction).
dir is the optional boundary face specifier. Allowed values are subkeywords
-I, +I, -J, +J, -K and +K. This specifies exactly the face of the host block(s).
Here, + or - refers to the face between the host block and its neighbour with
an index in the indicated direction (I, J or K) that is one lower (-) or one
higher (+). For example, to access the face between blocks (i,j,k) and
(i+1,j,k) use +I from (i,j,k) or use -I from (i+1,j,k).
For example, in a 13x1x4 grid with *KDIR *UP the entire top of the grid is
indicated by the range "1:13 1 4" with direction specifier "+K". This is a
case where the default algorithm (see below) will choose the default.
Normally dir is used to indicate a block face on the outer reservoir boundary,
but an interior block face may be specified.
DEFAULTS:
The algorithm for the *ELBOUND dir default is to choose the unique face in the direction
toward the reservoir boundary that is common to all blocks in the indicated range. This
algorithm fails when there is no range, or more than one face is common to the range. For a
grid direction that is not discretized (has 1 block) an index of 1 is deemed to specify a range.
You are notified if the default algorithm yields no result.
CONDITIONS:
Any *ELTARGET with a boundary name must appear after the first *ELBOUND defining
that name.
Each electrical boundary must have a specified *POTENTIAL constraint, which provides
also an initial potential distribution as well as the phase in multi-phase mode.
EXPLANATION:
If keyword *ELECHEAT is present in the Other Reservoir Properties data section, then you
must specify at least one electric boundary via *ELBOUND and *ELTARGET. Any current
flow and resistive heating requires at least two electrical boundaries at two different
potentials.
Any and all combinations of these constraints are allowed.
Boundary values and types can be changed at any time in recurrent data.
See Appendix G for a detailed description of the electrical heating option.
Multi-phase Mode
If VImax appears at least once in a data set, that data is run in multi-phase mode; otherwise, it
is run in single-phase mode. If a data set is running in multi-phase mode and VImax is absent
for a well, VImax = 0 is assumed. In multi-phase mode VRmax and VImax determine the phase and
initial magnitude of a boundarys potential. Other constraint types (e.g., *CURRENT) may
change the magnitude of a boundarys potential, but the boundarys phase is not changed
until subsequent *POTENTIAL data is specified.
See Appendix G Electrical Heating.
Tables
Type
Aqueous
Oil
Gas
Adsorbed Solid
"
NUMW
"
NUMW+1
Oleic
"
NUMX
"
NUMX+1
Non-condensable
"
NUMY
"
NUMY+1
Solid
.
NCOMP
"
"
Tables 809
(kPa)
1.1860e+7
1.3147e+6
4.1636e+5
6.5514e+5
2.3182e+5
8.6212e+8
5.4547e+5
8.4644e+5
9.0085e+5
8.5881e+5
1.0029e+6
1.0062e+6
1.0442e+6
1.1187e+6
1.1465e+6
1.1984e+6
1.3271e+6
1.4077e+6
1.3779e+6
1.3402e+6
1.8929e+6
KV4
(psi)
1.7202e+6
1.9068e+5
6.0388e+4
9.5020e+4
3.3622e+4
1.2504e+8
7.9114e+4
1.2277e+5
1.3066e+5
1.2456e+5
1.4546e+5
1.4594e+5
1.5145e+5
1.6226e+5
1.6628e+5
1.7381e+5
1.9248e+5
2.0418e+5
1.9985e+5
1.9437e+5
2.7454e+5
(atm)
1.1705e+5
1.2975e+4
4.1091e+3
6.4657e+3
2.2878e+3
8.5084e+6
5.3834e+3
8.3538e+3
8.8907e+3
8.4758e+3
9.8978e+3
9.9305e+3
1.0306e+4
1.1041e+4
1.1315e+4
1.1827e+4
1.3097e+4
1.3893e+4
1.3599e+4
1.3226e+4
1.8681e+4
(K,C)
-3816.44
-1768.69
-588.72
-734.55
-530.22
-3103.39
-879.84
-1511.42
-1872.46
-2154.90
-2477.07
-2697.55
-2911.32
-3120.29
-3291.45
-3456.80
-3774.56
-4121.51
-4294.55
-4361.79
-4680.46
(F,R)
-6869.59
-3183.64
-1059.70
-1322.19
-954.40
-5586.10
-1583.71
-2720.56
-3370.43
-3878.82
-4458.73
-4855.59
-5240.38
-5616.52
-5924.61
-6222.24
-6794.21
-7418.72
-7730.19
-7851.22
-8424.83
KV5
Component
H2O
H2S
N2
O2
CO
CO2
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
C7H16
C8H18
C9H20
C10H22
C12H26
C15H32
C17H36
C18H38
C20H42
810 Tables
(deg K)
46.13
26.06
6.60
6.45
13.15
0.16
7.16
17.16
25.16
34.42
39.94
48.78
56.51
63.63
71.33
78.67
91.31
111.80
124.00
129.90
141.10
(deg C)
-227.02
-247.09
-266.55
-266.70
-260.00
-272.99
-265.99
-255.99
-247.99
-238.73
-233.21
-224.37
-216.64
-209.52
-201.82
-194.48
-181.84
-161.35
-149.15
-143.25
-132.05
(deg F)
-376.64
-412.76
-447.79
-448.06
-436.00
-459.38
-446.78
-428.78
-414.38
-397.71
-387.78
-371.87
-357.95
-345.14
-331.28
-318.06
-295.31
-258.43
-236.47
-225.85
-205.69
(deg R)
83.03
46.91
11.88
11.61
23.67
0.29
12.89
30.89
45.29
61.96
71.89
87.80
101.72
114.53
128.39
141.61
164.36
201.24
223.20
233.82
253.98
User's Guide STARS
(deg K)
647.30
373.20
126.20
154.60
132.90
304.20
190.60
305.40
369.80
425.20
469.60
507.40
540.20
568.80
594.60
617.60
658.30
707.00
733.00
745.00
767.00
(deg C)
374.15
100.05
-146.95
-118.55
-140.25
31.05
-82.55
32.25
96.65
152.05
196.45
234.25
267.05
295.65
321.45
344.45
385.15
433.85
459.85
471.85
493.85
(deg F)
705.47
212.09
-232.51
-181.39
-220.45
87.89
-116.59
90.05
205.97
305.69
385.61
453.65
512.69
564.17
610.61
652.01
725.27
812.93
859.73
881.33
920.93
(deg R)
1165.14
671.76
227.16
278.28
239.22
547.56
343.08
549.72
665.64
765.36
845.28
913.32
972.36
1023.84
1070.28
1111.68
1184.94
1272.60
1319.40
1341.00
1380.60
Critical Pressure
Component
H2O
H2S
N2
O2
CO
CO2
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
C7H16
C8H18
C9H20
C10H22
C12H26
C15H32
C17H36
C18H38
C20H42
(kPa)
22048.
8937.
3394.
5046.
3496.
7376.
4600.
4884.
4246.
3800.
3374.
2969.
2736.
2482.
2310.
2108.
1824.
1520.
1317.
1206.
1115.
(psi)
3198.
1296.
492.3
731.9
507.0
1070.0
667.2
708.3
615.8
551.1
489.4
430.6
396.8
360.1
335.1
305.7
264.5
220.4
191.0
174.9
161.7
(atm)
217.6
88.20
33.50
49.80
34.50
72.80
45.40
48.20
41.90
37.50
33.30
29.30
27.00
24.50
22.80
20.80
18.00
15.00
13.00
11.90
11.00
(bar)
220.5
89.37
33.94
50.46
34.96
73.76
46.00
48.84
42.46
38.00
33.74
29.69
27.36
24.82
23.10
21.08
18.24
15.20
13.17
12.06
11.15
Tables 811
Component
H2O
H2S
N2
O2
CO
CO2
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
C7H16
C8H18
C9H20
C10H22
C12H26
C15H32
C17H36
C18H38
C20H42
812 Tables
(cp)
0.0047352
0.0084969
0.0110386
0.0216926
0.0119257
0.0007573
0.0104328
0.0229832
0.0214257
0.0219066
0.0191041
0.0177073
0.0132383
0.0131242
0.0117124
0.0115577
0.0104376
0.0095777
0.0096344
0.0095671
0.0095545
(kPa-day)
5.480E-14
9.833E-14
1.277E-13
2.510E-13
1.380E-13
8.764E-15
1.207E-13
2.660E-13
2.479E-13
2.535E-13
2.211E-13
2.049E-13
1.532E-13
1.519E-13
1.355E-13
1.337E-13
1.208E-13
1.108E-13
1.115E-13
1.107E-13
1.106E-13
BVISC
(kPa-hr)
1.315E-12
2.360E-12
3.066E-12
6.025E-12
3.312E-12
2.103E-13
2.897E-12
6.383E-12
5.951E-12
6.084E-12
5.306E-12
4.918E-12
3.677E-12
3.645E-12
3.253E-12
3.210E-12
2.899E-12
2.660E-12
2.676E-12
2.657E-12
2.654E-12
(K,C)
1515.7
789.30
207.92
197.29
216.58
1331.1
262.82
360.58
512.72
612.12
722.23
835.35
1005.6
1090.7
1210.1
1286.2
1454.4
1654.4
1745.1
1790.0
1868.1
(F,R)
2728.2
1420.7
374.26
355.11
389.85
2395.9
473.07
649.05
922.89
1101.8
1300.0
1503.6
1810.1
1963.3
2178.3
2315.2
2617.9
2978.0
3141.1
3222.1
3362.5
CPG1
32.243
31.941
31.150
28.106
30.869
19.795
19.251
5.409
-4.224
9.487
-3.626
-4.413
-5.146
-6.096
3.144
-7.913
-9.328
-11.916
-13.967
-14.470
-22.383
CPG2
1.924e-3
1.436e-3
-1.357e-2
-3.680e-6
-1.285e-2
7.344e-2
5.213e-2
.1781
.3063
.3313
.4873
.5820
.6762
.7712
.6774
.9609
1.149
1.433
1.624
1.717
1.939
CPG3
1.055e-5
2.432e-5
2.680e-5
1.746e-5
2.789e-5
5.602e-5
1.197e-5
-6.938e-5
-1.586e-4
1.108e-4
-2.580e-4
-3.119e-4
-3.651e-4
-4.195e-4
-1.928e-4
-5.288e-4
-6.347e-4
-7.972e-4
-9.081e-4
-9.592e-4
-1.117e-3
2-coefficient
CPG4
-3.596e-9
-1.176e-8
-1.168e-8
-1.065e-8
-1.272e-8
1.715e-8
-1.132e-8
8.713e-9
3.215e-8
-2.822e-9
5.305e-8
6.494e-8
7.658e-8
8.855e-8
-2.981e-8
1.131e-7
1.359e-7
1.720e-7
1.972e-7
2.078e-7
2.528e-7
CPG1
31.876
31.190
30.288
27.627
29.987
16.864
19.031
8.226
1.885
4.686
6.292
7.551
8.845
9.965
12.441
12.291
14.919
18.502
20.650
22.107
19.901
CPG2
6.493e-3
1.114e-2
-2.572e-3
6.437e-3
-1.542e-3
.1063
5.559e-2
.1445
.2324
.3876
.3674
.4371
.5067
.5766
.5712
.7160
.8550
1.064
1.204
1.273
1.426
Tables 813
814 Tables
CPG1
7.701
7.629
7.440
6.713
7.373
4.728
4.598
1.292
-1.009
2.266
-0.866
-1.054
-1.229
-1.456
0.751
-1.890
-2.228
-2.846
-3.336
-3.456
-5.346
2-coefficient
CPG2
2.553e-4
1.906e-4
-1.800e-3
-4.883e-7
-1.706e-3
9.744e-3
6.917e-3
2.363e-2
4.064e-2
4.396e-2
6.467e-2
7.722e-2
8.972e-2
.1023
8.989e-2
.1275
.1524
.1901
.2155
.2278
.2573
CPG3
7.781e-7
1.793e-6
1.975e-6
1.287e-6
2.056e-6
4.130e-6
8.827e-7
-5.114e-6
-1.169e-5
8.170e-6
-1.902e-5
-2.299e-5
-2.691e-5
-3.093e-5
-1.422e-5
-3.898e-5
-4.679e-5
-5.876e-5
-6.694e-5
-7.071e-5
-8.232e-5
CPG4
-.1473e-9
-.4818e-9
-.4784e-9
-.4362e-9
-.5207e-9
.7025e-9
-.4635e-9
.3568e-9
1.316e-9
-.1156e-9
2.173e-9
2.660e-9
3.136e-9
3.626e-9
-1.221e-9
4.631e-9
5.566e-9
7.044e-9
8.076e-9
8.512e-9
1.036e-8
CPG1
7.613
7.450
7.234
6.599
7.162
4.028
4.545
1.965
0.450
1.119
1.503
1.804
2.113
2.380
2.972
2.936
3.563
4.419
4.932
5.280
4.753
CPG2
8.616e-4
1.478e-3
-3.412e-4
8.541e-4
-2.046e-4
1.411e-2
7.376e-3
1.918e-2
3.084e-2
5.143e-2
4.874e-2
5.800e-2
6.724e-2
7.652e-2
7.580e-2
9.501e-2
.1134
.1412
.1598
.1690
.1892
Molecular
Mass
(gm/gmol)
18.015
34.080
28.013
31.999
28.010
44.010
16.043
30.070
44.097
58.124
72.151
86.178
100.205
114.232
128.259
142.286
170.340
212.421
240.475
254.502
282.556
Boiling
Point
(deg K)
373.2
212.8
77.4
90.2
81.7
194.7
111.7
184.5
231.1
272.7
309.2
341.9
371.6
398.8
424.0
447.3
489.5
543.8
575.2
589.5
617.0
Normal
Boiling
Enthalpy
(cal/gmol)
9717.
4460.
1333.
1630.
1444.
4100.
1955.
3515.
4487.
5352.
6160.
6896.
7576.
8225.
8823.
9388.
10430.
11820.
12640.
13020.
13740.
HVR
(J, gmol,
K or C)
4820.
2712.
1274.
1402.
1355.
2882.
1556.
2379.
2883.
3317.
3745.
4143.
4520.
4892.
5240.
5579.
6220.
7139.
7733.
8010.
8569.
(Btu, lbmol,
F or R)
1657.
932.
438.
482.
466.
991.
535.
818.
991.
1141.
1288.
1425.
1554.
1682.
1802.
1919.
2139.
2455.
2659.
2754.
2947.
Tables 815
Temperature:
Length:
1 ft = 0.3048 m (exact)
1 in = 2.54 cm (exact)
1 mile = 1609.344 m (exact)
Volume:
1 acre = 4046.873 m2
1 acre-ft = 1233.489 m3 = 43,560 ft3
1 bbl = 0.1589873 m3 = 5.61457 ft3 = 42 US gal
1 US gal = 0.003785412 m3
1 litre = 0.001 m3 (exact)
1 Mscf = 28.3168 m3
Viscosity:
Permeability:
Mass:
1 lbm = 0.4535924 kg
1 ton = 0.9071847 Mg
1 tonne = 1 Mg
1 lb mole = 453.592 gm mole
Specific gravity (1 atm, 60F) = 141.5/(131.5+API)
Energy:
1 Btu = 1055.056 J
1 Btu/ft-day-F = 6230.65 J/m-day-K
1 Btu/ft-hr-F = 149,520 J/m-day-K
1 calorie = 4.1868 J
1 Btu/lbmole = 2.32544 J/gmole
1 cal/gm-K = 1 Btu/lbm-F (exact)
Transmissibility to
Flow Volume:
Gas Constant R:
816 Tables
Overview
This appendix contains detailed descriptions of portions of the well models used by STARS,
divided into the following sections.
A.1
A.2
A.3
A.4
A.5
A.6
A.7
A.1
The radial inflow well model couples the pressure in the wellbore to the average grid block
pressure. The grid block is deemed to have an effective radius, and the radial flow equation
is solved between the effective block radius and the wellbore radius. An equivalent
proportionality factor (well index) is developed for the appropriate pressure drop, in the form
of the general equation
q jk = I 'k jk (p wfk p k )
I 'k =
qjk
I 'k
jk
pwfk
pk
h
k
fh
f
rw
S
re
2 hk fh f
ln (re / rw ) + S
(A1.1a)
(A1.1b)
x 2 + y 2
re = CC
f
(A1.2)
Figure A.1: Well Fraction and Geometrical Factor for Various Common Geometries Used in Keyword
*GEOMETRY
Note: If a well is located on the block node in a repeating pattern, case (a) should be used.
Symmetry element boundaries are handled via keywords *VAMOD and *WELL *FRAC.
A.2
Well Indices
Production
For a production well the radial inflow model can be used directly. The parameters rw, CC, f,
S, and fh are required data; h and k are obtained from the grid data. The constant part I 'k is
evaluated and then reported. The phase flow rate is then
q ik = I 'k (p wfk p k ) j
(A2.1)
where
j =
k rj
j
(A2.2)
Because this is production, the upstream mobility is taken from the grid block conditions.
There is also an option in STARS for entering the quantity I 'k directly as data. In each case,
volumes are at reservoir conditions. The surface flash may be used to convert from reservoir
rates to surface rates.
Injection
The same equation applies for injection, but the well index may be specified in two different
ways.
1) Mobility Weighting Option
For option *MOBWEIGHT, j is the total downstream (grid block) mobility and is
applied internally, so that the well index entered by the user is only the geometry
factor I 'k . This option recognizes that injection is achieved by the displacement of
fluid in the completion block. STARS would calculate the geometry factor I 'k
from the geometry information if requested by *PERF GEO.
2) Mobility Unweighting Option
For option *UNWEIGHT, j is the mobility of the injected fluid and must be
included in the well index entered by the user. The included phase mobility is
assumed to be constant. The constant part may be calculated from the radial inflow
model. In fact, the value I 'k reported for the production well can be used directly,
if appropriate. The phase mobility can be estimated from representative values for
krj (=1, perhaps) and j at the injection temperature. For steam injection processes,
a cold water equivalent (CWE) quality option is available, which essentially
expresses a two phase water/steam injection in terms of an equivalent amount
(moles or mass) of injected water phase volumes. In this case, an equivalent
single-phase water injectivity index is required.
I ST (CWE ) f RC I RC + f RC I RC
(A2.3)
wj
wk
gk
where the volume fractions of injected water and steam, expressed at reservoir
conditions, f wRC , are obtained from the injected quality Q by conservation of mass
Q=
masssteam
masssteam + mass water
sRC + f sRC
(A2.4)
(A2.5)
RC
sRC f sRC + RC
w fw
which yields
f wRC
f sRC
Q RC
w
= 1 +
RC
1 Q s
= 1 f wRC
(A2.6)
It is worth emphasizing again, that with the CWE approach, the volume of
equivalent water injected is not the same as that obtained by the separate phase
(water/steam) approach, although the moles or mass (and energy) injected are.
If *PERF GEO is used then STARS would calculate the geometry factor I 'k as
well as the appropriate injection fluid mobility.
Surface Rate
The surface rate is obtained by multiplying the downhole rate by the density ratio jr/js,
which is calculated and applied internally and must not be included in the well index entered
by the user.
A.3
Anisotropic Permeability
The following is from Peaceman, and is used for the *GEOA and *KHA options.
Consider a vertical well located in a reservoir in which the principal axes of the permeability
tensor are parallel to the X- and Y-axes. Then the differential equation for steady state
pressure is:
kx
2p
x 2
+ ky
kx = perm. in x - direction
=0
y 2
ky = perm. in y - direction
2p
(A3.1)
(A3.2)
where
qu
2(kx / ky )1 / 2 h
r uv = u 2 + v 2
and
)1/ 2
ln
r uv
rw
(A3.3)
(A3.4)
rw = 1 / 2 rw (ky / kx )1 / 4 + (kx / ky )1 / 4
(A3.5)
In the u-v plane, the difference equation is identical to the isotropic problem.
reuv = 0.14 u 2 + v 2
)1/ 2
(A3.6)
and
re = (rw / rw )reuv
So,
re = 0.28
(A3.7)
[(ky / kx)
1/ 2
x 2 + (kx / ky )1 / 2 y 2
1/ 2
(A3.8)
The *GEO and *KH options use an expression for re that is the same as in equation A3.8
except that constant 0.28 is replaced with geofac 2 / . The two expressions are the same
for the default centre of block case in which geofac = 0.249 (Figure A.1 (a)). This means
that *GEO with geofac = 0.249 gives the same result as *GEOA, and *KH with geofac =
0.249 gives the same result as *KHA.
The above derivation is written for a vertical well (*GEOMETRY *K). A similar calculation
involves ky, kz, y and z for the *I direction and kx, kz, x and z for the*J direction.
A.4
Backflow
A well completed in only one grid block is relatively simple to control, since the well
equation
q j1 = I j1 (p wf p )
(A4.1)
is linear with respect to the two primary variables pwf and p. A specified rate qj1 will be
honored. A specified bottom hole pressure pwf will result in backflow under exactly one
condition, i.e., p > pwf for injection, or p < pwf for production. These conditions are easy to
detect.
A well completed in several blocks is more complicated and can be difficult to control, since
n lay
qj =
k =1
I jk (p wfk p k )
(A4.2)
depends upon many variables. Under many conditions it is possible for some layers to
experience backflow. For an injector, enough layers may backflow (pwfk < pk) that qj, which
should be positive for injection, may be negative.
Backflow in any layer k is controlled by the relationship between pwfk and pk. The block
pressure pk is involved intimately with the component flow equations, which carry the fluid to
or from the wellbore. The vertical pressure gradient in the reservoir is determined by the fluid
head between nodes, which depends upon the saturations in those blocks.
On the other hand, the wellbore pressure pwfk is determined by the fluid head in the wellbore.
This head or pressure gradient depends upon the saturations in the wellbore. These
saturations are not the same as in the grid block, but are related to what flowed out of the grid
block into the wellbore. Thus, the wellbore fluid depends on the fluid mobilities in the block.
This discrepancy between the two pressure gradients is illustrated in Figure A.2, where pk >
pwfk denotes normal production. This condition can occur even for a constant rate well, and is
common in problems containing long completion lengths (>3m).
This condition can be avoided by decreasing the well index Ijk such that the pressure drop
(pwfk - pk) increase. The result is shown in Figure A.3. Some situations may require the
backflow to be modelled, but the well model does not account for the change in upstream
direction and conditions. Also, partial backflow may affect simulator performance,
especially when a constant-surface-rate constraint is controlling the well.
Depth
block pressure, p k
Pressure
Depth
block pressure, p k
Pressure
A.5
Surface Flash
In order to convert reservoir rates and compositions to surface conditions, the flow stream is
passed through a surface flash. The following steps are followed.
1. Calculate ncf (the number of fluid components) mole rates qi, total mole rate q, and
global mole fractions zi.
qi = w qwk wi + o qok xi + g qgk yi
q=
n cf
qi
i = 1 to ncf
(A5.1)
(A5.2)
i =1
zi = qi / q
i = 1 to ncf
(A5.3)
Since the qjk have the same sign, the qi will all have the same sign and the zi will satisfy 0 zi
1, whether q is positive or negative.
2. Calculate the phase splits fw, fo and fg when this global composition is flashed to
surface p and T. Two options are available: segregated phases or rigorous phase
equilibrium flash.
3. The surface compositions are xi and yi from the flash. Water and gas standard
ST
ST
densities ST
w and g are constant. Calculate the oil density o from
composition xi and component liquid densities ST
oi
1
ST
o
nc
i =1
xi
ST
oi
(A5.4)
A.6
j
0
0
i
Figure A.4: Effective well radius
khy
khx
Pi +1, j 2 Pi, j + Pi 1, j +
Pi, j +1 2 Pi, j + Pi, j 1
x
y
(A6.1)
Assume production at rate q at the lower left-hand corner, and injection at rate q at the upper
right-hand corner. Thus:
= q
q0,0
qM,N
= -q
(A6.2)
= 0 for (i,j) (0,0) or (M,N)
qi,j
Defining PD = (kh / q)p allows (A6.2) to be simplified to
(PD )i 1, j + (PD )i +1, j + (1 / )(PD )i, j 1 +(PD )i, j +1 (2 + 2 / )(PD )i, j = i, j
(A6.3)
where
i, j
0, 0
M, N
= 1
= 1
= M/N
(A6.4)
Changing variables and taking the limit we obtain the integral solution for an infinite grid.
(PD )i, j = 21 o
/2
/2
cos(2iu )cos(2 jv )
sin 2 u + (1 / )sin 2 v
dudv
(A6.5)
For large i, the solution on the infinite grid satisfies the exact radial solution. Along the
horizontal axis (j=0), the exact radial solution is
(A6.6)
(A6.7)
(A6.8)
/2
cos(2iu )1
sinu 1 + 2 sin 2 u
1/ 2
(A6.9)
du
lim
(x
re
2
+ y 2
1/ 2
e
=0.1403649
4
(A6.10)
(A6.11)
(A6.12)
x 2 + y 2
f
(A6.13)
A.7
The Discretized Wellbore (DW) Model is a fully coupled mechanistic wellbore model. It
models fluid and heat flow in the wellbore and between a wellbore and a reservoir /
overburden. Wellbore mass and energy conservation equations are solved together with
reservoir equations for each wellbore section (perforation).
Wellbore Flow
To be able to solve the wellbore and reservoir equations together, some steps had to be taken
to translate the pipe flow equations into Darcys law equations. Darcys law equations are
used in reservoir simulation for flow in porous media. It means, that properties such as
porosity, permeability, etc. must be assigned to the wellbore. For example, permeability may
be evaluated by equating pipe flow and porous media velocity:
Velocity equation in porous media in x- direction is:
v=
kk r
x
(A7.1)
k
kr
=
=
=
permeability
relative permeability
potential gradient
viscosity
rw
f
rw
f x
=
=
=
(A7.2)
wellbore radius
Fanning friction factor
mass density
When we assume that the relative permeability curves in a pipe are straight lines going from
zero to one then for homogeneous fluid kr = 1 and for multiphase flow kr will equate to
saturation. For laminar flow f = 16/Re and
Re =
2 v rw
(A7.3)
Substituting these values into equation (A7.2) will give permeability in a laminar mode as
rw2
8
(A7.4)
Permeability expression for a turbulent flow is more complex and depends also on friction
factor, fluid viscosity and density. It is also evaluated from equations (A7.1) and (A7.2) as
r x
k = w
1/ 2
(A7.5)
Permeability is updated at each time step and its value would depend on the flow pattern and
fluid composition. Potential gradient /x is the sum of frictional, gravity and viscous
forces. Friction factor for turbulent, single-phase flow is calculated from Colebrooks
equation as:
1
f
= 4 ln
=
1
9.35
+ 3.48 4 ln 1 +
2
2 Re f
(A7.6)
relative roughness
When two phase fluid (liquid-gas) is present in the wellbore then liquid hold-up must be also
considered in the friction pressure drop calculation. Liquid hold-up represents a slip between
gas and liquid phase. Its magnitude depends on the flow regime i.e. the amount of each phase
present as well as phase velocities. Liquid hold-up Rg is predicted from Bankoffs
correlation as:
K
1
= 1 l 1
g
Rg
Y
(A7.7)
The correlation parameter K is a function of Reynolds number, Froude number and a flowing
mass void fraction Y. It may attain values from 0.185 to one. Gas phase mobility is altered
to account for the difference in liquid and gas phase velocities i.e. gas relative permeability is
augmented by the ratio of gas saturation and void fraction Rg. This operation relates the
liquid hold-up calculated from pipe flow equations to saturation needed in flow equations in
porous media.
Wellbore hydraulics may be used in wells with co-current upward or horizontal flow due to
the chosen correlation for the liquid hold-up.
Annulus Flow
In dual stream wells flow through tubing and annulus must be considered. Tubing flow is
handled similarly as wellbore flow. For laminar flow the annulus permeability is calculated
as:
2 2
r r
1
k a = ra2 + rt2 a t
r
8
ln a
rt
(A7.8)
ra - annulus radius
rt - tubing radius
Velocity and permeability for turbulent flow is calculated with the proper hydraulic diameter
for annulus. The same correlations as mentioned above are used to calculate the friction
pressure drop and slip between gas and liquid phase. Correct area and hydraulic diameter is
applied wherever necessary.
Tubing - Annulus Flow
Only conductive heat transfer is allowed between tubing and annulus along the tubing length.
Fluid is allowed to flow to the annulus at the end of the tubing. The same equations as
mentioned above are used, but the equivalent drainage radius is calculated as
User's Guide STARS
2
1
rT =rt exp
ln
2
2
1
=
ra
rt
(A7.9)
(A7.10)
Wellbore-Reservoir Flow
Fluid and energy flow between a wellbore section and a reservoir grid block is handled the
same way as between individual reservoir grid blocks. Peacemans equation is used to
calculate transmissibilities (well index) between wellbore sections and the reservoir.
Tj =
2 x k k rj
r r
ln o j j
rk
(A7.11)
(A7.12)
[(k /k )
r =0.28
o
)1 / 2 z 2 ]1 / 2
(k z / k y )1 / 4 +(k y / k z )1 / 4
y
1/ 2
y 2 + k y / k z
(A7.13)
These internally calculated values may be changed by the user with the keyword
*TRANSWB if necessary.
The flow term of energy consists of convective and conductive flow. Convective heat
transfer uses the same phase transmissibilities Tj as the component flow equations.
Conductive transmissibility is expressed as
o=
2x
r
ln T
rk
(A7.14)
(A7.15)
The inflow and outflow of fluid through each perforation changes properties in each wellbore
section because all wellbore conservation equations are solved implicitly. Therefore, the DW
model is able to handle backflow (crossflow) between reservoir and a wellbore correctly.
Wellbore Initialization and Transient Behavior
The initial conditions in the wellbore will determine the short behavior of a reservoir in the
vicinity of a well and dictate the length of a transient state. When initial pressure,
temperature and composition differ considerably from conditions at which fluid is injected or
produced, the period of transient behavior may be extended to several days. Simulation of
the transient behavior does not affect long term physical results for most of the processes
used in EOR simulation. However, transients may be important in cyclic processes where the
cycle duration is the same order of magnitude as the transient period. The transient period is
830 Appendix A: Well Model Details
generally longer for injectors. It will increase when low mobility fluid is injected or when
low mobility fluid is originally in the wellbore. Simulation of wellbore transients is
necessary in well test analysis.
The effect of wellbore transients on numerical performance is larger in heavy oils or bitumen
reservoirs than in conventional oil reservoirs due to very low oil mobility. It also seems to be
more pronounced in injectors than producers. In addition, attempts to simulate the transient
period will change the overall numerical performance in comparison with the sink/source
approach where pseudo-steady state is assumed. High pressure, temperature or saturation
changes occur due to small wellbore volume. Even in an implicit simulator the timestep size
will be fairly small (10e-3 to 10e-4 days, probably smaller for high rates). For example, the
worst scenario is to inject steam into a wellbore containing cold oil, which may be the case
after primary production. Thus, the well type may be changed instantaneously, but the
condition in the discretized part of the well will take time to change.
If one is not interested in the wellbore's transient behavior, the initial conditions should be a
pseudo-steady state to avoid a lengthy equilibration period. This is achieved by omitting the
keyword *TRANSIENT or by using *TRANSIENT OFF. This keyword may also be used in
recurrent data. When transient behavior is not requested then STARS will do automatic
pseudo-steady state initialization in the discretized wellbore at the beginning of simulation
and at each time when operating conditions are changed. Operating conditions such as
pressure, rate composition etc. are taken into consideration during pseudo-steady state
initialization.
Usage of DW Model
The question may arise, when should one use the DW model? The answer is not simple and
straightforward but the following points may be used as guidelines in the decision making
process. A simpler Sink/Source well model may be adequate:
1. For reservoirs with reasonable injectivity where the effect of heat conduction
between a wellbore and a reservoir is negligible. Injectivity is very low in heavy oil
or tar sands reservoirs without bottom water and therefore oil may be initially
mobilized only by heat conduction which is not possible with a Sink/Source model.
2. For processes with small flow rate or big pipe diameters where frictional pressure
drop is almost nonexistent.
3. For short horizontal wells with a possibility of homogeneous fluid along a
wellbore.
4. For homogeneous reservoirs where wellbore-reservoir communication is uniform.
5. For vertical wells where fluid segregation is minimal.
6. For reservoirs which have much higher draw-down than the expected friction
pressure drop. One has to keep in mind that the absolute value of the frictional
pressure drop is not so important as is the ratio of frictional pressure drop in the
wellbore and pressure drop in the reservoir. It means that low frictional pressure
drop may affect results when SAGD is used in very permeable thin reservoirs, but
may not have a significant effect on thicker reservoirs with lower permeability.
For any other case the DW Model should be used. However, one has to be aware of possible
numerical difficulties due to drastic PVT behavior and increased nonlinearities. A wellbore
does not contain rock to buffer the effect of temperature. When pressure and temperature are
close to saturated conditions then every small change in them will cause phases to appear or
disappear. In reservoir, rock will absorb the marginal fluctuation in energy and therefore
transition between phases is smoother. Sometimes it helps when tubing wall is also specified
in the data and its heat capacity is entered through keyword *ROCKCP.
Numerical difficulties also arise when:
-
Reference
B.1
Test Bed data sets are used to illustrate and verify operation of the various features and
options in STARS. These data sets may be found in directory "testbed" in the STARS release
template area. Note that these data sets are designed to run without modifications. For
example, commenting out *MAXSTEPS 1 in a run designed to test an input or space
allocation option may not result in a successful run, despite what recurrent data there is.
Data File
Description
sttst1.dat
sttst2.dat
sttst3.dat
sttst4.dat
sttst5.dat
sttst6.dat
sttst7.dat
sttst8.dat
sttst9.dat
sttst10.dat
sttst11.dat
sttst12.dat
sttst13.dat
sttst14.dat
sttst15.dat
sttst16.dat
sttst17.dat
sttst18.dat
sttst19.dat
sttst20.dat
sttst21.dat
sttst22.dat
sttst23.dat
sttst24.dat
sttst25.dat
sttst26.dat
No.
sttst27.dat
sttst28.dat
sttst29.dat
sttst30.dat
sttst31.dat
sttst32.dat
sttst33.dat
sttst34.dat
sttst43.dat
sttst46.dat
sttst47.dat
sttst48.dat
sttst49.dat
sttst50.dat
sttst54.dat
sttst55.dat
sttst56.dat
sttst57.dat
sttst58.dat
sttst59.dat
sttst61.dat
sttst62.dat
sttst63.dat
sttst64.dat
sttst65.dat
sttst66.dat
sttst67.dat
sttst68.dat
sttst69.dat
sttst70.dat
sttst71.dat
sttst72.dat
sttst73.dat
sttst74.dat
sttst75.dat
sttst76.dat
Description
Lab Scale Insitu-generated Foam Propagation, Chevron #2
Modified Kazimi's Dual Porosity Problem (*DUALPOR option)
Pruess Geothermal Problem on 1/8 5-spot (*MINC option)
Gravity Drainage Problem (*DUALPERM option)
Chen Problem (*SUBDOMAIN option)
Lab Scale Foam Run with Lamella Model, Chevron #3
SAGD with Discretized Circulating Injector and Producer
Modelling Near-well Phenomena with Hybrid Grid
Smaller Version of Test Bed No. 31
Test Bed #7 with 31x31x10 Full Pattern Grid
Test Zero-porosity Blocks and Full Printout
Dilation-Recompaction Option
Intermediate-Wet Relative Permeability Option *INTMED1
Oil-Wet Relative Permeability Option *OILWET
Model Metal Tube Wall with Zero Porosity and Radial Grid
Dilation and Thermal Conductivity Nine-Point Options
Foam with Horizontal Wells, Troll Field
Multiple Contact Miscible with STARS
Switch Between Mixed Surface/Downhole Constraints
Upper/lower Trans. Mult. For LGR Cartesian, redefined with time
Water/Oil Vertical Equilibrium Illustration
Water/Oil/Gas Vertical Equilibrium with Two Transition Zones
Steam Trap Well Control Option Illustration
Horizontal Discretized Wellbore Inside Hybrid Grid
Illustrate Foamy Oil Process Bubbly Oil Approach
Illustrate Foamy Oil Process Oily Foam Approach
Steam Trap Alternate Location Option
SAM Wellbore option with Source/Sink Wells
SAM Wellbore option with DW Tubing/Annulus
SAM Wellbore option with DW & Wellhead Constraints
Dead Oil Steam Flood with *FAULT
Vapex with 2D Corner-point Grid
Thermal Conductivity Options, Slaved Heater and Variable-Permeability
Elastic-Plastic Compaction-Rebound
Test/Illustrate BBM Kr Hysteresis (Water Wet)
Test/Illustrate Carlson Method for Kro, Krg and Pcog Hysteresis
Data sets in directory "verify" in the STARS template release area are used to verify
operation of some specific options and are not particularly useful for template purposes.
Directory restart contains data sets that verify multi-segment restart option.
In directory "output" in the STARS template release area are summaries of the results of
running all the data sets from "testbed", "restart" and "verify" on all the supported platforms.
Included are numbers of time step, iterations and timestep cuts, along with CPU time for the
specific computer model indicated.
834 Appendix B: Data Sets
B.2
Another set of template data files can be found in the same template area, organized under the
following directories which correspond to the following functional categories:
Drm
Flu
Frr
Geo
Gro
Hrw
Smo
Spe
Wwm
- Drive Mechanisms
- Fluid Types
- Fractured Reservoirs
- Geomechanics
- Grid Options
- Horizontal Wells
- Simulator Options
- SPE Problems
- Wells and Well Management
Each directory contains a text file which documents the data files in that directory. The main
template directory tpl contains file template.txt which contains brief descriptions of all
the data sets in these template directories. The following are the data files in these template
directories that are not copies of the test bed data sets.
Fluid Types
stflu018.dat
stflu019.dat
stflu020.dat
stflu021.dat
stflu022.dat
stflu023.dat
stflu024.dat
stflu025.dat
stflu026.dat
stflu027.dat
stflu028.dat
stflu029.dat
stflu030.dat
stflu031.dat
Geomechanics
stgeo002.dat
stgeo003.dat
stgeo004.dat
stgeo005.dat
stgeo006.dat
stgeo007.dat
stgeo008.dat
stgeo009.dat
stgeo010.dat
stgeo013.dat
stgeo014.dat
stgeo015.dat
stgeo016.dat
stgeo017.dat
stgeo018.dat
stgeo019.dat
stgeo020.dat
stgeo021.dat
stgeo022.dat
stgeo023.dat
stgeo024.dat
stgeo025.dat
stgeo026.dat
stgeo027.dat
Geomechanics-Dependent Permeability
stgeo028.dat
stgeo029.dat
stgeo030.dat
stgeo031.dat
stgeo032.dat
stgeo033.dat
stgeo034.dat
stgeo035.dat
stgeo036.dat
stgeo037.dat
Grid Options
stgro007.dat
stgro008.dat
stgro009.dat
stgro010.dat
stgro013.dat
stgro014.dat
stgro015.dat
stgro016.dat
stgro017.dat
stgro018.dat
stgro019.dat
stgro020.dat
stgro021.dat
stgro022.dat
stgro023.dat
stgro024.dat
stgro025.dat
stgro026.dat
stgro027.dat
stgro028.dat
stgro029.dat
stgro030.dat
stgro031.dat
stgro032.dat
stgro033.dat
stgro034.dat
stgro035.dat
stgro036.dat
stgro037.dat
stgro038.dat
stgro039.dat
stgro040.dat
stgro041.dat
stgro042.dat
stgro043.dat
Horizontal Wells
sthrw007.dat
sthrw008.dat
sthrw009.dat
Simulator Options
stsmo010.dat
stsmo011.dat
stsmo012.dat
stsmo013.dat
stsmo014.dat
stsmo015.dat
stsmo016.dat
stsmo017.dat
stsmo018.dat
stsmo019.dat
stsmo020.dat
stsmo021.dat
stsmo022.dat
stsmo023.dat
stsmo024.dat
stsmo025.dat
stsmo026.dat
stsmo027.dat
stsmo028.dat
stsmo029.dat
stsmo030.dat
stsmo031.dat
stsmo032.dat
stsmo033.dat
stsmo034.dat
stsmo035.dat
stsmo036.dat
stsmo037.dat
stwwm014.dat
stwwm015.dat
stwwm016.dat
stwwm017.dat
stwwm018.dat
stwwm019.dat
stwwm020.dat
stwwm021.dat
stwwm022.dat
stwwm023.dat
stwwm024.dat
stwwm025.dat
stwwm026.dat
stwwm027.dat
stwwm028.dat
stwwm029.dat
stwwm030.dat
stwwm031.dat
stwwm032.dat
stwwm033.dat
stwwm034.dat
stwwm035.dat
stwwm036.dat
stwwm037.dat
stwwm038.dat
stwwm039.dat
stwwm040.dat
stwwm041.dat
elec2.dat
elec3.dat
elec4.dat
elec5.dat
elec6.dat
elec7.dat
Overview
This appendix contains detailed descriptions of advanced oil recovery processes that may be
modelled by STARS, divided into the following sections.
C.1
C.2
C.3
C.4
C.5
C.6
C.7
C.8
C.9
C.10
C.11
C.12
C.13
C.1
This process and its mechanisms can be found taking place in each of the other processes, and
so it is the most basic. The following are mechanisms key to the hot water flooding process.
See chapters 5 and 6 of Reference 1 for a more complete description.
Convective and conductive heat transfer in the formation will control the placement of heat,
the driving force of thermal EOR processes. Heatloss to the adjacent formation can dominate
the energy balance equation, so accurate estimates of heatloss are crucial2. Oil viscosity
reduction with increasing temperature may be the dominating recovery mechanism. Heavy
oil viscosities may decrease several orders of magnitude with a 200C rise in temperature,
decreasing WOR by the same ratio. Banking and plugging of oil can be beneficial or
harmful. Banking occurs because oil viscosity decreases with increasing temperature. A
plug is a low-mobility oil bank which forces the water saturation down to the immobile value,
causing a large decrease in total fluid mobility. Water/oil relative permeabilities, together
with viscosities, determine the in situ flowing and producing water-oil ratio WOR. Relative
permeability dependence on temperature has been attributed to changing interfacial tension
between the water and oil phases3,4,5,6.
C.2
The steam flooding mechanisms will also occur as part of the cyclic steam and fire flood
processes. In addition to the hot water process, the following mechanisms are important. See
chapter 7 of Reference 1 for a more complete description.
Steam fluid properties such as vapor pressure, density and enthalpy will dominate. In
particular, the latent heat of steam provides a significant excess source of energy over that of
hot water at the same temperature leading to faster heat propagation7. But because
conductive heat losses at steam temperature are supplied by the latent heat, the steam
propagation rate slows down after a period of steam injection8. As well, this leads to the
formation of a hot water condensate zone ahead of the steam front.
Oil relative permeability as a middle phase (assuming water wet rock) is estimated from twophase data via Stone's formula9. This affects oil production directly. Gas/liquid relative
permeabilities will help determine the in situ flowing and producing gas-liquid ratio, (e.g.
GOR), which affects delivery of steam and gaseous additives. Gravity override and drainage
become important for thicker formations10. The presence of gas (steam) with its very low
density is the cause. Fluid banks possible include a steam bank, a hot water bank, a cold
water bank, and an oil bank. Steam distillation of volatile hydrocarbons may create a solvent
bank which can help mobilize native oil11. Heat scavenging applied to a more mature steam
flood would involve injecting cooler steam and then cold water. Heat lost to the adjacent
formation will flow back into the cooled reservoir.
C.3
Also known as Huff 'n' Puff, as well as steam stimulation, steam cycling involves alternately
injecting and producing in a single well. This technique is popular in fields whose oil
mobility is too low to begin steam flooding immediately. In addition to the hot water and
steam flood mechanisms, the following items are important. See chapter 9 of Reference 1 for
a more complete description.
Low interwell communication results from heavy oils whose mobility is so low that excessive
injection pressure is required to achieve any production. Steam cycling applied to each well
will improve interwell communication to the point where steam flooding can be done.
Fracturing may be required to inject steam, in light of possible oil plugging12.
Once cycle consists of injection, an optional soak or shut-in period, and production of the
well. Optimum slug size can be considered when designing the cycles. A slug smaller than
optimal does not mobilize (i.e. heat) as much incremental oil. A slug larger than optimal
heats more oil than can be produced by drainage or by drive energy during that cycle.
Compaction drive can provide drive energy due to deformation of the heated zone13,14,15,
especially in early cycles. Cycle to drive conversion may occur when the interwell
communication is sufficient, or when it is optimal.
C.4
Also known as in situ combustion, this process involves the injection of air or enriched air,
which burns fuel in the formation. The technique may be viable in formations which are so
thin that excessive heat losses make steam flood unfeasible. In addition to the hot water and
steam flood mechanisms, the following points are important. See chapter 8 of Reference 1
for a more complete description.
In situ steam generation by burning part of the native hydrocarbon with oxygen is the key
mechanisms. Fluid banks possible in fire flooding are air zone or burned zone, burning zone,
coke or fuel bank, distillation zone, steam bank, distilled oil bank, hot water bank, native oil
zone and combustion gases. Distillation of lighter hydrocarbons forms light oil and solvent
banks. Immobile residual hydrocarbon, or fuel, is burned with injected oxygen. Fuel or coke
is the results of cracking chemical reactions. Oxidation reactions provide the heat that drives
the process. High-temperature16 and low-temperature oxidation17 chemical reactions can take
place. Injected water can control temperatures and heat distribution in the formation.
Process status can be monitored by examining reaction products such as fresh water and
ratios of CO to CO2. Combustion tubes in the laboratory can provide fine tuning of process
parameters, as well as a go/no-go indication.
A field pilot project in Alberta18 demonstrates many practical aspects of steam cycling,
conversion to steam drive and conversion to in situ combustion processes.
C.5
Additives Overview
Injection of steam is, in itself, an efficient method for mobilizing and producing heavy oil or
bitumen, due to the large oil viscosity reduction observed at higher temperatures. However
this effectiveness is often lost if steam does not contact large portions of the oil reservoir of if
no flow paths exist for the mobilized oil to the producing wells.
Additives are injected with steam to either enhance the basic efficiency of the process or to
improve conformance control. In the first category, gaseous additives such as CO2 or CH4
are employed to increase the size of the steam zone and to further reduce oil viscosity due to
solubilization effects. Liquid based additives (naptha, caustic, surfactants) can also reduce oil
viscosity and/or residual oil saturation. Injected emulsion, foams and gels are being
considered as conformance control agents either to block high permeability (thief) zones or to
attempt to reduce the gravity override of steam.
The success of these additive processes is often dominated by water-rock chemistry. High
temperature, high pH, and salinity changes can induce mobilization and plugging by fines;
adsorption and thermal degradation of surfactants and polymers can limit the amount of additives
that the reservoir actually sees. As illustrated in later sections, water chemistry can affect the
performance of not only aqueous additives but those added to oil and gas phases as well.
Enhanced oil recovery process in the North Sea yields examples of thermal additive processes
where steam does not need to be considered. Here injection of cold sea water (~5C) into
warmer reservoirs (~90C) results in an "inverse" temperature gradient. Temperature effects,
although not extreme, must still be considered on additive properties and additive thermal
stability. Thus, temperature distributions occurring in the reservoir after several years of cold
water injection must be accounted for.
While the previous chapter viewed temperature changes as the dominant feature to be
modelled, in this section temperature is mostly secondary in the sense that it modifies
processes which can occur at constant temperature as well. As a consequence, much useful
information can be gained by isothermal simulations of these additive processes and have
application in strictly compositional EOR processes such as CO2 flooding.
C.6
C.7
Gas Additives
The addition of light hydrocarbons (methane, ethane) and/or other gases (e.g. CO2 or N2) to
improve the efficiency of both cycle steam or steam drive processes has been investigated for
some time22,23. The general conclusion is that small concentrations of gaseous additives can
alter and improve both early and ultimate recovery of heavy oil, on the order of 10-20% in
favorable situations. However the addition of too large an amount of additive again reduces
the efficiency.
The basic mechanisms are thought to be swelling of the oil, viscosity reduction and solution
gas drive. It is observed that the additives tend to exist primarily at the boundary of the steam
chamber where they expand the size of the steam chamber but lower the steam temperature
(because of partial pressure effects). It is also in this region where significant partitioning
into the oil and water phases occur. The detrimental effects of too much additive are caused
by either the reduction of the temperature of the gas phase to inadequate levels and/or the
hindrance of the flow of movable oil caused by a too high gas saturation. If the heavy oil
already contains a significant amount of dissolved gas, the beneficial effects of gaseous
additives to steam can be severely retarded.
The above mechanisms can be modelled via appropriately chosen p,T (and possibly
composition) dependent K values describing solubility, as well as compositionally dependent
densities and viscosities. The addition of CO2 at high temperature involves further problems
because of its solubility in and reaction with chemicals in the water and the rock. This
reactivity is described in more detail below.
In the context of (isothermal) compositional simulation, the above mechanisms indicate that
the process is operating far from miscibility conditions (where vaporizing or condensing gas
drive mechanisms would come into play). This is primarily due to the nature (composition)
of the heavy oil. Application of steam recovery processes to lighter oil systems requires that
these more involved compositional effects be evaluated24. In particular, steam distillation of
the oil plays a dominant role - a thermal vaporizing gas drive mechanism.
C.8
This subsection presents a brief overview of rock matrix and clay reactivity which can
dramatically influence the effectiveness of any additive process. In general terms, rock
reactivity can change the ionic environment in which specific additives must operate and
produce changes in porosity and permeability. Most reactions are accelerated at higher
temperatures such as those occurring under steam flood or combustion conditions.
Application of these ideas to specific additive processes are dealt with in later subsections.
To a first approximation, reservoirs can be classified as primarily sandstone or limestone
(carbonates and dolomite) types, whose primary components - quartz (silica) and CaCO3 or
MgCO3 respectively - determine their reaction chemistry. More particularly, for sandstone
the main dissolution/precipitation reaction can be modelled as25
SiO2(s) + H2O = H4SiO4
which is strongly temperature dependent. Thus, at stream temperatures, the amount of
dissolved silica can be quite significant26. This has important implications for porosity and
permeability changes, as well as silica fines transport.
Silica chemistry is quite complex27, with the type and amount of aqueous silica species
present varying widely as pH and temperature conditions change. In particular, injection of
pH altering additives such as caustic or even CO2 can be expected to affect the observed
silica species (see the section on caustic flooding). For carbonate reservoirs, the important
reaction is the dissolution of CaCO3 (or MgCO3).
In addition to the fundamental rock matrix constituents mentioned above, most reservoirs
have nonuniformly) interspaced regions of various clays and shales (i.e. consolidated clay)
which can also affect rock reactivity and rock transmissibility. The low ion exchange clays
(kaolinite) are most mobile and are sensitive to release via changes in ionic environment
(brine salinity). The high ion exchange capacity clay montmorillonite is a swelling clay
which can be treated with potassium hydroxide (KOH)28. In either situation (mobile or
swelling), the net result is permeability damage when fresh water is injected into a saline
reservoir. In thermal processes, another source of fresh water is condensed stream.
Another phenomena associated with clays is ion exchange in which injected ionic
compositions can change as cations such as Na+ and Ca++ are exchanged with their bound
counterparts on the clays29. Limestone dissolution can also affect ion exchange behavior.
The matrix and clay reactivities outlined here (dissolution, precipitation, mineral conversions,
and ion exchange) have been shown to be strongly temperature dependent. Equally important
are the effects of water pH, and a discussion of this is given in the section of caustic injection
processes.
C.9
Polymers are mobility control agents employed to improve microscopic (1d) displacement
efficiency and 2d and 3d sweep efficiency30. They improve mobility ratio by a combination
of increased water phase viscosity and decreased effective permeability by blocking of
pathways. Their propagation characteristics are further affected by dispersion, adsorption and
inaccessible pore volume (early polymer breakthrough)31,32. Recent work has emphasized the
important role of viscous cross flow in the analysis of polymer flow patterns in heterogeneous
reservoirs, including its effect on polymer slug breakdown30,33.
There are two general categories of polymer: Synthetic ionic (e.g. partially hydrolyzed
polyacrylamides (PHPA) such as Dow Pusher 700) and biopolymers (e.g. xanthan gum)
which differ in their molecular and flowing properties. In particular, xanthan is a rigid rod
type molecule, almost helical in structure, which has very good viscosity modification
properties. In contrast, PHPA is a flexible polymer whose viscosity is sensitive to salinity
levels30, decreasing as salinity increases because the ionic side chains become electrically
screened and the molecule folds back on itself. The synthetic polymer operates primarily as a
pore blockage agent and is more sensitive to degradation. Stability questions are especially
important at the high temperatures occurring in a steam flood.
Polymer viscosity is non-Newtonian (shear rate dependent) although the underlying physical
mechanisms causing this behavior can differ. Normally this shear dependence is of
importance only in the high flow regimes around wells.
Polymer flooding has been applied with success in many field projects. Newer applications
include its use in conjunction with surfactant or caustic flooding, as discussed below.
In recent years, considerable interest in more complex means of remedying macroscopic
reservoir heterogeneity has arisen, involving in-situ gel formation33. Gellation involves the
injection of low viscosity fluids which react to form essentially immobile networks to block
high permeability channels. Various gel systems have been investigated including silicate
gels, polymer gels and phenylformaldehydes.
To date the most extensive work has been done on polymeric gel systems involving either
synthetic (PHPA) or biopolymer (xanthan) and some cross-linking agent such as CrCl3 or
AlCl3. The kinetics of gelation itself are quite complex34, and the further complications
associated with the availability of cross-linking agent include additional oxidation-reduction
reactions to delay gel formation, ion exchange reactions of Cr+3 with the rock and possible
precipitation of cross-linker at basic pH levels.
Recent work on gels suitable for steam flood applications indicate that phenoformaldehyde
gels are much more promising35.
C.10
Surfactants are species which tend to exist at the interface between water and oil phases,
lowering interfacial tension and promoting mixing between the two phases36. Surfactants can
be ionic (usually negatively charged, e.g. Witro 7RS-10-80) or nonionic (e.g. Triton X-100).
Surfactants are sensitive to both ionic composition and temperature, such that partitioning can
change from predominately water based to oil based as salinity or temperature (for nonionics)
are increased. (Ionic surfactants become more water soluble with temperature). Interfacial
tension lowering capabilities change with partitioning - the lowest interfacial tension
normally occurs around equal water/oil partitioning. Surfactants also strongly adsorb on rock
with adsorption decreasing as salinity or temperature increase37. Most often, surfactant
mixtures are injected and chromatographic separation of components can occur as the
injected slug propagates due to differing component levels of partitioning and adsorption38.
The chromatographic separation of salt and pH alternating components which may be
injected with or ahead of the surfactant mixture are discussed in other sections.
The reduction of interfacial tension by surfactants is usually correlated with decreased
residual oil (and connate water) through the calculation of a dimensionless capillary number
describing the balance between viscous and interfacial forces39. In addition, the presence of
surfactants can alter rock wettability, usually interpreted as a change in the curvature of water
and oil relative permeability curves. The net result is a change in the flow characteristics of
the phases as surfactant concentration increases to almost miscible type (straight line) relative
permeability curves40,41.
The mechanism of caustic injection is thought to occur through the formation at high pH of
an in situ surfactant, resulting from a reaction with naturally occurring (acid) species in the
oil42. Various caustic species have been investigated43 including sodium hydroxide (NaOH),
sodium orthosilicate (Na4SiO4), and sodium carbonate (Na2CO3). Propagation of an alkali
slug is affected by sodium/hydrogen and calcium/hydrogen ion exchange, rock dissolution
reactions, and precipitation44.
A modified system that shows extreme promise, including encouraging field pilot results, is
polymer-augmented caustic flooding43,45, where a synergistic effect of combining the two
additives has been noted.
The effect of elevated temperature on caustic-sandstone interaction is primarily detrimental in
the sense that both ion exchange and silica dissolution reaction increase, leading to an overall
increase in caustic consumption46. High temperature caustic flooding or the use of caustic as
a steam additive have also been considered47,48,49, even after the detrimental effect of
temperature on caustic consumption was realized. Basically, because of the ease of
emulsification at higher temperature and the effect of temperature on oil viscosity, this
processes remains attractive.
C.11
The propagation of small solid particles (fines) through a porous media is described
mathematically as filtration50,51,52 theory. These particles can have many sizes, shapes and
chemical origin. However, the major particle types are mobile clays (especially kaolinite),
silica fines (from the dissolution of quartz), and scale formation precipitates (e.g. CaCO3,
Ca(OH)2). In a multiphase situation, these particles can propagate primarily either in the
water or oil phases, depending on their wettability.
The basic laws of fines propagation and capture can be expressed in terms of a filtration
coefficient (inverse of average propagation distance) and plugging coefficient (describing the
permeability decrease due to particle capture). There are many postulated modes of particle
capture, depending on particle size, flow velocity, and salinity which result in differing
theoretical expressions for these coefficients. The sensitivity to water salinity should be
particularly emphasized53.
Although other descriptions have been proposed, the flow of dilute, stable emulsions can be
most satisfactorily modelled employing a variant of filtration theory54. Here, the oil droplets
in an (e.g. oil-in-water) emulsion system act as (deformable) particles which propagate and
are captured similar to fines particles. Again, porosity and permeability changes must also be
considered. Differences however do exist in the details of the capture process. Basically,
experiments indicate an upper limit to emulsion capture while solids can capture on top of
each other (dendrite formation). This leads to a different dependence of filtration coefficient
on captured droplet concentration and an observed steady state concentration profile for
produced emulsion. Furthermore, the permeability alterations are much less severe in the
emulsion case, for equally sized emulsion and fines particles.
Emulsions are unstable dispersions and break over a suitable time frame55. This can be
especially important as they flow through a porous medium because of the strong interaction
between the liquid and solid phase. In situ emulsion coalescence has been studied by several
workers56, while inset formation is usually thought to occur via a snap off mechanism57. At
higher emulsion concentrations, non-Newtonian viscosity effects become important. These
ideas also pertain to foams since in the limit of high concentrations, emulsions and foam
behave similarly.
Some recent laboratory studies have investigated the use of emulsion blocking agents for
steam flooding applications58. Chung and Butler59 have noted the large amount of water-inoil emulsification obtained above a rising steam chamber and have verified the role of steam
condensation of gas droplets in their formation.
C.12
Many of the topics treated under the general heading of aqueous phase additives have their
counterparts as oil additives. Indeed, changing conditions of pH, salinity or temperature can
often result in partitioning inversion, which chemicals (especially surfactants) can go from
being strongly water soluble to strongly oil soluble. This is equally true for both injected
surfactants and naturally occurring surfactants (originally dissolved in the oil) and can
dramatically alter surfactant, caustic, emulsion and foam processes. Studies have
demonstrated the connection between inversion60 and the possibility of the formation of a
third liquid (microemulsion) phase as pH, salinity, or temperature are changed. In fact one
EOR process (termed microemulsion flooding - see above) is designed to operate as much as
possible in this three liquid phase environment. Normally, however, this extreme situation
occurs over a very limited range of conditions, and when surfactant concentrations are low,
this is very hard to detect. Still this three phase region represents the thermodynamic driving
force for inversion. In addition to the essentially mechanical aspects of emulsion instability,
emulsions are also unstable to inversion - interconverting from oil-in-water to water-in-oil as
conditions of temperature, salinity, pH, or volume fractions of oil and water change.
Except under the above special, near miscible conditions, water displaces oil immiscibly.
Thus, mobility control is achieved either by adding thickeners to the water phase (e.g.
polymers and gels) or diluents to the oil phase (e.g. naptha and/or condensable gases). In this
latter instance, oil additives are almost always hydrocarbon based, and concepts from oil/gas
compositional modelling (e.g. through an equation of state) apply. For the heavy oils
considered in most thermal projects, the compositional mixing effects are operating very far
from oil/gas miscibility conditions. However, in more recent steam flooding applications of
light reservoirs, this may not be the case.
C.13
Foam
Foam is a gas phase mobility control process which is gaining increasing popularity for both
steam flooding61,62,69 and compositional (e.g. CO2)63 processes. Although very complex,
recent research into the process mechanisms has made simulation feasible64. In favorable
circumstances, mobility reduction factors of 100 have been reported.
In developing a quantitative understanding of foam flow, several aspects must be considered.
The first is surfactant stability65 and propagation/retention66. Three general classes of
surfactants have been considered-aromatic (alkylaryl sulfonates (AAS) such as Sun Tech IV),
alphaolefin sulfonates (AOS) such as Chevron Chaser SD1000), and nonionics and
exthoxysulfonates. The primary consideration in lower temperature regimes is surfactant
adsorption while at higher temperatures (arising in steam flood application), thermal stability
questions are dominant. Results show that AAS type surfactants adsorb more than AOS and
are more strongly affected by salinity. For both surfactants, adsorption decreases with
temperature and increases as the clay content of the sand increases. Conversely, AAS are
superior to AOS in terms of thermal stability (although the AOS dimer Chevron SD1000 does
appear to be thermally stable). Decomposition of surfactants is acid catalyzed and is
therefore strongly dependent on pH - in basic solutions this hydrolysis reaction is normally
first order in surfactant concentration. Nonionics and ethoxylated sulfonates have very poor
temperature stability and can therefore only be considered for CO2 type foam applications.
Surfactant propagation can also be (adversely) affected by cation exchange between
surfactant solution and formation clays. High salinity preflushes can improve this behavior.
Normally, foam forming surfactants are chosen to be strongly water soluble, so that
partitioning into the oil phase is minimized. However, both temperature and ionic
concentration can affect this partitioning.
Of particular importance is the (normally detrimental) effect of the presence of oil on foam
formation and propagation. Indeed only one system has been reported in which the presence
of an oil phase has had a positive effect on foamability. Oil-foam interactions are complex,
and the presence of oil can be detrimental to foams in several ways67,68.
Field applications of foam appear promising, especially in thermal projects, where several
successful pilot trials61,62,69 have been reported. As an alternative to water-alternating with
gas (WAG) processes for mobility control for gas flooding projects, the situation is less clear.
Obviously, foam application to plug near well, isolated thief zones have a higher probability
of success than treatments designed to counteract gravity override deep into the reservoir.
Evolving criteria61 to ensure successful operation include addition of salt to the brine to
counteract clay ion exchange and the effect of Ca++ ions. This allows faster surfactant
propagation into the reservoir. Major explanations for failed foam tests include insufficient
length of injected surfactant slugs and poor reservoir characterization - especially in the size
of the region to be treated.
References
1. Prats, M., Thermal Recovery, SPE Monograph, Vol. 7, SPE of AIME, Dallas,
Texas, 1982.
2. Lauwerier, H.A., "The Transport of Heat in an Oil Layer Caused by the Injection
of Hot Fluids," Appl. Sci. Res., Martinus Nijhoff, Publisher, The Hague (1955),
Vol. 5, Sec. A, No. 2-3, pp. 145-150.
3. Dietrich, J.K., "Relative Permeability During Cyclic Steam Stimulation of HeavyOil Reservoirs," JPT, October 1981, pp. 1987.
4. Bennion, D.W., and Moore, R.G., "Effect of Relative Permeability on the
Numerical Simulation of the Steam Stimulation Process," JCPT, March-April
1985, pp. 40.
5. Kisman, K.E., and Acteson, W.H., "Application of Basal Water Sands to Enhance
Thermal Recovery," paper 102, presented at the Fourth UNITAR/UNDP
Conference on Heavy Crude and Tar Sands, Edmonton, Alberta, August 1988.
6. Maini, B.B., and Okazawa, T., "Effects of Temperature on Heavy Oil-Water
Relative Permeability of Sand," JCPT, Vol. 26, No. 3, June 1987, pp. 33-41.
7. Marx, J.W., and Langeheim, R.N., "Reservoir Heating by Hot Fluid Injection,"
Trans. AIME, 216, 1959, pp. 312.
8. Hearn, C.L., "Effect of Latent Heat Content of Injected Steam in a Steam Drive,"
JPT, April 1969, pp. 374.
9. Aziz, K., and Settari, A., Petroleum Reservoir Simulation, Applied Science
Publishers, 1979.
10. Butler, R.M., "A New Approach to the Modelling of Steam-Assisted Gravity
Drainage," JCPT, Vol. 24, No. 3, May-June 1985, pp. 42-51.
11. Coats, K.H., "Simulation of Steamflooding with Distillation and Solution Gas,"
SPEJ, October 1976, pp. 235-247.
12. Dietrich, J.K., "Steam Cycling of Tar Sands Through Hydraulically Induced
Fractures," SPE Res. Eng., May 1986, pp. 217-229.
13. Denbina, E.S., Boberg, T.C., and Rotter, M.B., "Evaluation of Key Reservoir
Drive Mechanisms in the Early Cycles of Steam Simulation at Cold Lake," paper
SPE 16737, presented at the 62nd Annual Technical Conference, Dallas, Texas,
September 1987.
14. Espinoza, C.E., "A New Formulation for Numerical Simulation of Compaction,
Sensitivity Studies for Steam Injection," paper SPE 12246, presented at the
Reservoir Simulation Symposium, San Francisco, California, November 1983.
15. Beattie, C.I., Boberg, T.C., and NcNab, G.S., "Reservoir Simulation of Cyclic
Steam Stimulation in the Cold Lake Oil Sands," paper SPE 18752, presented at the
1989 California Regional Meeting, Bakersfield, California, April 5-7, 1989.
16. Burger, J.G., and Sahuquet, B.C., "Chemical Aspects of In-Situ Combustion - Heat
of Combustion and Kinetics," SPEJ, October 1972, pp. 410.
17. Millour, J.P., Moore, R.G., Bennion, D.W., Ursenbach, M.G., and Gie, D.N., "An
Expanded Compositional Model for Low-Temperature Oxidation of Athabasca
Bitumen," JCPT, Vol. 26, No. 3, June 1987, pp. 24-32.
18. Hallam, R.J., Hajdo, L.E., and Donnelly, J.K., "Thermal Recovery of Bitumen at
Wolf Lake," SPERE, May 1989, pp. 178.
19. Brigham, W.E., and Abbaszadeh-Dehghani, M., "Tracer Testing for Reservoir
Description," JPT, May 1987, pp. 519.
20. Arya, A., Hewett, T.A., Larson, R.G., and Lake, L.W., "Dispersion and Reservoir
Heterogeneity," SPE Res. Eng., Feb. 1988, pp. 139.
21. Mishra, S., Brigham, W.E., and Orr, F.M., "Tracer and Pressure Test Analysis for
Characterization of Areally Heterogeneous Reservoirs," paper SPE/DOE 17365,
presented at the EOR Symposium, Tulsa, Oklahoma, April 1988.
22. Redford, D.A., "The Use of Solvents and Gases with Steam in the Recovery of
Bitumen from Oil Sands," JCPT, January-February 1982, pp. 48.
23. Stone, T., and Ivory, J., "An Examination of Steam-CO2 Processes," JCPT, MayJune 1987, pp. 54.
24. Blunschi, J.H., "Simulation of a 12-Pattern Field Trial of Light Oil Steam
Flooding," SPE paper 16735, presented at the 62nd Annual Technical Conference,
Dallas, Texas, September 1987.
25. Stone, T., Boon, J., and Bird, G.W., "Modelling Silica Transport in Large Scale
Laboratory Experiments," JCPT, Vol. 25, 1986, pp. 76.
26. Reed, M.G., "Gravel Pack and Formation Sandstone Dissolution During Steam
Injection," JPT, June 1980, pp. 941.
27. Iler, R.K., "The Chemistry of Silica: Solubility, Polymerization, Colloid and
Surface Properties and Biochemistry," John Wiley and Sons, New York, 1979.
28. Sydansk, R.D., "Stabilizing Clays with KOH," paper SPE 11721, presented at the
1983 California Regional Meeting, Ventura, California, March 1983.
29. Bryant, S.L., Schechter, R.S., and Lake, L.W., "Interactions of
Precipitation/Dissolution Waves and Ion Exchange," AIChE Journal, Vol. 32,
1986, pp. 751.
30. Sorbie, K.S., Roberts, L.J., and Foulser, R.W.S., "Polymer Flooding Calculations
for Highly Stratified Brent Sands in the North Sea," Proc. 2nd European
Symposium on EOR, Paris, France, November 1982.
31. Bondor, P.L., Hirasaki, G.J., and Tham, M.J., "Mathematical Simulation of
Polymer Flooding in Complex Reservoirs," SPEJ, October 1972, pp. 369.
32. Hirasaki, G.J., and Pope, G.A., "Analysis of Factors Influencing Mobility and
Adsorption in the Flow of Polymer Solution Through Porous Media," SPEJ,
August 1974, pp. 337.
33. Scott, T., Roberts, L.J., Sharpe, S.R., Clifford, P.J., and Sorbie, K.S., "In-situ Gel
Calculations in Complex Reservoir Systems Using a New Chemical Flood
Simulator," SPE Res. Eng., November 1987, pp. 634.
856 Appendix C: Advanced Processes
34. Hubbard, S., Roberts, L.J., and Sorbie, K.S., "Experimental and Theoretical
Investigation of Time-Setting Polymer Gels in Porous Media," paper SPE/DOE
14959, presented at the 5th EOR Symposium, Tulsa, Oklahoma, April 1986.
35. Nagra, S.S., Batycky, J.P., Nieman, R.E., and Bodeux, J.B., "Stability of
Waterflood Diverting Agents at Elevated Temperatures in Reservoir Brines," paper
SPE 15548, presented at the 61st Annual Technical Conference, New Orleans,
Louisiana, October 1986.
36. Healy, R.N., and Reed, R.L., "Physiochemical Aspect of Microemulsion
Flooding," SPEJ, October 1974, pp. 941.
37. Novosad, J., "Surfactant Retention in Berea Sandstone-Effects of Phase Behavior
and Temperature," SPEJ, December 1982, pp. 962.
38. Hirasaki, G.J., "Interpretation of the Change in Optimal Salinity with Overall
Surfactant Concentration," SPEJ, December 1982, pp. 971.
39. Gupta, S.P., and Trushenski, "Micellar Flooding - Compositional Effects on Oil
Displacement," SPEJ, April 1979, pp. 116.
40. Camilleri, D., Engelsen, S., Lake, L.W., Lin, E.C., Ohno, T., Pope, G., and
Sepehrnoori, K., "Description of an Improved Compositional Micellar/Polymer
Simulator," SPE Res. Eng., November 1987, pp. 427.
41. Camilleri, D., Fil, A., Pope, G.A., Rouse, B.A., and Sepehrnoori, K., "Comparison
of an Improved Compositional Micellar/Polymer Simulator with Laboratory Core
Floods," SPE Res. Eng., November 1987, pp. 441.
42. deZabala, E.F., Vislocky, J.M., Rubin, E., and Radke, C.L., "A Chemical Theory
for Linear Alkaline Flooding," SPEJ, April 1982, pp. 245.
43. Burk, J.H., "Comparison of Sodium Carbonate, Sodium Hydroxide, and Sodium
Orthosilicate for EOR," SPE Res. Eng., February 1987, pp. 9.
44. Bunge, A.L., and Radke, C.J., "Reversible Hydrogen Uptake on Reservoir Rock,"
SPEJ, October 1985, pp. 711.
45. Doll, T.E., "An Update of the Polymer-Augmented Alkaline Flood at the Isenhour
Unit," Sublette County, Wyoming, SPE Res. Eng., May 1988, pp. 604.
46. Sydansk, R.D., "Elevated Temperature Caustic-Sandstone InteractionsImplications for Improving Oil Recovery," SPEJ, August 1982, pp. 453.
47. Mehdizadeh, A., and Handy, L.L., "Further Investigation of High Temperature
Alkaline Floods," paper SPE 13072, presented at the 59th Annual Technical
Conference, Houston, Texas, September 1984.
48. Janssen-van Rosmalen, R., and Messelink, F.T., "Hot Caustic Flooding,"
Proceedings of the First European Symposium on EOR, Bournemouth, England,
September 1981, pp. 573.
49. Nasr, T., and McKay, A.S., "Thermal Low Temperature Bitumen Recovery
Processes Using Hot Water Additives," Alberta Research Council Technical
Report 8788-16, November 1987.
50. Herzig, J.P., Leclerc, D.M., and LeGoff, P., "Flow of Suspensions Through Porous
Media - Applications to Deep Filtration," Ind. Eng. Chem., Vol. 63, 1979, pp. 8.
51. Tienard, C., and Payatakes, A.C., "Advances in Deep Bed Filtration," AIChE J.,
Vol. 25, 1979, pp. 737.
52. Gruesbeck, C., and Collins, R.E., "Entrainment and Deposition of Fines Particles
in Porous Media," SPEJ, Vol. 22, 1982, pp. 847.
53. Khilar, K.C., and Folger, H.S., "Water Sensitivity of Sandstones," SPEJ, February
1983, pp. 55.
54. Schmidt, D.P., Soo, H., and Radke, C.J., "Linear Oil Displacement by the
Emulsion Entrapment Process," SPEJ, June 1984, pp. 351; Soo, H., and Radke,
C.J., "Flow of Dilute Stable Liquid and Solid Dispersions in Underground Porous
Media," AIChE J., Vol. 31, 1985, pp. 1926.
55. Becher, P., "Emulsions: Theory and Practice," 2nd Ed., Reinhold, New York,
1965.
56. Spielman, L.A., and Su, Y.P., "Coalescence of Oil-in-Water Suspensions by Flow
Through Porous Media," Ind. Eng. Chem. Fund., Vol. 16, 1977, pp. 272.
57. Roof, J.G., "Snapoff of Oil Droplets in Water Wet Pores," SPEJ, March 1970, pp.
85.
58. French, T.R., Bruz, J.S., Lorenz, P.B., and Bertus, K.M., "Use of Emulsions for
Mobility Control During Steam Flooding," paper SPE 15052, presented at the 56th
California Regional Meeting, Oakland, California, April 1986.
59. Chung, K.H., and Butler, R.M., "In-situ Emulsification by the Condensation of
Steam in Contact with Bitumen," CIM paper 88-39-18, presented at the 39th
Annual Technical Conference, Calgary, Alberta, June 1988.
60. Salager, J.L., Loaiza Maldonado, I., Minana-Perez, M., and Silva, F., "SurfactantOil-Water Systems Near the Affinity Inversion Part I: Relationship Between
Equilibrium Phase Behavior and Emulsion Type and Stability," J. Disp. Sc. Tech.,
Vol. 3, 1982, pp. 279.
61. Dilgren, R.E., Deemer, A.R., and Owens, K.B., "The Laboratory Development and
Field Testing of Steam/Noncondensible Gas Foams for Mobility Control in Heavy
Oil Recovery," paper SPE 10774, presented at the 1982 California Regional
Meeting, San Francisco, California, March 1982.
62. Ploeg, J.F., and Duerksen, J.H., "Two Successful Steam/Foam Field Tests,
Midway-Sunset Field," paper SPE 13609, presented at the 1985 California
Regional Meeting, Bakersfield, California, March 1985.
63. Holm, L.W., and Garrison, W.H., :"CO2 Diversion With Foam in an Immiscible
CO2 Field Project," SPE Res. Eng., February 1988, pp. 112.
64. Friedmann, F., Chen, W.M., and Gauglitz, P.A., "Experimental and Simulation
Study of High Temperature Foam Displacement in Porous Media," paper
SPE/DOE 17357, presented at the Enhanced Oil Recovery Symposium, Tulsa,
Oklahoma, April 1988.
65. Handy, L.L., Amaefule, J.O, Ziegler, V.M., and Ershagi, I., "Thermal Stability of
Surfactants for Reservoir Application," SPEJ, October 1982, pp. 722.
66. Lau, H.C., and O'Brien, S.M., "Surfactant Transport Through Porous Media in
Stream Foam Processes," paper SPE 14391, presented at the 60th Annual
Technical Conference, Las Vegas, Nevada, September 1985.
67. Lau, H.C., and O'Brien, S.M., "Effects of Spreading and Nonspreading Oils on
Foam Propagation Through Porous Media," SPE Res. Eng., August 1988, pp. 893.
68. Jensen, J.A., and Friedman, F., "Physical and Chemical Effects of an Oil Phase on
the Propagation of Foam in a Porous Media," paper SPE 16375, presented at the
California Regional Meeting, Ventura, California, April 1987.
69. Mohammadi, S.S., Van Slyke, D.C., and Ganong, B.L., "Steam-Foam Pilot Project in
Dome-Tumbador Midway-Sunset Field," SPERE, February 1989, pp. 7.
Overview
This appendix contains detailed descriptions of the fluid component models as well as rockfluid model used by STARS, divided into the following sections.
D.1
D.2
D.3
D.4
D.5
D.6
D.7
D.8
D.9
D.10
D.11
D.12
D.13
D.14
D.15
D.16
D.17
D.18
D.19
D.1
Aqueous
X
Oleic
Gaseous
X
X
Water
Dead Oil
Solution Gas
Oleic
Gaseous
X
X
X
Steam-Additive System
When differential vaporization of oil is part of the EOR process, the oil must be represented
as more than one component, as shown in Figure D.3. Gaseous additives such as naphtha and
water-soluble carbon dioxide also might be used, as shown in Figure D.3.
COMPONENT
PHASE
Water
Heavy Oil
Light Oil
Naphtha
Carbon Dioxide
Aqueous
X
Oleic
Gaseous
X
X
X
X
X
X
X
X
Combustion System
In combustion, vaporization and chemical reactions often affect different parts of the oil
phase. These processes may involve non-soluble air and reaction products and a solid coke
fuel, as shown in Figure D.4.
COMPONENT
PHASE
Water
Asphaltenes
Maltenes
Light Oil
CO2
N2 / CO
Oxygen
Coke Fuel
Aqueous
X
Oleic
X
X
X
X
Gaseous
X
Solid
X
X
X
X
X
X
Aqueous
X
X
X
X
Oleic
Adsorbed
X
X
Aqueous
X
X
Oleic
Solid
X
X
Aqueous
X
X
Oleic
Gaseous
X
X
Adsorbed
X
Aqueous
X
X
Oleic
Gaseous
X
X
Adsorbed
X
X
X
D.2
Water Components
Water is a standard component, and internal defaults are available for vapor-liquid K-values,
density, viscosity and heat capacity. The Stones model for oil relative permeability assumes
that the aqueous phase is the wetting phase, that is, the phase that contacts the rock at the pore
level.
The STARS thermal model allows for other component besides water in the aqueous phase.
Carbon dioxide solubility in water can be significant, and the aqueous phase can transport CO2
to oil which otherwise might not be contacted. A labeled water tracer may be used to monitor
formation versus fresh water, or salt or ion components. Other likely aqueous components are
caustic, surfactants and polymers, as well as dispersed phase components like oil emulsion
droplets and mobile fines. Often the presence of these components affects water phase
propagation characteristics - viscosity, relative permeability, and water phase resistance factors.
Oil Components
Oil components are of two types: A pure component consists of a single molecular species,
such as a hydrocarbon CnHm, or a soluble hydrocarbon gas such as CH4.
A pseudo-component is a group of molecular species, lumped together and with a fixed
distribution. An example is the dead oil component in a black-oil model, which usually
includes all hydrocarbon species except CH4. A pseudo-component could consist of a limited
group of molecular species, such as C7 to C9. Native oil may be split into pseudocomponents using the following techniques.
1. Molecular Weight. For example, one pseudo-component may be all hydrocarbons
with molecular weight between 200 and 400, with a fixed average value.
2. Distillation Analysis. For example5, one pseudo-component could be the fraction
of the oil which vaporizes between 15C and 300C. This fraction may be
separated physically, and its properties either measured in the lab or estimated
from a characteristic boiling temperature or molecular weight.
3. Solubility Analysis. A series of solvents is used to separate soluble parts of the oil
from insoluble parts. The properties of the resulting fractions are measured in the
lab or estimated using a characteristic boiling temperature or molecular weight.
4. Equation of State. An oil can be characterized accurately with many (10 to 30)
components by matching PVT and VLE lab data with an equation of state package,
such as CMGPROP6. The result of lumping these components into a few (2 to 5)
pseudo-components can be tested with the same software. Properties estimated for
these lumped components may be used directly.
An oil component may be volatile to some degree, in which case K-values and gas phase
properties must be supplied, in addition to oil phase properties. A dead oil component will
have zero K-value.
Gas Components
Gas components are those that normally make up the gas phase at standard conditions, such
as solution gas, CO2 and air, and normally will have K-values greater than one.
A condensable gas is a gas component which is soluble in a liquid phase. Properties in both
the liquid and gas phases must be supplied, along with K-values. An example is the solution
gas component in black-oil models. Liquid phase properties may be only apparent, that is,
cannot be measured directly because that component does not form a liquid phase by itself at
the conditions of interest. In this case, indirect estimates are made.
A non-condensable gas is one for which the solubility in liquid is small enough to be
ignored. Such a component exists only in the gas phase, theoretically corresponding to an
infinitely large K-value. Instead, these components are treated differently from the
condensable components: K-values and liquid property data are not required, and the
corresponding properties and equation terms are skipped.
Typical examples are oxygen and nitrogen (air), and carbon monoxide, used in combustion.
Carbon dioxide and methane may be condensable or non-condensable, depending on which
processes are of interest. Often the non-condensable gases nitrogen and carbon oxides are
lumped into one functional component, called inert gas.
Adsorbed or Trapped Components
An adsorbed component is a non-mobile component which is in equilibrium with its fluid
phase counterparts. This equilibrium relationship is expressed as a (temperature dependent)
adsorption isotherm describing amount adsorbed as a function of a specified fluid phase
composition. In essence, the adsorption isotherm acts as a fluid-solid phase K-value.
Typical adsorbed species include polymers and surfactants as well as inorganic cations
(sodium, calcium, and hydrogen) which can ion exchange with the rock. Since the actual
capture mechanism is not specified via phenomenological adsorption isotherms, the list of
adsorbed species can also be extended to capture dispersed component particles such as
fines, emulsions, and foam lamellae, when the capture process is fast relative to the flow (i.e.
the equilibrium assumption holds).
Solid or Trapped Components
Traditionally, a solid component is usually the solid coke fuel deposited on the rock when the
heavy parts of the oil are cracked at higher temperature. It is characterized by its H to C ratio,
and is commonly assumed to be HC. In addition, some simple types of formation dissolution
can be modelled by calling Vr the volume of insoluble rock and Vs the volume of soluble
rock, such as when carbonate is dissolved in the presence of CO2. In each case, the porosity
change is accounted for.
Again, because the rate expressions for creating or destroying solid components are general
phenomenological interphase mass transfer equations, the list of solid species can be
extended to include dispersed component particles such as fines, emulsions, and foam
lamellae. However, in this instance, the rate of capture (and/or release) is of importance (i.e.
a nonequilibrium process).
D.3
Definitions of K Values
In compositional models, the phase equilibrium is specified via phase equilibrium ratios (Kvalues). These may be obtained from some thermodynamic model e.g. Peng-Robinson
equation of state or input directly as functions of pressure, temperature and composition.
STARS requires the latter approach. For three phases (aqueous, oleic, and gaseous), three Kvalues can be defined for each component i,
K igw =
yi
y
x
, K igo = i , K iow = i
wi
xi
wi
(D3.1)
but only two of these are independent (the third is a ratio of the other two). For ease of input
and to reduce the number of nonzero K-values required, STARS groups components as
water-like, oil-like, and non-condensable gases depending on the choice of reference phase i.e. which K-value is viewed as dependent and is not required. For the water-like
components, water is the reference phase and
y
x
K igl i , K ill i
wi
wi
1,...,NUMW
(D3.2)
are input. For the oil-like components, oil is the reference phase and
y
w
K igl i , K lli i
xi
xi
NUMW+1,...,NUMX
(D3.3)
are input. for the non-condensable gases, gas is the reference phase, and in addition the Kvalues
K iwg
wi
x
0, K iog i 0
yi
yi
NUMX+1,...,NUMY
(D3.4)
are assumed zero so no K-values input is required. The simpler partitioning assumptions of a
thermal black-oil model follow directly by setting NUMW=1 (one water-like component) and
setting all liquid-liquid K-values equal to zero (no partitioning of water in oil and vice versa).
Vapor Pressure Perspective
A black-oil model approaches phase equilibrium from a solubility angle, where the physical
concepts are expressed in terms of bubble point pressure and gas-oil ratios. However, the
wide range of processes involved in thermal EOR requires that a more general compositional
approach be taken here, starting with a vapor pressure perspective of phase equilibrium.
Consider pure component i in its liquid state at temperature T. When this liquid is
decompressed (pressure decreased) at constant temperature the vapor phase will appear at a
certain pressure. In fact, the liquid and vapor phases will coexist at only one pressure, called
the vapor pressure at that temperature. Similar measurements at other T will result in a vapor
pressure curve, written as p = psat(T). A steam table is an example of a vapor pressure curve.
A pure-component vapor pressure is a function only of T.
Consider a two-phase mixture of one or more components in phase equilibrium, with mole
fractions xi and yi. The following two key concepts are required:
1. Vapor pressures pvi and pressure p are low enough that all fugacity coefficient
corrections are negligible.
2. The liquid is assumed to be an ideal mixture, whereby pure-component properties
can be used, that is, mixed proportional to xi. This means that pvi(T) is
independent of xi.
The combination of these concepts results in Raoult's Law:
The partial pressure exerted by each component in an ideal solution is the mole-weighted
pure-component value (Ref. 7, p. 404).
If we denote the partial pressure in the gas phase as yip, then Raoult's Law can be written as
yip = xipvi(T)
(D3.5)
(D3.6)
Knowing this, it is easy to calculate K-value data from vapor pressure data. Also note that Ki
is naturally a function of p and T.
Derivation of Simple Correlation
The simple K-value correlation mentioned previously can be derived from thermodynamic
theory. Consider the Clausius - Clapeyron equation
p v
T
sat
H
T V
(D3.7)
where V is the molar volume and denotes the difference between the liquid and vapor
values (Ref. 7, pp. 250-251).
If we assume that
1. p v is low enough that the liquid volume is negligible compared to the gas volume,
so that V = Vg
2. the vapor phase is ideal, so that Vg = RT / p, and
3. the heat of vaporization H is constant,
then we can integrate
dp v p v H
=
dT
RT 2
(D3.8)
(D3.9)
If we let
a = p v (T1 ) exp [+ b / T1 ]
(D3.11)
b = H / R
(D3.10)
then
pv (T) = a exp(-b/T)
(D3.12)
(D3.13)
This derivation gives us a thermodynamic basis for estimating the coefficients a and b.
0
-1
-2
-3
ln (pv / pc )
-4
-5
-6
-7
-8
-9
-10
1
Tc /T
Figure D.9: Vapor pressure curve from Van der Waal's EOS
This correlation works surprisingly well over a wide range of p and T, even up to the
component's critical point. To test the accuracy of the correlation, Van der Waal's equation
of state was used to calculate vapor pressures which were plotted as ln (pv/pc) versus Tc/T, in
Figure D.9. The curve of the EOS result is nearly straight, and its slope changes significantly
only near the critical point (Table D.1). The correlation's results lie exactly on a straight line.
For example, the straight line fitted through the critical point and the last point in Table D.1 is
described as follows:
Average slope is:
(D3.14)
Correlation is
ln(pv/pc) = -3.434 (Tc/T-1)
(D3.15)
or
pv(T) = 31.00 pc exp(-3.434 Tc/T)
1/T r
Slope is
Tr
(D3.16)
ln (pr)
pr
slope
1.100
0.9091
-0.3926
0.6753
-3.858
1.500
0.6667
-1.8608
0.1556
-3.532
2.000
0.5000
-3.5831
2.7789 10 -2
-3.386
3.000
0.3333
-6.9360
9.7217 10 -4
-3.343
3.800
0.2632
-9.6161
6.6649 10 -5
-3.351
d ln (p r )
d (1 / Tr )
Tr h r
Z c p r Vr
where
pr
Tr
hr
Vr
Zc
critical compressibility p c V c/RT c (=0.375 for the Van der Waal EOS)
As described by van Quy et al8 and Young and Stephensen9. Hand's rule is a tie-line
relationship that assumes, for a ternary system, that all tie-lines intersect at a given point. As
illustrated in Figure D.10 below, this allows a normalized composition variable u to be defined
u=
z3
Az 2 + B
(D3.17)
such that Au and Bu are the slope and intercept of the tie-line corresponding to the given
global composition (z1, z2, Z3), since
z3 = (Au) z2 + (Bu)
(D3.18)
With A, B defined as the slope and intercept of the critical tie line, the composition variable u
ranges between [0, 1].
Defining the K-values KiBA
K iBA =
(D3.19)
valid input for this system would be K1BA(u), K2BA(u), K3BA(u) for a set of u values [0,1].
z3
critical point
critical tieline
phase A compositions
phase B compositions
z1
z2
This approach is useful for gas-oil systems, allowing multiple-contact miscible descriptions
of vaporizing-gas and condensing-gas drive processes10, as well as describing water-oil
mixing for surfactant injection processes11. In this latter case, it is often sufficient to assume
surfactant partitions out totally in the water phase (lower phase microemulsion) or totally in
the oil phase (upper phase microemulsion) depending on e.g. brine salinity. Here the above
scheme reduces to B 0, and only one component has Ki (u) nonzero when the K-values are
suitably defined. Thus for an upper phase microemulsion
K iow = K iow (u ) = 1 = water component can partition in oil
K 2wo = 0
K 3wo = 0
(D3.20)
D.4
Fluid Densities
c
wi
1
=
w i =1 wi
(D4.1)
c
xi
1
=
o i =1 oi
(D4.2)
Densities w and oi are inverses of phase molar volumes. Component densities wi and oi
are inverses of the corresponding partial molar volume7, and should be regarded as the purecomponent contribution to the phase volume.
For liquid oil components it is possible to measure densities directly in the lab, and to use
estimations from the literature. But it is unlikely that a soluble gas component such as
methane will exist alone in a liquid phase, at least at the p and T of interest. The following
example illustrates the meaning of oi in this case, and how it is obtained.
Example: Suppose 1m3 of live oil contains 4.415 kg mole of dead oil and 0.5 kg mole of
solution gas. Suppose also that lm3 of dead oil contains 4.5 kg mole.
The mixed phase density of the live oil is o = (4.415+0.5)/lm3 = 4915 kg mole/m3. The
density ol is 4.500 kg mole/m3. The mole fraction of dead oil is x1 = 4.415/4.915 0.8983,
and x2 = 1-x1. The formula for o2 is
1
0.8983 0.1017
=
+
4.915 4.500
o2
(D4.3)
A
1
o1
B
Phase
Molar
Volume,
1
o
1
o2
One would not measure this density directly in the lab. Instead, a graph such as Figure D.11
is used. Molar volumes of samples with different gas content (points A and B) are plotted
against mole fraction, and the slope is extrapolated to x2 = 1 where
0 = o 2 .
The pure component densities wi and oi are simple correlation functions of T and p:
(D4.4)
where
a is the compressibility,
b+cT is the thermal expansion coefficient as a function of temperature, and
owi is the density at reference conditions pr and Tr.
1. Calculate p and T from gas phase composition and Redlich-Kwong mixing rules,
assuming zero interaction coefficients.
a=
nc
i =1
(D4.6)
y i Tci Tci / p ci
nc
b = y i Tci / p ci
(D4.7)
i =1
pc = Tc / b
(D4.8)
Z 3 Z 2 + A B 2 B Z AB = 0
(D4.9)
where
A = 0.427480 (p / p c ) (Tc / T )2.5
B = 0.086640 (p / p c ) (Tc / T )
(D4.10)
(D4.11)
D.5
Viscosity
Water Phase
Water phase viscosity tends to be relatively constant at 1 cp, and decreases as far as 0.1 cp at
300C. The main purpose of allowing entry of water viscosity data is to account for the
various brine concentrations encountered in different reservoirs.
The STARS model has the following data entry options:
1. Use internal table of w versus T, with a possible dependence on salt concentration
which can be significant.
2. Use the correlation w = a exp (b/T), where T is in absolute degrees.
3. Enter directly a table of w versus T.
Gas Phase
Gas phase viscosities usually are much smaller than liquid phase values, and hence will tend
to dominate the flow if gas phase is mobile. As a consequence, pressure gradients may be
high when gas is immobile, but will certainly be low when gas is flowing. Gas phase
viscosities have values around 0.01 cp.
The STARS model has the following gas viscosity options:
1. Correlation
g = 0.0136 + 3.8 10 5 T
(D5.1)
(D5.2)
i gi
g =
i =1
nc
(D5.3)
i =1
where
i = y i M i
(D5.4)
because viscosities gi for different components are quite similar, and the T
dependence is not strong, the first option mentioned above is often sufficient.
3. Same as option (2), but with an additional correction to g for high pressure.
Oil Phase
In many steam-injection processes the o-versus-T function will contain much of the
nonlinearity in the flow equations.
This is because o can decrease by several orders of magnitude over only a modest
temperature increase. Therefore, it is crucial that the temperature dependence of o be
represented adequately. In addition, the effect of soluble gas components on o can be
significant, and so must be accounted for.
The oil phase viscosity is obtained by a logarithmic mixing rule:
ln ( o ) =
nc
i =1
x i ln ( oi )
(D5.5)
For liquids the component value oi can be measured directly or estimated from correlations or
tables. However, for a soluble gas such as methane, a measured value for the liquid phase may
be difficult to find.
In this case, as was the case for oil phase density calculations, oi must be regarded as the
contribution of the soluble gas toward the viscosity of the liquid mixture.
Figure D.12 shows that plotting ln(o) versus mole fraction for various values of gas content
will yield a value for the gas component o2 by extrapolating x2=1.
ln ( o1 )
ln (o )
ln ( o2 )
0
Example: Suppose a dead oil component has a viscosity of o1=1000 cp. When some soluble
gas is added and mixed thoroughly, the live oil viscosity is found to be o=300 cp, and the
mole fraction is calculated to be x2=0.20. The equation for o2 is
(D5.6)
so
ln(o 2 ) = 0.1776 and o 2 = 1.19 cp
(D5.7 )
In the case of a soluble gas, o2 is the viscosity of a hypothetical liquid composed of 100%
solution gas. Note that o2 is NOT the viscosity of solution gas in the gas phase. Note also
that the above sample calculation must be done at other temperatures, in order to obtain the
dependence of o2 on T.
The component values oi may be specified using one of the following two options.
1. Correlation oi = ai exp (bi/T), where T is in absolute degrees.
Coefficients can be calculated from two points on the curve. For example, a heavy
oil component may have
oi = 10 4 cp at 20C (= 293 K )
(D5.8)
oi = 10 cp at 300C (= 573 K )
(D5.9)
Just solve
10 4 = a i exp (b i / 293)
10 = a i exp (b i / 573)
(D5.10)
(D5.11)
( )
ln 10 4 ln (10)
= 4141.9 K
1 / 293 1 / 573
(D5.12)
(D5.13)
For situations where the normal mixing rule for phase viscosities does not appear adequate,
an approach based on a nonlinear mixing rule for a key component can be employed.
Basically, the linear logarithmic mixing rule
ln =
x i ln i
(D5.14)
(D5.15)
for one key component "a". The requirement that the pseudo-compositions still sum to 1
yields a condition on the normalizing factor N:
f (x a ) + N x i = 1
(D5.16)
ia
N =
1 f (x a )
1 xa
(D5.17)
1 f (x a )
1 xa
i a
x i ln i
(D5.18)
If f(xa) is linear then this form reduces to the original mixing rule. The function f(xa) can in
principle be quite general such that the nonlinear interval can be in any region between xa =
0.0 and xa = 1.0.
1.0
f(x a )
ln
f 11
.
.
.
.
.
f1
x al
xa
xau
1.0
Figure D.13: Nonlinear mixing function for key component "a" illustrating the range of values (between xal
and xau) over which the nonlinear function is assumed to apply and the method by which the function is input
into the simulator
Figure D.13 shows the general form of this function and illustrates that outside the specified
range, a linear function is assumed. This figure also illustrates the manner in which the
nonlinear mixing function is entered - namely that the values of this function over 10 equally
spaced intervals between xal and xau.
13
ln o
12
11
10
f(x a ) = 0.031
x a = 0.05
5
0.
.01
.02
.03
.04
.05
.06
.0 7
.08
.09
.1
x a or f(xa)
2
Figure D.14: Fit of nonlinear curve o = b e Bx a + a to the nonlinear viscosity mixing function illustrating
how the 6th value (f(xa = 0.05) can be obtained graphically (Parameter values b = 3x105 cp; a = 6x102 cp;
B = 500; xamax=0.1)
In order to obtain this function, the recommended method is to plot values of the logarithm of
the phase viscosity versus concentration of the key component, as illustrated in Figure D.14.
A straight line joining the ln values at the two extremes of the region is also plotted. The
first curve is ln as a nonlinear function of xa while the second is the equivalent curve of ln
as a linear function of f(xa). This equivalence is established for each of the 11 equally
spaced values of xia by connecting the appropriate ln ( xia) on the first curve to the same
value on the straight line curve the concentration value for this point is then f(xia), as
illustrated explicitly in Figure D.14 for the 6th value, x6a. Table D.2 gives the complete
results for the first example problem, illustrating viscosity reduction of bitumen by the
addition of solvent.
0.00
0.01
0.02
0.03
0.04
0.05
o ln o
3.006 x 10 5
2.790 x 10 5
2.229 x 10 5
1.533 x 10 5
9.09 x 10 4
4.65 x 10 4
12.61
12.54
12.31
11.94
11.42
10.25
0.00
0.001
0.005
0.011
0.020
0.031
0.06
0.07
0.08
0.09
0.10
2.07 x 10 4
8.19 x 10 3
3.07 x 10 3
1.29 x 10 3
7.66 x 10 2
9.94
9.01
8.03
7.16
6.64
0.045
0.060
0.077
0.092
0.100
xa
f(x a)
Table D.2: Fit of nonlinear curve o = be Bx a + a to the nonlinear viscosity mixing function. The
appropriate f(xa) functions are obtained graphically employing the construction illustrated in Figure D.15
(Parameter values : b = 3x105 cp; a = 6 x102 cp; B = 500; x amax = 0.1) )
A second example generalizes somewhat the above approach by normalizing f x amax = 1.0
( )
)
viscosity a is set as (x =
instead of employing f x
max
situations when the expected range of compositions xa << 1 and pure component viscosities
(xa = 1) are unknown or become meaningless for the problem to be simulated. A typical
example of this situation is polymer viscosity modifications to the aqueous phase, see Figure
D.15 and Table D.3.
cp
0.0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
1.000
1.111
1.248
1.417
1.624
1.875
2.176
2.533
2.952
3.439
4.000
ln p
0.0
0.105
0.222
0.349
0.485
0.629
0.777
0.929
1.082
1.235
1.386
xp (mass frac)
0.0
10 -4
2 x 10 -4
3 x 10 -4
4 x 10 -4
5 x 10 -4
6 x 10 -4
7 x 10 -4
8 x 10 -4
9 x 10 -4
1 x 10 -3
f(xp )
0.0
7.5 x 10 -5
1.6 x 10 -4
2.5 x 10 -4
3.5 x 10 -4
4.5 x 10 -4
5.6 x 10 -4
6.7 x 10 -4
7.8 x 10 -4
8.9 x 10 -4
1.0 x 10 -3
fN (x p)
0.0
0.075
0.16
0.25
0.35
0.45
0.56
0.67
0.78
0.89
1.00
Table D.3: Fit of nonlinear curve r = w 1 + Acp + A 2c2p + A 3c3p to the nonlinear viscosity mixing function. The
appropriate f(xp) functions are obtained graphically (see Figure D.12) and then are normalized by dividing by
. (Parameter values : w = 1cp; A1 = 10; A 2 = 102 ; A 3 = 103 ) . Concentration units in equivalent forms:
f x max
p
cp = 0.1 wt% is equivalently 103 ppm; 10-3 mass fraction; 10-6 mole fraction if Mw p = 18 kg/gmole
1.6
ln p
1.4
1.2
.8
.6
.4
.2
.1
.2
.3
.4
.5
.6
x p (mass fraction) x 10
.7
.8
.9
Figure D.15: Fit of nonlinear curve p = w 1 + Acp + A 2c 2p + A3c3p to the nonlinear viscosity mixing function.
2
(Parameter values : w = 1cp; A1 = 10; A 2 = 10 ; A 3 = 10 ) and concentration values in weight percent converted
to mass fractions)
D.6
v
is approximately 1x10-7. Note that the ratio
/ is equivalent to a reference velocity of vr = 1x107 ft/day (3x106m/day). Often not all the
required relative permeability and capillary pressure data change as a function of
interpolation (e.g. oil-water relative permeabilities change as a function of surfactant
concentration but not the gas-oil curves). In these cases the original curves for the latter
properties are duplicated for the second input set.
As an example of this option, consider the addition of surfactant to a water-oil system.
Figure D.16 illustrates how the water-oil interfacial tension is affected by the addition of
surfactant, while Figure D.17 shows how the residual saturations can be expected to change
with changing capillary number. The overall effect of surfactant addition to the water-oil
relative permeability curves is given in Figure D.18. These curves demonstrate that as
interfacial tensions are reduced to ultra-low values, residual saturations decrease and relative
permeability curves approach straight lines. Intermediate values of capillary number indicate
flow behavior between the high tension and low tension curves.
Finally, a word of caution when employing this option. As always, it is the nonlinearities
associated with the relative permeabilities which are a major source of convergence problems
(when they arise) in reservoir simulation. This statement is doubly true here since now
relative permeabilities are functions of both saturation and interpolation parameter. It is
always a good idea to plot the relative permeability curves employed to check that the
nonlinearities are not too unreasonable.
T = 95 C
0
o
T=5 C
log 10 (ift)
-1
-2
-3
-4
0
Figure D.16: Log10 (interfacial tension) versus surfactant concentration (mole fraction) at 2 temperatures
S wc
S or
t 22
t 12
t21 t11
log 10 N ca
Figure D.17: Behavior of residual saturations as a function of the logarithm of capillary number. Example
detrapping parameters (t22 = -4.22; t12 = -4.00; t21 = -2.22; t11 = -1.68)
.8
.6
Relative
Permeability
.4
.2
0
0
.2
.4
.6
.8
Water Saturation
Figure D.18: High tension (___ no surf) and low tension (---- surf) water-oil relative permeability curves
Temperature Dependence
When relative permeability data is entered, critical saturations (Swr1, Swr2, etc.) and end
points (krwrol, krwro2, etc) at two temperatures T1 and T2 are obtained from the table entries
or are specified explicitly; table entries are then scaled from 0 to 1. When a relative
permeability at T is required, the critical saturations are evaluated (Table D.4) and then the
dimensionless saturations Sew and Sel are calculated from Sw and So (see the Stone's models,
below). The four two-phase values are obtained via table lookup, and then adjusted to
temperature T according to Table D.5.
Quantity
Slope
Interpolation
Swc
(Swr2-Swr1)/(T2-T1)
Swr1+slope(T-T1)
Sorw
(Sorw2-Sorw1)/(T2-T1)
Sorw1+slope(T-T1)
Sorg
(Sorg2-Sorg1)/(T2-T1)
Sorg1+slope(T-T1)
Sgc
(Sgr2-Sgr1)/(T2-T1)
Sgr1+slope(T-T1)
Quantity
Slope
Interpolation
krw
(krwro2/krwro1-1)/(T2-T1)
krw(Sew)[1+slope(T-T1)]
krow
(krocw2/krocw1-1)/(T2-T1)
krow(Sew)[1+slope(T-T1)]
krog
(krgcw2/krgc1-1)/(T2-T1)
krog(Sel)[1+slope(T-T1)]
krg
(pcg2/pcg1-1)/(T2-T1)
krg(Sel)[1+slope(T-T1)]
pcow
(pcw2/pcw1-1)(T2-T1)
pcow(Sew)[1+slope(TT1)]
pcog
pcog(Sel[1+slope(T-T1)]
T is constrained to fall in the range (T1, T2)
krw(Sew) etc., are table look-ups at T1
(pcg2/pcg1-1)(T2-T1)
Finally, a Stone's model (usually model II) is used to estimate the middle phase relative
permeability, kro.
Stone's Three-Phase Model II (modified)
(D6.1)
where krocw = krow (Sw = Swc) = krog (Sg = 0) to ensure that kro = krow when Sg = 0 and that
kro = krog when Sw = 0 (or Swc). If a negative value is calculated for kro, then kro = 0 is
assumed. The critical liquid saturation may or may not contain critical water. Even if all the
two-phase data is consistent and physical, Stone's model II can predict kro > 0 when So = 0,
which will cause nonconvergence (flow of nonexistent oil). The STARS model will perform
a check for this condition when the three-phase table is printed.
Stone's Three-Phase Model I (modified)
Stone's model I is constrained by the requirements that Sorw = Sorg and Sgc = 0. The threephase oil relative permeability calculation is13:
Som = Sorw = Sorg
Seo = (So - Som) / (1 - Swc - Som)
Sew = (Sw - Swc) / (1 - Swc - Som)
Seg = Sg / (1 - Swc - Som)
Sel = 1 - Seg
(D6.2)
(D6.3)
where krocw = krow (Sw = Swc) = krog (Sg = 0) to ensure that kro = krow when Sg = 0 and that
kro = krog when Sw = Swc.
Critical Water in Liquid
The liquid saturation Sl in the liquid-gas data from labs either contains irreducible water or
not. Consider the following lab procedure.
1. Flood evacuated core with water to get Sl =1 and Sw = 1,
2. Flood with oil until irreducible water is reached, resulting in Sl = 1 and Sw = Swc,
3. Optionally, flood with water to get imbibition data, but flood with oil to return to
Sl = 1 and Sw = Swc, and
4. Flood with gas until irreducible liquid is reached, whereby Sl = Slc and Sw = Swc.
This lab sequence will result in liquid-gas data which include critical water in Sl. However,
some gas floods are done from an oil-saturated core. Make sure the data is assigned correctly.
Notes:
1. The curve of krg (Sg) can be the major source of nonlinearity in a steam-injection
simulation.
2. The amount of mobile water (Swi - Swc) is the major factor in determining initial
injectivities in heavy oil problems.
D.7
The rate of propagation of many additives (surfactants, caustic, and polymers) and in situ
created species (fines, emulsions) are strongly affected by their interaction with the rock
matrix. These interactions can be chemical (e.g. ion exchange) or mechanical (e.g. blockage,
straining capture) or some combination of mechanisms. The capture levels can depend on
fluid concentrations, temperature and rock type (e.g. permeability).
STARS allows a phenomenological description of these phenomena, wherein a set of
constant temperature adsorption isotherms (adsorption level as a function of fluid
composition) are input. These isotherms can be either in tabular form or in terms of the well
known Langmuir isotherm correlation
AD =
Az
1 + Bz
(D7.1)
where z is some fluid component composition and where A and B are generally temperature
dependent. The component and the fluid phase are specified by the user. Note the maximum
adsorption level associated with this formula is A/B. Isotherms for up to four different
temperatures can be supplied. Most often it is expected that adsorption decreases as
temperature increases. Multiple components may adsorb, each with their individual
isotherms, although it is assumed that individual species adsorb independently.
Some discussion of adsorption units is now given. Because of the form of the adsorption
term in the flow equations,
mass) of component i adsorbed per unit volume. A variety of other measures of adsorption
levels can be employed, and these must be appropriately converted for simulator input
requirements.
Example: A surfactant adsorption maximum of 2.0 mg/g rock is reported at a water phase
concentration of 0.4 wt%. Convert this information to appropriate Langmuir isotherm values.
The major task is to convert rock mass fraction information to pore volume. Porosity and
rock density information are required. Assume porosity = 0.3 and rock density r = 2.7
g/cm3 (quartz). Then
mgsurf (1 ) r grock
gsurf
x
x10 3
3
grock
mgsurf
cm PV
gsurf
=1.25x10 2
cm 3 PV
Ad i = 2.0
(D7.2)
Ideally, not only the adsorption maximum but the rate of increase of adsorption with fluid
composition should be known in order to fit the two Langmuir parameters A and B. If this is
not reported, as is often the case, one must use the fluid composition at the adsorption
maximum to indirectly determine this second factor. The Langmuir isotherm equation can be
rewritten as
A Bz i
Ad i = x
B 1+ Bz i
(D7.3)
and the second factor is of order O(1) when Bzi 10. In the above example, the maximum
adsorption level occurs at 0.4 wt% which is equivalent to a mass fraction concentration of zi
= 0.004. Thus
Bzi = 10
B = 2.5 x 103
(D7.4)
With the value of B established, the adsorption maximum level can be used to determine A
gsurf
gsurf
A
= 1.25x10 2
A = 31.5
3
B
cm PV
cm 3 PV
(D7.5)
These are appropriate parameter values for laboratory mass fraction units. S.I. units are
equivalently
A = 31.5 x 10 3
kg surf
m 3 PV
(D7.6)
= 2.5 x 10 3
In mole fraction units, the surfactant molecular weight is also required (e.g. MW = 400
g/mole) implying an adsorption maximum
Ad i = 1.25x10 2
= 3.15x10 5
gsurf
molesurf
gsurf
cm PV 4x10
3
(D7.7)
molessurf
cm 3 PV
MW water
MW surf
18
400
(D7.8)
= 1.8 x 10 4
= 5.56 x 10 4
(mole fraction
A = 1.75
units )
(D7.9)
moles surf
cm 3 PV
or in SI units
A = 1.75 x 10 6
moles surf
cm 3 PV
(mole fraction
units )
(D7.10)
= 5.56 x 10 4
Maximum adsorption levels ADMAXT and residual adsorption levels ADRT can be made
region dependent, so that these properties can vary from grid block to grid block.
Specification of residual adsorption levels allows the flexibility of modelling both reversible
(i.e. chemical) adsorption ADRT = 0.0 and irreversible (i.e. mechanical) adsorption ADRT =
ADMAXT, as well as partially reversible process.
Permeability alteration often accompanies adsorption (especially if adsorption is of
mechanical, blockage type). The simulator accounts for this via region dependent resistance
factors RRF which allow correlation of local permeability with local adsorption levels - it is
assumed that only single-phase flow paths are altered. Thus for example, the water phase
permeability reduction factor is defined as
RKW = 1.0 + (RRF - 1.0) AD/ADMAXT
(D7.11)
which varies between 1.0 and a maximum of RRF as adsorption level increases. The
mobility of the water phase is divided by RKW, thus accounting for blockage.
D.8
One extra flow equation (for surfactant) is employed (implying limited increased
simulation costs)
Simplicity allows rapid screening tests and field pilot matching to be effectively
utilized
Furthermore, this approach provides a useful background for more complex (i.e. mechanistic)
studies of foam flow, as outlined in Section D.16.
The basic requirement of this model is a correct description of the flow of surfactant
component. Surfactant data requirements include:
In addition, foam effects on gas mobility and flow pathways are handled via modified relative
permeability curves. Because of the form of the simulation flow equations (gas mobility g =
krg/g/rg) reduced gas relative permeability is equivalent to increased gas viscosity, increased
gas resistance factor, or combinations of these factors. Utilizing relative permeability curves
to describe combination of effects appears the most flexible method. Experimental
observations indicate that foam mobility is sensitive to surfactant concentration; gas flow
velocity (or capillary number); and the presence of oil. A simple interpolation scheme based
on these parameters employs a dimensionless interpolation factor FM,
ws
FM = 1 + MRF
ws max
eo
es max
So So
S max
o
N cref
Nc
ev
(D8.1)
Based on these ideas, the additional foam mobility data requirements are
krg, krw, kro (no foam): Normally two phase gas/oil and water/oil curves plus
Stone's model are employed. These curves define the basic flow pathways that the
phase will take even in the presence of foam.
Maximum mobility reduction factor MRF. Normally obtained from foam water
flow experiments at maximum surfactant concentration wsmax a reference flow rate
or capillary number Ncref, and no oil in the core;
MRF =
(P )foam
(P )nofoam
This factor is used to scale (reduce) the gas relative permeability curve and can
vary from 5.0 to 500.0.
Interpolation parameters:
wsmax Maximum surfactant concentration needed to obtain a strong foam
(normally about 1.0 weight percent)
somax Maximum oil saturation above which no foam will form (normally 10 to 30
percent depending on choice of surfactant)
Ncref Reference capillary number (equivalently, reference gas velocity) of the
experiment
The simplest characterization of the effect of foam is to input similar gas relative permeability
curves for the no foam and maximum foam cases - only the end point is rescaled downwards see Figure D.19. A more complex characterization might be to include increased gas trapping see Figure D.19. Even more complex foam behavior can be modelled with the input of
intermediate curves as a function of FM. Finally, Figure D.20 illustrates the nature of the
chosen interpolation method for the simplest example.
no foam
krg
rescaled foam
endpoint
Sg
Figure D.19: Schematic of simple characterization of foam effects on gas relative permeabilities
a)
b)
1.0
1.0
0.9
0.9
0.8
0.8
0.7
0.7
0.6
0.6
max
krf
max
krf
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0.0
0.2
0.4
0.6
0.8
1.0
0.0
0.2
0.4
0.6
FM
0.8
1.0
Figure D.20: Example of rescaling gas phase relative permeability end point two views of how the
interpolation scheme operates
as a function of FM = (1 + MRFX ) .
a ) k max
as a function of X = w s / w max
and b) k max
rf
rf
x
1
Here k max
/ (1 + MRFX )
rf
k max
= 1.0 and MRF 100
rf
Some extra comments summarize this approach to foam modelling. Firstly, the wide variation
in observed MRF factors probably reflects the type of foam created in the experiments. All
foams are not equivalent! In this empirical approach, MRF should be viewed as a fitting
parameter which can vary both with the type of laboratory experiment conducted, and scale
(from laboratory to the field). Secondly, this quasi-equilibrium modelling should be viewed as
an optimistic description of foam propagation, assuming as it does that the foam front moves
with the same velocity as the surfactant front. More detailed analysis in the laboratory and in
the field indicate that the foam (or pressure) front trails the surfactant front, moving at perhaps
2/3 the surfactant rate. This indicates that a certain fraction of created foam is non-mobile and
the separation between surfactant and foam fronts increases as the relative proportion of trapped
foam increases. Thus, if one attempts to fit observed pressure propagation to the surfactant
flow equation as utilized in this simple model, an increased "pseudo-adsorption" of surfactant
may be required to retard propagation. These concepts have been recently applied to the
modelling of an Alberta steam foam pilot test14.
A more mechanistic approach to foam modelling, accounting for changing lamella densities,
can be contrasted with the approach presented here - see section D.16 and a CMG foam
report15. In particular, the form of the interpolation chosen for the simple model can be (at
least partially) justified.
D.9
Phase Enthalpies
Phase enthalpies and internal energies appear directly in the energy equation. They have
units of energy per mole, resulting in an equation with units energy per time. Enthalpy
fulfills the same function as does phase mole fraction (moles of component i per mole of
phase) in the mass conservation equation. This is why the energy equation looks very similar
to a component conservation equation.
The component enthalpies HLi and Hgi are calculated from heat capacity and vaporization
enthalpy correlations. Ideal mixing is assumed, so component enthalpies are independent of
phase composition and pressure (except for water vapour enthalpy which depends on pressure).
Water Phase
The phase value Hw is equal to the liquid value HL1 for the water component. The internal
energy is
U w = H w pw / w
(D9.1)
Note that Hw includes the mechanical work pw/w, which flows with the fluid and can be
transformed into heat energy in another location in the reservoir. The formula for Hw is the
same as Ho below, but uses wi instead of xi.
Oil Phase
H o = x i H Li
i =1
(D9.2)
U o = H o po / o
Gas Phase
nc
H g = y i H gi
i =1
(D9.3)
U g = H g pg / g
Solid Phase
Heat capacity of the solid component is entered as data, and the internal energy is
U s = C ps (T Tr )
(D9.4)
Rock
The heat capacity of the rock is treated on a volumetric basis, since rock is handled by
volume and not by moles. Since porosity is usually less than 40%, the rock can contain most
of the injected heat. Therefore it is important to define the rock heat content accurately.
Rock heat content is described by
1
U r = a (T Tr ) + b T 2 Tr2
(D9.5)
2
where a is a constant volumetric heat capacity, and b is a temperature coefficient. A value of
a = 35 Btu/ft3-F is used commonly.
D.10
Thermal Conductivity
Thermal conductivity determines the flow term T due to diffusion of energy from a region
of high temperature to low temperature.
The only other way for energy to flow in situ is by convection. In field-scale steam problems
convection usually dominates conduction, at least in the direction of flow. In field-scale
combustion, the temperature profile at the fire front can be determined largely by conduction,
but this temperature profile is almost never resolved because the grid blocks used are too large.
For these reasons, conduction is rarely a major mechanism in field-scale problems. Conduction
can play a significant role in both steam and combustion at the laboratory scale, since the length
scale is much smaller than in the field.
The following are options for calculating an overall thermal conductivity from phase values. In
each the porosity is fluid porosity f.
Linear Mixing
= S w w + S o o + S g g +(1 ) r
(D10.1)
Nonlinear Mixing
The thermal conductivities are weighted using the correlation of Anand et al16. The liquidrock mixed value is
L r = L a b
(D10.2)
where
L =(S o o +S w w )/ (S o +S w )
a = r / L
(D10.3)
(D10.4)
where
c = r / g
d = 0.28 0.757 log10 0.057 log10 c
(D10.5)
(D10.6)
where
e = S w + So
(D10.7)
Example: Let values for rock and water be 44 and 8.6 Btu/ft-day-F, respectively, with =
0.3. The value of for water saturated rock (Sw = 1) is given by
L = w = 8.6
a = 44 / 8.6 = 5.116
(D10.8)
b = 0.6354
so
L r = 8.6 a b = 24.3 Btu / ft day F.
(D10.9)
(D10.10)
Basically the linear option assumes that all phases (including solid) are randomly mixed in a
porous medium while the nonlinear option implies some type of correlated distribution of
phases (reflecting the fact that the liquids tend to wet the rock).
Temperature Dependence
This modification of Somerton et al17 accounts for the observed change in thermal
conductivity as temperature is increased. In the STARS model this modification may be done
after the mixed liquid-gas-rock value has been calculated. The unit of is J/m-day-K.
= a 1.7524 10 5 (T Tr ) (a 119616 ) b c
(D10.11)
where
a = g L r
b = a 0.64
c = a d e + 110644.8
(D10.12)
D.11
A semi-analytical model is used for heat transfer to or from an adjacent formation of infinite
extent18. It assumes a temperature profile in the base or cap rock as a function of time and
distance z from the reservoir interface, i.e.,
T (t, z ) = + pz + qz 2 e z / d
(D11.1)
The diffusion length is d = t/2. This profile satisfies both T (t,0) = (grid block
temperature) and T (t,) = 0. At the interface the profile must satisfy
2T
= 2
t
z
(D11.2)
z =0
or
N
2p
= 2
+ 2q
t
d
d
(D11.3)
T
Tdz =
z
(D11.4)
o
or
d + pd 2 + 2qd 3 I N
= p
t
d
(D11.5)
t N d 3 N
+I
t
d
p=
2
3d + t
2
2pd + d
q=
.
2d 2
(D11.6)
(D11.7)
The total energy in the overburden, i.e. under the temperature profile, is
Tdz =
d + pd + 2qd 2
(D11.8)
The rate at which heat is lost from the block to the overburden is
T
z
z =o
= p
(D11.9)
The heat loss rate and its derivative with respect to temperature can be calculated, and used
directly in the energy conservation derivatives. The energy lost is used directly in the energy
balance statistics.
One set of these calculations is performed for each grid block face which is adjacent to cap or
base rock. The only data required are thermal conductivity and heat capacity of the base and
cap rock, both of which are quite standard data. This model gives solutions quite close to
exact answers to many heat transfer problems.
D.12
Thermal Aquifer
A semi-analytical model is used to calculate the water and energy flow to/from an adjacent
aquifer. It is based on a one-dimensional single-phase (water) and energy flow. This flow is
perpendicular to the reservoir-aquifer boundary and may be either linear or radial. The model
assumes temperature/pressure profile as
(D12.1)
t
,
2
(D12.2)
where
k
=
for a water flow
(
)
+
c
c
r
w aq
(D12.3)
and
w + (1 ) r
=
for energy flow
C pw w + (1 )C pr aq
(D12.4)
p and q are fitting parameters which are calculated from the water and energy balance
equations with appropriate boundary conditions.
The water balance equation for a linear flow is
P
2P
= 2
t
x
(D12.5)
(D12.6)
u w w C pw
u=
w C pw + (1 )C pr aq
(D12.7)
Because the energy balance equation is more complex, this will be used to show the
evaluation of p and q parameters for a finite aquifer.
User's Guide STARS
x =0
T
x
(D12.8)
x =0
or
t Tar
2p
T
T
= ar2
+ 2q u ar + p
t
d
d
(D12.9)
q = t
2d 2
(D12.10)
The conservation of energy in the aquifer will be satisfied by integrating the energy equation
( and u are assumed to be constant)
Tdx =
T
x
uT
(D12.11)
o
t Tar
coef 2+ H loss
t
(D12.12)
coef 3
where
) (
I N = Tar d + pd 2 + 2d 3 q e h / d Tar d + p d 2 + dh + q 2d 3 + 2d 2 h + dh 2
)]}
(D12.13)
ud 2
h
hdu
t ud 2
+
eh / d
+ 1 +
h +
2d
coef 2=
d3 d2h
d3
h
eh / d +
1 +
2d
coef 3 = 3d 2 + t +
(D12.14)
(D12.15)
ud 3
ud 3
hd 2 u
h
e h / d 3d 2 +
+ h(3d + h ) +
1 +
2d
(D12.16)
and Hloss is the conductive heat loss to adjacent formation. The parameter p and q for the
pressure profile are similar (terms with velocity u and Hloss are zero).
The rate per unit area at which water flows to/from an aquifer is expressed as:
qaq w =
P
x
x =o
= p ar
d
(D12.17)
k gv k rw
k
= av for reversed flow
aq
(D12.18)
(D12.19)
The energy flow rate per unit area of the reservoir-aquifer interface is
qaq E =
T
x
x =o
+u w H w w
= (1 ) r + w S w
(D12.20)
= 1 aq raq + aq w aq
(D12.21)
(D12.22)
The flow rates are calculated for each grid block adjacent to the aquifer and the values are
used in the reservoir flow equations as source/sink terms. The simulation will automatically
stop when the temperature at the interface approaches the steam temperature value (gas phase
is not allowed to appear in the aquifer).
This model gives adequate results when the flow of oil from a reservoir to the aquifer is
negligible and when transverse water and energy flow in the aquifer does not play a major
role.
D.13
Chemical Reactions
Chemical reactions have traditionally been used almost exclusively in combustion processes.
However, reactions may be used in any thermal or isothermal simulation if desired. Since
reactions are treated as source/sink terms for each component and energy, they may be
thought of as another way in which to link together the different components of a problem
when rate is important. In particular, interphase mass transfer rates can be modelled,
involving either well defined components or "dispersed phase" components such as emulsion
droplets.
The general heterogeneous mass transfer reaction no. k is represented symbolically as
nc
i =1
s ki A i
nc
s 'ki A i + H rk
(D13.1)
i =1
which proceeds at the rate of rk moles per day per reservoir volume. As expressed above, this
relationship has one degree of freedom, which is a proportionality factor. The quantities ski,
s'ki and Hrk can be multiplied by an arbitrary factor a, but rk must be divided by a so that the
source/sink terms remain
(D13.2)
Usually the factor a is chosen such that ski = 1 for the main reacting component.
Kinetic Model
The kinetic model, also known as reaction kinetics, determines the speed of reaction rk. The
general expression is
nc
rk = rrk exp( E ak / RT ) C i k
i =1
e
(D13.3)
The activation energy Eak determines the temperature dependence of rk. While the enthalpies
of reaction can be characterized between well defined limits (and can even be calculated from
first principles), the observed activation energies can vary dramatically. This is because
certain components in the rock surface can act as catalysts. The concentration factor for
reacting component i is
C i = f j S j x ji
j = w , o, g
(D13.4)
where j is the phase in which component i is reacting, and xji represents water, oil or gas mole
fractions. For the solid component
Ci = v ci
(D13.5)
Field-Scale Combustion
In the expression for reaction rate, above, the temperature T is the temperature in the burning
or reacting region. In the thermal model the grid block temperature is used. In lab scale
simulations, a grid block is usually not much larger than the actual combustion burning
region (10-20 cm), so use of a grid block temperature for reaction temperature is appropriate.
However, field-scale grid blocks usually are many times larger than this, and the averaged
block temperature is not a good indication of the peak temperature of a combustion zone.
Unrealistic predictions for fuel lay-down and front extinction will result20.
One solution is to use an assumed front temperature Tf, by following these steps.
1. Replace rrk with r'rk = rrk exp (-Eak/RTf)
2. Replace Eak with zero.
This has the effect of making the reaction rate independent of grid block temperature. Other
techniques have also been proposed21.
Mass and Volume Conservation
Because the component conservation equations have mole units and the reactions are treated
as source/sink terms, moles of each component and energy will be conserved. However, the
reaction stoichiometry should be mass conserving as well in order for the reaction to make
sense physically. This is important especially when the molecular weight of a pseudo-oil
component is not well-defined or is arbitrary.
Mass-conserving stoichiometry satisfies
nc
nc
i =1
i =1
s ki M i = s 'ki M i
(D13.6)
Even though a molecular weight is not required by the STARS model for the solid
component, a reasonable value should be chosen for the above calculation.
If mass is not conserved in a reaction, the effect probably will not show up in the simulation
until the final results are analyzed or compared with a laboratory report.
On the other hand, conservation of volume during reaction is not required in general.
However, there is one condition under which large volume changes caused by reactions
should be avoided. It is when Sg = 0 and there are reactions between liquids, or between
liquids and solids.
Consider a liquid-saturated reservoir (Sg = 0) in which a heavy oil cracks into a solid fuel.
Even though this reaction is meant to happen at higher temperatures, the model will calculate
a nonzero reaction rate at the initial reservoir temperature. Therefore, some oil will be
replaced by the solid from the start of the simulation. A significant discrepancy between the
volumes consumed and produced, in conjunction with a low overall reservoir compressibility,
will result in large uncontrollable pressure changes. This situation can be remedied by
ensuring that volumes are more nearly conserved.
Combustion Example
Symbol
Description
H 2O
18
HO
500
Heavy Oil
LO
200
Light Oil
IG
44
Inert Gas, CO 2, N 2
O2
32
Oxygen
CH
13
Solid Fuel
Water
(D13.7)
We can see that mass is conserved, since each side represents a molecular mass of 53. In
addition, if we replace IG with CO2, we see that carbon, oxygen and hydrogen atoms are
balanced.
Reaction enthalpies for burning hydrocarbons19 commonly range from 16,000 to 22,000
Btu/lb. In this case, assume that the reaction enthalpy Hrk is 6.3 105 J/gm mole or 20,830
Btu/lb, and activation energy Eak is 53,000 J/gm mole. The reaction rate is (T in K degrees).
(D13.8)
(D13.9)
where a, b and c are stoichiometric coefficients. The task of finding them is simplified if we
assume that component HO has the same hydrogen-carbon ratio as the CH component. Since
a mole of HO is 500/13 = 38.46 times as massive as a mole of CH, the coefficients can be
obtained directly from the coke-burning reaction.
5
a = (38.46) = 48.08
4
(D13.10)
1
b = (38.46) = 19.23
2
(D13.11)
c = (38.46)1 = 38.46
(D13.12)
Assume that the reaction enthalpy is 18,000 Btu/lb. This converts into 2.09 107 J per gm
mole of HO. So
HO + 48.08 O 2 19.23 H 2 O + 38.46 IG + 2.09 10 7 J / gm mole
(D13.13)
Assuming the activation energy is the same as for coke burning, the reaction rate is
r2 = rr 2 + exp ( 53,000 / RT ) [ f o S o x 2 ] y 5 p g
(D13.14)
The constant factors rr1 and rr2 would be found by matching a combustion tube performance
in which the observed average energy released per fuel consumed is observed to be, for
example, 20,300 Btu/lb. Let a be the mass fraction of fuel burned via the coke burning
reaction. Since energy is produced by either coke or oil burning, the mass fraction a satisfies
20,830 a + 18,000 (1 - a) = 20,300
a = 0.813
(D13.15)
(D13.16)
With this information the trial-and-error matching can proceed toward determining the values
of rr1 and rr2.
D.14
The basic function of a simulator is to solve a set of equations that describe the flow and
accumulation of a set of components or pseudo-components in a porous medium. Here we
consider three components: Component 1 is water, component 2 is oil, and component 3 is
surfactant. Flow can occur in the water (aqueous) phase and the oil (oleic) phase.
Components can accumulate in the fluid phases as well as on the surface of the matrix rock
which is called the solid (immobile) phase. Most generally, there is a separate equation for
each component in each phase when mass transfer between phases is not assumed to be at
instantaneous equilibrium. The equations are
Water Phase
( f S w w w i ) + ( w Vw w i ) = R woi R wsi + Q wi
t
i=1,2,3
(D14.1)
Oil Phase
( f S o o x i ) + ( o Vo x i ) = R owi R osi + Q oi
t
i=1,2,3
(D14.2)
Solid Phase
( v C i ) = R swi R soi
t
i = 1,2,3
(D14.3)
where Rjki = -Rkji is the nonequilibrium net mass transfer of component i from phase j to
phase k, for j k.
Phase densities and viscosities are obtained from component values using the appropriate
mixing rules. The external source terms Qwi and Qoi account for injection and production of
fluids. The mass transfer of a molecularly dissolved component accounts for nonequilibrium
phase partitioning. On the other hand, mass transfer of globules is interpreted as globules
separating from or merging with the parent phase. The presence of an extra fluid phase
(liquid or gas) would entail additional but analogous equations.
D.15
R ws 2 = kA ( f S w w w 2 ) kB( f S w w w 2 ) v C 2 kC v C 2
(D15.1)
(D15.2)
(D15.3)
for the water phase blockage as an example. The actual blockage factor RRSFT is expected
to be permeability dependent. The simulator allows the tabular input of RRSFT versus
permeability.
If emulsions are created in situ (as is generally observed in heavy oils23), the above approach
must be generalized. In particular, the (oil in water) emulsion can no longer be viewed as
dispersed oil globule, but rather as a new chemical species in the water phase consisting of
both oil and surfactant molecules. This species is formed when molecularly dissolved
surfactant contacts the oil phase. Thus an extra flow equation for surfactant is required,
containing a heterogeneous mass transfer source term describing the emulsion creation
process. The stoichiometry for the formation process is written as
(Oil)o + a(S)w = (E)w
a 10-4
(D15.4)
6
Dd
= voNo
(D15.5)
= aoNs
(D15.6)
and be solved for No/Ns, the ratio of the number of oil to surfactant molecules in the globule.
with typical values for globule diameter <Da> = 6x10-4 cm, volume per oil molecule
o = 35x10-23 cm3 and area per surfactant molecule ao = 70x10-16 cm2, the result is
Ns
= a = 5x10 4
No
(D15.7)
With an assumed stoichiometry, the remaining task is to quantify the order and rate of the
emulsion generation process. Very little work appears to have been done quantifying this to
date, but more recent attempts at modelling foam generation should have important
implications in emulsion generation modelling as well.
D.16
(H 2 O )w
+ b(S)w = (L )g ;
b 10 5
(D16.1)
where the stoichiometry coefficient b is small (describing the number of moles of surfactant
to the number of moles of water in the average lamella). The exact value of "b" depends on a
number of factors including the assumed shape of the lamella, the ratio of the water molar
volume to the specific surface area of the surfactant (if it is assumed that the surfactant
molecules coat the surface of the lamella to stabilize it) etc. The important point here is that b
is small but non zero which implies that the physical properties of the lamella are related to
those of water, and that lamella require available surfactant for their formation.
Given the above ideas, the remaining (non trivial) task is to form appropriate rate expressions
for lamella capture (if an equilibrium adsorption isotherm is not assumed), for lamella
generation and lamella coalescence and to fit these to experiments devised to separate
contribution factors. For example, the requirement of a critical gas velocity for foam
generation has been noted, as well as the inhibiting effect of non-condensable gas on foam
coalescence. It is further possible that the role of oil both as a foam preventer (inhibiting
foam generation) and a defoamer (accelerating foam decay) can be incorporated into these
rate expressions. Such work is ongoing and is primarily dependent on the ability of
experiment to separate mechanisms. Some preliminary matching of experiments by
Friedmann et al25 has been conducted using these ideas.
While important in simulating features of laboratory foam experiments, it remains an open
question if such a detailed mechanistic approach to foam simulation is necessary or
appropriate at the field-scale.
D.17
In this section it will be shown via two-phase flow theory why oil banking and plugging
occur when hot water or steam is injected.
The fractional flow equation for oil in a one-dimensional problem is
dS o
df
= vT o
dt
dx
(D17.1)
where f denotes fractional flow and vT is total fluid velocity. Here we will assume that vT is
constant and positive, that is, the flow direction is from left to right.
The fractional flow of oil is defined as
fo =
k ro
o
(D17.2)
k ro
k
+ rw
o
w
w
df o
=
dx
d k ro
dx o
k ro
o
k ro
k
+ rw
w
o
d k rw
dx w
(D17.3)
Here kro is a function of So, o is a function of temperature T, krw is a function of Sw, and w is
constant
d
dx
k ro
k
d ln o dT
1 dk ro dS o
=
ro
dS
dx
dT
dx
o
o
o
d
dx
k rw
1 dk rw dS w
1
=
=
dx
w
w dS w
(D17.4)
dk rw dS o
sin ce S o + S w = 1
dS w dx
(D17.5)
(D17.6)
where
k
v T k ro
+ rw
A=
w o o
w
B = k rw
dk ro
dk
+ k ro rw , and
dS o
dS w
C = k ro k rw
d
( ln o )
dT
(D17.7)
(D17.8)
(D17.9)
1. Prats, M., Thermal Recovery, SPE Monograph, Vol. 7, SPE of AIME, Dallas,
Texas, 1982.
2. Reid, R.C., Prausnitz, J.M., and Sherwood, T.K., The Properties of Gases and
Liquids, Third Edition, McGraw-Hill, 1977.
3. Perry, R.H., and Chilton, C.H., Chemical Engineer's Handbook 3-226 to 3-250,
McGraw-Hill, New York, 1973.
4. Aziz, K., Ramesh, B., and Woo, P.T., "Fourth SPE Comparative Solution Project:
A Comparison of Steam Injection Simulators," JPT, December 1987, pp. 1576.
5. Buchanan, L., and Raicar, M., "Sensitivity Study of Field Scale Combustion
Simulation for a Lloydminster-type Heavy Oil Reservoir," paper CIM 83-34-47,
presented at the 34th Annual CIM Technical Meeting, Banff, Alberta, May 1983.
6. CMGPROP User's Manual, Computer Modelling Group.
7. Sandler, S.I., Chemical and Engineering Thermodynamics, John Wiley and Sons,
1977.
8. van Quy, N., Simandoux, P., and Corteville, J., "A Numerical Study of Diphasic
Multicomponent Flow," SPEJ, April 1972, pp. 17.
9. Young, L.C., Stephenson, R.E., "A Generalized Compositional Approach for
Reservoir Simulation," SPEJ, October 1983, pp. 727.
10. Hutchinson, C.A., and Braun, P.H., "Phase Relations of Miscible Displacement in
Oil Recovery," AIChE J., March 1961, pp. 64.
11. Pope, G.A., and Nelson, R.C., "A Chemical Flooding Compositional Simulator,"
SPEJ, October 1978, pp. 339.
12. Redlich, O, and Kwong, J.N.S., Chem. Rev., Vol. 44, 1949, pp. 233.
13. Aziz, K., and Settari, A., Petroleum Reservoir Simulation, Applied Science
Publishers, 1979.
14. Kular, G., Lowe, K., and Coombe, D.A., "Foam Application in an Oil Sands Steam
Flood Process," paper SPE 19690, presented at the 64th Annual Technical
Conference of SPE, San Antonio, Texas, October 8-11, 1989.
15. Coombe, D.A., Oballa, V., and Buchanan, W.L., "Foam Modelling Based on
Lamella as a Dispersed Component," CMG Technical Report 90.08.T, April 1990.
16. Anand, J., Somerton, W.H., and Gomaa, E., "Predicting Thermal Conductivities of
formations from Other Known Properties," SPEJ, Vol. 13, No. 5, October 1973,
pp. 267-273.
17. Somerton, W.H., Keese, J.A., and Chu, S.L., "Thermal Behavior of
Unconsolidated Oil Sands," SPEJ, Vol. 14, No. 5, October 1974, pp. 513-521.
18. Vinsome, P.K.W., and Westerveld, J., "A Simple Method for Predicting Cap and
Base Rock Heat Losses in Thermal Reservoir Simulators," JCPT, July-September
1980, pp. 87-90.
19. Burger, J.G., and Sahuquet, B.C., "Chemical Aspects of In-Situ Combustion - Heat
of Combustion and Kinetics," SPEJ, October 1972, pp. 410.
20. Coats, K.H., "Some Observations on Field Scale Simulations of the In-Situ
Combustion Process," paper SPE 12247, presented at the 1983 SPE Reservoir
Simulation Symposium, San Francisco, California, November 1983.
21. Ito, Y., and Chow, A.K.-Y., "A Field Scale In-Situ Combustion Simulator With
Channeling Considerations," SPERE, May 1988, pp. 419.
22. Schmidt, D.P., Soo, H., and Radke, C.J., "Linear Oil Displacement by the
Emulsion Entrapment Process," SPEJ, June 1984, pp. 351.
23. Vittoratos, E., "Flow Regimes During Cyclic Steam Stimulation at Cold Lake,"
paper CIM/SPE 90-107, presented at the CIM/SPE International Technical
Meeting, Calgary, Alberta, June 10, 1990.
24. Coombe, D.A., Oballa, V., and Buchanan, W.L., "Foam Modelling Based on
Lamella as Dispersed Component," CMG Technical Report 90.08.T, April 1990.
25. Friedmann, F., Chen, W.M., and Gauglitz, P.A., "Experimental and Simulation
Study of High Temperature Foam Displacement in Porous Media," paper
SPE/DOE 17357, presented at the Enhanced Oil Recovery Symposium, Tulsa,
Oklahoma, April 1988.
D.18
In general, the data requirements of a reservoir simulator will depend largely on the recovery
mechanisms that are important. Thermal recovery mechanisms ranging from hot water to
combustion are diverse and fundamentally different from black-oil processes. There are two
key differences in the data required to describe these processes. The first, of course, is due to
the accounting of energy and the effect of temperature on the process parameters. The
second is that the most important fluid properties, density, viscosity and phase equilibrium,
are modelled in completely different ways.
This appendix section deals with converting the IMEX black-oil PVT data Rs, Bo and o into
their STARS equivalents. Provided below are some detailed descriptions of the conversions
along with some relevant theory and an example.
The most crucial step in the conversion procedure is testing your converted data. The best
way to test is to use both simulators to solve the same problem, and compare the results. A
small simple problem usually is sufficient, as long as it exercises the PVT data.
CHOOSING COMPONENTS
A typical black-oil problem involves three components: water, dead oil and solution gas.
These will be the components used in STARS, numbered in this order: water #1, dead oil #2
and solution gas #3. Water is found in the water and gas phases; dead oil is found only in the
oil phase; and the solution gas is found in the oil phase and as free gas. It is important to
distinguish between components and phases since the labels used are very similar. Here, the
hydrocarbon components are called dead oil and solution gas, and the phases are called oil
and gas.
In the following, units are mentioned in both field and SI systems.
CONVERTING DENSITY DATA
ST
- density (lb/bbl or kg/m3) of oil at standard T and p, and Rs = 0 (IMEX's DENOS),
o
ST
g
Co
Bo
Rs
pb
pr
Tr
M2
M3
Molecular weights are somewhat arbitrary since the dead oil and solution gas are really
pseudo components, that is, fictional chemicals or multiple chemicals grouped together. M3
will be 16 lb/lb mol for 100% methane, and higher if some C2, C3, etc. are present. M2 is in
the vicinity of 100 lb/lb mol for light oils and up to 500 lb/lb mol for heavier oils.
914 Appendix D: Fluid and Rock Properties
In a unit volume of live oil at pressure p and bubble-point pressure pb the moles of dead oil
and solution gas are
R s (p b ) ST
ST
g
o
and
M 2 B o (p, p b )
M 3 B o (p, p b )
(1)
where Bo (p, pb) = Bo (pb) *[1-Co(p - pb)]. This is the result of converting standard volumes to
mass, and then to moles. Therefore, the oil mole fractions are
x3 =
R s (p b ) ST
g / M3
(2)
ST
ST
o / M 2 + R s (p b ) g / M 3
and x2 = 1 x3. Note that x3 does not depend on Bo. Finally, the mole density of the live oil is
o (p, p b ) =
ST
ST
o / M 2 + R s (p b ) g / M 3
(3)
B o (p b )* [1 C o (p p b )]
i =2
xi
exp[C Ti (T Tr ) C oi (p p r )]
ST
oi
(4)
where
ST
oi
Coi
CTi
- mole density of pure component I in the oil (liquid) phase, at Pr and Tr,
- oil phase compressibility of component i,
- oil phase thermal expansion coefficient of component i.
Equation (4) shows that it is the partial molar volume (i.e., the inverse of mole density) that is
mixed linearly with oil mole fraction. This reflects ideal mixing. Also note how the pressure
and temperature effects factor in.
Density conversion from IMEX to STARS is achieved by equating o(p, pb) to o(p,T,xi).
ST
The value of ST
o 2 for dead oil corresponds to the reference density o at reference pressure
and temperature and Rs = 0, that is, where Bo = 1:
ST
ST
o2 = o / M 2 .
(5)
The first entry in a black-oil PVT table usually corresponds to reference pressure, but at
reservoir temperature T*. Therefore, a value of Bo > 1 at pb = pr must correspond to thermal
expansion, since Rs(pr) = 0. (Nonlinear mixing is beyond the scope of this discussion).
Substituting p = pb = pr, T = T* and Rs = 0 into (2), (3) and (4) gives
B o (p r ) = exp [C T 2 (T * Tr )] = B *o .
(6)
This can be used to calculate cT2, if appropriate. Assume that cT3 = cT2, so that Bo* may
appear as a constant factor. Assume also that co2 = co3 = Co.
The only unknown left in (4) is ST
o 3 . Equate o(p,pb) and o(p,T*,xi), and substitute the
expressions from (2) for x2 and x3:
ST
o3 =
R s (p b ) ST
g / M3
(7)
B o (p b ) / B*o
exp[c o 2 (p b p r )]
Part of the PVT table in a black-oil model is oil phase viscosity versus bubble point pressure
o(pb). The STARS mixing rule for liquid viscosity is
ln[ o (x i )] =
x i ln[ oi ]
(8)
i=2
where
o2
o3
The object is to determine o2 and o3. At the reference pressure pb entry, that is, p = pb = pr,
we have Rs(pr) = 0, so x3 = 0 and x2 = 1. This gives
o 2 = o (p r ).
(9)
(10)
To model phase equilibrium STARS uses K values, which are the ratios between gas mole
fraction and liquid mole fraction:
K i = y i / x i or y i = K i x i .
(11)
At saturated conditions p = pb, the gas phase exists and the gas mole fraction constraint
y1 + y 2 + y 3 = 1
(12)
must be satisfied. The water and dead oil components do not vaporize significantly, so y1 =
y2 = 0 since K1 = K2 = 0, leaving y3 = K3 x3 = 1. So K3(pb) = 1/x3 and the solution gas K
value as a function of pressure p is
K 3 (p ) = 1 +
ST
o / M2
R s (p ) ST
g / M3
(13)
STARS has both correlation and table options for entering K value data. Equally spaced
table entries can be used directly. The correlation form
a
K (p, T ) = 1 + a 2 + a 3 p exp [ a 4 / (T a 5 )]
p
(14)
ST
o / M2
1 +
R s (p ) ST
g / M3
<1
K 3 (p ) x 3 =
ST
o / M 2
1 +
R s (p b ) ST
g / M3
(15)
since Rs(p) > Rs(pb). This indicates how close an undersaturated block is to its bubble point.
EXAMPLE
Consider the black-oil PVT table D.7. Entries 2 to 10 were taken from an IMEX data set. The
first entry is obtained by linearly extrapolating entries 2 and 3 to a pressure pr for which Rs(pr) =
0. Also obtained from the IMEX data were oST = 56.7 lb/ft3, gST = 0.05616 lb/ft3 and Co =
1.147 10-5 1/psia.
Entry
1
2
3
4
5
6
7
8
9
10
pb
(psia)
1.8
15.0
115.0
615.0
1215.0
2015.0
3015.0
4015.0
5015.0
6015.0
Bo
(rb/stb)
1.046
1.050
1.080
1.126
1.170
1.223
1.293
1.372
1.449
1.526
Rs
(scf/stb)
0.0
5.0
43.0
160.0
265.0
403.0
583.0
782.0
983.0
1183.0
o
(cp)
4.086
3.934
2.776
2.053
1.600
1.196
0.880
0.725
0.638
0.572
A dead oil molecular weight of M2 = 444 lb/lb mol was chosen for an oil about this density.
Assuming an ideal gas mole density of 0.00262 lb mol/ft3, corresponding to 1 atm and
63.3oF, the solution gas molecular weight is estimated as
3
ST
= 21.44 lb / lb mol.
g / 0.00262 lb mol / ft
The dead oil standard mole density is oST / (444 lb/lb mol) = 0.1277 lb mol/ft3. The base value
of Bo is Bo* = 1.046 rb/stb, and the oil compressibility co2 = Co = 1.147 10-5 1/psia. The dead
oil viscosity is o2 = 4.086 cp.
Entry
x3
1
2
3
4
5
6
7
8
9
10
0.0000
0.0179
0.1358
0.3689
0.4919
0.5955
0.6805
0.7407
0.7822
0.8121
ST
o3
(lb mol/ft3)
0.6176
0.5963
0.8898
0.9219
0.9563
0.9709
0.9737
0.9768
0.9740
K3
(p)
o3
(cp)
55.74
7.366
2.711
2.033
1.679
1.470
1.350
1.278
1.231
0.491
0.237
0.632
0.607
0.519
0.428
0.396
0.380
0.363
Table D.8 shows the result of applying equations (2), (7), (10) and (13) to the live-oil entries of
Table D.7. All the K values K3(p) will be needed, since this table shows the pressure
dependence of K3 at reservoir temperature T*. However, only one value of each of ST
o 3 and
o3 must be chosen. You could choose the values corresponding to entry 7, since this seems
representative of the upper, stabilized portion of the pressure range. On the other hand, you
could choose rounded-off representative values, for example, 0.95 lb mol/ft3 and 0.4 cp.
If it is a priority for STARS to match closely the initial amounts of dead oil and solution gas
in place, then you would chose the entry closest to the initial pb.
D.19
There are two well-known analytical methods, which are widely used in the simulation
industry. The first method is known as the Carter-Tracy method, which is a modified version
of the original Van-Everdingen and Hurst method. The second, more recent method is the
Fetkovich method. The first method is a rigorous mathematical solution based on the solution
of the radial flow equation, while the second is a simple material balance equation. In most
cases, both methods predict the water influx volumes within acceptable engineering accuracy.
Van-Everdingen and Hurst Method
This method is based upon solving the radial equation using the Laplace transform as applied
for different boundary conditions. The radial flow equation can be written as:
2 P(t d )
r
1 P(t d ) P(t d )
(1)
=
r r
t d
Where
P(td) = Pressure at distance r and dimensionless time td
'td' = Dimensionless time, defined as given in Equation (2)
td =
k
fC e R o2
(time)
( 2)
The dimensionless pressure drop P(td) at any dimensionless time (td) for the infinite aquifer
and under a constant rate solution, is expressed by Equation (6) below:
P (t d ) =
4
2
1 e u 2 t d du
J 12
(u ) +
Y12
(u )]
(3)
Where J and Y are Bessel functions and u is an operator. The numerical solution of the above
integral provides the general solution of an infinite aquifer with constant rate. The solution is
tabulated in Table D.9 for (td) values between td = 0.01 to td = 1000. The value of P(td) at for
(td) below 0.01 is computed from Equation (4), while for (td) greater than 1000.0, P(td) is
calculated from Equation (5).
920 Appendix D: Fluid and Rock Properties
P(t d ) =
2 1/ 2
t d , t d < 0.01 (4)
P(t d ) =
1
[log10 t d + 0.80907] , t d > 1000 (5)
2
Table D.9 is saved in the CMG aquifer model, and the extrapolation beyond td of of 1000,
equation (5) is used.
Limited Aquifers with Constant Rate Solution
When Equation (3) above is applied to the limited aquifers with constant rate, a simpler
solution is derived as given by Equation (6) below,
4
4
2
2
1
(3R d 4R d log10 R d 2R d 1)
t
+
d
(R d2 1) 4
4(R d2 1) 2
e t d J 12 ( n R d )
( 6)
+2 2 2
2
1 , 2 n [ J 1 ( n R d ) J 1 ( n )]
P(t d ) =
[J1 ( n R d )Yo ( n R d ) Y1 ( n R d )J o ( n R d )] = 0
(7)
The above equation is solved and tabulated for several values of Rd, where Rd is defined as
Re/Ro, where (Re = external aquifer radius, Ro = external reservoir radius). Table (III) of the
original work in Reference 1 gives values of P(td) versus td for Rd values of 1.5, 2.0, 2.5, 3.0,
3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, and 10.0. The same table is attached in this report as Table
(2) for reference. Figure (1) displays these results.
The last term in the above equation becomes insignificant at larger values of td. Thus, beyond
the tabulated td values and for any Rd, Equation (8) is used for extrapolating td.
P(t d ) =
4
4
2
1
3R d 4R d log10 R d 2R d 1
t
+
(8)
d
R d2 1 4
4 R d2 1
In CMG models, equation (8) is not used directly; the last two entry points in the user input
table are extrapolated for larger dimension time. The user has to be sure Equation (8) has
approximate linearity for his last two values of td. The user should enter the entire table from
the supplied tables (Table 2) to ensure this is the case.
Carter-Tracy Method
This is a modified Van-Everdingen and Hurst method which doesn't require the superposition
theorem. It changes the assumption from a field producing at a constant hydrocarbon rate to
an aquifer that influx water at a constant rate. This assumption simplifies the solution to
that shown in Equation (9), which is implemented in the simulator.
UU * P( t dj ) We ( t dj1 ) * P ( t dj )
We ( t dj ) = We ( t dj1 ) +
( t dj t dj1 ) (9)
P( t dj ) t dj1P ( t dj )
UU = Aquifer constant = 1.119 * * C e * R o2 * h *
(10)
360
User's Guide STARS
( )
( )
P( t dj )
t dj
The Fetkovich method is based on a simple material balance concept, and it is considered an
approximation method compared to the Van-Everdingen and Hurst method. This method
needs neither tables nor dimensionless groups. It assumes the flow of aquifer water into a
hydrocarbon reservoir is modeled in precisely the same way as the flow of oil from a
reservoir into a well. Thus an inflow flow equation combined with an average reservoir
pressure change constitutes the essential ingredients to arrive to the following equation:
W ei
W en =
Pan 1 Pn * 1 . 0 e ( J w Pi t n / W ei )
(11 )
Pi
Where
j= n 1
Wej
j=1
Pan 1 = Pi 1.0
= Average aquifer pressure (12)
W
ei
P + Pn
= Interface pressure between aquifer/reservoir (13)
Pn = n 1
2
7.08 * 10 3 kh
= Aquifer productivity index (14)
Jw =
Re
3
ln(
)
4
Ro
[ ]
A user is able to select the type of aquifers to be connected to a specific reservoir. Those
types are BOUNDARY, REGION or BOTTOM
The TYPE should be selected according to the actual aquifer location, and on how the
aquifer and reservoir are in contact. This could be determined from the geological description
of the problem. If the geology did not provide enough information about the aquifer type,
922 Appendix D: Fluid and Rock Properties
matching the reservoir performance using different types of aquifer is possible. An aquifer
type and/or aquifer parameters could serve as a matching parameter when a field history
indicates more energy is needed to maintain the reservoir pressure, or additional water has to
be produced. More than one aquifer can be connected to a simulation model. In addition
different types can be specified for each aquifer.
Selecting Method of Solution
Both the Carter-Tracy and Fetkovich solutions use the same aquifer parameters:
Ratio between the external Aquifer radius to the Reservoir external radius (Rd).
The model is able to calculate default values for all of the above parameters for either CarterTracy or Fetkovich aquifers. However, it is highly recommended that a user enter all of the
above parameters, since these parameters would play an important role in the reservoir
performance. The model uses the reservoir data to calculate defaults of parameters not
explicitly defined, the models choice of defaults is consistent, but may not be intuitive. A list
User's Guide STARS
of model defaults is provided below. Accordingly, care must be exercised when the user
allows the model defaults to simulate an aquifer.
If the CARTER-TRACY METHOD was selected, the user has to consider the following:
a) For an infinite aquifer: The Model has this function as the default. The internal
table terminates at td=1000. Beyond this value, a proper extrapolation is done
automatically. Thus, the user need not enter a table.
b) For a finite aquifer: The user has to enter the correct table for a pre-determined
value of Rd (Table 2).
c) The finite aquifer table the user inputs from Table (2), has to have the same infinite
table value up to its starting time, while for times larger than the table last entry,
the model linearly extrapolates using the last two entry points. Thus, the user has
to enter the table correctly and in full.
Model Defaults
Parameter
Boundary
Region
Bottom
POR_AQ
Volumetrically Average
Volumetrically Average Porosity
Porosity for connected blocks for connected blocks
PERM_AQ
Volumetrically Average
Volumetrically Average
Permeability for connected blocks Permeability for connected
blocks
H_AQ
Ro
AREA_Contact/(H_AQ*2)
F_AQ
1.0
Volumetrically Average
Permeability for connected blocks
(AREA _ Contact )
(AREA _ Contact / )
1.0
(H _ AQ / H )2
2*Atan(H_AQ/H)/2
Example:
Nx=Ny=Number of grids in x,y directions=11
Nz= Number of grids in Z direction = 12
Porosity = Constant = 0.3
Kx=Ky=Kz = x,y,z absolute permeability = 100 md
Dx=Dy= Grid thickness for x, y directions = 100 ft
Dz = Grid thickness in Z direction = 20 ft
924 Appendix D: Fluid and Rock Properties
Model defaults:
Parameter
Boundary
Region
Bottom
POR_AQ
0.3
0.3
0.3
PERM_AQ
100
100
100
AREA
1056000 ft
H_AQ
Nz*Dz=240
Ro
1056000/(240*2)=700.28
F_AQ
1.0
Nz*Dz=240
(AREA / )
1.0
In some applications, when using the Fetkovich method, one could use different input
parameters such as aquifer injectivity index, volume of water initially available for injection,
and the initial reservoir pressure, in this case a user has to manually convert this data to the
required parameters above. This could be furnished as follows:
Assume
Wi
Jw
Type
Contact Area
=
=
=
=
1. Dermine aquifer thickness H_AQ (ft), and from the contact area determine the
effective reservoir radius (ft) as follows:
Ro =
AREA Contact
H _ AQ * 2
2. Use the Wi (STB) in the equation below to determine the external reservoir radius
(Re - ft) use contact angle as 1.0, and use any reasonable value for the aquifer
porosity.
Wi = *
R e2 R 2o
* H _ AQ * POR _ AQ
5.615
Wi (ft3) is reported in the simulation output, which can be used either for checking
or for computing Re.
3. Use the Aquifer Injectivity Index (STB/D/psi) to determine the effective aquifer
permeability (md), as follows:
Jw =
7.08 * 10 3 * * PERM _ AQ * H _ AQ
W * ln [R e / R o ]
For further description of the above subject, the reader could consult these references:
1. Van Everdingen, A.F., Hurst, W., The Application of the Laplace Transformation
to Flow Problems in Reservoirs, Petroleum Transactions, AIME, December 1949.
2. Carter, R.D., Tracy, G.W., An Improved Method for Calculating Water Influx,
Petroleum Transactions, AIME, vol. 219, 1960.
3. Van Everdingen, A.F., Timmerman, E.H., McMahon, J.J., Application of the
Material Balance Equation to Partial Water Drive Reservoir, Petroleum
Transactions, AIME, vol. 198, 1953.
4. Fetkovich, M.J., A Simplified Approach to Water Influx Calculations Finite
Aquifer Systems, J. Pet. Tech., July 1971, pp. 814-828.
5. Dake, L.P., Fundamentals of Reservoir Engineering, Elesvier Scientific
Publishing Company, 1978.
6. Craft, B.C., Hawkins, M.F., Applied Petroleum Reservoir Engineering, PrenticeHall Inc., 1959.
P(td)
td
P(td)
0.01
0.05
0.10
0.15
0.20
0.30
0.50
0.70
1.00
1.50
2.00
3.00
5.00
7.00
10.00
15.00
20.00
0.112
0.229
0.315
0.376
0.424
0.503
0.616
0.702
0.802
0.927
1.020
1.169
1.362
1.500
1.651
1.829
1.960
30.00
40.00
50.00
60.00
70.00
80.00
90.00
100.00
200.00
300.00
400.00
500.00
600.00
700.00
800.00
900.00
1000.00
2.147
2.282
2.388
2.476
2.550
2.615
2.672
2.723
3.064
3.263
3.406
3.516
3.608
3.684
3.750
3.809
3.860
Table D.10 Constant Terminal Rate Case Radial Flow Limited Reservoirs
R1 = 1.5
R = 2.0
R = 2.5
R = 3.0
td
P(td)
td
P(td)
td
P(td)
td
P(td)
0.06
0.08
0.1
0.12
0.14
0.16
0.18
0.20
0.22
0.24
0.26
0.28
0.30
0.35
0.40
0.45
0.50
0.55
0.60
0.251
0.288
0.322
0.355
0.387
0.420
0.452
0.484
0.516
0.548
0.580
0.612
0.644
0.724
0.804
0.884
0.964
1.044
1.124
0.22
0.24
0.26
0.28
0.30
0.32
0.34
0.36
0.38
0.40
0.42
0.44
0.46
0.48
0.50
0.60
0.70
0.80
0.90
1.0
2.0
3.0
5.0
0.443
0.459
0.476
0.492
0.507
0.522
0.536
0.551
0.565
0.579
0.593
0.607
0.621
0.634
0.648
0.715
0.782
0.849
0.915
0.982
1.649
2.316
3.649
0.40
0.42
0.44
0.46
0.48
0.50
0.52
0.54
0.56
0.58
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.0
2.0
3.0
4.0
5.0
0.565
0.576
0.587
0.598
0.608
0.618
0.628
0.638
0.647
0.657
0.666
0.688
0.710
0.731
0.752
0.772
0.792
0.812
0.832
1.215
1.596
1.977
2.358
0.52
0.54
0.56
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.0
1.2
1.4
1.6
2.0
3.0
4.0
5.0
0.627
0.636
0.645
0.662
0.683
0.703
0.721
0.740
0.758
0.776
0.791
0.806
0.865
0.920
0.973
1.076
1.228
1.578
1.828
Table D.10 Constant Terminal Rate Case Radial Flow Limited Reservoirs
(Continued)
R = 3.5
R = 4.0
R = 4.5
td
P(td)
td
P(td)
td
P(td)
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.25
2.50
2.75
3.0
4.0
5.0
6.0
0.802
0.830
0.857
0.882
0.906
0.929
0.951
0.973
0.994
1.014
1.034
1.083
1.130
1.176
1.221
1.401
1.579
1.757
1.5
1.6
1.7
1.8
1.9
2.0
2.2
2.4
2.6
2.8
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
8.0
9.0
10.0
0.927
0.948
0.968
0.988
1.007
1.025
1.059
1.092
1.123
1.154
1.184
1.255
1.324
1.392
1.460
1.527
1.594
1.660
1.727
1.861
1.994
2.127
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0
3.2
3.4
3.6
3.8
4.0
4.5
5.0
5.5
6.0
7.0
8.0
9.0
10.0
11.0
12.0
13.0
14.0
15.0
1.023
1.040
1.056
1.072
1.087
1.102
1.116
1.130
1.144
1.158
1.171
1.197
1.222
1.246
1.269
1.292
1.349
1.403
1.457
1.510
1.615
1.719
1.823
1.927
2.031
2.135
2.239
2.343
2.447
Table D.10 Constant Terminal Rate Case Radial Flow Limited Reservoirs
(Continued)
R = 5.0
R = 6.0
R = 7.0
td
P(td)
td
P(td)
td
P(td)
3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4.0
4.2
4.4
4.6
4.8
5.0
5.5
6.0
6.5
7.0
7.5
8.0
9.0
10.0
11.0
12.0
13.0
14.0
15.0
1.167
1.180
1.192
1.204
1.215
1.227
1.238
1.249
1.259
1.270
1.281
1.301
1.321
1.340
1.360
1.378
1.424
1.469
1.513
1.556
1.598
1.641
1.725
1.808
1.892
1.975
2.059
2.142
2.225
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
11.0
12.0
13.0
14.0
15.0
16.0
17.0
18.0
19.0
20.0
25.0
30.0
1.275
1.322
1.364
1.404
1.441
1.477
1.511
1.544
1.576
1.607
1.638
1.668
1.698
1.767
1.815
1.873
1.931
1.988
2.045
2.103
2.160
2.217
2.274
2.560
2.846
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
11.0
12.0
13.0
14.0
15.0
16.0
17.0
18.0
19.0
20.0
22.0
24.0
26.0
28.0
30.0
1.436
1.470
1.501
1.531
1.559
1.586
1.613
1.638
1.663
1.711
1.757
1.801
1.845
1.888
1.931
1.974
2.016
2.058
2.100
2.181
2.267
2.351
2.434
2.517
Table D.10 Constant Terminal Rate Case Radial Flow Limited Reservoirs
(Continued)
R = 8.0
R = 9.0
R = 10
td
P(td)
td
P(td)
td
P(td)
8.0
8.5
9.0
9.5
10.0
10.5
11.0
11.5
12.0
12.5
13.0
13.5
14.0
14.5
15.0
17.0
19.0
21.0
23.0
25.0
30.0
35.0
40.0
45.0
1.556
1.582
1.607
1.631
1.653
1.675
1.697
1.717
1.737
1.757
1.776
1.795
1.813
1.831
1.849
1.919
1.986
2.051
2.116
2.180
2.340
2.499
2.658
2.817
10.0
10.5
11.0
11.5
12.0
12.5
13.0
13.5
14.0
14.5
15.0
15.5
16.0
17.0
18.0
19.0
20.0
22.0
24.0
26.0
28.0
30.0
34.0
38.0
40.0
45.0
50.0
1.651
1.673
1.693
1.713
1.732
1.750
1.768
1.786
1.803
1.819
1.835
1.851
1.867
1.897
1.926
1.955
1.983
2.037
2.090
2.142
2.193
2.244
2.345
2.446
2.496
2.621
2.746
12.0
12.5
13.0
13.5
14.0
14.5
15.0
15.5
16.0
17.0
18.0
19.0
20.0
22.0
24.0
26.0
28.0
30.0
32.0
34.0
36.0
38.0
40.0
50.0
60.0
70.0
1.732
1.750
1.768
1.784
1.801
1.817
1.832
1.847
1.862
1.890
1.917
1.943
1.968
2.017
2.063
2.108
2.151
2.194
2.236
2.278
2.319
2.360
2.401
2.604
2.806
3.008
1.80
1.90
2.00
R=6
2.10
R=8
2.20
R=00
R=10
2.30
12 16 20 24 28 32 36 40
TIME (t)
Figure D.20
Radial Flow, Constant Terminal Rate Case,
Pressure Drop Versus Time, P(td) Versus td
Overview
This appendix contains detailed descriptions of advanced grid models used by STARS,
divided into the following sections.
E.1
E.2
E.3
E.4
E.5
E.6
E.7
E.8
E.1
Much to the frustration of the engineer attempting to conduct a simulation study, oil-bearing
reservoirs are notoriously nonuniform. Examples of types of heterogeneities are: distinctive
formation layers and zones, pay zones separated by impermeable rock, permeability grading
up or down with height, high-permeability channels, micro-fractures, hydraulic (macro)
fractures and shale lenses.
Heterogeneities are divided into two groups:
1. Phenomenon must be modelled as a distinct item, separate from adjacent item.
Examples are high-permeability channels, separate pay zones, and grading
permeability (if important to the process).
2. Phenomenon can have an effect by modifying other data, or by averaging.
Examples are micro fractures and shale lenses, where the gross permeability may
be changed to account for the effect.
The way to treat any one nonuniformity will depend upon its interaction with the process.
For example, Figure E.1 shows the position of the combustion front in a reservoir crosssection in which the largest permeability is in the middle of the pay zone, with a maximum
contrast of 4.4. Despite the large amounts of air and steam involved, the sweep pattern and
breakthrough time are dominated by the permeability distribution. Thus the heterogeneous
permeability must be modelled in this case. The adequate representation of reservoir
nonuniformities usually is one of the highest priorities in grid design.
1.6 yr
E dg e P ro ducer
1.0 yr
Injector
0.5 yr
10 x 3 GRID
20 x 6 GRID
E.2
Examples of process phenomena are fluid banks, fronts, and property gradients. Even in a
uniform reservoir, numerical dispersion will introduce errors into the simulation results.
Gravity Override
The tendency for gas to rise in the reservoir is very often a key process phenomenon in
thermal EOR, and so it must be modelled adequately. To observe gas override, at least two
vertical blocks are required. Many vertical blocks will model it best, but sometimes only a
few are needed near the top for adequate representation of gas breakthrough (Figure E.2).
No
Override
Minimal
Override
Good
Override
Compromise
A set of sensitivity runs is the best way to determine if the grid is adequate. The result of two
such runs is shown in Figure E.1. The positions of the fire front shows some differences
between the two grids, but for the purpose of studying well spacing effects the coarser (and
cheaper) 10x3 grid was deemed accurate enough.
Distinct Pay Zones
If the process is sufficiently influenced by differences in pay zone properties, then each pay
zone should be modelled as at least one block layer. If detail in a zone is important, then
several block layers are needed for that zone. On the other hand, it may be possible to lump
several pay zones into one block layer if the process reacts similarly to each zone.
Bottom Water
A bottom water zone may play several different roles, such as aquifer source, thief zone for
mobilized oil, and a high-mobility channel for steam or air. A water zone may require
several block layers if air or steam override will occur there, or if oil will plug the zone.
Steam Fronts
Steam fronts are rather insensitive to horizontal block size, even though the front may be
sharp. This is helped by the fact that the steam condensation front seems to be inherently
stable, that is, fingers tend to shrink. Also, the piston-like nature of the process is quite
independent of physical parameters, such as steam temperature and gas saturation. Only
when other phenomena are important (additive contact area, near-well gradients, cycling) will
the areal block need to be smaller.
Combustion Fronts
The nature of the burning front in fire flooding makes it very different from steam flooding.
A burning zone is typically only about 5 to 10 cm wide in a combustion tube, and perhaps
larger in the field. The peak temperature in this small zone may be the key parameter in the
entire process, but this temperature cannot be represented by the averaged block temperature.
In field-scale combustion simulation the following constraints usually are accepted:
1. All reaction stoichiometry and enthalpies are assumed to be known.
2. Fuel lay down is assumed to be a known value, to be deposited when the steam
zone arrives.
3. Burning rates are simplified to complete combustion when oxygen and fuel are
contacted; alternatively, a burning front temperature is assumed.
Near-Well Phenomena
In the vicinity of a wellbore the pressure gradients and flow rates are high. Large block sizes
will introduce the assumption of uniform pressure gradient, saturations and temperature.
Better horizontal resolution is required if these gradients are important (see Section E.7 on
Hybrid Grids). Vertical resolution is needed if coning is anticipated, or if gravity override
will affect production capacity.
Cyclic steam simulations, with a single well, usually have blocks near the wellbore of about
1m, and the block sizes increase away from the wellbore.
Fractures and Channels
Fractures and channels can be modelled several different ways.
1. Use an entire row or layer of blocks which are assigned very large permeabilities
and porosities. Transmissibilities can be modified at certain times during the run.
This is the brute-force method, and is easy to control.
2. The effects of micro-fractures can be averaged into the block's gross permeability
and porosity, and the transmissibilities of entire regions can be changed with time.
3. Fractures opening and closing can be modelled with a simple pressure-dependent
transmissibility model. Transmissibility varies between a minimum value and a
maximum value as a function of pressure.
E.3
A reservoir that is tilted at a constant angle is a candidate for specifying only the tile angle
(Figure E.3).
A reservoir that is bent and tilted, or has a pay zone whose thickness varies significantly, can
be modelled with another device. Each column of blocks can be situated in space
independent of other columns (Figure E.4). Care must be taken to ensure that the reservoir
described is connected and realistic.
E.4
Grid Orientation
Grid orientation occurs when the numerical result depends too much on which direction the
grid lines run. Consider the example in figures E.5, E.6 and E.7. An areal combustion
simulation was run, and the fire front positions at two times are shown. Breakthrough occurs
first at the edge producer, which is then shut in. Injection continues until the fire front breaks
through at the corner producer. The cylindrical and diagonal grids behave similarly, but the
parallel grid result is completely incorrect (breakthrough occurs along the line between
producers). All three cases were run using five-point areal discretization.
Corner Producer
10 x 5 Cylindrical Grid
9 x 9 Parallel Grid
10 x 5 Diagonal Grid
Second Breakthrough
First Breakthrough
Injector
Edge Producer
9 x 9 Parallel Grid
10
x
5
D
ia
go
l
na
G
d
ri
Corner Producer
Injector
Edge Producer
The availability of nine-point options greatly reduces the concern over grid orientation.
However, since nine-point runs are usually about twice as expensive as five-point runs, test
runs are called for to see if nine-point is necessary.
E.5
Symmetry Elements
Symmetry elements are used frequently in thermal simulation for a number of reasons:
1. Compared with black-oil models, thermal models require much more CPU and
storage per grid block. Therefore, less blocks can be used for a given computer
storage limit.
2. Thermal EOR processes require more grid blocks per well or per pattern, since
fronts are sharp and distinct.
3. Accuracy can be maximized for use in test and sensitivity runs.
4. Some results from one element may be generalized to other elements and patterns.
5. Pattern interference can be investigated by sensitivity runs with different injection
share or production share.
6. Full-pattern or multipattern runs can be done once an acceptable course grid is
obtained.
Figure E.8 shows how a symmetry element may be picked from a pattern. Each of the grids in
Figure E.6 and E.7 are attempts to model the pattern element contained within the dotted line.
330'
Injector
(1/8 well)
10'
Edge Producer
(1/4 well)
165'
Figure E.8b: Basic reservoir one eighth of 2.5 acre nine-spot pattern, 10 ft. pay
E.6
Local Grid Refinement (LGR) technique can provide higher resolution in areas of interest e.g.
fractures, wellbore region, etc. with a considerable reduction of total number of grid blocks.
This can be achieved by setting up a coarser grid and refining only the grid blocks of interest.
The refinement is effected by specifying the number of subblocks in all directions in a certain
coarse grid block. There is no interpolation of pressure, temperature, saturation, etc. to
account for any variation in i, j or k direction and therefore it is recommended to use
maximum of 4 subblocks in each direction.
A refinement of an already refined block is not allowed. A subblock may also be a zero
porosity block or a null block. By default the refined blocks have the same properties as the
coarse block. However, any quantity entered as a grid array (see Input of Grid Property
Arrays in Chapter 3) may be altered for the specific subblocks using subkeyword *RG.
E.7
Hybrid Grid
(E7.1)
It is assumed that the coarse Cartesian block area is equal to the superimposed cylindrical
grid area.
Well Region (Elliptical Flow)
When the formation is anisotropic in the vicinity of the wellbore (in the plane perpendicular
to well direction) the flow is elliptical. The y-z coordinate system is transformed to elliptical
coordinates
ky
z =
kz
1/ 4
L cosh cos
k y > k z well is in x direction
k
y= z
ky
(E7.2)
1/ 4
L sinh sin
where represents a family of confocal ellipses and a family of confocal hyperbolas. Both
have a semi-focal length
L = rwe
[( k y k z ) / ( k y k z ) ]1/ 2
(E7.3)
Again, the equality of the original grid and the superimposed grid area is valid. The elliptical
block distance is calculated as:
1+1 / 2
= nr +1 / 2
nr 1
(E7.4)
(E7.5)
Reservoir Region
Equations for fluid flow in a Cartesian coordinate system are used. Irregularly shaped grid
blocks are formed at the well and reservoir region boundary. Depending on the flow
direction, they are treated either as fictitious radial (elliptical) or fictitious Cartesian blocks
with the same volume, transmissibilities and rock properties.
W ell Reg ion
R eservoir R egion
E.8
ph =1
nph
nrx
V
ph S ph x ph ,ic
srrx
q
t t
1
=124
rx
144ph
1
4
3
1
424
3
4=4
4244444
3
reaction
injection / production f
accumulation
(E8.1)
[matrixmatrix
flow]
nmp
ph =1
p ph ph x ph ,ic fm =
14444244443
fracture matrix flow
nph
nrx
*
V
S
x
sr
q
ph ph ph ,ic
rx
t t
=1
=124
1
424
3
1
4
3
144ph4
4
4244444
3 rx
injection / production
reaction
accumulation
(E8.2)
T ph ph H ph (p + Pc ph ph z )] +
1[4
44444442444444443f
ph =1
nph
ph =1
TcT f
+
14243
fracture heat conduction
p ph ph H ph fm + T Tfm
1444444
424444444
3
fracture matrix flow
nph
V
= t
ph S ph U ph + (1 ) c p (T Tr )
r
t ph =1
1444424444
3
14444244443
rock accumulation
fluid accumulation
f
( )
nrx
sru rx
=1243
1rx4
reaction
qu
1
424
3
injection / production
hloss
1
424
3
heatloss O / U
hext
1
424
3
(E8.3)
external heaters
[matrix
matrix flow ]
nph
ph =1
p ph ph H ph fm + T Tfm =
1444444
424444444
3
fracture matrix flow
nph
V
= t
ph S ph U ph + (1 ) c p (T Tr )
r
t ph =1
14444244443
1444424444
3
rock accumulation
fluid
accumulati
on
( )
nrx
sru rx
=1243
1rx4
reaction
qu
1
424
3
injection / production
hloss
1
424
3
heatloss O / U
hext
1
424
3
(E8.4)
external heaters
In addition to the conservation equations there is a constraint equation which may be solved
simultaneously with the above reservoir flow equations:
Saturation constraint
nph
S ph
=1
(E8.5)
ph =1
ic=1
y ic = 1
(E8.6)
The mobility in all the transfer terms is taken from the upstream direction, i.e., at some point of
time during the simulation the fracture properties can be used to calculate the fracture-matrix
flow. Heat conductivity for all transfer terms (fracture-matrix, fracture-fracture, matrix-matrix)
is calculated as a sum of resistivities in all directions. It means that both fracture and matrix
values are used.
In STARS the parameter p called the transmissibility factor, represents the transmissibility in
the fracture-matrix fluid flow term. There are two choices to calculate the p depending on the
*SHAPE keyword.
The Gilman and Kazemi formulation is:
p = 4Vb
i
k *mi
L2i
(E8.7)
1
L
i
k *fi k *mi
*
*
L fi k mi A fi / A mi + L mi k fi
(E8.7a)
Lf and Lm are calculated from input fracture spacing Lx, Ly, Lz (also termed element sizes) in
the x, y, and z directions which can be expressed as the sum of fracture widths Lfx, Lfy, Lfz
and matrix sizes Lmx, Lmy, Lmz for each direction. The number of matrix-fracture elements in
a grid block is expressed by the ratio Vb/ V. The K-Harmonic (KH) option of evaluating the
p is more general. The Gilman and Kazemi (GK) option assumes that fracture permeability
is much higher than matrix permeability and therefore is a sub-set of K-Harmonic calculation.
In many cases the GK assumption is true. When matrix permeability is fairly high or NFR is
used together with options that increase matrix permeability e.g. dilation, rock dissolution
then the KH option is more appropriate.
For thermal processes, conductive transport of energy between fracture and matrix must also
be considered. The parameter T denotes a thermal transmissibility in the fracture-matrix
conductive flow. It is calculated as:
1/ T =
A mifi f
i
L mi V
A mi m 4Vb
(E8.8)
Property data for both matrix and fracture blocks are based on the volume or areas of the
corresponding fundamental block. This principle will be applied to each of the properties
discussed below. Therefore, for each property there is a distinction between intrinsic data,
corresponding to the particular volume of interest, and effective data (denoted with *) that is
entered into the simulator. In general, user input data for a property depends upon fractions Ff
and Ffm as well as the intrinsic data.
Fracture-Width Case:
Fracture width and matrix size is calculated from input values of *DIFRAC, *DJFRAC,
*DKFRAC and *FRFRAC as follows:
= 1 (1 Ff )**b
Parameter b depends on the number of fractured directions. When all directions are fractured
b=3. The fracture width L fi = Li * and the matrix size is Lmi = Li - Lfi . i denotes a direction
x, y or z.
For a simplified cubic fracture element where the true fracture width Lf is very small
compared to the fracture spacing L. In this case volume fraction Ff reduces to 3Lf/L and area
fractions (Af/A) reduce to 2Lf/L, as found in many papers.
Porosity:
The pore volume in the fracture block is the open fracture volume Vff plus the pore volume of
the rock (formation) rVfm that is included in the fracture block. A hypothetical intrinsic
fracture porosity can be defined as
f = (Vff + rVfm) / Vf = 1Ffm(1r)
Ffm (*FORMINFRAC) and r (*POROSITY *FRACTURE) are input parameters. When
fracture does not contain rock the intrinsic fracture porosity becomes 1.
The effective fracture porosity is:
*f = f Ff
Permeability:
The following applies to each direction separately. Let Am, Af and A be the cross-sectional
areas for matrix, fracture and element, respectively, in the block and direction of interest.
Area ratio (Af/A) normal to the fracture may be much different compared to a direction
parallel to the fracture.
Intrinsic matrix permeability km, is the user input matrix block permeability (keywords
*PERMI *MATRIX, etc.). The effective matrix permeability is used in the fracture-matrix
transfer term calculation. It is expressed as:
km* = km(Am/A)
(E8.11)
Based on intrinsic fracture permeability kf, the user input fracture permeability (effective
value keywords *PERMI *FRACTURE, etc.) is
kf* = kf (Af /A)
(E8.12)
When fracture contains rock then kf should be a weighted average of a permeability in the
true fracture and the formation contained in the fracture block.
User's Guide STARS
One has to keep in mind these relationships, particularly in well-fractured reservoirs where
fracture spacings are fairly small (Lf may not be negligible compared to L) and during
simulation when fracture is assumed to be an extended region of high permeability.
User input permeability and porosity values for fracture and matrix can be obtained from core
and log analysis data13. This task in many cases is very involved and gives only approximate
values. The fracture spacing and matrix size can be estimated from the above mentioned
analysis as well.
Fluid Properties:
Fluid properties (e.g., density, heat capacity) are applied to the fluid in the pore volume of
both matrix and fracture blocks. Since user input porosities (matrix and fracture) give the
desired pore volumes, the same (unmodified) fluid property data is used by both matrix and
fracture blocks.
Rock Heat Capacity:
Volumetric rock heat capacity (incremental heat per volume per temperature difference) is
applied to the rock volume, that is, the 1 portion of the block. The input rock heat
capacities are intrinsic values for both fracture and matrix. STARS calculates the intrinsic
porosities (see above) and uses them to calculate the appropriate block heat capacity. The use
of intrinsic values vs. effective is necessary due to possible changes in porosity during
simulation. Porosity changes may results from dilation/recompaction, rock or solid
components reactions, etc. Rock volume in the matrix block is Vm(1m), so the desired rock
heat capacity is Vm(1m)Cpr. Rock volume in the fracture block is Vfm(1r), so the desired
rock heat capacity is Vfm(1r)Cpr. Rock heat capacity may be the same value for fracture
and matrix. When it is necessary different blocks as well as fracture and matrix may be
assigned different rock heat capacity via the *ROCKTYPE keyword.
Heat Conductivity:
Block thermal conductivity is the volume-weighted average of rock and phase values. Let fl
and r be the intrinsic thermal conductivity for saturation-weighted fluid and rock,
respectively. The intrinsic thermal conductivity for a block is, in general,
= fl + r (1 )
(E8.15)
Multiplying this quantity by cross-sectional area and temperature gradient gives conductive
heat flow. fl and r are the input values. r may be the same for both fracture and matrix or
may have different values assigned via *ROCTYPE keyword. The following applies to each
direction separately since area factors may vary with direction (see Permeability, above) and
thermal conductivities may be anisotropic.
Conductive heat flow in the fluid phases in the matrix block is AmflmgradT. Conductive heat
flow in the rock in the matrix block is Amr(1m) gradT.
Conductive heat flow in the fluid phases in the fracture block is Af fl fgradT. Conductive heat
flow in the rock (formation) in the fracture block is Af r (1r) gradT.
Intrinsic fracture porosity is equal to one when fracture does not contain rock and only fluid
will participate in all heat related calculations.
Other Properties:
In addition, the fluid and rock interaction must be defined in terms of relative permeabilities
and capillary pressure. Although it is difficult to measure these values in fractured cores, the
behavior in the matrix is described in a way similar to a conventional reservoir. The
characterization of these values in fracture is much more controversial. Usually, relative
permeabilities in the fracture are defined as straight lines and capillary pressure is neglected,
which should be a correct assumption for a thin fracture. However, the question is: how much
rock is included in the so-called fracture? Do the values of user input fracture porosity and
permeability obtained from log data represent only the response of the openings (real fractures)
or even the response of a small matrix portion in the immediate fracture vicinity? If "fracture"
contains rock then one has to account for the rock-fluid interaction on the fracture, i.e.
consideration of capillary pressure, non-linear dependence of relative permeabilities on
saturation and phase segregation in the fracture. These effects may be negligible if the rock
amounts to a small percentage, although they may be important when the fracture is partially
filled with high permeability rock (deposits). Firoozabadi14 claims to measure capillary
pressure in fracture as high as 0.275 MPa. In many fractured reservoirs where capillary effects
are a main source of fracture-matrix interaction, these values can make a real difference in
prediction of reservoir behavior. Other authors also realized that capillary discontinuity in the
fracture in many circumstances causes erroneous results.
Dual-Porosity Formulation
In the dual-porosity approach, the matrix blocks are assumed to be isolated and act as sinks or
sources to the fracture network. The matrix-matrix flow in Equations E8.2 and E8.4 is zero.
Because the fracture network is the primary flow continuum, as a default, the wells are
connected to the fracture only (q and qu in Equations E8.2 and E8.4 are equal to 0). In DP
the flow from/to the matrix to/from the fracture is considered in all fractured directions.
Furthermore, the assumption of small fracture width (Lf<<Lm) is invoked in these formulae
(standard DP implementation *SHAPE *GK).
Multiple Interacting Continua Formulation
In the MINC model the neighboring inner-block matrices communicate together and this
action is depicted in the matrix-matrix flow term (Equations E8.2 and E8.4):
matrix matrix fluid flow =
nph
ph =1
mm ph ph x ph ,ic mm
(E8.19)
The inner matrix blocks are nested, i.e. they and the fracture have the same depth; hence, the
gravity term is not included in the potential calculation. Similarly,
matrix matrix heat flow =
nph
ph =1
mm ph ph H ph mm + T,mm T
(E8.20)
A m,i,x A x
A m,i, y A y k mi, y k m,i +1, y
k mi,x k m,i +1,x
mm = 4
+
+
A m, y (L i k i +1+ L i+1k )m, y
A m,x (L i k i +1+ L i+1k i )m,x
User's Guide STARS
A m,i,z A z
A m,z
V
b
(L i k i+1+ L i+1k )m,z V
k mi,z k m,i +1,z
(E8.21)
A m,i, y A y
A m,i, x A x
T,mm = 4
+
+
A m, y (L i k i+1 + L i +1k i )m, y
A m, x (L i k i+1 + L i +1k i )m, x
V
b
A m,z (L i k i +1 + L i+1k i )m,z V
A m,i,z A z
(E8.22)
where Li and Li+1 are subdomain matrix sizes. These flow terms are calculated for each
subdomain and care must be taken in evaluating the area available to flow (Ami) between the
inner matrix blocks. As a default, wells are perforated only in the fractures. However, a user
may specify also perforations in the matrix (see STARS user manual *PERF keyword).
Vertical Refinement Formulation
This approach is a combination of dual-porosity with matrix refinement based on Gilman and
Kazemi15. It is assumed that a fluid volume in horizontal fractures is negligible and therefore
matrix communicates with vertical fractures only. In a 3-dimensional fracture the submatrices are connected to the fracture in the off-vertical directions and to each other in the
vertical direction. The matrix-matrix flow term in Equations E8.2 and E8.4 represents the
interaction between matrix sub-blocks and is evaluated as is shown in Equations E8.19 and
E8.20. The gravity term is included in the potential gradient calculation between matrices
and fractures as well.
The transmissibility factors mm and T,mm are expressed as:
A m,i,z A z
k mi,z k m,i +1,z Vb
mm = 2
A m,z (L i k i +1 + L i +1 k )m,z V
V
A m,i,z A z
b
T,mm = 2
+
A
(
L
k
L
k
)
m,z i i +1 i +1 i m,z V
(E8.23)
(E8.24)
Complete phase segregation is assumed in the fracture. The water, oil and gas levels are
determined almost the same way as in Gilman et al8. The formulas below are valid when
water is the heavier liquid. The phase levels in the fracture are defined by (Figure E.14)
S S wc
Zw = w
dz
1 S or S wc f
S g S gc
Zg =
dz
1 S lr S gc f
Zo = dz - Zw - Zg
(E8.25)
(E8.26)
(E8.27)
Fracture pressure pi at each depth Zi corresponding to the center of an inner block matrix "i"
is calculated as:
p i = p f + Z o + (Z w Z i ) + B
(E8.28)
where pf is the fracture pressure. The appropriate gravity contributions depend on the relative
positions of location depth Zi and the segregated fluid heights, namely
Zo + Z w < Zi < d z
Z w < Zi < Zo + Z w
Z w > Zi
= g
= g
= o
= w
= o
= w
(E8.29)
(
(
)
)
Zg > dz / 2
B = g Zg dz / 2
Z g < d z / 2 and Z w < d z / 2 B = o Z g d z / 2
Z g < d z / 2 and Z w > d z / 2 B = w (d z / 2 Z w ) o Z o
(E8.30)
When fracture is in an upstream direction, its properties are used in calculation of fracturematrix flow. Relative permeabilities in the fracture must be corrected to represent the phase
segregation. The weighting factors, actually normalized saturations, for water, gas and oil
phase are calculated as follows:
L
Z w Z i mi
2
1 > wfw =
>0
L mi
(E8.31)
(E8.32)
(E8.33)
When straight lines relative permeability curves with 0 to 1 range are used, then the weighting
factors represent directly saturations as well as relative permeability. When relative permeability
dependence on saturation is nonlinear and irreducible saturations are not zero, then relative
permeabilities are calculated as usual using wfw, wfo and wfg values. Phase segregation in the
fracture must also be considered in calculation of heat flow (both convective and conductive)
from fracture to matrix. In tar sand reservoirs (Athabasca) it may happen that the oil phase is
heavier than water. Analogous formulae can be written but are not given here.
Because of the assumption of negligible horizontal fracture volume, the use of this option is
valid strictly for diminutive horizontal fracturing. In a 3-dimensional fracture with sizable
fluid volume in a horizontal direction, fracture volume should be used instead of vertical
distances in the formulae above and fracture should communicate with matrix in all
directions. This idea needs to be investigated further.
Dual-Permeability Formulation
In this model, the fluids and heat flow in the fracture network as well as in the matrices.
Therefore, the matrix-matrix flow term (Equations E8.2 and E8.4) describes the flow between
matrices in adjacent grid blocks:
matrix matrix fluid flow =
nph
[T ph ph x ph,ic (p + Pc ph
ph =1
nph
ph z
[T ph ph H ph (p + Pc ph
ph =1
)]
)]
(E8.34)
z + [Tc T ]
(E8.35)
In some fractured reservoirs the inter-block matrix flow plays an important role and may be
even higher than the flow between fracture and matrix. To avoid high mass and energy
accumulation (lower production rates) in the matrix around the producer, or high flow rates in
the fracture around the injector, the well should be perforated through the matrix blocks as
well as the fracture (q and qu terms in Equation E8.2 and E8.4 may be different from zero).
The additional matrix perforation must be specified by the user. Also, the assumption of
small fracture width is again implied for *SHAPE *GK.
Implementation and Numerical Considerations
The above mentioned models were implemented in the multicomponent, multiphase thermal
simulator STARS. This simulator can also be run in an isothermal mode. The simulator
allows a reservoir description whereby fracture spacing and grid block sizes can vary
throughout the reservoir. In particular, the description allows fractured regions in addition to
nonfractured (single porosity) regions.
In fractured regions, each user input grid block represents one fracture block and one or more
matrix blocks which are numbered consecutively. Except for the dual permeability option,
the resulting Jacobian matrix is first preprocessed - fracture-matrix and inner block matrixmatrix equations are eliminated exactly - which results in a smaller incidence matrix. This is
solved either by direct or iterative incomplete LU methods, accelerated with GMRES16.
Either fully implicit or adaptive implicit (AIM) techniques17 an be used to solve the
governing equations. The AIM allows further Jacobian matrix preprocessing and substantial
run time savings when appropriate. Because of the high transmissibility contrasts between
matrix and fracture blocks, the AIM can be employed effectively in naturally fractured
reservoir models: fractures are implicit fractures and most matrix blocks are explicit.
Because the physical behavior in matrix and fracture varies considerably, different convergence
criteria as well as allowed changes in primary variables within a timestep should be used.
Figure E.14: Meaning of symbols used in the evaluation of fracture pressure Pi at each subdomain, based on
fracture pressure at the midpoint of the fracture Pf
References
1. Kazemi, K., Merrill, L.S. Jr., Porterfield, K.P., and Zeman, P.R., "Simulation of
Water-Oil Flow in Naturally Fractured Reservoirs," SPEJ, December 1976, pp.
317-326.
2. Thomas, L.K., Dixon, T.N., and Pierson, R.G., "Fractured Reservoir Simulation,"
SPEJ, February 1983, pp. 42-54.
3. Lee, B.Y.Q., and Tan, T.B.S., "Application of a Multiple Porosity/Permeability
Simulator in Fractured Reservoir Simulation," SPE 16009, presented at the 9th SPE
Symposium on Reservoir Simulation, San Antonio, Texas, February 1-4, 1987.
4. Pruess, K., and Narasimhan, T.N., "A Practical Method for Modelling Fluid and
Heat Flow in Fractured Porous Media," SPEJ, February 1985, pp. 14-26.
5. Gilman, J.R., "An Efficient Finite-Difference Method for Simulating Phase
Segregation in the Matrix Blocks in Double-Porosity Reservoirs," SPEJ, July 1986,
pp. 403-413.
6. Wu, Y.S., and Pruess, K., "A Multiple-Porosity Method for Simulation of
Naturally Fractured Petroleum Reservoirs," SPEJ, February 1988, pp. 327-336.
7. Pruess, K., and Wu, Y.-S., "A New Semianalytical Method for Numerical Simulation
of Fluid and Heat Flow in Fractured Reservoirs," SPE 18426, presented at the SPE
Symposium on Reservoir Simulation, Houston, Texas, February 6-8, 1989.
8. Gilman, J.R., and Kazemi, H., "Improve Calculations for Viscous and Gravity
Displacement in Matrix Blocks in Dual-Porosity Simulators," SPE 16010,
presented at the 9th SPE Symposium on Reservoir Simulation, San Antonio,
Texas, February 1-4, 1987.
9. Hill, A.C., and Thomas, G.W., "A New Approach for Simulating Complex
Fractured Reservoirs," SPE 13537, presented at the SPE Middle East Oil Technical
Conference and Exhibition, Bahrain, March 11-14, 1985.
10. Chen, W.H., Wasserman, M.L., and Fitzmorris, R.E., "A Thermal Simulator for
Naturally Fractured Reservoirs," SPE 16008, presented at the 9th SPE Symposium
on Reservoir Simulation, San Antonio, Texas, February 1-4, 1987.
11. Fung, L.S.-K., and Collins, D.A., "An Evaluation of the Improved Dual Porosity
Model for the Simulation of Gravity Effects in Naturally Fractured Reservoirs,"
CIM 88-39-05, presented at the 39th Annual Technical Meeting of Petroleum
Society of CIM, Calgary, Alberta, June 12-16, 1988.
12. Coats, K.H., "Implicit Compositional Simulation of Single Porosity and Dual
Porosity Reservoirs," 1st International Forum on Reservoir Simulation, Alpbach,
Austria, September 12-16, 1988.
13. Saidi, A.M., Reservoir Engineering of Fractured Reservoirs, Total Edition Press,
1987.
14. Firoozabadi, A., Hauge, J., "Capillary Pressure in Fractured Porous Media," SPE
18747, presented at the SPE California Regional Meeting, Bakersfield, CA, April 5-7,
1989.
15. Gilman, J.R., and Kazemi, H., "Improvements in Simulation of Naturally Fractured
Reservoirs," SPE 10511, presented at the 6th SPE Symposium on Reservoir
Simulation, New Orleans, Louisiana, January 31 - February 3, 1982.
16. Nghiem, L., and Rozon, B., "A Unified and Flexible Approach for Handling and
Solving Large Systems of Equations in Reservoir Simulation," 1st International
Forum on Reservoir Simulation, Alpbach, Austria, September 12-16, 1988.
17. Oballa, V., Coombe, D.A., and Buchanan, W.L., "Adaptive Implicit Method in
Thermal Simulation," SPE 18767, presented at the SPE California Regional
Meeting, Bakersfield, California, April 5-7, 1989.
Appendix F: Equations
Overview
This appendix contains details of the equations solved by STARS, divided into the following
sections.
F.1
F.2
F.3
F.4
F.5
F.6
F.7
F.8
F.9
F.10
Overview
Conservation Equations
Phase Equilibrium Relationships
Well Equations
Summary of Conservation Equations
Solution of Nonlinear Equations Newtons Method
Solution of Linear Equations General Sparse Solver
Treatment of Solid Components
Adaptive-Implicit Method
Use of Constraint Equations in the Sxy Formulation
F.1
Overview
These equations are the result of expressing all the relevant physical phenomena in
mathematical form. The equations are reviewed here so that the user of a thermal model can
understand why so much input data is required, where it is used, and how the various
property models are related to the final result.
There is one conservation equation for each chemical component for which a separate
accounting is desired, along with some equations describing phase equilibrium between
phases. There exists a set of these equations for each region of interest, which is usually a
discretized grid block. Lastly, there is an equation describing the operating condition of each
injection and production well.
F.2
Conservation Equations
(F2.1)
(F2.2)
(F2.3)
v = Vv / V
(F2.4)
f = Vf / V = (Vv Vs ) / V = (Vv / V ) (1 Vs / Vv )
(F2.5)
If we substitute the definition of v, and recognize that Vs/Vv, the fraction of void volume
occupied by solid and adsorbed components together is equal to csi/si, then
( csi / si)
f = v 1
(F2.6)
Note that if there is no solid or adsorbed component, then csi = 0 and Vs = 0, making Vv = Vf
and v = f.
(F2.7)
[ (
f w S w w i + o S o x i + g S g y i + v Ad i
t
(F2.8)
[ v c i ]
t
(F2.9)
[ (
f w S w U w + o S o U o + g S g U g + v c s U s + (1 v ) U r
t
(F2.10)
Here Uj, j=w,o,g,s are the internal energies as a function of temperature and phase
composition, and
j, j = w , o, g
are fluid phase densities. Ur is energy per rock volume, and cs is total solid concentration.
Flow Terms
w v w w i + o v o x i + g v g y i + w D wi w i + g D gi y i + o D oi x i
(F2.11)
w v w H w + o v o H o + g v g H g + T
(F2.12)
k rj
j
vj = T
r
j j
j = w , o, g
(F2.13)
1. T is the transmissibility between the two regions, accounting for the cross sectional area,
the node spacing and other geometrical considerations (e.g. partial grid blocks), as well as
the permeability at the interface. The units of transmissibility are therefore
A
l
eff
k eff .
A block centered grid system is used1. Information regarding the nine-point option2 is
found in SPE 12248. The effective permeability k is an area weighted harmonic average
of the absolute permeability in the two regions, correct for rectangular, radial and
variable - thickness grids.
962 Appendix F: Equations
2. Dji (j=w,o,g) are the component dispersibilities in the three phases and are again the
product of geometric factors and component dispersion coefficients, with units
A
l
eff
D eff
ji .
The effective dispersion coefficients at the interface are the geometric mean (square root
of the product) of the dispersion coefficients input for the two regions.
3. is the thermal transmissibility at the interface between the two regions, with units
A
l
eff
eff .
The effective thermal conductivity at the interface is the harmonic average of the two
regions, that is, resistance to heat conduction is in series.
4. Values of krj, j, j, rj, Hj, wi, xi and yi are taken from the phase upstream region.
The phase resistance factors rj are normally 1.0 but large values are associated with
blocking phenomena.
5. The potential at a grid node is j = pj - jgh. The potential difference j is the value at
the node of the adjacent region minus the value at the node of the current region of
interest. A positive value for j represents inflow, a negative value gives outflow. The
concentration differences wi, xi, yi are the differences in phase concentrations between
the nodes, following the same sign convention as . If a phase is not present in one of
the adjacent blocks, the concentration difference is set to zero (no dispersive transport).
T is the temperature drop between the nodes, again following the same sign convention
as .
Well Source/Sink Terms
Well source/sink terms are the means by which all the thermal EOR processes are driven.
The well source/sink term for flowing component i is
w q wk w i + o q ok x i + g q gk y i
(F2.14)
(F2.15)
Note the similarity between these terms and the interblock flow terms discussed above. The
volumetric flow rate q is analogous to V, but is calculated very differently.
The well phase rates are
qjk = Ijk (pwfk - pk)
j=w,o,g
(F2.16)
1. Subscript k refers to the fact that the region of interest contains layer no. K of a
well which may be completed also in other blocks or regions.
2. Ijk is the phase j index for well layer k, and may be specified in various ways.
3. pk is the node pressure of the region of interest which contains well layer k.
4. pwfk is the flowing wellbore pressure in well layer k.
The condition for injection is pwfk > pk in which case qjk is positive and fluid properties are
taken from wellbore conditions.
The condition for production is pwfk < pk in which case qjk < 0 and fluid properties are taken
from the producing region.
A wellbore heatloss model may be used to estimate Hw and Hg for injected water as a
function of time.
Chemical Reaction and Interphase Mass Transfer Source/Sink Terms
V s 'ki s ki rk
k =1
(F2.17)
V H rk rk
(F2.18)
k =1
k =1
HL k + HL v + HL c
(F2.19)
1. HLk is the rate of heat transfer to the region of interest through block face number
k, from the adjacent formation. The heat transfer rate and heat accumulated in the
overburden are calculated using an analytical solution for an infinite overburden.
Heat flow back into the reservoir block may occur.
2. HLv is the rate of heat transfer calculated from a convective model.
3. HLc represents a constant heat transfer model.
w qaq wk
(F2.20)
k =1
(HA CV + HA CD )k
(F2.21)
k =1
1. qaqw is a volumetric water flow rate through a block face k to/from the adjacent
aquifer.
2. HACV is a rate of heat transferred by convection to/from the adjacent aquifer.
3. HACD is a rate of heat transferred by conduction to/from the adjacent aquifer.
All flow rates are calculated using a semi-analytical model with various boundary conditions.
F.3
The phase mole fractions are related by the equilibrium ratios, or K values:
y i = K igo x i
xi =
K iow
wi
w i = K iwg y i
; x i = K iog y i
; w i = K iwo x i
(F3.1)
; y i = K igw w i
From these definitions, it can be seen that only two of the above K values are independent
(for three phases). The choice employed is made for convenience and can differ for different
components (see Section D.3).
The phase mole fractions are also constrained by
nc
i =1
nc
i =1
nc
i =1
y i = 1 when S g > 0,
x i = 1 when S o > 0, and
w i = 1 when S w > 0.
(F3.2)
(F3.3)
(F3.4)
(F3.5)
F.4
Well Equations
Simple single-block wells may be characterized with a constant rate or pressure, but a fullycoupled treatment of a well completed in several blocks requires a more comprehensive
approach3. Each equation listed below represents a well operating condition, and exactly one
equation per active well is in force at any one time.
Of the nlay layers of a well, one is designated as the bottom-hole layer; its flowing wellbore
pressure is pwf,
The volumetric well phase rate qjk = Ijk (pwfk - pk) was defined in the well source/sink
section, earlier in this chapter. The index Ijk may contain the mobility factor (krj/j), through
which the well equations can be tightly coupled to the reservoir conditions. This explains
why conservation equations and well equations should be solved simultaneously.
In the following, the subscript spec indicates a quantity specified by the user as an
operating condition. These equations apply to both injection and production wells.
Constant Pressure
pwf = pspec
(F4.1)
This is the most simple well equation. Rates are calculated, and can be checked against
auxiliary operating constraints.
Constant Water Rate
n lay
q wk = q spec
(F4.2)
k =1
This is solved simultaneously with the conservation equations, with pwf as an additional
variable. Even though qspec is constant, the distribution of water to different layers depends
on Ijk which can change with time.
Constant Oil Rate
n lay
q ok = q spec
(F4.3)
k =1
q gk = q spec
(F4.4)
k =1
(q wk + q ok ) = q spec
(F4.5)
k =1
1 lay
q gk y1 g = q spec
ST
w k =1
(F4.6)
where y1 and g are values from the grid block containing well layer k.
The water, oil, gas and liquid rates are generally specified at surface conditions (although
production wells can alternately employ bottomhole (reservoir) rates). In case of surface
conditions,
a) the mole rate w qwk wi + o qok xi + g qgk yi is evaluated for each component,
b) a flash is performed, to obtain phase splits and compositions using surface
condition K-values;
c) surface densities are calculated;
d) surface mole phase rates are multiplied by surface densities to get surface volume
rates.
The wellbore pressure pwfk at each layer is obtained by adding pwf (at k=1) the accumulated
fluid head.
p wfk = p wf +
hk
av g dh
(F4.7)
h1
where hk denotes the elevation of layer k, and av denotes an average mass density of the
fluids in the wellbore.
F.5
[ (
f w S w w i + o S o x i + g S g y i + v Ad i
t
nr
k =1
k =1
nf
(F5.1)
nf
+ D wi w w i + D oi o x i + D gi g y i + iw w qaq wk
k =i
+ w q wk w i + o q ok x i + g q gk y i [well layer k ]
k =1
[ v c i ] = V s 'ki s ki rk
t
k =1
(F5.2)
[ (
f w S w U w + o S o U o + g S g U g + v c s U s + (1 v ) U r
t
[Tw w H w w + To o H o o + Tg g H g g ] +
nf
nf
k =1
k =1
+ w q wk H w + o q ok H o + g q gk H g [well layer k ]
+V
nr
k =1
H rk rk + H L o + H L v + H L c +
(F5.3)
nf
(H A CV + H A CD )k
k =1
Tj = T
jr j
j = w, o, g
(F5.4)
F.6
See Aziz and Settari4 for a general review of flow equation solution methods. Of the
equations discussed above, the following neq equations are solved simultaneously for each
grid block, along with the well equations. It is assumed that the appropriate time
discretization has been done5. Most generally, there are
nc
y i = 1 or S w + S o + S g = 1 (optional)
i =1
The use/nonuse of a phase constraint equation depends on the choice of thermal flash
algorithm employed. When required, either the gas mole fraction or the saturation constraint
equation is solved, depending upon phase equilibrium conditions. The other constraint is
satisfied during calculation of the properties.
For isothermal problems, obviously the energy conservation equation, along with the phase
constraint equation, is not required.
Equations are solved simultaneously, using Newton's method, in a generalized form which
can handle many coupled equations. The equations summarized above are written in residual
form as
Ri = [net inflow rate] + [net source/sink rate] - [rate of change of accumulation]
(F6.1)
and the equation is solved when Ri = 0. Evaluation of the residuals Ri amounts to calculating
all the terms in the equations. The following calculation sequence is used.
1. Choose primary variables
2. K values
3. Remaining saturations and mole fractions
4. Densities, enthalpies, internal energies
5. Reaction rates, solid concentration, reaction source/sink terms
6. Porosity and accumulation terms
7. Relative permeabilities, viscosities, velocities, flow terms
8. Well rates and source/sink terms
9. Ri for nc+1 conservation equations and one phase constraint (when required)
Table F.1: Residual calculation sequence
If there are nb active grid blocks and nw open wells, then the total number of equations will be
Neq = nb (neq) +nw
(F6.2)
There are also Neq primary variables. Let Xi represent all primary variables, with i=1 to Neq.
In general, each residual Ri could depend on each Xi, which is written as
R = R(X)
(F6.3)
where R and X are Neq-length vectors. Advancing the solution over one timestep consists of
solving R(X) = 0. This is accomplished using Newton's method, which is written as
[ ]
X k +1 = X k J k
Rk
or J k X k +1 X k = R k
(F6.4)
where J = dR/dX is the Jacobian matrix of derivatives and k is the Newton iteration number.
The initial Xo is usually XN, the solution to the previous timestep. The iterative process is
considered converged when both (Xk+1 Xk) and R are sufficiently small, at which time the
solution at the current time is XN+1 = Xk+1.
The entries in the Jacobian are
J ij =
R i
X j
i = 1 to N eq , j = 1 to N eq
(F6.5)
R i X + X j R i (X )
Xj
(F6.6)
where the sum X + Xj represents the addition of Xj to Xj while keeping the other Xm, mj,
unchanged. When Xj is small, this cordslope is a good approximation to the tangent slope
Ri/Xj. It is important to note that the task of calculating the Jacobian derivatives has been
reduced now to a series of residual calculations, which was described in Table F.1.
1 2 3 4 5
x
1 x
x
2 x x
x
3
4 x
5
6
7
x
x
9
10
11
12
13
14
15
9 10 11 12 13 14 15
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
The quantity Ri(X) is called the unshifted residual, and X are the unshifted primary variables.
The intermediate unshifted properties are saved. When one variable Xj is shifted, only the
properties which depend on that variable are recalculated, thus saving work. Also, storage
and computer time are spent only on the grid blocks, wells and interblock connections
actually being used.
Finally, increasingly sophisticated features of the model can affect the sparsity of the
Jacobian matrix factors which tend to destroy the simple banded structure shown in Figure
F.1. On a submatrix level, constraint equations (usually describing phase equilibrium
situations) can be solved simultaneously with the flow, resulting in full diagonal submatrices
of the Jacobian but zero rows of off diagonal submatrices. The use of adaptive implicit
techniques result in variable numbers of equations and primary variables in Jacobian
submatrices, depending on whether the grid block is implicit or explicit. Later sections of
this chapter indicate when these factors arise. In addition, as described in the next chapter,
the well equations can be fully coupled to the reservoir flow equations, yielding additional
rows and columns at the bottom of the Jacobian matrix. Finally, more flexible grid design
features (see chapter 10) - null blocks, ninepoint discretizations (and possibly dual porosity or
dual permeability approaches) also affect the Jacobian sparsity. The necessity of a flexible
scheme for storing nonzero Jacobian elements and a general sparse solver to invert the
resulting Jacobian matrix is obvious.
F.7
(F7.1)
where the matrix A is sparse. Techniques have been developed to efficiently solve these
equations (invert the matrix A) in a unified and flexible manner.
The first is submatrix preprocessing (constraint equations and adaptive implicit reductions) to
reduce the algebraic work in the factorization and forward/backward substitution steps. Also
a subset of the equations of the Jacobian matrix can be preprocessed (well equations and the
dual porosity "matrix" equations) to create a smaller Jacobian matrix. Finally the use of a
red-black ordering scheme (a generalized D4 numbering system) can further eliminate
approximately half of the unknowns in optimal situations.
Eventually a large, still sparse matrix remains to be inverted. For smaller systems, direct
Gaussian elimination is preferred. For larger systems, an iterative scheme should be
employed. Here an incomplete LU factorization (ILU) is used as a preconditioner, followed
by a iterative solution acceleration procedure. The ILU preconditioning step is actually a few
steps of Gauss elimination. The result is a flexible approach to solving the linear system of
equations, allowing the iterative scheme to approach complete Gauss elimination as the
accuracy of the preconditioning step is increased. Symbolic factorization is used to define the
nonzero structure of the L and U factors of A. More complete descriptions of the concepts
outlined here are available6,7. The user can control the solution method employed by
appropriate data choices.
F.8
[ v c i ] =
s 'ki s ki rk
t
k =1
(F8.1)
where
v
ci
S'ki
ski
rk
This equation depends entirely on quantities local to the grid block, and so can be solved fully
implicitly and simultaneously.
This treatment of solid concentration allows the model to advance timesteps large enough that
ci and f change significantly.
It is not unusual for solid coke fuel to occupy 5 to 20 percent of the void pore volume.
In these cases, a very implicit and stable method is a requirement for the successful
calculation of ci and f.
This treatment is complicated by the fact that the fluid f (used to calculate rk) is a function of
solid concentration ci.
The following are the general steps taken in calculating the reaction rate rk and new solid
concentration ci.
1. Evaluate
[ (
v = o 1 + a p p o b (T Tr )
(F8.2)
where
a
b
o
p and T
2. Evaluate
fN
c iN
= v 1
si
i =1
(F8.3)
where si is the mole density of component i in the solid phase. At this point Nf is
a combination of most recent p and T and N-level cNi.
[ v c i ] v c i v c i
t
t
(F8.4)
(
n
Ri =
r
v c i vN c iN
+
s ki s 'ki rk = 0
t
k =1
(F8.5)
Rate rk can be split into a product of two parts. The first part r*k does not depend
on any concentrations, and contains not only the fluid concentration factors but
also the void porosity factors vekj for any solid concentration factors in the
reaction rate. The second part consists of all the solid concentration factors cjekj
without the associated porosities.
4. Solid component equations are solved in a way that minimizes the number of
equations that must be solved simultaneously. Each set of equations that must be
solved simultaneously is called a solid set. The solid sets are solved in an order
such that the resulting reordered matrix
R i / c j
is as tri-diagonal as possible.
Example A: Solid #1 equation depends on c1 and c2 but solid #2 equation depends
only on c2. We have two solid sets: in the first, solid #2 equation is solved for c2;
and in the second, solid #1 equation is solved for c1 (c2 is known).
Example B: Both solid #1 and #2 equations depend on c1 and c2. We have one
solid set, consisting of the simultaneous solution of the two equations.
Perform (5) for each solid set.
5. The solution of equations Ri = 0 for each solid set is accomplished via Newtons
method. If all the equations in the solid set are linear with respect to all the
variables cj in the solid set, then only one Newton iteration is done.
In the special case where the equation for solid i depends only on ci, and all the eki = 1,
the equation is linear and the solution is
vN c iN + t
ci =
v + t
nr
s 'ki rk*
k =1
nr
(F8.6)
s ki rk*
k =1
Note that the effect of ski is to increase ci, whereas the effect of ski is to decrease ci.
Complete the calculation of rk for each reaction k
e
rk = rk* c j kj
j
(F8.7)
F = 0.8 * 1 Ffluid vN / v
) (c
i
N
i
/ si
)]
F8.8
is the maximum available incremental void volume fraction, from the beginning of
the time step. Ffluid is the fraction of void volume occupied by fluid components
(e.g., by adsorption) and is considered a known constant in this calculation. The
void porosity ratio accounts for changes in pressure and temperature effects (e.g.,
the void pore space may decrease). Fraction 0.8 to allows fluid porosity to
approach 0 asymptotically by discounting the maximum value (at which fluid
porosity is zero) by 20%.
All the ci were solved from F8.5 in step #5. In fact, a highly nonlinear equation
(e.g., with large ekj) may not have been solved to within the convergence criterion.
In either case, these ci do not account for quantity F. Quantity
G=
(c
) (
/ si vN / v
) (c
N
i
/ si
F8.9
is the incremental void volume fraction corresponding to the unadjusted ci. If G >
F then the adjustment fraction is X = F/G. All solid concentrations are adjusted as
c *i = X c i + (1 X ) vN / v c iN
F8.10
f = v 1 Ffluid
i (c i / si ) ]
(F8.11)
F.9
Adaptive-Implicit Method
The Adaptive-Implicit Method (AIM)8 provides various degrees of implicitness for different grid
blocks, which translates into CPU saving in comparison with a fully implicit method5. Blocks
that are experiencing large throughputs or rapid changes in primary variables (pressure, saturation,
temperature, etc.) are treated fully implicitly. Blocks in which the changes or throughput are
small are handled in an "IMPES" fashion.
In an "IMPES" treated block the following quantities are not fully implicit:
1. Transmissibilities
2. Capillary pressure
3. Gravity head
4. Thermal conductivity
These are explicit (from previous timestep), when there is not a phase change during a
particular timestep. As soon as one of the phases appears or disappears, the above quantities
are updated during the Newton iteration and kept on this iteration level for the rest of the
timestep. Such updates are necessary due to the correct upstream values.
The choice of primary variables as well as the solution of the mass and energy balance equations
is the same as in the fully implicit method. However, the Jacobian matrix is different.
The structure of a Jacobian matrix for a hypothetical reservoir with 3 grid blocks containing
water and dead oil is shown in Figure F.2.
IMPES
IMPES
Tm
Tm
Tm
Tm
Tm
Tm
IMPES
Tm
Tm
Tm
Tm
Tm
Tm
Tm
Tm
Tm
Tm
Two alternatives are available for the switching between fully implicit and "IMPES"
treatment
1. Threshold switching criterion is based on a specific threshold change of each
primary variable over a timestep. The magnitude of the threshold values is
problem dependent and must be supplied by the user. High values may cause
insufficient switching of "IMPES" blocks to implicit ones which creates instability
problems. Low values cause premature switching and therefore less CPU savings.
2. Stability switching criterion is based on the numerical stability of a local
amplification matrix
f N +1,k +1
j
A=
v N +1,k +1
i
f jN +1, k +1
v iN +1, k +1
v im
f N +1,k +1
j
v im
(F9.1)
All eigenvalues of this matrix must be 0, so that the velocity of the fastest
moving front satisfies the stability condition
dt
u 1
dx v i
(F9.2)
where vi is the primary variable associated with the fastest moving front.
This criterion is problem independent and provides a possibility of backward
switching (implicit to "IMPES" mode) in blocks encountering little changes in
pressure, temperature, etc.
SPE 1 (Gauss)
SPE 2 (Gauss)
SPE 2 (1st ILU)
SPE 3 (1st ILU)
Steam + 2 additives (Gauss)
Field cycling (2nd ILU)
Field combustion (2nd ILU)
FIM
Iterations
506
408
370
408
397
3843
2449
AIM
Iterations
553
439
461
494
389
3793
2579
CPU
AIM/FIM
0.56
0.53
0.91
0.90
0.39
0.59
0.67
F.10
The constraint equations are used to calculate all the remaining saturations and mole fractions
from the primary variables. The procedure depends very much on which primary variables
are being used. For the purpose of illustration, consider a fluid model consisting of water,
two oils, air and coke. Table F.2 contains the resulting equation set.
Equation No.
1
2
3
4
5
6
7
8
Equation
water conservation
heavy oil conservation
light oil conservation (x3 < x2)
Noncondensable nitrogen conservation
noncondensable oxygen conservation
energy conservation
saturation constraint
phase equilibrium constraint
In most cases before air is injected, p, T, Sw, So and x3 will be primary variables, and the
constraints are used as follows.
x2
y2
y3
y1
=
=
=
=
1 x3
x 2 K 2 (p, T )
x 3 K 3 (p, T )
K w1 (p, T )
(F10.1)
(F10.2)
(F10.3)
In each case, one of the phase constraints is satisfied as an equality, and the other constraint is
satisfied as an inequality.
Rules for Choosing Primary Variables
1. Pressure p is always aligned with water, for compatibility with adaptive implicit
options.
2. Of the other condensable components which make up the oil phase, oil mole
fraction xi is used.
3. The component with the largest value of xi has So aligned with its equation. This
avoids aligning So with an equation whose component has xi 0.
4. When the oil phase has superheated, each xi and So is replaced with yi. If the
component has Ki = 0, then use Soxi instead. Primary variable Soxi is the symbolic
product of So (which is 0) and xi. Use of Soxi avoids a bad Jacobian matrix.
5. Conservation equations of noncondensable gases are aligned with the primary
variable Sgyi, which is the symbolic product of Sg and yi. Its use avoids a bad
Jacobian matrix when Sg = 0. It makes treatment of all such components the same,
and allows the same treatment to be used for steam and combustion.
6. Energy conservation is aligned with temperature, except when T must go
somewhere else.
7. The saturation constraint is used for wide-boiling systems, and is aligned with Sw.
8. The gas mole fraction constraint is used for narrow-boiling systems, and is aligned
with T.
9. When the water phase superheats, y1 is aligned with the gas mole fraction constraint.
Use of Constraint Equations
Tables F.3, F.4 and F.5 show the procedure used in each case of phase absence or presence.
The component set from Table F.2 is used. Note the Kw3 controls the amount of component
3 in the aqueous phase. Also, it is assumed that K2 and K3 are never zero. The constraints
that are built in Table F.5 are solved simultaneously with the conservation equations.
Use:
Check for:
So > 0
x2 = 1 - x 3
y2 = x2 K2 (p,T)
y3=x3 K3 (p,T)
So < 0
Sg = 0
So = 0
x2 = y2/K2 (p,T)
x3 = y3/K3 (p,T)
x 2 + x3 > 1
Use:
Check for:
Sw > 0
w3 = y3/Kw3 (p,T)
w1 = 1 w3
y1 = w1 Kw1 (p,T)
Sw < 0
Sw = 0
w3 = y3/Kw3 (p,T)
w1 = y1/Kw1 (p,T)
Sw = 0
w1 + w3 > 1
Let A = y1 + y2 + y3
Narrow Boiling
Wide Boiling
A < or Sg = 0
Use:
Sg = 1 Sw So
y4 = Sg y4 / Sg
y5 = Sg y5 / Sg
Sg = (Sg y4 + Sg y5) / (1 A)
y4 = Sg y4 / Sg
y5 = Sg y5 / Sg
Check for:
Satisfies:
Sg < 0
Sw + So + Sg = 1
A > 1 when Sg = 0
6
i =1
Residual:
R = 1
yi = 1
i =1
yi
R = 1 Sw So - Sg
References
1. Rubin, B., and Buchanan, W.L., "A General Purpose Thermal Model," SPEJ, Vol.
25, No. 2, pp. 202-214.
2. Coats, K.H., and Modine, A.D., "A Consistent Method for Calculating
Transmissibilities in Nine-Point Difference Equations," paper SPE 12248,
presented at the SPE Reservoir Simulation Symposium, San Francisco, California,
November 1983.
3. Trimble, R.H., and McDonald, A.E., "A Strongly Coupled, Fully Implicit, Three
Dimensional, Three Phase Well Coning Model," SPEJ, August 1981, pp. 454.
4. Aziz, K., and Settari, A., Petroleum Reservoir Simulation, Applied Science
Publishers, 1979.
5. Rubin, B., and Buchanan, W.L., "A General Purpose Thermal Model," SPEJ, Vol.
25, No. 2, pp. 202-214.
6. Nghiem, L., and Rozon, B., "A Unified and Flexible Approach for Handling and
Solving Large Systems of Equations in Reservoir Simulation," Proceedings of the
International Forum on Reservoir Simulation, Alpach, Austria, September 1988.
7. AIMSOL Technical Manual - Sparse Matrix Solver for Advanced Reservoir
Simulation Technology, Version 3.3, November 1990.
8. Oballa, V., Coombe, D.A., and Buchanan, W.L., "Adaptive Implicit Method in
Thermal Simulation," paper SPE 18767, presented at the 1989 SPE California
Regional Meeting, Bakersfield, California, April 5-7, 1989.
Overview
This appendix is organized in the following manner:
G.1
G.2
G.3
G.4
G.5
G.6
G.1
This description is a brief summary based entirely on chapter 2 of Hieberts thesis. Please
consult the references in Hiebert for a more complete review of the subject.
Simplifying Assumptions
In theory, the full form of Maxwells equations, along with appropriate boundary conditions,
may be solved to find the electric field for any physical configuration at any frequency. The
following simplifying assumptions are used here to make the computations more tractable:
1. For anisotropic electrical conductivity, the principal axes of the conductivity
tensor are parallel to the coordinate axes. Anisotropic conductivities arise when
thin silts or shales are intermixed with oil-bearing matrix. With horizontal
bedding, for example, current flows through the different materials in parallel in
each horizontal direction but in series in the vertical direction. The conductivity
tensor assumption above is usually preferable to the expense of modelling each
individual material bed with a separate grid block layer.
2. The electrical properties (conductivity, permittivity and magnetic permeability) do
not depend on the strengths of the electric or magnetic fields.
3. The quasi-static approximation is used, whereby the smallest wavelength resulting
from application of a single-frequency potential is much larger than the largest
physical length in the reservoir. This allows us to neglect electric fields that are
produced by changing magnetic fields. The wavelength of a 60 Hz field will depend
on the electrical conductivity of the formations surrounding the electrodes. The table
below gives the calculated conductivity and a recommended maximum feature size to
use, based on equation G.4 for a typical value of water conductivity (0.8 siemens/m).
Even if you need to somewhat exceed the safe feature size, the quasi-static
approximation can be used to provide a first estimate for design purposes.
Porosity
0.3
0.2
0.1
0.05
0.3
0.2
0.1
0.05
0.3
0.2
0.1
0.05
0.3
0.2
0.1
0.05
Sw
Conductivity
1
1
1
1
0.5
0.5
0.5
0.5
0.3
0.3
0.3
0.3
0.2
0.2
0.2
0.2
0.175
0.100
0.039
0.015
0.044
0.025
0.010
0.004
0.016
0.009
0.003
0.001
0.007
0.004
0.002
0.001
Resistivity
5.72
9.98
25.79
66.65
22.90
39.91
103.15
266.60
63.61
110.85
286.52
740.56
143.11
249.41
644.66
1666.26
Wavelength
998
1317
2118
3404
1995
2634
4235
6809
3326
4390
7058
11348
4989
6586
10588
17022
Recommended max.
feature size (m)
100
132
212
340
200
263
424
681
333
439
706
1135
499
659
1059
1702
If you plan to operate at an electrical frequency higher than 60 Hz, you should
calculate the wavelength in the formation at the operating frequency and apply the
same criteria of a maximum feature size of about one tenth of a wavelength.
4. We may neglect displacement current if the potential frequency used is low
enough. This allows us to express the electric field in terms of a scalar electrical
potential. For oil sand this assumption is well justified below a potential frequency
of 1 MHz, and so is valid at 60 Hz. In general the electrical potential may be a
phasor, with real and imaginary parts.
Current Continuity Equation
With the above assumptions and Ohms Law, the electric potential may be solved from the
current conservation equation
( ) = q
(G.1a)
The electric potential phasor is R + jI where R and I vary in space and j2 = -1. The
electrical source term phasor q is qR + jqI. The electrical conductivity is a diagonal tensor,
with no imaginary components since the formation has no capacitance or inductance. The
differential operator is real, so equation G.1a can be decoupled into two separate equations.
( R ) = q R
( I ) = q I
(G.1b)
(G.1c)
In the case of a three-dimensional Cartesian grid, the equation for real components is
R
R
R
x
+
z
= qR
y
+
x
x y
y z
z
(G.2a)
There is a similar equation for the imaginary components. Note that depends on
temperature and phase saturations, so that and may vary slowly with time. This
dependence couples the current equations and hence the electrical potential to the fluid and
reservoir conditions.
If all source terms have qI = 0 the result is I = 0 everywhere, in which case equation G.1c
does not need to be solved. This applies to non-alternating as well as single-phase alternating
cases. For alternating current cases is the rms (root-mean-square) potential, allowing the
same formulas to be used for both direct and alternating cases.
Heat Generation from Ohmic Losses
The heating rate due to electrical conduction is
R
Q = x
R
+ y
R
+ z
I
+ x
I
+ y
I
+ z
(G.3)
This heating rate couples the fluid and reservoir conditions to the electrical potential.
G.2
Electrical Conductivity
The user enters temperature-dependent electrical conductivity for the water phase w,p(T), oil
phase o,p(T), solid phase s,p(T) and rock/matrix r,p(T) for each grid block in three directions
(p = i,j,k). The water phase value has possible composition dependence
w,p(T) = i wiw,i,p(T)
where wi is water mole fraction and w,i,p(T) is electrical conductivity, both of aqueous
component i. The water phase value has an additional dependence on fluid porosity f and
water saturation Sw from the Archie equation, for example,
p = i, j, k
(G.4)
where the porosities are defined in Appendix F.2. Note that water conductivity w,p(T,f,Sw)
already contains the factor fSw. Different values of the conductivities and Archie
parameters may be specified for each rock zone.
Current Conservation Equation
Consider current flow between block i and block i+1, separated electrically by two resistances
in series. From block center i to common block face i+1/2 the geometric factor (separation
divided by cross-sectional area) is Ti and the bulk conductivity is i, so the resistance is Ri = Ti/i.
Similarly for block i+1, Ri+1 = Ti+1/i+1. The current flow from block center i to block center
i+1 is potential drop over resistance in series
I i,i+1 = ( Vi Vi+1
) / ( Ri
+ R i+1 )
(G.5)
Therefore, application of equation G.1 to a grid block amounts to constraining to zero the
sum of the current flow terms like G.5 between that block and all its neighbours. The current
equations for all the blocks are solved simultaneously along with the fluid flow conservation
equations. Therefore, when the time step is converged the resulting potential field reflects the
newest reservoir conditions. The error in current material balance usually is very small.
The above applies only to internal block faces, that is, faces between two grid blocks. For
external block faces there is no current flow other than specified electric boundaries.
Boundary Conditions
An electrical boundary is a collection of block faces that are assumed to be at the same
potential, and through which current flows into and out of the reservoir. Since a grid blocks
potential is referenced to the geometrical center of the block, there is a potential drop between a
segment of electrical boundary and its host grid block. A boundary face may be external or
internal to the grid.
986 Appendix G: Electrical Heating
Each host block has an additional current term similar to G.5, corresponding to the electrical
boundary, with a similar definition for geometric term and resistance. The (real or
imaginary) current flow from block center i to boundary b is
Ii,b = ( Vi Vb ) / Ri
(G.6)
The current of each boundary segment is saved for purposes of reporting as well as detection
and control of a maximum-current type constraint.
Phase Modes
There are two possible simulation modes with respect to AC phasing. When at least one
boundary has an imaginary (j component) source term, both the real and imaginary
components of potential and current are calculated. In this case the model is in multi-phase
mode since the imaginary components can model boundaries of different phases. On the
other hand, when there are no imaginary source terms then the j component equation G.1c is
not solved and the run is in single-phase mode. A case containing only real potentials of
both signs together can be handled by single-phase mode.
Heat Generation
The heat generation rate in a grid block is the sum of the rates for all the currents flowing in
that block. The real current obtained in G.5 for inter-block flow contributes to the heating
rate Q in two grid blocks
Q i = ( I i,i +1 )2 * R i
Q i +1 = ( I i,i+1 )2 * R i+1
(G.7)
and the boundary-block flow in G.6 also contributes to the heating rate
Q i = ( I i,b )2 * R i
(G.8)
factors depend on the last updated (and possibly lagged) resistances and potential field, but the
specified total current magnitude for that boundary is honoured. When a current constraint is in
effect, the calculated Vb is tested against that boundarys potential constraint. Since a current
type constraint operates by adjusting Vb as a ratio of its initial value and phase, this constraint
type cannot be applied to a boundary with Vb = 0. Also, a boundarys current type constraint
operates best when most or all of the layers contribute current of the same sign, that is, the
boundarys potential is either higher or lower than surrounding values.
The total heat rate (power) and no-flash constraints are global constraint types which can override any other constraint. Each global constraint operates by adjusting the entire potential field
by a scalar factor. This technique is possible because equation G.1 lacks an accumulation term
and resistances do not depend upon potentials, so multiplying all potentials by factor x results in
local (and hence total) heating rates multiplied by x2. This adjustment is done at the end of a
time step as well as whenever the heating rate is updated. Before a global constraint becomes
the operating constraint, heating rates are calculated from the existing potential field and scale
factors are obtained. If the scale factor is less than one, that is, the global constraint is more
restrictive, operation is switched to that constraint and the scale factor is applied to the entire
potential field. A boundary with zero potential can be used as a reference (ground) since its
potential does not change when the factor is applied.
Combining the algorithms described above results in automatic switching between constraints
depending on changing conditions, so that the most restrictive constraint is used. For example,
it is common to specify maximum potentials and total heating rate. At the start the process may
be running on maximum potentials, but the heating rate increases as the reservoir heats and
conductivity increases. When the maximum total heating rate is reached, non-zero boundary
potentials are decreased so that the total heating rate is equal to the maximum specified.
G.3
6. The following electric boundary results are available at the end of the time step:
7. The following sector statistics are available: electrical heating rate and
accumulation.
Graphical Display in RESULTS
In RESULTS you have a choice of units for display of electrical quantities. For example,
electrical potential may be displayed in V, kV or mV.
1. The following per-block electrical results are available via the subkeywords of
*OUTSRF *GRID:
4. The following sector statistics are available: electrical heating rate and accumulation.
G.4
Templates
Most of these templates have extensive output enabled to both the text output and SR2, and
some have the current density field available as a vector plot in RESULTS 3D. All have a
significant list of special histories, for example, total heat rate and accumulation, and
boundary potentials, currents and accumulated charge.
ELEC1: Boundary Potential Changes in Recurrent Data
This template has recurrent data in which the downhole electrode potential changes several
times during the run. Also, the list of blocks associated with the electrode is changed several
times. You can see in a cross-section view of the block electric potential in RESULTS that
the change in electrode block assignments changes the electric field shape near the well.
ELEC2: Electrical Heating with 3D Cartesian Grid
In this 13104 Cartesian grid the electrode is at one corner and the ground is at an opposite
edge, and sector output allows you to track the heat generated in the 4 layers separately.
ELEC3: Maximum Power and Current Constraints
This template models primary production with a radial grid. The electrode interval at the
wellbore changes with time, and ground is the top of the pay zone. The water electrical
conductivity varies with temperature. Electrode potential is 220 V, but there is a maximum
total power (electric heat generation) rate of 10 kW, as well as a maximum current constraint
of 65 A. The run starts immediately on the 10 kW total power constraint. After the blocks
around the well have heated up, the conductivity increases and the current increases, causing
a switch to the maximum current constraint. Later the potential is manually decreased to 120
V so that both the current and power fall below their maximum. This can be seen by viewing
the total power and current in RESULTS Graph.
The change of conductivity can be viewed via a plot of total resistance between the electrode
and ground. Some potential gradients also are written to the SR2.
ELEC4: No-Flash Option
This template is similar to ELEC3, but the fluid flow is larger and the No-Flash option is
enabled. The data requests that the temperature in any grid block not exceed that blocks
water flashing temperature minus 50 degrees.
The electrode starts on 220 V, but hits the 20 kW power limit as the region around the
wellbore heats and the electrical conductivity increases. As blocks near the wellbore
approach the water flashing temperature, the no-flash constraint kicks in and reduces the
power even further. In the last half of the run the temperature and power are very steady,
indicating the pseudo-steady process of in-flowing fluid cooling the wellbore. This can be
seen very well by plotting with RESULTS Graph the total power together with temperature
of block (1,1,6).
ELEC5: Hybrid Grid
The regions around two wells in a Cartesian grid are modelled with hybrid grids in a manner
similar to the single well in ELEC3. The run starts on maximum potential constraint,
switches to maximum total power constraint and then to maximum current, as shown by the
corresponding special histories.
User's Guide STARS
220 V at 90 deg
200 V at 60 deg
180 V at 150 deg
160 V at 240 deg
120 V at 330 deg
G.5
Input Data
The electric heating option is enabled by keyword *ELECHEAT in the Other Reservoir
Properties data section. The electrical heating keywords are organized into the following
groupings, one grouping per manual page, in the following data sections.
Other Reservoir Properties
1. *ELECHEAT enables the electrical heating option. *ELECTYPE and *ELTYPE
access the property set (rock type) option. *VOLTOL, *VOLSHF and
*EHEATCYC control convergence.
2. *ELCONTAB, *ELWCOMPTAB and *ELSCOMPTAB specify electrical
conductivities that vary with set, temperature, phase and composition.
3. *ECONDWI, *ECONDWJ, *ECONDWK and *TEMMULT specify electrical
conductivities that vary by block and temperature (obsolete).
Well and Recurrent Data
4. *ELBOUND and *ELTARGET specify electrical boundary conditions and
operating constraints.
Input/Output Control
5. *OUTPRN *GRID subkeywords ELCONDUCT, etc., specify grid dump output to
the .out text file.
6. *OUTSRF *GRID subkeywords ELCONDUCT, etc., specify grid dump output to
the SR2 graphics file. In addition, *OUTSRF *SPECIAL subkeywords ELHEAT,
etc., are available for history plots.
7. The EXPLANATION for keyword *INUNIT documents the electrical units.
Restrictions
The electric heating option may be used with any grid, component, rock property and fluid
well configuration, with the following exceptions:
1. The nine-point, natural fracture and discretized wellbore grid options are not
allowed.
2. You may not use the *RW 0 option or keyword *GRID *RADIAL with an
electrical boundary in the -I, -J or +J direction, since this would give a radius of 0
to the inner reservoir boundary normally associated with the wellbore.
3. A zero-porosity heat-conducting block conducts electrical current only if rock
electrical conductivity is assigned a non-zero value.
4. The *ISOTHERMAL formulation option is not allowed.
5. Adaptive-implicit (*AIM) options are not recommended or supported.
6. Dynamic (*DYNAGRID) and recurrent gridding options are not allowed.
G.6
References
1. Hiebert, A.D., Numerical Simulation of the Electrical Pre-heat and Steam Drive
Bitumen Recovery Process for the Athabasca Oil Sands, Ph.D. Thesis, Dept. of
Electrical Engineering, University of Alberta, 1986.
2. Killough, J.E., Gonzalez, J.A., A Fully-Implicit Model for Electrically Enhanced
Oil Recovery,, SPE 15605, presented at the 61st Annual Technical Conference
and Exhibition, New Orleans, Oct. 5-8, 1986.
Keyword
Index
A
ADHEAT 784
ADMAXT 433
ADRT 433
ADSCOMP 430
ADSLANG 430
ADSROCK 433
ADSTABLE 430
ADSTYPE 433
AIM 482
AIMSET 793
ALL 83
ALLELEM 76
ALTER 706
ANNULUS 75
ANNULUSWAL 213, 803
APPOR-METHOD 734
AQCOMP 249
AQFRCOMP 310
AQFUNC 257
AQGEOM 249
AQLEAK 249
AQMETHOD 249
AQPROP 249
AQUIFER 249
AQVISC 249
AUTOCOOLER 780
AUTODRILL 651
AUTOHEATER 780
AVG 333
AVISC 335
B
BCOEF 525
BHPDEPTH 702
BHPGRAD 704
BINARY_DATA 84
User's Guide STARS
BIOTSCOEF 513
BKRGCW 420
BKROCW 420
BKRWRO 420
BLOCKAGE 340
BPCGMAX 420
BPCWMAX 420
BSGCON 420
BSGR 420
BSOIRG 420
BSOIRW 420
BSORG 420
BSORW 420
BSWCRIT 420
BSWIRG 420
BSWR 420
BSWRG 420
BVG 333
BVISC 335
C
CALIB_POR 614
CASEID 107
CASING 213, 803
CHECKONLY 106
CHECKRB 491
CIRCWELL 213, 803
CMM 308
COHESION 513, 518, 525, 534
COMMENT 66
COMPNAME 297
CON 77
CONC_SLD 453
CONVERGE 465
CONVERT-TO-CORNER-POINT
154
COORD 178
CORNERS 180
CORNER-TOL 183
CP 324
CPG1 314
CPG2 314
CPG3 314
CPG4 314
CPL1 314
CPL2 314
CPL3 314
CPL4 314
CPOR 268
CPORPD 268
CPT 324
CPTPOR 268
CRD 271
Keyword Index 995
CRP 274
CT1 324
CT2 324
CTPOR 268
CYC_GROUP 710
D
DATE 629
DEPTH 161
DEPTH-TOP 168
DFRICANGLE 525
DGOC 445
DI 157
DIFFI_GAS 423
DIFFI_OIL 423
DIFFI_WAT 423
DIFFJ_GAS 423
DIFFJ_OIL 423
DIFFJ_WAT 423
DIFFK_GAS 423
DIFFK_OIL 423
DIFFK_WAT 423
DIFRAC 209
DILANGLE 513
DILATION 271
DIM 103
DIP 170
DISPI_GAS 428
DISPI_OIL 428
DISPI_WAT 428
DISPJ_GAS 428
DISPJ_OIL 428
DISPJ_WAT 428
DISPK_GAS 428
DISPK_OIL 428
DISPK_WAT 428
DISPLACTOL 555
DJ 158
DJFRAC 209
DK 160
DKFRAC 209
DLOADBC 587
DLOADBC3D 591
DLOADIJK 591
DNMIXCOMP 328
DNMIXENDP 328
DNMIXFUNC 328
DPLANES 499
DRILLQ 731
DRUCKER 515
DTMAX 459
DTMIN 459
DTOP 163
996 Keyword Index
DTRAPN 388
DTRAPW 388
DTWELL 633
DTYPE 501
DUALPERM 203
DUALPOR 202
DWOC 445
DW-RES-UPSTREAM 474
DYNAGRID 794
DYNGRDFREQ 124
DYNSR2MODE 127
E
EACT 345
ECOEF 525
ECONDWI 295
ECONDWJ 295
ECONDWK 295
ELASTMOD 513, 518
ELASTOMOD 534
ELBOUND 805
ELCONTAB 292
ELECHEAT 289
ELECTYPE 289
ELSCOMPTAB 292
ELTARGET 805
ELTYPE 289
ELWCOMPTAB 292
END-GRID 266
EPCAP 385
EPCOMPACT 274
EPGCP 385
EPOIL 385
EPOMF 385
EPSALT 385
EPSURF 385
EQUALSI 86
EQUILIBRATE 649
EV 314
EXPN1 525
EXPN2 525
F
FAULT 243
FAULTARRAY 245
FILENAMES 99
FILM_COND 213, 803
FLOIL 385
FLSALT 385
FMCAP 385
FMGCP 385
FMMOB 385
User's Guide STARS
FMOIL 385
FMOMF 385
FMSALT 385
FMSURF 385
FORCETOL 555
FORMINFRAC 211
FPVOLM 552
FR 271
FRACTURE 73
FRATIO 525
FREQFAC 342
FREQFACP 342
FRFRAC 211
FRICANGLE 513, 518, 525, 534
FRICANGMN 525
G
GAMMA 523
GAPPOR 733
GASD-ZCOEF 331
GASLIQKV 303
GASSYLIQ 324
GASSYSLD 319
GAUSSPNT 555
GCAPD 518
GCAPLOC 518
GCAPMAT 518
GCAPMODEL 517
GCAPR 518
GCAPTEN 518
GCAPW 518
GCFACTOR 610
GCINCRMT 518
GCIOFF 745
GCONI 723
GCONIMULT 776
GCONM 728
GCONP 718
GCONPMULT 773
GCOUPLING 607
GCPOFF 745
GCRV 388
GCUPDATE 612
GEODOMAIN 605
GEOM3D 510
GEOMECH 509
GEOMETRY 679
GEORBLOCK 570
GEOROCK 512
GEOTYPE 512
GEXPONENTN 523
GFRACBLK 545
GLIFT 714
User's Guide STARS
GLOADBC 597
GLOADBC3D 599
GMCREEP 532
GPATM 525
GPERMBB 545
GPERMES 542
GPERMLC 542
GPERMTS 542
GPERMVL 542
GPTOLMUL 611
GRID 150
GROUP 634
GUIDEI 742
GUIDEP 742
GULBULKMOD 523
GVISCOR 333
H
HARDEN 513
HEAD-METHOD 643
HEATR 780
HEATSLAVE 786
HFPROP 249
HLOSSPROP 285
HLOSST 285
HLOSSTDIFF 285
HVAPR 314
HVR 314
HYS_DRAING 397
HYS_DRAINW 397
HYS_IMBIBG 397
HYS_IMBIBW 397
HYS_KRG 397
HYS_KRO 397
HYS_KRW 397
HYS_LEVEL 397
HYS_PCOG 397
HYS_PCOW 397
HYS_REVG 397
HYS_REVW 397
HYS_TOLG 397
HYS_TOLW 397
I
ICE 355
IDEALGAS 309
IFTTABLE 383
IJK 78
IN_PR_SHUT 711
INCOMP 665
INCOMPGL 714
INITIAL 437
Keyword Index 997
INITREGION 438
INJ_C_SWT 711
INJECTOR 651
INT 89
INTCOMP 382
INTERRUPT 145
INTLIN 383
INTLOG 383
INTYPE 438
INUNIT 108
ISECTOR 262
ISOTHERMAL 460
ITERMAX 481
ITERMAXG 558
IVAR 80
L
LAMINAR 213, 803
LAYERGRAD 699
LAYERIJK 694
LAYERXYZ 691
LEP-DIAMETER 696
LEP-DISCHARGE-COEFF 696
LEP-DISCHARGE-COEFF-CNST
696
LEP-WELL 696
LIQLIQKV 303
LIQPHASE 322
LIST 65
M
J
JDUMG 558
JVAR 81
K
K_SURF 310
KDIR 150
KL_SURF 310
KRGCW 416
KRINTERP 388
KRINTRP 388
KRNOPR 791
KROCW 416
KRPRDET 791
KRPRGRID 791
KRRESET 791
KRSWITCH 791
KRTEMTAB 419
KRTYPE 377
KRTYPE_CTRGAS 380
KRTYPE_CTROIL 380
KRTYPE_CTRWAT 380
KRTYPE_VERT 377
KRWIRO 416
KRWRO 416
KV1 301
KV2 301
KV3 301
KV4 301
KV5 301
KVAR 82
KVKEYCOMP 303
KVTABLE 303
KVTABLIM 303
MASSBASIS 111
MASSDEN 324
MATBALTOL 465
MATRIX 72
MAXERROR 112
MAXLAYPRE 487
MAXPRES 484
MAXSTEPS 458
MAXTEMP 484
MCOEF 525
MCONNG 561
MDICLU_PG 561
MDSPI_GAS 426
MDSPI_OIL 426
MDSPI_WAT 426
MDSPJ_GAS 426
MDSPJ_OIL 426
MDSPJ_WAT 426
MDSPK_GAS 426
MDSPK_OIL 426
MDSPK_WAT 426
MFRAC_GAS 448
MFRAC_OIL 448
MFRAC_WAT 448
MINC 205
MINPRES 484
MINTEMP 484
MOD 87
MODEL 297
MODELSHUT 649
MOHRCOUL 515
MOLDEN 324
MOLVOL 324
MONITOR 675
MPLNE 561
MRC-RESET 708
MTVEL 350
User's Guide STARS
N
NB 525
NCOUPLING 616
NCUTS 488
NE 525
NETGROSS 232
NETPAY 230
NEWTONCYC 471
NINCS 555
NINEPOINT 155
NINEPTH 155
NITERGEO 555
NLINEAR 522
NODE4 555
NODE8 555
NODE9 555
NOLIST 65
NOLISTLIM 146
NORM 463
NORTH 477
NORTHG 558
NTB 525
NTE 525
NULL 201
NULL-PERF 645
NUMERICAL 457
NUMSET 461
NUMTYPE 461
O
O2CONC 345
O2PP 345
OCRV 388
OILPHASE 322
ON-TIME 747
OPEN 651
OPERATE 668
ORTHOGG 558
OUTPRN 118
OUTSOLVR 144
OUTSRF 127
OUTUNIT 108
P
PARTCLSIZE 118
PAUSE 631
PAYDEPTH 166
PBASE 271
PBC 448
PCGEND 416
PCRIT 309
User's Guide STARS
PCWEND 416
PDEGAA 492
PDEGAB 493
PDILA 271
PERF 681
PERFV 690
PERMCK 277
PERMEXP 277
PERMI 226
PERMJ 226
PERMK 226
PERMSCALE 350
PERMSLD 277
PERMTAB 277
PERMTABLOG 277
PERMULI 277
PERMULJ 277
PERMULK 277
PFRAC 789
PFRACF 789
PGDILA 538
PGPACT 538
PGPDMAX 538
PHWELLBORE 655
PINCHOUTARRAY 239
PINCHOUT-TOL 241
PINJW 663
PIVOT 480
PIVOTG 558
PLOADBC 581
PLOADBC3D 585
PLSTRAINY 511
PNPROSL 490
PNTHRDS 500
POISSRATIO 513, 518, 534
POR 224
PORFT 433
PORMAX 268
POROSTOL 616
PORRATMAX 271
PPACT 271
PPATTERN 494
PPLASTIC 274
PR_IN_SHUT 711
PRECABG 558
PRECC 476
PRECCG 558
PRES 444
PRESCBC 571
PRESCBC3D 577
PRESSTOL 616
PRINT_REF 142
PRINTGEO 555
PRIOR-FORM 738
Keyword Index 999
PRNTORIEN 142
PROD_C_SWT 711
PRODUCER 651
PRPOR 268
PRSR 310
PSURF 310
PTRANSI 789
PTRANSIJ- 789
PTRANSIJ+ 789
PTRANSIK- 789
PTRANSIK+ 789
PTRANSJ 789
PTRANSK 789
PVCUTOFF 258
PVTOSCMAX 486
Q
QUAL 663
R
RANGE 184, 213, 803
RANGECHECK 63
REFBLOCK 439
REFDEPTH 439
REFINE 184
REFPRES 439
REGIME 213, 803
RELROUGH 213, 803
RENTH 345
REPORTING-GROUP 641
RESTART 113
RESTIME 113
REWIND 114
RG 74
RIGIDNULL 601
RIGIDTOP 604
ROCKCP 280
ROCKCP_SHL 280
ROCKFLUID 376
ROCKTYPE 267
RORDER 345
RPHASE 345
RPLTABD 550
RPT 377
RPWTABD 550
RRFT 433
RTEMLOWR 345
RTEMUPR 345
RTYPE 377
RUN 628
RXCMPFAC 345
RXCRITCON 345
RXEQBAK 352
RXEQFOR 352
S
SAMINFO 716
SCRV 388
SDEGREE 479
SDEGREEG 558
SECTOR 259
SECTORARRAY 261
SECTORNAMES 262
SG 445
SGCON 416
SGLIM 791
SGR 416
SHAPE 207
SHUTIN 651
SITERPG 558
SLT 394
SMALL-RATES 475
SO 445
SOIRG 416
SOIRW 416
SOLID_CP 319
SOLID_DEN 319
SOLIDMIN 340
SOLVER 489
SOLVERG 558
SORDER 478
SORDERG 558
SORG 416
SORW 416
SPECGRAV 597
SR2PREC 127
SRFASCII 127
STIFFCOM1 554
STIFFCOM2 554
STIFFINIT 554
STIFFTANG 554
STOP 629
STOPROD 342
STOREAC 342
STRESI 562
STRESJ 562
STRESK 562
STRESS 562
STRESS3D 565
STRESSALL 562
STRESSGRAD 562
STRESSGRAD3D 565
STRESSH 562
STRESSHIJ 565
STRESSHIK 565
STRESSHJK 565
STRESSTOL 616
SUBDOMAIN 204
SURFLASH 310
SW 445
SWCON 416
SWCRIT 416
SWIRG 416
SWR 416
SWRG 416
SWT 392
T
TCRIT 309
TDMAX 552
TDMIN 552
TEMLIM 791
TEMP 444
TEMR 310
TFORM 460
THCONANTAB 280
THCONG 280
THCONMIX 280
THCONO 280
THCONR 280
THCONR_SHL 280
THCONS 280
THCONTAB 280
THCONW 280
THEXPCOEF 541
THTYPE 267
TIME 629
TINJW 663
TITLE1 107
TITLE2 107
TITLE3 107
TMPSET 780
TRANLI 236
TRANLJ 236
TRANLK 236
TRANSF 247
TRANSI 233
TRANSIENT 213, 716, 803
TRANSIJ- 288
TRANSIJ+ 288
TRANSIK- 288
TRANSIK+ 288
TRANSJ 233
TRANSK 233
TRANSLATE 67
TRANSMF 238
TRANSWB 788
TRESCA 515
TRIGGER 751
TSURF 310
TUBING 75
TUBINSUL 213, 803
U
UBA 68
UHTR 780
UHTRAREAI- 780
UHTRAREAI+ 780
UHTRAREAJ- 780
UHTRAREAJ+ 780
UHTRAREAK- 780
UHTRAREAK+ 780
UNFIXFDIR 545
UNLOADSTR 618
UNRELAX 472
UPSTREAM 473
URBCOEF 525
URECOEF 525
UREXPN1 525
UREXPN2 525
URNB 525
URNE 525
URNTB 525
URNTE 525
V
VAMOD 193
VATYPE 193
VERTICAL 439
VISCTABLE 335
VISCTYPE 332
VISFLOWR 534
VISINIT 534
VISPARA 534
VISPOWER 534
VISSCHEME 534
VISTEP 534
VISTIME 534
VOLMOD 228
VONMISES 515
VSMIXCOMP 338
VSMIXENDP 338
VSMIXFUNC 338
VSTYPE 332
W
WATPHASE 322
WBZ 213
WBZADJ 213
WCRV 388
WELL 638
WELLBORE 75, 213
WELLBORE-REC 803
WELLINFO 213, 803
WELLINIT 647
WELLWALL 213, 803
WLISTOPEN 653
WLISTSHUT 653
WOC_SW 445
WPRN 116
WRADIUS 553
WRST 114
WSRF 124
WTMULT 769
X
XCORN 175
XDR 127
XFLOW-MODEL 646
XNACL 335
Y
YCORN 175
YLDSTRESS 513, 534
Z
ZCORN 173