You must log in to edit PetroWiki. Help with editing

Content of PetroWiki is intended for personal use only and to supplement, not replace, engineering judgment. SPE disclaims any and all liability for your use of such content. More information


2-phase relative permeability models

PetroWiki
Jump to navigation Jump to search


The effective permeability of any reservoir fluid is a function of the reservoir fluid saturation and the wetting characteristics of the formation. It becomes necessary, therefore, to specify the fluid saturation when stating the effective permeability of any particular fluid in a given porous medium. When two or more fluids flow at the same time, the relative permeability of each phase at a specific saturation is the ratio of the effective permeability of the phase to the absolute permeability. When a wetting and a nonwetting phase flow together in a reservoir rock, each phase follows separate and distinct paths. The distribution of the two phases according to their wetting characteristics results in characteristic wetting and nonwetting phase relative permeabilities.

In this exercise 2 phase relative permeability correlations are programmed in python with plotting permeability curves.

Corey's 2 Phase Model - valid for drainage in a consolidated rock:

where and are water saturation and irreducible water saturation respectively.


Code process for the above formula is as follows (the link is to the Github repository containing the following python codes):

  1. Make a numpy array for saturation using numpy linspacce function:
    • >>>> Sw = np.linspace(0,1,100) # This will create an numpy array having water saturation values from 0 to 1 evenly spaced.
  2. Assign Value for irreducible water saturation(Swirr):
    • >>>> Swirr = 0.20
  3. Calculate Swn for each Sw value:
    • >>>> Swn = (Sw - Swirr)/(1-Swirr) # Numpy will create an array for Swn corresponding to each Sw by using broadcasting
  4. Calculate Krw and Kro for each water saturation value:
    • >>>> Krw = Swn**4
    • >>>> Kro = ((1 - Swn)**2)*(1 - Swn**2)
  5. Plot using Matplotlib or any other plotting library of your choice:
    • >>>> plt.style.use('default') => Assigning Plotting Style
    • >>>> plt.plot(Sw,Krw,label='Krel-water(Wetting P.)',linewidth=3) => Plot Rel Perm plot of water
    • >>>> plt.plot(Sw,Kro,label = 'Krel-Oil(Non-Wetting P.)',linewidth=3) => Plot Rel Perm plot of Oil
    • >>>> plt.title("Rel-Perm by Corey's Model") => Giving title of plot
    • >>>> plt.xlabel('Sw') => Labeling x axis
    • >>>> plt.ylabel('Krel(o,w)') => Labeling y axis
    • >>>> plt.grid() => Making Grids on plot
    • >>>> plt.legend(loc='best') => Proving labels on line plots


import numpy as np

import matplotlib.pyplot as plt

Sw = np.arange(0.2, 1.05, 0.05)

Sw_irr = 0.2

Swn = (Sw - Sw_irr)/(1 - Sw_irr)

Krw_Corey = Swn**4

Kro_Corey = (1 - Swn**2) * (1-Swn)**2

plt.plot(Sw, Krw_Corey, label="Water Relative Permeability")

plt.plot(Sw, Kro_Corey, label="Oil Relative Permeability")

plt.xlabel("Water Saturation (Sw)")

plt.ylabel("Relative Permeability")

plt.legend()

plt.show()


Corey's real perm model

Naar – Henderson’s model

Where and are water saturation and irreducible water saturation.


Process will remain same as of Corey’s model just formula for calculating Kro is changed.

  • Swn = (Sw - Swirr)/(1-Swirr)
  • Krw = Swn**4
  • Kro_h = ((1 - 2*Swn)**(1.5))*(2 - (1-2*Swn)**(0.5))
  • plt.style.use('default')
  • plt.plot(Sw,Krw,label='Krel-water(Wetting P.)',linewidth=3,color='green')
  • plt.plot(Sw,Kro_h,color='r',label='Krel-Oil(Non-Wetting P.)',linewidth=3)
  • plt.title("Rel-Perm by Naar-Henderson's Model")
  • plt.xlabel('Sw')
  • plt.ylabel('Krel(o,w)')
  • plt.grid()
  • plt.legend(loc='best')


import numpy as np

import matplotlib.pyplot as plt

Sw = np.arange(0.2, 1.05, 0.05)

Sw_irr = 0.2

Swn = (Sw - Sw_irr)/(1 - Sw_irr)

Krw_NH = Swn**4

Kro_NH = ((1-2*Swn[Swn<=0.5])**1.5) * (2-(1-2*Swn[Swn<=0.5])**0.5)

print(Kro_NH)

plt.title("Naar Hendersen 2-Phase")

plt.plot(Sw, Krw_NH, label="Water Relative Permeability")

plt.plot(Sw[Swn<=0.5], Kro_NH, label="Oil Relative Permeability")

plt.xlabel("Water Saturation (Sw)")

plt.ylabel("Relative Permeability")

plt.legend()

plt.show()


Real perm by Naar-Henderson model

See also