Inflow performance relationship: Part 2

R Reservoir engineering Productivity

Generating IPR curve for two-phase reservoirs: Voguel Method

Author

Affiliation

Rigoberto Chandomi Vazquez

 

Published

Feb. 18, 2022

Citation

Vazquez, 2022

At pressures less than the bubble point pressure, oil flow decreases due to oil relative permeability is reduced because solutions gas escapes and become free gas, increasing oil viscosity also. Because of that IPR curve deviates from linear behavior at pressure less than the bubble-point pressure.

Vogel offered a simplified solution for two-phase flow problem, defined the following equation:

q=qmax[10.2(PwfP)0.8(PwfP)2]  (1)

or

pwf=0.125p[8180(qqmax)1]  (2)

where qmax is defined as the absolute open flow (AOF), the maximum possible reservoir deliverability, and its equation is

qmax=Jp1.8  (3)

Example. Calculate and graph the IPR for a vertical well in a saturated oil reservoir using Vogel’s equation

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

First, calculate Productivity index using pseudo-steady state PI equation

py <-  5651
pb <-  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

Now, we can estimate AOF and then oil rates using a flowing botton-hole pressure vector to generate the IPR curve

qmax <- (J*py)/1.8
qmax
[1] 617.7751
#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 <- qmax*(1-0.2*(pwf/py)-0.8*(pwf/py)^2)

#Using Pwf and Qo vector we cna create a dataframe

IPR <- data.frame(Pwf = pwf, Qo = qo)
print(IPR)
         Pwf       Qo
1     0.0000 617.7751
2   627.8889 597.9452
3  1255.7778 565.9125
4  1883.6667 521.6767
5  2511.5556 465.2380
6  3139.4444 396.5963
7  3767.3333 315.7517
8  4395.2222 222.7041
9  5023.1111 117.4535
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()

When reservoir pressure is greater than the bubble-point pressure and the flowing bottom-hole pressure can be less than the bubble-point pressure in some conditions, the model have to combine the straight-line IPR for single-phase flow and the Vogel’s IPR model for two-phase flow.

The flow rate at the bubble-point pressure using the linar IPR model is

qb=J(ˉppb)

The total flow rate, considering the additional q_b rate and using the Vogel’s IPR model at a given bottom-hole pressure less than the Pb is expressed as

q=J(ˉppb)+Jp1.8[10.2(PwfP)0.8(PwfP)2]

where

Jp1.8=qv  (3)

Example. Calculate and graph the IPR for a vertical well in an undersaturated oil reservoir using Vogel’s equation

Porosity=0.19

Permeability:k=8.2 md

Pay zone thickness:h=53 ft

Reservoir pressure:Pe=5651 psi

Bubblepoint pressure:pb=3000 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

First, calculate Productivity index using pseudo-steady state PI equation

py <-  5651
pb <-  3000
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

Now, we can estimate qb and qv, then oil rates using a flowing botton-hole pressure vector to generate the IPR curve, in this using ifelse() function to evaluate if pwf is less or grater than pb

qb <- (J)*(py-pb)
qb
[1] 521.6597
qv <- J*pb/1.8
qv
[1] 327.9641
#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 <- ifelse(pwf >= pb, J*(py-pwf), qb + qv*(1-0.2*(pwf/pb)-0.8*(pwf/pb)^2)) 

#Using Pwf and Qo vector we cna create a dataframe

IPR <- data.frame(Pwf = pwf, Qo = qo)
print(IPR)
         Pwf       Qo
1     0.0000 849.6238
2   627.8889 824.4023
3  1255.7778 776.1945
4  1883.6667 705.0004
5  2511.5556 610.8200
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()

References

Guo, Boyun (2008) Well productivity handbook

Footnotes

    Citation

    For attribution, please cite this work as

    Vazquez (2022, Feb. 18). Chato Solutions: Inflow performance relationship: Part 2. Retrieved from https://www.chatosolutions.com/posts/2022-02-18-pi2/

    BibTeX citation

    @misc{vazquez2022inflow,
      author = {Vazquez, Rigoberto Chandomi},
      title = {Chato Solutions: Inflow performance relationship: Part 2},
      url = {https://www.chatosolutions.com/posts/2022-02-18-pi2/},
      year = {2022}
    }