pillars
pillars is a module to compute data on “pillars” in the grid from a simulation, including both static and dynamic data from the grid.
Static data
Typical usage is to obtain property statistics, and compute contacts pr. pillar (and optionally pr some region parameter).
PILLAR |
X |
Y |
Z |
VOLUME |
PERMX |
PERMY |
PERMZ |
PORV |
PORO |
---|---|---|---|---|---|---|---|---|---|
1-1 |
456620.8 |
5935659.6 |
1753.6 |
1053244.0 |
1095.9 |
1140.2 |
108.6 |
182502.8 |
0.2 |
1-10 |
457336.4 |
5934421.1 |
1742.2 |
1078104.1 |
776.9 |
758.3 |
82.8 |
171530.9 |
0.2 |
1-11 |
457416.0 |
5934283.4 |
1743.0 |
1035282.9 |
1332.2 |
1332.6 |
301.4 |
200754.5 |
0.2 |
1-12 |
457495.9 |
5934145.8 |
1745.8 |
1084271.9 |
1713.9 |
1639.4 |
336.1 |
218128.4 |
0.2 |
1-13 |
457575.9 |
5934008.2 |
1746.1 |
1097513.3 |
1531.9 |
1451.0 |
296.1 |
203463.0 |
0.2 |
where the first PILLAR
column is the I
and J
identification of the
pillar. and the other values are arithmetic averages of the values in the cells
belonging to a particular pillar.
If you provide a region parameter (like EQLNUM
), the value for the region
will be added in an extra column called EQLNUM
. Each pillar will then be
repeated for each region value where it exists.
Dynamic data, volumes and fluid contacts
The API res2df.pillars.df()
and command line client allows specifying
dates if dynamic data should be included through the rstdates
option to the
API or the --rstdates
option on the command line. Providing dates as an
option will trigger computation of phase volumes WATVOL
, OILVOL
, and
GASVOL
for each date.
If, in addition to dates, the parameters soilcutoff
etc. are provided, these
are used to determine oil-water and/or gas-oil contacts pr pillar (and pr.
region).
An oil-water contact pr. pillar is determined as the deepest cell
centre with SOIL above the given contact, among those pillars with at least one
cell above swatcutoff
.
A gas-oil contact is the deepest cell
centre with SGAS above the cutoff sgascutoff
, among those pillars with at
least one cell with non-zero oil saturation.
Gas-water contact is only computed when SOIL
is not present in the
simulation (two-phase runs), it will be the deepest cell centre with gas
saturation above sgascutoff, among those pillars with at least one cell above
swatcutoff
. See the API documentation,
res2df.pillars.compute_pillar_contacts()
.
The functionality is also available through the command line tool res2csv pillars
as in the example:
res2csv pillars --help # This will display some help text
res2csv pillars MYDATAFILE.DATA --rstdates all --stackdates
It is strongly recommended to play with the cutoffs to get the desired result. Also calibrate the computed contacts with the initial contacts, you may see that you should add a constant distance to all computed contacts. Beware that shale cells with little oil, but in the oil zone necessarily will affect the computation (sometimes that explains the need for calibration to initial contacts).
Grouping data
It is possible to aggregate data over all pillars after computation. Activate
using --group
to the command line client, and add optionally a --region
parameter to group over a particular region, typically EQLNUM
.
The Python API will group over any data that is supplied via the region
option, check res2df.pillars.df()
Stacked version
By default, dynamic data are added as a set of columns for every date, like in this example:
PILLAR |
X |
Y |
Z |
VOLUME |
PERMX |
PERMY |
PERMZ |
PORV |
PORO |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
14-26 |
460480.6 |
5933271.1 |
1716.3 |
843873.2 |
397.2 |
405.1 |
142.9 |
99680.2 |
89917.5 |
0.0 |
9762.7 |
89833.8 |
0.0 |
9846.4 |
89787.8 |
0.0 |
9892.4 |
89805.4 |
0.0 |
9874.8 |
0.1 |
1698.4 |
1698.4 |
1698.4 |
1698.4 |
14-31 |
460840.8 |
5932584.7 |
1712.6 |
735191.0 |
1737.7 |
1740.5 |
385.7 |
128119.9 |
126201.6 |
0.0 |
1918.3 |
126189.3 |
0.0 |
1930.5 |
126178.3 |
0.0 |
1941.5 |
126185.0 |
-0.0 |
1934.9 |
0.2 |
1699.9 |
1699.9 |
1699.9 |
1699.9 |
15-17 |
459835.6 |
5934595.5 |
1636.7 |
706576.0 |
605.0 |
535.4 |
97.5 |
126698.8 |
72548.6 |
0.0 |
54150.2 |
77354.4 |
0.0 |
49344.4 |
83059.3 |
0.0 |
43639.5 |
87168.7 |
0.0 |
39530.1 |
0.2 |
1640.4 |
1640.4 |
1640.4 |
1640.4 |
15-18 |
459906.7 |
5934460.6 |
1626.6 |
696766.3 |
838.3 |
700.9 |
163.6 |
122683.6 |
74366.3 |
0.0 |
48317.3 |
84393.5 |
0.0 |
38290.0 |
90880.6 |
0.0 |
31803.0 |
93511.7 |
0.0 |
29171.8 |
0.2 |
1635.6 |
1635.6 |
1634.3 |
1634.3 |
15-19 |
459976.6 |
5934325.5 |
1619.3 |
769240.6 |
1091.3 |
1187.3 |
190.1 |
134679.2 |
87650.3 |
0.0 |
47028.9 |
93253.8 |
0.0 |
41425.4 |
95279.4 |
0.0 |
39399.7 |
96842.8 |
0.0 |
37836.4 |
0.2 |
1630.7 |
1630.1 |
1630.1 |
1630.1 |
This may be what you want, however it is also possible to have DATE
as a column,
obtained by triggering the stacking option in res2df.pillars.df()
or
--stackdates
on the command line and get data like this:
DATE |
GASVOL |
OILVOL |
OWC |
PERMX |
PERMY |
PERMZ |
PILLAR |
PORO |
PORV |
VOLUME |
WATVOL |
X |
Y |
Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2000-01-01 |
0.0 |
9762.7 |
1698.4 |
397.2 |
405.1 |
142.9 |
14-26 |
0.1 |
99680.2 |
843873.2 |
89917.5 |
460480.6 |
5933271.1 |
1716.3 |
2000-07-01 |
0.0 |
9846.4 |
1698.4 |
397.2 |
405.1 |
142.9 |
14-26 |
0.1 |
99680.2 |
843873.2 |
89833.8 |
460480.6 |
5933271.1 |
1716.3 |
2001-02-01 |
0.0 |
9892.4 |
1698.4 |
397.2 |
405.1 |
142.9 |
14-26 |
0.1 |
99680.2 |
843873.2 |
89787.8 |
460480.6 |
5933271.1 |
1716.3 |
2001-08-01 |
0.0 |
9874.8 |
1698.4 |
397.2 |
405.1 |
142.9 |
14-26 |
0.1 |
99680.2 |
843873.2 |
89805.4 |
460480.6 |
5933271.1 |
1716.3 |
2000-01-01 |
0.0 |
1918.3 |
1699.9 |
1737.7 |
1740.5 |
385.7 |
14-31 |
0.2 |
128119.9 |
735191.0 |
126201.6 |
460840.8 |
5932584.7 |
1712.6 |