Inflow performance relationship: Part 1

R Reservoir engineering

Generating IPR curve for single and two-phase reservoirs

Author

Affiliation

Rigoberto Chandomi Vazquez

 

Published

Jan. 24, 2022

Citation

Vazquez, 2022

The IPR curve is a graphical presentation of the relationship between the flowing botton-hole pressure and the liquid production rate. The magnitud of the slope of IPR curve is called productivity index (PI or J), expressed as:

J=qPePwf  (1)

For undersaturated oil reservoir or reservoir regions where the pressure is greater than the bubble-point pressure we can use the following equations

““For radial transient flow around a vertical well”” J=q(PePwf)=kh162.6Boμo(logt+logkϕμoctr2w3.23+0.87S)

““For radial steady-state flow around a vertical well”” J=q(PePwf)=kh141.2Boμo(Inrerw+S)
\For pseudo-steady-state flow around a vertical well\ J=kh141.2Boμo(Inrerw34+S)J=q(PPwf)=kh141.2Boμo(12In4AγCAr2w+S)
\For steady-state flow around a fractured well\ J=q(PePwf)=kh141.2Boμo(Inrerw+Sf)
\For steady-state flow around a horizontal well\ j=q(PePwf)=kHh141.2Boμo[In[a+a2(L/2)2L/2]+1anihLIn[1anihrw(1ani+1)]]

Example in R

Using the following data we can calculate and graph the IPR for a vertical well in an oil reservoir considering pseudo-steady state flow.

Porosity=0.19

Permeability:k=8.2 md

Pay zone thickness:h=53 ft

Reservoir pressure:Pe=5651 psi

Bubblepoint pressure:pb=5651 psia

Oil formation volume factor:Bo=1.1

Oil viscosity:μo=1.7 cp

Totalcompressibility:ct=0.0000129 psi1

Drainage area:A=640 acres (re=2980 ft)

Wellbore radius:rw=0.328 ft

Skin factor:S=0

py <-  5651
k <- 8.2
h <- 53
Bo <- 1.1
viso <- 1.7
re <- 2980
rw <- 0.328
S <- 0

#Productivity index

J = (k*h)/(141.2*Bo*viso*(log(re/rw)-3/4+S))
print(J)
[1] 0.1967785

IPR points to graph can be calculated as follow

#create a pressure vector from reservoir pressure to zero

pwf <- seq(0,py, length.out = 10)

#Using equation 1 and Productivity index value, calculate Qo

qo <- J*(py-pwf)

#Using Pwf and Qo vector we cna create a dataframe

IPR <- data.frame(Pwf = pwf, Qo = qo)
print(IPR)
         Pwf        Qo
1     0.0000 1111.9951
2   627.8889  988.4401
3  1255.7778  864.8851
4  1883.6667  741.3301
5  2511.5556  617.7751
6  3139.4444  494.2201
7  3767.3333  370.6650
8  4395.2222  247.1100
9  5023.1111  123.5550
10 5651.0000    0.0000

Now we can plot IPR with ggplot2

library(ggplot2)

ggplot(IPR, aes(x = Qo, y = Pwf)) + 
  geom_point() + geom_line()

The last IPR model us valid for pressure above bubble-point pressure.

With the last code we can create a function to automate IPR calculations, if you want to know more about functions in R check the this link, Define function in R

Darcy_PSS <- function(py,k,h,Bo,viso,re,rw,S){
  
  J = (k*h)/(141.2*Bo*viso*(log(re/rw)-3/4+S))
 
  pwf <- seq(0,py, length.out = 10)

  qo <- J*(py-pwf)

  IPR <- data.frame(Pwf = pwf, Qo = qo)

return(IPR)

}

IPR <- Darcy_PSS(4500, 8.2,53,1.1,1.7,2980,0.328,0)
print(IPR)
    Pwf        Qo
1     0 885.50310
2   500 787.11387
3  1000 688.72464
4  1500 590.33540
5  2000 491.94617
6  2500 393.55693
7  3000 295.16770
8  3500 196.77847
9  4000  98.38923
10 4500   0.00000

Now we can compare IPR with and without skin easily

IPR_nS <- Darcy_PSS(5000, 8.2,53,1.1,1.7,2980,0.328,0)
IPR_S <- Darcy_PSS(5000, 8.2,53,1.1,1.7,2980,0.328,2)

ggplot() + 
  geom_point(data = IPR_nS, aes(x = Qo, y = Pwf), color = "red") + 
  geom_line(data = IPR_nS, aes(x = Qo, y = Pwf), color = "red")+ 
  geom_point(data = IPR_S, aes(x = Qo, y = Pwf), color = "green") + 
  geom_line(data = IPR_S, aes(x = Qo, y = Pwf), color = "green")

References

Guo, Boyun (2008) Well productivity handbook

Footnotes

    Citation

    For attribution, please cite this work as

    Vazquez (2022, Jan. 24). Chato Solutions: Inflow performance relationship: Part 1. Retrieved from https://www.chatosolutions.com/posts/2022-01-24-pi1/

    BibTeX citation

    @misc{vazquez2022inflow,
      author = {Vazquez, Rigoberto Chandomi},
      title = {Chato Solutions: Inflow performance relationship: Part 1},
      url = {https://www.chatosolutions.com/posts/2022-01-24-pi1/},
      year = {2022}
    }