From 23127cb620f42dce6b0ff78d6e1289a4756cacdd Mon Sep 17 00:00:00 2001 From: Eivind Jahren Date: Tue, 30 Sep 2025 13:40:27 +0200 Subject: [PATCH] Add example of using RFT --- examples/rft_example/field_properties_priors | 4 + examples/rft_example/obs.txt | 30 ++ .../rft_example/resources/SPE1.DATA.jinja2 | 447 ++++++++++++++++++ .../resources/layer_zone_table.txt | 32 ++ .../rft_example/resources/refcase/SPE1.SMSPEC | Bin 0 -> 3248 bytes .../rft_example/resources/refcase/SPE1.UNSMRY | Bin 0 -> 31972 bytes .../resources/trajectories/INJ.txt | 1 + .../resources/trajectories/PROD.txt | 3 + .../rft_example/resources/well_date_rft.txt | 2 + examples/rft_example/rft.ert | 39 ++ 10 files changed, 558 insertions(+) create mode 100644 examples/rft_example/field_properties_priors create mode 100644 examples/rft_example/obs.txt create mode 100644 examples/rft_example/resources/SPE1.DATA.jinja2 create mode 100644 examples/rft_example/resources/layer_zone_table.txt create mode 100644 examples/rft_example/resources/refcase/SPE1.SMSPEC create mode 100644 examples/rft_example/resources/refcase/SPE1.UNSMRY create mode 100644 examples/rft_example/resources/trajectories/INJ.txt create mode 100644 examples/rft_example/resources/trajectories/PROD.txt create mode 100644 examples/rft_example/resources/well_date_rft.txt create mode 100644 examples/rft_example/rft.ert diff --git a/examples/rft_example/field_properties_priors b/examples/rft_example/field_properties_priors new file mode 100644 index 000000000..024fd6b1b --- /dev/null +++ b/examples/rft_example/field_properties_priors @@ -0,0 +1,4 @@ +POROSITY UNIFORM 0.1 0.9 +X_MID_PERMEABILITY UNIFORM 0.1 0.9 +Z_MID_PERMEABILITY UNIFORM 0.1 0.9 +EQL_PRESSURE UNIFORM 4000 4800 diff --git a/examples/rft_example/obs.txt b/examples/rft_example/obs.txt new file mode 100644 index 000000000..48419bd6b --- /dev/null +++ b/examples/rft_example/obs.txt @@ -0,0 +1,30 @@ +SUMMARY_OBSERVATION WOPT_2016 +{ + VALUE = 1e7; + ERROR = 1e6; + DATE = 2016-01-01; + KEY = WOPT:PROD; +}; + +SUMMARY_OBSERVATION WOPT_2017 +{ + VALUE = 2e7; + ERROR = 1e6; + DATE = 2017-01-31; + KEY = WOPT:PROD; +}; + +SUMMARY_OBSERVATION WOPT_2018 +{ + VALUE = 3e7; + ERROR = 1e6; + DATE = 2018-01-31; + KEY = WOPT:PROD; +}; + +GENERAL_OBSERVATION PROD_PRESSURE +{ + DATA = PROD_RFT; + OBS_FILE = prod_pressure.txt; + RESTART = 1; +}; diff --git a/examples/rft_example/resources/SPE1.DATA.jinja2 b/examples/rft_example/resources/SPE1.DATA.jinja2 new file mode 100644 index 000000000..58f96a7c3 --- /dev/null +++ b/examples/rft_example/resources/SPE1.DATA.jinja2 @@ -0,0 +1,447 @@ +-- This reservoir simulation deck is made available under the Open Database +-- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in +-- individual contents of the database are licensed under the Database Contents +-- License: http://opendatacommons.org/licenses/dbcl/1.0/ + +-- Copyright (C) 2015 Statoil + +-- This simulation is based on the data given in +-- 'Comparison of Solutions to a Three-Dimensional +-- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, +-- Journal of Petroleum Technology, January 1981 + +--------------------------------------------------------------------------- +------------------------ SPE1 -------------------------------------------- +--------------------------------------------------------------------------- + +RUNSPEC +-- ------------------------------------------------------------------------- + +TITLE + SPE1 + +DIMENS + 10 10 3 / + +-- The number of equilibration regions is inferred from the EQLDIMS +-- keyword. +EQLDIMS +/ + +-- The number of PVTW tables is inferred from the TABDIMS keyword; +-- when no data is included in the keyword the default values are used. +TABDIMS +/ + + +OIL +GAS +WATER +DISGAS +-- As seen from figure 4 in Odeh, GOR is increasing with time, +-- which means that dissolved gas is present + + +FIELD + +START + 1 'JAN' 2015 / + +WELLDIMS +-- Item 1: maximum number of wells in the model +-- - there are two wells in the problem; injector and producer +-- Item 2: maximum number of grid blocks connected to any one well +-- - must be one as the wells are located at specific grid blocks +-- Item 3: maximum number of groups in the model +-- - we are dealing with only one 'group' +-- Item 4: maximum number of wells in any one group +-- - there must be two wells in a group as there are two wells in total + 2 3 1 2 / + +UNIFOUT + +GRID + +-- The INIT keyword is used to request an .INIT file. The .INIT file +-- is written before the simulation actually starts, and contains grid +-- properties and saturation tables as inferred from the input +-- deck. There are no other keywords which can be used to configure +-- exactly what is written to the .INIT file. +INIT + +-- ------------------------------------------------------------------------- +NOECHO + +-- Resdata does not like cells that are close to origio so +-- we need to move the regular grid away from origo. By +-- default the mapaxes are applied with resdata and GEN_DATARFT uses +-- the default +-- ---------------- MAPAXES ----------------- +-- X1 Y1 X2 Y2 X3 Y3 +MAPAXES + 0.01 1.01 0.01 0.01 1.01 0.01 / + +DX +-- There are in total 300 cells with length 1000ft in x-direction + 300*1000 / +DY +-- There are in total 300 cells with length 1000ft in y-direction + 300*1000 / +DZ +-- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells + 100*20 100*30 100*50 / + +TOPS +-- The depth of the top of each grid block + 100*8325 / + +PORO + 300*{{parameters.FIELD_PROPERTIES.POROSITY}} / + +PERMX + 100*500 100*{{100 * parameters.FIELD_PROPERTIES.X_MID_PERMEABILITY}} 100*200 / + +PERMY +-- Equal to PERMX + 100*500 100*50 100*200 / + +PERMZ + 100*500 100*{{100 * parameters.FIELD_PROPERTIES.X_MID_PERMEABILITY}} 100*200 / +ECHO + +PROPS +-- ------------------------------------------------------------------------- + +PVTW +-- Item 1: pressure reference (psia) +-- Item 2: water FVF (rb per bbl or rb per stb) +-- Item 3: water compressibility (psi^{-1}) +-- Item 4: water viscosity (cp) +-- Item 5: water 'viscosibility' (psi^{-1}) + +-- Using values from Norne: +-- In METRIC units: +-- 277.0 1.038 4.67E-5 0.318 0.0 / +-- In FIELD units: + 4017.55 1.038 3.22E-6 0.318 0.0 / + +ROCK +-- Item 1: reference pressure (psia) +-- Item 2: rock compressibility (psi^{-1}) + +-- Using values from table 1 in Odeh: + 14.7 3E-6 / + +SWOF +-- Column 1: water saturation +-- - this has been set to (almost) equally spaced values from 0.12 to 1 +-- Column 2: water relative permeability +-- - generated from the Corey-type approx. formula +-- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 +-- Column 3: oil relative permeability when only oil and water are present +-- - we will use the same values as in column 3 in SGOF. +-- This is not really correct, but since only the first +-- two values are of importance, this does not really matter +-- Column 4: corresponding water-oil capillary pressure (psi) + +0.12 0 1 0 +0.18 4.64876033057851E-008 1 0 +0.24 0.000000186 0.997 0 +0.3 4.18388429752066E-007 0.98 0 +0.36 7.43801652892562E-007 0.7 0 +0.42 1.16219008264463E-006 0.35 0 +0.48 1.67355371900826E-006 0.2 0 +0.54 2.27789256198347E-006 0.09 0 +0.6 2.97520661157025E-006 0.021 0 +0.66 3.7654958677686E-006 0.01 0 +0.72 4.64876033057851E-006 0.001 0 +0.78 0.000005625 0.0001 0 +0.84 6.69421487603306E-006 0 0 +0.91 8.05914256198347E-006 0 0 +1 0.00001 0 0 / + + +SGOF +-- Column 1: gas saturation +-- Column 2: gas relative permeability +-- Column 3: oil relative permeability when oil, gas and connate water are present +-- Column 4: oil-gas capillary pressure (psi) +-- - stated to be zero in Odeh's paper + +-- Values in column 1-3 are taken from table 3 in Odeh's paper: +0 0 1 0 +0.001 0 1 0 +0.02 0 0.997 0 +0.05 0.005 0.980 0 +0.12 0.025 0.700 0 +0.2 0.075 0.350 0 +0.25 0.125 0.200 0 +0.3 0.190 0.090 0 +0.4 0.410 0.021 0 +0.45 0.60 0.010 0 +0.5 0.72 0.001 0 +0.6 0.87 0.0001 0 +0.7 0.94 0.000 0 +0.85 0.98 0.000 0 +0.88 0.984 0.000 0 / +--1.00 1.0 0.000 0 / +-- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF +-- must not be greater than 1, but Eclipse still runs +-- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 +-- The corresponding krg value was estimated by assuming linear rel. between +-- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) + +DENSITY +-- Density (lb per ft³) at surface cond. of +-- oil, water and gas, respectively (in that order) + +-- Using values from Norne: +-- In METRIC units: +-- 859.5 1033.0 0.854 / +-- In FIELD units: + 53.66 64.49 0.0533 / + +PVDG +-- Column 1: gas phase pressure (psia) +-- Column 2: gas formation volume factor (rb per Mscf) +-- - in Odeh's paper the units are said to be given in rb per bbl, +-- but this is assumed to be a mistake: FVF-values in Odeh's paper +-- are given in rb per scf, not rb per bbl. This will be in +-- agreement with conventions +-- Column 3: gas viscosity (cP) + +-- Using values from lower right table in Odeh's table 2: +14.700 166.666 0.008000 +264.70 12.0930 0.009600 +514.70 6.27400 0.011200 +1014.7 3.19700 0.014000 +2014.7 1.61400 0.018900 +2514.7 1.29400 0.020800 +3014.7 1.08000 0.022800 +4014.7 0.81100 0.026800 +5014.7 0.64900 0.030900 +9014.7 0.38600 0.047000 / + +PVTO +-- Column 1: dissolved gas-oil ratio (Mscf per stb) +-- Column 2: bubble point pressure (psia) +-- Column 3: oil FVF for saturated oil (rb per stb) +-- Column 4: oil viscosity for saturated oil (cP) + +-- Use values from top left table in Odeh's table 2: +0.0010 14.7 1.0620 1.0400 / +0.0905 264.7 1.1500 0.9750 / +0.1800 514.7 1.2070 0.9100 / +0.3710 1014.7 1.2950 0.8300 / +0.6360 2014.7 1.4350 0.6950 / +0.7750 2514.7 1.5000 0.6410 / +0.9300 3014.7 1.5650 0.5940 / +1.2700 4014.7 1.6950 0.5100 + 9014.7 1.5790 0.7400 / +1.6180 5014.7 1.8270 0.4490 + 9014.7 1.7370 0.6310 / +-- It is required to enter data for undersaturated oil for the highest GOR +-- (i.e. the last row) in the PVTO table. +-- In order to fulfill this requirement, values for oil FVF and viscosity +-- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: +-- It has been assumed that there is a linear relation between the GOR +-- and the FVF when keeping the pressure constant at 9014.7psia. +-- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 +-- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, +-- so it is possible to use the assumption described above. +-- An equivalent approximation for the viscosity has been used. +/ + +SOLUTION +-- ------------------------------------------------------------------------- + +EQUIL +-- Item 1: datum depth (ft) +-- Item 2: pressure at datum depth (psia) +-- - Odeh's table 1 says that initial reservoir pressure is +-- 4800 psi at 8400ft, which explains choice of item 1 and 2 +-- Item 3: depth of water-oil contact (ft) +-- - chosen to be directly under the reservoir +-- Item 4: oil-water capillary pressure at the water oil contact (psi) +-- - given to be 0 in Odeh's paper +-- Item 5: depth of gas-oil contact (ft) +-- - chosen to be directly above the reservoir +-- Item 6: gas-oil capillary pressure at gas-oil contact (psi) +-- - given to be 0 in Odeh's paper +-- Item 7: RSVD-table +-- Item 8: RVVD-table +-- Item 9: Set to 0 as this is the only value supported by OPM + +-- Item #: 1 2 3 4 5 6 7 8 9 + 8400 {{parameters.FIELD_PROPERTIES.EQL_PRESSURE}} 8450 0 8300 0 1 0 0 / + +RSVD +-- Dissolved GOR is initially constant with depth through the reservoir. +-- The reason is that the initial reservoir pressure given is higher +---than the bubble point presssure of 4014.7psia, meaning that there is no +-- free gas initially present. +8300 1.270 +8450 1.270 / + +SUMMARY +-- ------------------------------------------------------------------------- + +-- 1a) Oil rate vs time +FOPR +-- Field Oil Production Rate + +-- 1b) GOR vs time +WGOR +-- Well Gas-Oil Ratio + 'PROD' +/ +-- Using FGOR instead of WGOR:PROD results in the same graph +FGOR + +-- 2a) Pressures of the cell where the injector and producer are located +BPR +1 1 1 / +10 10 3 / +/ + +-- 2b) Gas saturation at grid points given in Odeh's paper +BGSAT +1 1 1 / +1 1 2 / +1 1 3 / +10 1 1 / +10 1 2 / +10 1 3 / +10 10 1 / +10 10 2 / +10 10 3 / +/ + +-- In order to compare Eclipse with Flow: +WBHP + 'INJ' + 'PROD' +/ +WGIR + 'INJ' + 'PROD' +/ +WGIT + 'INJ' + 'PROD' +/ +WGPR + 'INJ' + 'PROD' +/ +WGPT + 'INJ' + 'PROD' +/ +WOIR + 'INJ' + 'PROD' +/ +WOIT + 'INJ' + 'PROD' +/ +WOPR + 'INJ' + 'PROD' +/ +WOPT + 'INJ' + 'PROD' +/ +WWIR + 'INJ' + 'PROD' +/ +WWIT + 'INJ' + 'PROD' +/ +WWPR + 'INJ' + 'PROD' +/ +WWPT + 'INJ' + 'PROD' +/ +SCHEDULE +-- ------------------------------------------------------------------------- +RPTSCHED + 'PRES' 'SGAS' 'RS' 'WELLS' / + +RPTRST + 'BASIC=1' / + + +-- If no resolution (i.e. case 1), the two following lines must be added: +--DRSDT +-- 0 / +-- Since this is Case 2, the two lines above have been commented out. +-- if DRSDT is set to 0, GOR cannot rise and free gas does not +-- dissolve in undersaturated oil -> constant bubble point pressure + +WELSPECS +-- Item #: 1 2 3 4 5 6 + 'PROD' 'G1' 1* 1* 8400 'OIL' / + 'INJ' 'G1' 1 1 8335 'GAS' / +/ + +WRFTPLT + '*' 'REPT' 'NO' 'NO' / +/ +-- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 +-- Note that the depth at the midpoint of the well grid blocks +-- has been used as reference depth for bottom hole pressure in item 5 + +COMPDAT +-- Item #: 1 2 3 4 5 6 7 8 9 + 'PROD' 10 10 1 3 'OPEN' 1* 1* 0.5 / + 'PROD' 10 10 2 3 'OPEN' 1* 1* 0.5 / + 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / + 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / +/ +-- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 +-- Item 9 is the well bore internal diameter, +-- the radius is given to be 0.25ft in Odeh's paper + + +WCONPROD +-- Item #:1 2 3 4 5 9 + 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / +/ +-- It is stated in Odeh's paper that the maximum oil prod. rate +-- is 20 000stb per day which explains the choice of value in item 4. +-- The items > 4 are defaulted with the exception of item 9, +-- the BHP lower limit, which is given to be 1000psia in Odeh's paper + +WCONINJE +-- Item #:1 2 3 4 5 6 7 + 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / +/ +-- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day +-- BHP upper limit (item 7) should not be exceeding the highest +-- pressure in the PVT table=9014.7psia (default is 100 000psia) + +TSTEP +--Advance the simulater once a month for TEN years: +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 +31 28 31 30 31 30 31 31 30 31 30 31 / + +--Advance the simulator once a year for TEN years: +--10*365 / + + +END diff --git a/examples/rft_example/resources/layer_zone_table.txt b/examples/rft_example/resources/layer_zone_table.txt new file mode 100644 index 000000000..d1f0f1d67 --- /dev/null +++ b/examples/rft_example/resources/layer_zone_table.txt @@ -0,0 +1,32 @@ +1 Zone1 +2 Zone1 +3 Zone1 +4 Zone1 +5 Zone1 +6 Zone1 +7 Zone1 +8 Zone1 +9 Zone1 +10 Zone1 +11 Zone1 +12 Zone1 +13 Zone1 +14 Zone1 +15 Zone1 +16 Zone1 +17 Zone1 +18 Zone1 +19 Zone1 +20 Zone1 +21 Zone1 +22 Zone1 +23 Zone1 +24 Zone1 +25 Zone1 +26 Zone1 +27 Zone1 +28 Zone1 +29 Zone1 +30 Zone1 +31 Zone1 +32 Zone1 diff --git a/examples/rft_example/resources/refcase/SPE1.SMSPEC b/examples/rft_example/resources/refcase/SPE1.SMSPEC new file mode 100644 index 0000000000000000000000000000000000000000..8479530c518688ef22e827b3d285c6edbdecbc83 GIT binary patch literal 3248 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 literal 0 HcmV?d00001 diff --git a/examples/rft_example/resources/trajectories/INJ.txt b/examples/rft_example/resources/trajectories/INJ.txt new file mode 100644 index 000000000..0f57c5ff3 --- /dev/null +++ b/examples/rft_example/resources/trajectories/INJ.txt @@ -0,0 +1 @@ +500.0 500.0 8335.0 8335.0 Zone1 diff --git a/examples/rft_example/resources/trajectories/PROD.txt b/examples/rft_example/resources/trajectories/PROD.txt new file mode 100644 index 000000000..17eb7402f --- /dev/null +++ b/examples/rft_example/resources/trajectories/PROD.txt @@ -0,0 +1,3 @@ +9500.0 9500.0 8335.0 8335.0 Zone1 +9500.0 9500.0 8360.0 8360.0 Zone1 +9500.0 9500.0 8400.0 8400.0 Zone1 diff --git a/examples/rft_example/resources/well_date_rft.txt b/examples/rft_example/resources/well_date_rft.txt new file mode 100644 index 000000000..5be7434ff --- /dev/null +++ b/examples/rft_example/resources/well_date_rft.txt @@ -0,0 +1,2 @@ +INJ 2015-01-01 1 +PROD 2015-01-01 1 diff --git a/examples/rft_example/rft.ert b/examples/rft_example/rft.ert new file mode 100644 index 000000000..4fbea6e52 --- /dev/null +++ b/examples/rft_example/rft.ert @@ -0,0 +1,39 @@ +QUEUE_SYSTEM LOCAL +QUEUE_OPTION LOCAL MAX_RUNNING 4 + +RUNPATH spe1_out/realization-/iter- + +NUM_REALIZATIONS 12 + +ECLBASE SPE1 +REFCASE /resources/refcase/SPE1 + +SUMMARY WOPT:PROD WWPT:PROD WGPT:PROD WWIT:INJ + +OBS_CONFIG obs.txt + +GEN_KW FIELD_PROPERTIES field_properties_priors + +FORWARD_MODEL TEMPLATE_RENDER( \ + =parameters.json, \ + =/resources/SPE1.DATA.jinja2, \ + =SPE1.DATA \ +) + +FORWARD_MODEL FLOW + +FORWARD_MODEL GENDATA_RFT(\ + =/resources/trajectories, \ + =/resources/well_date_rft.txt, \ + =/resources/layer_zone_table.txt, \ + =/gendata_rft.csv \ +) +GEN_DATA \ + INJ_RFT \ + RESULT_FILE:RFT_INJ_%d \ + REPORT_STEPS:1 + +GEN_DATA \ + PROD_RFT \ + RESULT_FILE:RFT_PROD_%d \ + REPORT_STEPS:1