RelativePermeability.Rmd
Rrelperm
generates relative permeability values for two- and/or three-phase mixtures of water and hydrocarbons. It estimates the two-phase relative permeabilities for the water-oil and gas-liquid systems in a tabular format using the modified Brooks-Corey correlation (Brooks & Corey, 1964). It calculates the three-phase relative permeabilities using the modified Stone I, Stone II, and Baker’s linear models (Baker, 1988; Fayers & Matthews, 1984; Stone, 1970).
kr2p_ow() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NP
: number of saturation points in the table, the maximum acceptable value is 501.kr2p_gl() arguments
SWCON
: connate water saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the table, the maximum acceptable value is 501.kr3p_StoneI_So() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the two-phase relative permeability tables, the maximum acceptable value is 501. The number of data points in the three-phase relative permeability table is (0.5 * NP * (NP + 1)).kr3p_StoneI_SwSg() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the two-phase relative permeability tables, the maximum acceptable value is 501. The number of data points in the three-phase relative permeability table is (0.5 * NP * (NP + 1)).kr3p_StoneII_So() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the two-phase relative permeability tables, the maximum acceptable value is 501. The number of data points in the three-phase relative permeability table is (0.5 * NP * (NP + 1)).kr3p_StoneII_SwSg() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the two-phase relative permeability tables, the maximum acceptable value is 501. The number of data points in the three-phase relative permeability table is (0.5 * NP * (NP + 1)).kr3p_Baker() arguments
SWCON
: connate water saturation, fraction.SWCRIT
: critical water saturation, fraction.SOIRW
: irreducible oil saturation, fraction.SORW
: residual oil saturation, fraction.SOIRG
: irreducible oil saturation, fraction.SORG
: residual oil saturation, fraction.SGCON
: connate gas saturation, fraction.SGCRIT
: critical gas saturation, fraction.KRWIRO
: water relative permeability at irreducible oil.KROCW
: oil relative permeability at connate water.KRGCL
: gas relative permeability at connate liquid.KROGCG
: oil relative permeability at connate gas.NW
: exponent term for calculating krw.NOW
: exponent term for calculating krow.NG
: exponent term for calculating krg.NOG
: exponent term for calculating krog.NP
: number of saturation points in the two-phase relative permeability tables, the maximum acceptable value is 501. The number of data points in the three-phase relative permeability table is (0.5 * NP * (NP + 1)).Two-phase Relative Permeability Examples
library(Rrelperm) library(ggplot2) library(magrittr) library(tidyr) rel_perm_ow <- kr2p_ow(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, KRWIRO = 0.45, KROCW = 1, NW = 4.25, NOW = 2.5, NP = 101) rel_perm_ow_df <- as.data.frame(rel_perm_ow) colnames(rel_perm_ow_df) <- c("Sw", "So", "Krw", "Krow") head(rel_perm_ow_df, 10) #> Sw So Krw Krow #> 1 0.00 1.00 0 1 #> 2 0.01 0.99 0 1 #> 3 0.02 0.98 0 1 #> 4 0.03 0.97 0 1 #> 5 0.04 0.96 0 1 #> 6 0.05 0.95 0 1 #> 7 0.06 0.94 0 1 #> 8 0.07 0.93 0 1 #> 9 0.08 0.92 0 1 #> 10 0.09 0.91 0 1 p1 <- rel_perm_ow_df %>% tidyr::pivot_longer(cols = c(Krw, Krow), values_to = "value", names_to = "Kr") %>% ggplot(aes(x = Sw, y = value, col = Kr)) + geom_point() + labs(title = "water-oil relative permeability", x = "Sw", y = "Kr") + theme_bw() p1
library(Rrelperm) library(ggplot2) library(magrittr) rel_perm_gl <- kr2p_gl(SWCON = 0.13, SOIRG = 0.12, SORG = 0.12, SGCON = 0.05, SGCRIT = 0.05, KRGCL = 0.35, KROGCG = 1, NG = 4.25, NOG = 2.5, NP = 101) rel_perm_gl_df <- as.data.frame(rel_perm_gl) colnames(rel_perm_gl_df) <- c("Sg", "Sl", "Krg", "Krog") head(rel_perm_gl_df) #> Sg Sl Krg Krog #> 1 0.00 1.00 0 1 #> 2 0.01 0.99 0 1 #> 3 0.02 0.98 0 1 #> 4 0.03 0.97 0 1 #> 5 0.04 0.96 0 1 #> 6 0.05 0.95 0 1 p2 <- rel_perm_gl_df %>% tidyr::pivot_longer(cols = c(Krg, Krog), values_to = "value", names_to = "Kr") %>% ggplot(aes(x = Sg, y = value, col = Kr)) + geom_point() + labs(title = "gas-liquid relative permeability", x = "Sg", y = "Kr") + theme_bw() p2
Three-phase Relative Permeability Examples
library(Rrelperm) library(ggplot2) library(ggtern) #> Registered S3 methods overwritten by 'ggtern': #> method from #> grid.draw.ggplot ggplot2 #> plot.ggplot ggplot2 #> print.ggplot ggplot2 #> -- #> Remember to cite, run citation(package = 'ggtern') for further info. #> -- #> #> Attaching package: 'ggtern' #> The following objects are masked from 'package:ggplot2': #> #> aes, annotate, ggplot, ggplot_build, ggplot_gtable, ggplotGrob, #> ggsave, layer_data, theme_bw, theme_classic, theme_dark, #> theme_gray, theme_light, theme_linedraw, theme_minimal, theme_void library(magrittr) rel_perm_owg_st_i_swsg <- kr3p_StoneI_SwSg(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, SOIRG = 0.1, SORG = 0.1, SGCON = 0, SGCRIT = 0, KRWIRO = 0.45, KROCW = 1, KRGCL = 0.35, NW = 4.25, NOW = 2.5, NG = 3, NOG = 2, NP = 501) rel_perm_owg_st_i_swsg <- as.data.frame(rel_perm_owg_st_i_swsg) colnames(rel_perm_owg_st_i_swsg) <- c("Sw", "Sg", "So", "Kro") head(rel_perm_owg_st_i_swsg, 10) #> Sw Sg So Kro #> 1 0 0.000 1.000 1.0000000 #> 2 0 0.002 0.998 0.9952956 #> 3 0 0.004 0.996 0.9906019 #> 4 0 0.006 0.994 0.9859188 #> 5 0 0.008 0.992 0.9812464 #> 6 0 0.010 0.990 0.9765846 #> 7 0 0.012 0.988 0.9719336 #> 8 0 0.014 0.986 0.9672932 #> 9 0 0.016 0.984 0.9626635 #> 10 0 0.018 0.982 0.9580444 rel_perm_owg_st_i_swsg$Kro_range <- cut(rel_perm_owg_st_i_swsg$Kro, breaks = seq(0,1, by = 0.1), right = TRUE, include.lowest = FALSE) rel_perm_owg_st_i_swsg_oil <- rel_perm_owg_st_i_swsg[rel_perm_owg_st_i_swsg$Kro > 0, ] rel_perm_owg_st_i_swsg_oil <- droplevels(rel_perm_owg_st_i_swsg_oil) p3 <- ggtern(data = rel_perm_owg_st_i_swsg_oil, aes(x = Sw, y = Sg, z = So, value = Kro)) + geom_point(aes(value = Kro, fill = Kro_range, color = Kro_range), size = 1, shape = 22) + scale_T_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_L_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_R_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + ggtitle("Three-phase Oil Relative Permeability - STONE I, SWSG") + theme_classic() #> Warning: Ignoring unknown aesthetics: value p3
library(Rrelperm) library(ggplot2) library(ggtern) library(magrittr) rel_perm_owg_st_i_so <- kr3p_StoneI_So(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, SOIRG = 0.1, SORG = 0.1, SGCON = 0, SGCRIT = 0, KRWIRO = 0.45, KROCW = 1, KRGCL = 0.35, NW = 4.25, NOW = 2.5, NG = 3, NOG = 2, NP = 501) rel_perm_owg_st_i_so <- as.data.frame(rel_perm_owg_st_i_so) colnames(rel_perm_owg_st_i_so) <- c("Sw", "Sg", "So", "Kro") head(rel_perm_owg_st_i_so, 10) #> Sw Sg So Kro #> 1 0 0.000 1.000 1 #> 2 0 0.002 0.998 1 #> 3 0 0.004 0.996 1 #> 4 0 0.006 0.994 1 #> 5 0 0.008 0.992 1 #> 6 0 0.010 0.990 1 #> 7 0 0.012 0.988 1 #> 8 0 0.014 0.986 1 #> 9 0 0.016 0.984 1 #> 10 0 0.018 0.982 1 rel_perm_owg_st_i_so$Kro_range <- cut(rel_perm_owg_st_i_so$Kro, breaks = seq(0,1, by = 0.1), right = TRUE, include.lowest = FALSE) rel_perm_owg_st_i_so_oil <- rel_perm_owg_st_i_so[rel_perm_owg_st_i_so$Kro > 0, ] rel_perm_owg_st_i_so_oil <- droplevels(rel_perm_owg_st_i_so_oil) p4 <- ggtern(data = rel_perm_owg_st_i_so_oil, aes(x = Sw, y = Sg, z = So, value = Kro)) + geom_point(aes(value = Kro, fill = Kro_range, color = Kro_range), size = 1, shape = 22) + scale_T_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_L_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_R_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + ggtitle("Three-phase Oil Relative Permeability - STONE I, SO") + theme_classic() #> Warning: Ignoring unknown aesthetics: value p4
library(Rrelperm) library(ggplot2) library(ggtern) library(magrittr) rel_perm_owg_st_ii_swsg <- kr3p_StoneII_SwSg(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, SOIRG = 0.1, SORG = 0.1, SGCON = 0, SGCRIT = 0, KRWIRO = 0.45, KROCW = 1, KRGCL = 0.35, NW = 4.25, NOW = 2.5, NG = 3, NOG = 2, NP = 501) rel_perm_owg_st_ii_swsg <- as.data.frame(rel_perm_owg_st_ii_swsg) colnames(rel_perm_owg_st_ii_swsg) <- c("Sw", "Sg", "So", "Kro") head(rel_perm_owg_st_ii_swsg, 10) #> Sw Sg So Kro #> 1 0 0.000 1.000 1.0000000 #> 2 0 0.002 0.998 0.9948119 #> 3 0 0.004 0.996 0.9896374 #> 4 0 0.006 0.994 0.9844763 #> 5 0 0.008 0.992 0.9793287 #> 6 0 0.010 0.990 0.9741946 #> 7 0 0.012 0.988 0.9690740 #> 8 0 0.014 0.986 0.9639669 #> 9 0 0.016 0.984 0.9588733 #> 10 0 0.018 0.982 0.9537932 rel_perm_owg_st_ii_swsg$Kro_range <- cut(rel_perm_owg_st_ii_swsg$Kro, breaks = seq(0,1, by = 0.1), right = TRUE, include.lowest = FALSE) rel_perm_owg_st_ii_swsg_oil <- rel_perm_owg_st_ii_swsg[rel_perm_owg_st_ii_swsg$Kro > 0, ] rel_perm_owg_st_ii_swsg_oil <- droplevels(rel_perm_owg_st_ii_swsg_oil) p5 <- ggtern(data = rel_perm_owg_st_ii_swsg_oil, aes(x = Sw, y = Sg, z = So, value = Kro)) + geom_point(aes(value = Kro, fill = Kro_range, color = Kro_range), size = 1, shape = 22) + scale_T_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_L_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_R_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + ggtitle("Three-phase Oil Relative Permeability - STONE II, SWSG") + theme_classic() #> Warning: Ignoring unknown aesthetics: value p5
library(Rrelperm) library(ggplot2) library(ggtern) library(magrittr) rel_perm_owg_st_ii_so <- kr3p_StoneII_So(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, SOIRG = 0.1, SORG = 0.1, SGCON = 0, SGCRIT = 0, KRWIRO = 0.45, KROCW = 1, KRGCL = 0.35, NW = 4.25, NOW = 2.5, NG = 3, NOG = 2, NP = 501) rel_perm_owg_st_ii_so <- as.data.frame(rel_perm_owg_st_ii_so) colnames(rel_perm_owg_st_ii_so) <- c("Sw", "Sg", "So", "Kro") head(rel_perm_owg_st_ii_so, 10) #> Sw Sg So Kro #> 1 0 0.000 1.000 1 #> 2 0 0.002 0.998 1 #> 3 0 0.004 0.996 1 #> 4 0 0.006 0.994 1 #> 5 0 0.008 0.992 1 #> 6 0 0.010 0.990 1 #> 7 0 0.012 0.988 1 #> 8 0 0.014 0.986 1 #> 9 0 0.016 0.984 1 #> 10 0 0.018 0.982 1 rel_perm_owg_st_ii_so$Kro_range <- cut(rel_perm_owg_st_ii_so$Kro, breaks = seq(0,1, by = 0.1), right = TRUE, include.lowest = FALSE) rel_perm_owg_st_ii_so_oil <- rel_perm_owg_st_ii_so[rel_perm_owg_st_ii_so$Kro > 0, ] rel_perm_owg_st_ii_so_oil <- droplevels(rel_perm_owg_st_ii_so_oil) p6 <- ggtern(data = rel_perm_owg_st_ii_so_oil, aes(x = Sw, y = Sg, z = So, value = Kro)) + geom_point(aes(value = Kro, fill = Kro_range, color = Kro_range), size = 1, shape = 22) + scale_T_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_L_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_R_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + ggtitle("Three-phase Oil Relative Permeability - STONE II, SO") + theme_classic() #> Warning: Ignoring unknown aesthetics: value p6
library(Rrelperm) library(ggplot2) library(ggtern) library(magrittr) rel_perm_owg_bk <- kr3p_Baker(SWCON = 0.13, SWCRIT = 0.13, SOIRW = 0.20, SORW = 0.2, SOIRG = 0.1, SORG = 0.1, SGCON = 0, SGCRIT = 0, KRWIRO = 0.45, KROCW = 1, KRGCL = 0.35, NW = 4.25, NOW = 2.5, NG = 3, NOG = 2, NP = 501) rel_perm_owg_bk <- as.data.frame(rel_perm_owg_bk) colnames(rel_perm_owg_bk) <- c("Sw", "Sg", "So", "Kro") head(rel_perm_owg_bk, 10) #> Sw Sg So Kro #> 1 0 0.000 1.000 1.0000000 #> 2 0 0.002 0.998 0.9948119 #> 3 0 0.004 0.996 0.9896374 #> 4 0 0.006 0.994 0.9844763 #> 5 0 0.008 0.992 0.9793287 #> 6 0 0.010 0.990 0.9741946 #> 7 0 0.012 0.988 0.9690740 #> 8 0 0.014 0.986 0.9639669 #> 9 0 0.016 0.984 0.9588733 #> 10 0 0.018 0.982 0.9537932 rel_perm_owg_bk$Kro_range <- cut(rel_perm_owg_bk$Kro, breaks = seq(0,1, by = 0.1), right = TRUE, include.lowest = FALSE) rel_perm_owg_bk_oil <- rel_perm_owg_bk[rel_perm_owg_bk$Kro > 0, ] rel_perm_owg_bk_oil <- droplevels(rel_perm_owg_bk_oil) p7 <- ggtern(data = rel_perm_owg_bk_oil, aes(x = Sw, y = Sg, z = So)) + geom_point(aes(value = Kro, fill = Kro_range, color = Kro_range), size = 1, shape = 22) + scale_T_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_L_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + scale_R_continuous(limits = c(0.0,1.0), breaks = seq(0,1,by = 0.05)) + ggtitle("Three-phase Oil Relative Permeability - Baker's Linear") + theme_classic() #> Warning: Ignoring unknown aesthetics: value p7
References
Baker, L. E. (1988). Three-Phase Relative Permeability Correlations. https://doi.org/10.2118/17369-MS
Brooks, R. H., & Corey, A. T. (1964). Hydraulic Properties of Porous Media. Hydrology Papers, (3), 27. Retrieved from https://mountainscholar.org/bitstream/handle/10217/61288/HydrologyPapers_n3.pdf
Fayers, F. J., & Matthews, J. D. (1984). Evaluation of Normalized Stone’s Methods for Estimating Three-Phase Relative Permeabilities. Society of Petroleum Engineers Journal, 24(02), 224–232. https://doi.org/10.2118/11277-PA
Stone, H. L. (1970). Probability Model for Estimating Three-Phase Relative Permeability. Journal of Petroleum Technology, 22(02), 214–218. https://doi.org/10.2118/2116-PA