home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hall of Fame
/
HallofFameCDROM.cdr
/
oilfield
/
gasper.lzh
/
GASPER.FOR
< prev
next >
Wrap
Text File
|
1980-01-02
|
8KB
|
253 lines
c*****************************************************************
c This program simulates gas well performance
c It computes either static of flowing bottom
c hole pressure for both sweet and/or sour gas
c wells
character yes*5,no*5,ans*5,what*5,fname*15
real h(6),w(6),mu,pt
common theta,tem,w,pt,co2,h2s
& ,h,q,tt,beta,e,dia,mu,sg,dept,ffact,zf
c read data for Gaussian six points quadrature
write(*,*)'PLEASE GIVE YOUR NAME IN QUOTES'
write(*,*)'LIKE '' YOUR NAME'', AND HIT ''ENTER'''
read(*,24)fname
write(*,*)' HENRY WELCOMES YOU, ',fname
write(*,*)'HAVE YOU LOOK AT THE README FILE'
write(*,*)'********************************'
write(*,*)' JUST ANSWER YES OR NO THEN HIT ''ENTER'''
write(*,*)'********************************'
read(*,24)what
if(what.eq.'no')then
write(*,*)' PLEASE DO BEFORE RUNNING THIS PROGRAM'
write(*,*)'********************************'
write(*,*)'TO READ, AT THE PROMPT,ENTER '' TYPE README'''
stop
endif
write(*,1)
1 format(4x,'THIS PROGRAM COMPUTES STATIC OR FLOWING',//,
& 4x,'BOTTOM HOLE PRESSURES IN SWEET AND/OR SOUR',//,
& 4x,'GAS WELLS, TO USE, JUST ANSWER THE QUESTIONS',//
& ,4x,'PLEASE DIRECT ALL INQUIRIES TO',//,4x,
& ' HENRY A. OHEN , SCHOOL OF PETROLEUM',
& //,4x,'& GEOLOGICAL ENGINEERING, UNIVERSITY',//,4x
& , 'OF OKLAHOMA, NORMAN OK 73019',//)
open(10,file='gaus.dat')
do 2 i=1,6
read(10,*)h(i),w(i)
2 continue
imax=100
write(*,3)
3 format(4x,'IS YOUR GAS SWEET',//,4x,
& ' ANSWER YES OR NO AND HIT ''ENTER''',//)
read(*,24)ans
if(ans.eq.'no')then
write(*,4)
4 format(4x,' YOU MUST KNOW THE MOLE PERCENT OF CARBON DIOXIDE',
& //,4x,' AND THE MOLE PERCENT OF HYDROGEN SULPHIDE',//,
& 'DO YOU HAVE THIS INFORMATION? YES OR NO AND HIT ''ENTER''',//)
read(*,24)ans
if(ans.eq.'no')then
write(*,5)
5 format(4x,' YOU ARE NOT READY,GET THE REQUIRED INFORMATION'
& ,//)
stop
else
write(*,6)
24 format(a9)
6 format(4x,'GIVE MOLE FRACTION OF CO2 AND H2S IN THAT ORDER',/
& ,4x,' HIT ''ENTER'' FOR EACH ENRTY')
read(*,*)co2,h2s
endif
else
co2=0
h2s=0
endif
write(*,7)
read(*,*)dept
write(*,9)
read(*,*)tt
write(*,10)
read(*,*)pt
write(*,12)
read(*,*)dia
write(*,14)
read(*,*)beta
write(*,16)
read(*,*)theta
write(*,17)
read(*,*)sg
write(*,19)
read(*,*)tol
write(*,20)
read(*,*)q
7 format(4x,'GIVE WELL DEPTH(ft), HIT ''ENTER''')
9 format(4x,'TUBING HEAD TEMP.(of), HIT ''ENTER''')
10 format(4x,'GIVE PRESURE (psi), HIT ''ENTER''')
12 format(4x,'PIPE DIAMETER (inches), HIT ENTER''')
14 format(4x,'GIVE TEMPERATURE GRADIENT (of/ft), HIT ''ENTER''')
16 format(4x,'GIVE HORIZONTAL INCLINATION (degree), HIT ''ENTER''')
17 format(4x,'GIVE GAS GRAVITY HIT ''ENTER''')
19 format(4x,'GIVE TOLERANCE,1.0e-03,IS FINE, HIT ''ENTER''')
20 format(4x, 'GIVE GAS FLOW RATE (MMscfd) , HIT ''ENTER''')
theta=theta/180.0
e=0.0006
xguess=pt+0.3*pt
15 call fcn(xguess,f,fp)
xx=xguess-f/fp
if(ij.gt.imax)then
write(*,*)'ITERATION EXCEEDED IN MAIN LOOP, INCREASE TOL'
stop
endif
ch=(xx-xguess)
if(abs(ch).gt.tol)then
xguess=xx
ij=ij+1
go to 15
endif
pw=xx
open (13,file='res')
if(q.eq.0)then
write(13,*)' ************************'
write(13,*)' THIS IS A STATIC WELL'
write(13,*)' ************************'
else
write(13,*)' ************************'
write(13,*)' THIS IS A FLOWING WELL'
write(13,*)' ************************'
endif
write(13,31)zf,mu,ffact,pw
31 format(4x,'Z-FACTOR IS',4x,f7.4,//,
& 4x,'GAS VISCOSITY AT BOTTOM IS',4x,f7.4,//,
& //,4x,'MOODY FRICTION FACTOR IS'
& ,4x,f7.4,//4x,
& 'PRESURE AT GIVEN DEPT IS',2x,f13.5,//)
write(*,8)
8 format(//,2x,' ****************************************')
write(*,*)' FIND YOUR RESULTS IN A FILE CALLED ''res'''
write(*,*)' ****************************************'
write(*,*)' TO READ ENTER ''TYPE RES'''
write(*,33)fname
write(*,*)'****************************'
33 format(//,4x,'HAVE A GOOD DAY, ',a15,)
end
c******************************************************
subroutine fcn(x,f,fp)
real h(6),w(6),x,mu,integral
common theta,tem,w,pt,co2,h2s,
& h,q,tt,beta,e,dia,mu,sg,dept,ffact,zf
tem=tt+beta*dept+460
call solve(x,integral,fp)
f=1000*dept-integral
return
end
c***************************************************
subroutine solve(p,res,fp)
real t,res,mu,dia,sg,h(6),w(6)
common theta,tem,w,pt,co2,h2s
& ,h,q,tt,beta,e,dia,mu,sg,dept,ffact,zf
shc=co2*h2s
rl=dept/(sin(theta))
ee=120*(shc**0.9-shc**1.6)+15*(h2s**0.5-h2s**4.0)
tc=170.491+307.344*sg-ee
pc=709.604-58.715*sg
pc=pc*tc/((tc+ee)+h2s*(1.0-h2s)*ee)
ttc=tem/tc
pr=p/pc
call zfact(ttc,pr,z)
zf=z
call gvis(ttc,tc,pr,z,pc,sg,fm)
mu=fm
if(q.ne.0)then
ren=20000*q*sg/mu/dia
call fact(ren,fr)
ffact=fr
endif
a1=(53.34*p/sg/tem/zf+111.1*q*q/(dia**4)/p)
a2=(2.6665*fr*q*q/4)/(dia**5)
a3=p*p/tem/tem/1000/zf/zf
fp=-a1/(a2+a3)
call gaus(fr,z,p,res)
return
end
subroutine fact(ren,f)
c******************************************************
c Subroutine calculates the friction factor by solving
c The Colebrooks and White Implicit Equation for friction factor
c using the Newton Raphson's method
c*****************************************************
real f,ren,b,fn,ff,h(6),w(6)
common theta,tem,w,pt,co2,h2s
& ,h,q,tt,beta,e,dia,mu,sg,dept,ffact,zf
c Assume Laminar Flow as first approximation
fo=64/ren
do 2 i=1,50
c Start Newton Iteration
ff=1.74-0.8686*alog(2*e/dia+18.7/sqrt(fo)/ren)-1.0/sqrt(fo)
aa=(2*e/dia+18.7/ren/sqrt(fo))
fn=0.5*(1.0+16.24283/aa/ren)/(fo**1.5)
f=fo-ff/fn
if(abs((f-fo)/fo).le.1e-05)go to 5
fo=f
2 continue
write(*,*)'iteration failed in ffact after ',i,'times'
stop
5 return
end
c************************************************************
subroutine gaus(fr,z,xy,res)
c************************************************************
real y(6),h(6),w(6),length
common theta,tem,w,pt,co2,h2s
& , h,q,tt,beta,e,dia,mu,sg,dept,ffact,zf
a=pt
b=xy
do 20 i=1,6
y(i)=(h(i)+1.0)*(b-a)/2.0+a
20 continue
sum=0
length=dept/sin(theta)
do 30 i=1,6
a1=y(i)*53.34/sg/tem/z
a2=111.1*q*q/(dia**4)/y(i)
a3=2.6665*fr*q*q/4/(dia**5)
a4=y(i)*y(i)/tem/z/z/tem/1000
g=(a1+a2)/(a3+a4)
sum=sum+w(i)*g*0.5*(b-a)
30 continue
res=sum
return
end
subroutine zfact(tr,pr,z)
c this routine calculates z-factor using Standing modification
c to the Brill and Beggs correlation for curve-fitting the Stand-
c ing and Katz reduced pressure-reduced temperature z-factor chart
c
a=1.39*(tr-0.92)**0.5-0.36*tr-0.101
b=(0.62-0.23*tr)*pr
c=(0.066/(tr-0.86)-0.037)*pr**2
d=(0.32/(10.**(9.*(tr-1.))))*pr**6
e=b+c+d
f=(0.132-0.32*alog10(tr))
g=10.**(0.3106-0.49*tr+0.1824*tr**2)
c
z=a+(1.-a)*exp(-e)+f*pr**g
return
end
c**********************************************************
subroutine gvis(tr,tc,pr,z,pc,sg,fm)
c Subroutine computes gas viscosity using the
c modified Lee et al correlation
dg=(2.7*pr*pc*sg)/(z*tr*tc)/(16.10846e03)
ak=((9.4+0.58*sg)*(tr*pc)**(1.5))/(209.0+
& 551*sg+tr*tc)
xx=3.5+986/tc/tr+0.29*sg
yy=2.4-0.2*xx
fm=ak*exp(xx*dg**yy)*1e-04
return
end