Generate a data frame of reservoir production estimates, and fluids saturations and liquid dropout in the oil leg according to the class of 'forecast_lst' and 'time_lst' objects

mbal_forecast_oil(forecast_lst, time_lst)

Arguments

forecast_lst

a list object of class 'forecast_oil'

time_lst

a list object of class 'time/date'

Value

a data frame with estimates for saturation of fluids, liquid dropout, gas-oil ratio, recovery factor, and drive indices over a range of given pressures

References

Walsh MP, Lake LW (2003). A Generalized Approach to Primary Hydrocarbon Recovery, 1st edition. Elsevier Ltd. ISBN 9780444506832, https://www.elsevier.com/books/a-generalized-approach-to-primary-hydrocarbon-recovery-of-petroleum-exploration-and-production/walsh/978-0-444-50683-2.

Walsh MP, Ansah J, Raghavan R (1994). “New, generalized material balance as an equation of a straight line: Part 1- Applications to undersaturated, volumetric reservoirs.” Proceedings of the Permian Basin Oil \& Gas Recovery Conference, 549--564. doi: 10.2118/27684-MS .

Walsh MP, Ansah J, Raghavan R (1994). “New, generalized material balance as an equation of a straight line: part 2- Applications to saturated and non-volumetric reservoirs.” Proceedings of the Permian Basin Oil \& Gas Recovery Conference, 859--865. doi: 10.2118/27728-MS .

Walsh MP (1995). “A Generalized Approach to Reservoir Material Balance Calculations.” Journal of Canadian Petroleum Technology, 34(01), 10. ISSN 0021-9487, doi: 10.2118/95-01-07 , https://doi.org/10.2118/95-01-07.

Examples

p_pvt <- c(3330, 3150, 3000, 2850, 2700, 2550, 2400) Bo <- c(1.2511, 1.2353, 1.2222, 1.2122, 1.2022, 1.1922, 1.1822) Rs <- c(510, 477, 450, 425, 401, 375, 352) Bg <- c(0.00087, 0.00092, 0.00096, 0.00101, 0.00107, 0.00113, 0.00120) cw <- 2e-6 Bwi <- 1.0 Bw <- Bwi * exp(cw * (p_pvt[1] - p_pvt)) Rv <- rep(0, length(p_pvt)) muo <- rep(0.5, length(p_pvt)) muw <- rep(0.25, length(p_pvt)) mug <- rep(0.02, length(p_pvt)) pvt_table <- data.frame(p = p_pvt, Bo = Bo, Rs = Rs, Rv = Rv, Bg = Bg, Bw = Bw, muo = muo, mug = mug, muw = muw) rel_perm <- as.data.frame(Rrelperm::kr2p_gl(SWCON = 0.2, SOIRG = 0.10, SORG = 0.10, SGCON = 0.05, SGCRIT = 0.05, KRGCL = 0.3, KROGCG = 1, NG = 0.93, NOG = 10, NP = 101)) colnames(rel_perm) <- c("Sg", "Sl", "Krg", "Krog") p <- c(3330, 3150, 3000, 2850, 2700, 2550, 2400) Gi <- rep(0, length.out = length(p)) wf <- c(1, 1, 1, 0, 1, 0, 1) forecast_lst <- mbal_forecast_param_oil(input_unit = "Field", output_unit = "Field", N = 1.37e8, m = 0.377, phi = 0.2, swi = 0.2, Gi = Gi, pb = 3330, p = p, pvt = pvt_table, cf = 0, wf = wf, sorg = 0.2, rel_perm = rel_perm) time_lst <- mbal_time(c(0, 365, 730, 1095, 1460, 1825, 2190), "day") mbal_forecast_results <- mbal_forecast_oil(forecast_lst, time_lst) dplyr::glimpse(mbal_forecast_results)
#> Rows: 5 #> Columns: 17 #> $ `P (psia)` <dbl> 3330, 3150, 3000, 2700, 2400 #> $ SOo <dbl> 0.8000000, 0.7746130, 0.7513414, 0.7172796, 0.6996797 #> $ SGo <dbl> 0.00000000, 0.02538698, 0.04865856, 0.08272041, 0.1... #> $ SWo <dbl> 0.2, 0.2, 0.2, 0.2, 0.2 #> $ SOT <dbl> 0.5809731, 0.5544509, 0.5322570, 0.4917150, 0.4597464 #> $ SGT <dbl> 0.2190269, 0.2455491, 0.2677430, 0.3082850, 0.3402536 #> $ SWT <dbl> 0.2, 0.2, 0.2, 0.2, 0.2 #> $ `GOR (SCF/STB)` <dbl> 510.000, 477.000, 450.000, 1274.968, 1882.892 #> $ RF_oil <dbl> 0.00000000, 0.03344495, 0.06218954, 0.11920936, 0.1... #> $ RF_gas <dbl> 0.00000000, 0.01568711, 0.02834994, 0.07509136, 0.1... #> $ Liq_volume <dbl> 1.0000000, 0.9760125, 0.9549930, 0.9115656, 0.8617874 #> $ Igd <dbl> NA, 0.6481519, 0.6273415, 0.6136256, 0.5955455 #> $ Isd <dbl> NA, 0.3481401, 0.3690025, 0.3833014, 0.4017854 #> $ Inwd <dbl> NA, 0, 0, 0, 0 #> $ Ifwd <dbl> NA, 0.003707997, 0.003655953, 0.003073049, 0.002669130 #> $ Iawd <dbl> NA, 0, 0, 0, 0 #> $ Itot <dbl> NA, 1, 1, 1, 1