Rock and fluid properties#
Define permeability, porosity, thermal properties, dispersion, and saturation functions for the seven facies. Facies 1 through 6 are permeable sands; facies 7 represents the sealing unit.
Rock properties#
rock#
Type: matrix with seven rows and two columns
Each row defines one facies as [permeability, porosity]. Permeability is in
mD and porosity is dimensionless. Rows correspond to facies 1 through 7.
# Columns: 1) permeability [mD], 2) porosity [-]
rock = [
[0.10132, 0.10], # Facies 1
[101.324, 0.20], # Facies 2
[202.650, 0.20], # Facies 3
[506.625, 0.20], # Facies 4
[1013.25, 0.25], # Facies 5
[2026.50, 0.35], # Facies 6
[1e-5, 1e-6], # Facies 7
]
kzMult#
Type: non-negative number
Sets the multiplier applied to permeability in the z direction.
kzMult = 0.1
rockExtra#
Type: array of two positive numbers
Applies to: SPE11B and SPE11C
Sets rock specific heat capacity in kJ/(kg K) and rock density in kg/m3.
# 1) specific heat capacity [kJ/(kg K)], 2) density [kg/m3]
rockExtra = [0.85, 2500.0]
rockCond#
Type: array with seven non-negative numbers
Units: W/(m K)
Sets thermal conductivity for facies 1 through 7.
rockCond = [1.9, 1.25, 1.25, 1.25, 0.92, 0.26, 2.0]
dispersion#
Type: array with seven non-negative numbers
Units: m
Sets dispersivity for facies 1 through 7.
dispersion = [10, 10, 10, 10, 10, 10, 0]
Saturation functions#
The function variables contain validated Python expressions. They are
evaluated using s_w and the facies properties in safu.
krw#
Defines wetting-phase relative permeability.
krw = "(max(0, (s_w - swi) / (1 - swi))) ** 1.5"
krn#
Defines non-wetting-phase relative permeability.
krn = "(max(0, (1 - s_w - sni) / (1 - sni))) ** 1.5"
pcap#
Defines capillary pressure in Pa.
pcap = "penmax * math.erf(pen * ((s_w-swi) / (1.-swi)) ** (-(1.0 / 1.5)) * math.pi**0.5 / (penmax * 2))"
s_w#
Defines the wetting-saturation points used to tabulate the functions.
s_w = "(np.exp(np.flip(np.linspace(0, 5.0, npoints))) - 1) / (np.exp(5.0) - 1)"
safu#
Type: matrix with seven rows and five columns
Each row defines one facies:
swi: irreducible wetting saturation, dimensionless.sni: residual non-wetting saturation, dimensionless.pen: capillary entry pressure, Pa.penmax: maximum capillary pressure, Pa.npoints: number of tabulated points.
# Columns: 1) swi [-], 2) sni [-], 3) pen [Pa],
# 4) penmax [Pa], 5) npoints [-]
safu = [
[0.32, 0.1, 193531.39, 3e7, 1000], # Facies 1
[0.14, 0.1, 8654.99, 3e7, 1000], # Facies 2
[0.12, 0.1, 6120.00, 3e7, 1000], # Facies 3
[0.12, 0.1, 3870.63, 3e7, 1000], # Facies 4
[0.12, 0.1, 3060.00, 3e7, 1000], # Facies 5
[0.10, 0.1, 2560.18, 3e7, 1000], # Facies 6
[0, 0, 0, 3e7, 2], # Facies 7
]
Visualize the saturation functions#
The following figures compare the relative-permeability and capillary-pressure functions for all six permeable facies. Facies 7 is omitted because it represents the sealing unit.
Wetting- and non-wetting-phase relative permeability for facies 1 through 6.#
Capillary pressure for facies 1 through 6.#
Generate the figures with plopm#
Run the commands from a directory containing the generated SPE11C OPM Flow
input files. The same color identifies each facies in both figures.
Relative permeability#
Plot the non-wetting and wetting curves for facies 1 through 6.
plopm -i SPE11C -x '[0,1]' -lw 5 -fz 18 -fs 8,6 -yl 'Capillary pressure, $p_c$ [bar]' -xl 'Liquid saturation, $s_w$ [-]' -xnt 6 -v pcwg1,pcwg2,pcwg3,pcwg4,pcwg5,pcwg6 -y '[0,300]' -llb 'Facies 1 Facies 2 Facies 3 Facies 4 Facies 5 Facies 6' -c b,#ff7f0e,#2ca02c,#d62728,#9467bd,#8c564b -ls '--,(0, (1, 1)),-.,(0, (1, 10)),(0, (1, 1)),(5, (10, 3)),(0, (5, 10))'
Capillary pressure#
Plot the gas-water capillary-pressure curves for facies 1 through 6:
plopm -i SPE11C -x '[0,1]' -lw 5 -fz 18 -fs 8,6 -yl 'Capillary pressure, $p_c$ [bar]' -xl 'Liquid saturation, $s_w$ [-]' -xnt 6 -v pcwg1,pcwg2,pcwg3,pcwg4,pcwg5,pcwg6 -y '[0,300]' -llb 'Facies 1 Facies 2 Facies 3 Facies 4 Facies 5 Facies 6' -c b,#ff7f0e,#2ca02c,#d62728,#9467bd,#8c564b -ls '--,(0, (1, 1)),-.,(0, (1, 10)),(0, (1, 1)),(5, (10, 3)),(0, (5, 10))'
See the plopm documentation for the complete saturation-function and styling options.