home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hall of Fame
/
HallofFameCDROM.cdr
/
oilfield
/
chokeflo.lzh
/
CHOKFLO.BAS
< prev
next >
Wrap
BASIC Source File
|
1980-01-01
|
29KB
|
982 lines
10 ' CHOKFLO IS A MICROCOMPUTER PROGRAM DEVELOPED BY K. M. BARBOT AND
20 ' M. H. CHU, UNIVERSITY OF NORTH DAKOTA. IT WAS DESIGNED FOR
30 ' PREDICTION OF FLOW RATE AND CHOKE SIZE SELECTION FOR CONSTANT AND
40 ' VARIABLE WELLHEAD PRESSURES.
50 '
60 '********************************************************************
70 'MAIN PROGRAM
80 '
90 DIM QMAX(40),DD(40),FDD(40),CDD(40),PWH(40),GMF(40),BPPF(40),IABS(40)
100 DIM XHL(40),YHL(40),XPSI(40),YPSI(40),XHLL(40),XCNL(20),YCNL(20)
110 DIM XCNLL(20),YCNLL(20),X(15),Y(15),PERC(10),PI(10),STVA(15),STV74(15)
120 DIM STV280(15),V(40),H(40),F(40),RSWS(10,10),TRSW(10),PRSW(10)
130 DIM EMW(15),APIEMW(15),XF(50),YF(50),CHK(20),SHO(20),QEST(20)
140 CLS
150 PRINT "WHAT TYPE OF PRODUCTION METHOD DO YOU DESIRE ? "
160 PRINT "ENTER (1 FOR VARIABLE WELLHEAD PRESSURE METHOD) "
170 PRINT " (2 FOR CONSTANT WELLHEAD PRESSURE METHOD) "
180 INPUT " ";METH
190 IF METH = 1 THEN 250
200 IF METH = 2 THEN 220
210 GOTO 140
220 INPUT "WHAT IS THE CONSTANT WELLHEAD PRESSURE ";PWELL
230 INPUT "WHAT INCREMENTAL INCREASE FOR THE WELLHEAD PRESSURE ";DPWELL
240 GOTO 270
250 INPUT "WHAT IS THE FLOWLINE LENGTH (FT.) ";FL
260 INPUT "WHAT IS THE FLOWLINE DIAMETER (IN.) ";FD
270 INPUT "WHAT IS THE WELL DEPTH (FT.) ";TD
280 INPUT "WHAT IS THE TUBING DIAMETER (IN.) ";DIA
290 INPUT "WHAT IS THE PIPE ROUGHNESS (FT.) ";E
300 INPUT "WHAT IS THE SEPARATOR PRESSURE (PSIA) ";PSEP
310 INPUT "WHAT IS THE SEPARATOR TEMPERATURE (DEG-F) ";TSEP
320 INPUT "WHAT IS THE WELLHEAD TEMPERATURE (DEF-F) ";TOPTEM
330 INPUT "WHAT IS THE BOTTOMHOLE TEMPERATURE (DEG-F) ";BOTTEM
340 INPUT "WHAT IS THE RESERVOIR PRESSURE (PSIA) ";PR
350 INPUT "WHAT IS THE GAS/OIL RATIO (SCF/STB) ";GOR
360 INPUT "WHAT IS THE WATER/OIL RATIO (STB/STB) ";WOR
370 INPUT "WHAT IS THE OIL GRAVITY (API) ";API
380 INPUT "WHAT IS THE GAS SPECIFIC GRAVITY ";SGPG
390 INPUT "WHAT IS THE WATER SPECIFIC GRAVITY ";SGW
400 INPUT "WHAT IS THE PRODUCTIVITY INDEX (BBL/D/PSI) ";PI
410 INPUT "ARE THE VALUES CORRECT UP TO THIS POINT (Y/N) ";A$
420 IF A$ = "Y" THEN 450
430 IF A$ = "N" THEN 230
440 GOTO 410
450 CLS
460 KREG = 0
470 KHL = 0
480 ANG = 90
490 PRINT "WAIT WHILE THE JOB IS BEING RUN."
500 IHL = 0
510 LPRINT "*********************** INPUT WELL AND RESERVOIR DATA ************************"
520 LPRINT " "
530 LPRINT "TUBING DIAMETER FLOWLINE DIAMETER PRODUCTIVITY INDEX WELL DEPTH"
540 LPRINT " (IN) (IN) (BBL/D/PSI) (FT) "
550 LPRINT " "
560 LPRINT USING " ##.### ##.### ##.# ######.# ";DIA,FD,PI,TD
570 LPRINT " "
580 LPRINT " "
590 LPRINT "FLOWLINE LENGTH SEPARATOR PRESSURE OIL GRAVITY PIPE ROUGHNESS"
600 LPRINT " (FT) (PSIA) (API) (FT) "
610 LPRINT " "
620 LPRINT USING " ######.# ####.# ####.# #.##### ";FL,PSEP,API,E
630 LPRINT " "
640 LPRINT " "
650 LPRINT "WELLHEAD TEMP. B0TTOMHOLE TEMP. RESERVOIR PRESSURE SEPARATOR TEMP."
660 LPRINT " (DEG-F) (DEG-F) (PSIA) (DEG-F) "
670 LPRINT " "
680 LPRINT USING " ####.# ####.# #####.# ####.#";TOPTEM,BOTTEM,PR,TSEP
690 LPRINT " "
700 LPRINT " "
710 LPRINT "GAS/OIL RATIO WATER/OIL RATIO GAS SP. GRAV. WATER SP. GRAV."
720 LPRINT " (SCF/STB) (STB/STB) "
730 LPRINT " "
740 LPRINT USING " ####.# ###.## ##.## ##.## ";GOR,WOR,SGPG,SGW
750 LPRINT " "
760 LPRINT " "
770 LPRINT "******************************************************************************"
780 LPRINT " "
790 LPRINT " "
800 LPRINT " "
810 LPRINT "****************************** EXAMPLE OUTPUT ********************************"
820 LPRINT "* *"
830 LPRINT "* FLOW RATE PREDICTION AND CHOKE SIZE SELECTION FOR *"
840 IF METH = 1 THEN LPRINT "* WELLS WITH VARIABLE WELLHEAD PRESSURES *"
850 IF METH = 2 THEN LPRINT "* WELLS WITH CONSTANT WELLHEAD PRESSURE *"
860 LPRINT "* *"
870 LPRINT "******************************************************************************"
880 LPRINT " "
890 LPRINT " "
900 LPRINT " TUBING X WELL HEAD WELL BOTTOM MAXIMUM MAXIMUM"
910 LPRINT " FLOWLINE CHOKE HEAD HOLE LIQUID OIL FLOW "
920 LPRINT "CONFIGURATION DIAMETER PRESSURE PRESSURE FLOW RATE RATE "
930 LPRINT " (INCH) (INCH) (PSIA) (PSIA) (STB/DAY) (STB/DAY)"
940 LPRINT "------------- -------- -------- -------- -------- -------- "
950 AC=0
960 WX=0
970 QEST = 300
980 NM=0
990 NM=NM+1
1000 GOSUB 1280
1010 GOSUB 2220
1020 IF AC=1 THEN 1120
1030 IF NC = 1 THEN 1100
1040 IF ABS(PRR-PR)-5 <= 0 THEN 1100
1050 IF PR/PRR >= 1 THEN 1080
1060 QEST=QEST*(PR/PRR)^1.666
1070 GOTO 1000
1080 QEST=QEST*(PR/PRR)
1090 GOTO 1000
1100 LPRINT USING "#.### X #.### ##/64 ##### ##### ##### ##### ";DIA,FD,SHO,PHEAD,PBOTT,QEST,QO
1110 LPRINT " "
1120 AC=0
1130 NC=0
1140 WX=WX+1
1150 QEST = .7*QEST
1160 IF METH = 1 THEN 1200
1170 PWELL = PWELL + DPWELL
1180 IF SHO < 16 THEN 1210
1190 GOTO 980
1200 IF DONE <> 1 THEN 980
1210 LPRINT " "
1220 LPRINT " CALCULATIONS ARE COMPLETE"
1230 LPRINT " "
1240 LPRINT "******************************************************************************"
1250 STOP
1260 END
1270 '*********************************************************************
1280 'SUBROUTINE HORIZ
1290 '
1300 'THIS SUBROUTINE PERFORMS THE HORIZONTAL FLOW CALCULATIONS
1310 'THE BEGGS AND BRILL'S CORRELATION IS USED FOR THE HORIZONTAL
1320 'TWO PHASE FLOW PRESSURE LOSS CALCULATION.
1330 IF METH = 2 THEN 2100 ELSE 1340
1340 FD=FD/12
1350 AL=0
1360 PRESS=PSEP
1370 AZO=0
1380 XL=10
1390 DELFE=10
1400 FWS=WOR/(1+WOR)
1410 QO=(1-FWS)*QEST
1420 QW=FWS*QEST
1430 AP=3.1416*FD^2/4
1440 'RELATIVE ROUGHNESS
1450 ED=E/FD
1460 AHO=AZO*3.1416/180
1470 DELX=FL/XL
1480 TAVG=TOPTEM
1490 PAVG=PRESS+DELFE/2
1500 GOSUB 9160
1510 IF AC=1 THEN 2180
1520 BG=.0283*Z*(TAVG+460)/PAVG
1530 'GAS DENSITY
1540 DENG=(.0764*SGFG)/BG
1550 SGO60=141.5/(131.5+API)
1560 'OIL DENSITY
1570 DENO=(SGO60*350+SGDG*.0764*RS)/(5.615*BO)
1580 'WATER CUT
1590 FW=1-FO
1600 'LIQUID DENSITY
1610 DENL=FO*DENO+FW*SGW*62.4
1620 'NO SLIP HOLD-UP
1630 HLNS=VSL/VM
1640 GOSUB 8200
1650 GOSUB 5680
1660 VISL=FO*VISO+FW*VISW
1670 GOSUB 5930
1680 XNLV=1.938*VSL*((DENL/SURL)^.25)
1690 '
1700 'BRILL AND BEGGS CORRELATION
1710 '
1720 GOSUB 4330
1730 IF AC=1 THEN 2180
1740 DELPC=DPDL*DELX
1750 'CHECK FOR CONVERGENCE
1760 IF ABS(DELFE-DELPC) > .1 THEN 1830
1770 AL=AL+DELX
1780 PRESS=PRESS-DELPC
1790 'CHECK IF TOTAL LENGTH EXCEEDED
1800 IF AL >= FL THEN 1850
1810 DELFE=DELPC
1820 GOTO 1490
1830 DELFE=DELPC
1840 GOTO 1490
1850 PDOWN=PRESS
1860 RHO=(GOR/1000)*FO
1870 IF WX > 0 THEN 2030
1880 KB=KB+1
1890 CHK(KB)= ABS(PRR-PR)
1900 PHEAD= 2 * PDOWN
1910 SHOMAX = INT((435*RHO^.546*QEST/(PHEAD-14.7))^(.529))
1920 SHO=SHOMAX
1930 QEST(KB+1)= QEST
1940 SHO(KB+1)= SHOMAX
1950 IF CHK(KB) < CHK(KB-1) THEN 2020
1960 IF KB < 10 THEN 2020
1970 SHO = SHO(KB-1)
1980 QEST = QEST(KB-1)
1990 SHOMAX=SHO(KB-1)
2000 PHEAD=(435*QEST*RHO^.546)/(SHO^1.89)+14.7
2010 NC = 1
2020 GOTO 2060
2030 SHO=SHOMAX-4*(WX)
2040 IF SHO < 16 THEN DONE=1
2050 PHEAD=(435*QEST*RHO^.546)/(SHO^1.89)+14.7
2060 DELCHO=PHEAD-PDOWN
2070 PDROP=PHEAD-PSEP
2080 FD=FD*12
2090 GOTO 2170
2100 FD = 0
2110 PSEPAR = 2! * PSEP
2120 IF PWELL < PSEPAR THEN PWELL = PSEPAR
2130 PHEAD = PWELL
2140 RHO = (GOR/1000)*FO
2150 SHO = INT((435*RHO^.546*QEST/(PHEAD-14.7))^(.529))
2160 PDROP = PHEAD - PSEP
2170 RETURN
2180 SHOMAX = INT((435*RHO^.546*QEST/(PHEAD-14.7))^(.529))-2
2190 RETURN
2200 STOP
2210 '*******************************************************************
2220 'SUBROUTINE VERTI
2230 '
2240 'THIS SUBROUTINE PERFORMS THE VERTICAL WELL FLOW CALCULATIONS.
2250 'THE HAGEDORN AND BROWN'S CORRELATION IS USED FOR CALCULATION OF
2260 'THE VERTICAL TWO PHASE FLOW PRESSURE TRAVERSE.
2270 '
2280 TL=0
2290 DIA=DIA/12
2300 PRESS=PHEAD
2310 TEM1=TOPTEM
2320 XN=20
2330 DELPE=15
2340 FWS=WOR/(1+WOR)
2350 QO=(1-FWS)*QEST
2360 QW=FWS*QEST
2370 AP=3.142*DIA^2/4
2380 ED=E/DIA
2390 'ANGLE IN RADIANS
2400 AV=ANG*3.1416/180
2410 DELL=TD/XN
2420 DELT=((BOTTEM-TOPTEM)/TD)*DELL
2430 TEM2=TEM1+DELT
2440 TAVG=(TEM2+TEM1)/2
2450 'AVERAGE PRESSURE
2460 PAVG=PRESS+DELPE/2
2470 GOSUB 9160
2480 'GAS FORMATION VOLUME FACTOR
2490 BG=.0283*Z*(TAVG+460)/PAVG
2500 'GAS DENSITY
2510 DENG=(.0764*SGFG)/BG
2520 'OIL GRAVITY AT 60 DEG F
2530 SGO60=141.5/(131.5+API)
2540 'OIL DENSITY
2550 DENO=((SGO60*62.4)+((SGDG*.0764*RS)/5.614#))/BO
2560 'WATER CUT
2570 FW=1-FO
2580 'LIQUID DENSITY
2590 DENL=FO*DENO+FW*SGW*62.4
2600 'NO SLIP HOLD-UP
2610 HLNS=VSL/VM
2620 'GAS VISCOSITY
2630 GOSUB 8200
2640 'LIQUID VISCOSITY
2650 GOSUB 5680
2660 VISL=FO*VISO+FW*VISW
2670 '
2680 'LIQUID SURFACE TENSION
2690 GOSUB 5930
2700 '
2710 'LIQUID VISCOSITY NUMBER
2720 XNL=.15726*VISL*(1/(DENL*SURL^3))^.25
2730 'PIPE DIAMETER NUMBER
2740 XND=120.872*DIA*((DENL/SURL)^.5)
2750 'GAS VELOCITY NUMBER
2760 XNGV=1.938*VSG*((DENL/SURL)^.25)
2770 'LIQUID VELOCITY NUMBER
2780 XNLV=1.938*VSL*((DENL/SURL)^.25)
2790 GOSUB 3180
2800 IF AC=1 THEN 3140
2810 'CALCULATE INCREMENTAL PRESSURE
2820 DELPC=DPDL*DELL
2830 'CHECK FOR CONVERGENCE
2840 IF ABS(DELPE-DELPC) > .1 THEN 2930
2850 TL=TL+DELL
2860 PRESS=PRESS-DELPC
2870 '
2880 'CHECK IF TOTAL LENGTH EXCEEDED
2890 IF TL >= TD THEN 2950
2900 DELPE=DELPC
2910 TEM1=TEM2
2920 GOTO 2430
2930 DELPE=DELPC
2940 GOTO 2460
2950 PBOTT=PRESS
2960 IF PR < PB THEN 3050
2970 QB = (PR-PB)*PI
2980 QOMAX = QB+(PI*PB/1.8)
2990 IF QEST > QB THEN 3020
3000 PIPR = QEST/PI
3010 GOTO 3070
3020 PWF=FO*.125*PB*(-1+(81-80*((QEST-QB)/(QOMAX-QB)))^.5)+FW*(PR-QEST/PI)
3030 PIPR = PR - PWF
3040 GOTO 3070
3050 QOMAX = PI*PR/1.8
3060 PIPR=PR-(FO*.125*PR*(-1+(81-80*QEST/QOMAX)^.5)+FW*(PR-QEST/PI))
3070 PLOSS=PBOTT-PHEAD
3080 'TOTAL PRESSURE LOSS = PRESSURE LOSS IN FLOW LINE + LOSS IN TUBING
3090 '+ PRESSURE LOSS IN FORMATION
3100 PTLOSS=PDROP+PLOSS+PIPR
3110 PRR=PTLOSS+PSEP
3120 DIA=DIA*12
3130 RETURN
3140 SHOMAX = INT((435*RHO^.546*QEST/(PHEAD-14.7))^(.529))-2
3150 RETURN
3160 STOP
3170 '****************************************************************
3180 ' SUBROUTINE HAGBR
3190 '
3200 ' SUBROUTINE TO CALCULATE LIQUID HOLDUP AND PRESSURE GRADIENT
3210 ' USING THE HAGEDORN AND BROWN CORRELATION. THE ACCELERATION
3220 ' PRESSURE GRADIENT IS CALCULATED WITH THE DUNS AND ROS EQUATION.
3230 '
3240 IF HCOUNT > 0 THEN 3360
3250 HCOUNT = HCOUNT + 1
3260 OPEN "HAGBR" FOR INPUT AS #1
3270 QZ=0
3280 FOR QZ= 1 TO 12
3290 INPUT #1,XHL(QZ),YHL(QZ),XPSI(QZ),YPSI(QZ)
3300 NEXT
3310 QZ=0
3320 FOR QZ= 1 TO 10
3330 INPUT #1, XCNL(QZ),YCNL(QZ)
3340 NEXT
3350 CLOSE #1
3360 '
3370 ' CONVERT INCLINATION ANGLE TO RADIANS.
3380 AHA = ANG*3.1416/180
3390 '
3400 ' CALCULATE SUPERFICIAL VELOCITIES
3410 VSL = VM*HLNS
3420 VSG = VM-VSL
3430 '
3440 'CHECK FOR SINGLE PHASE GAS OR LIQUID FLOW
3450 IF HLNS < 1 THEN 3500
3460 HL = 1
3470 DENNS = DENL
3480 IREG = 1
3490 GOTO 4110
3500 IF HLNS > 0 THEN 3570
3510 HL = 0
3520 DENNS = DENG
3530 IREG = 2
3540 GOTO 4110
3550 '
3560 ' CHECK FOR BUBBLE FLOW
3570 XLB = 1.071-.2281*VM^2/DIA
3580 IF XLB < .13 THEN XLB = .13
3590 HGNS = 1-HLNS
3600 IF HGNS > XLB THEN 3630
3610 IREG = 3
3620 ' PREPARE HOLDUP CORRELATION ARRAYS FOR INTERPOLATION.
3630 FOR KHA= 1 TO 10
3640 XCNLL(KHA) = LOG(XCNL(KHA))
3650 YCNLL(KHA) = LOG(YCNL(KHA))
3660 NEXT
3670 FOR KHA= 1 TO 12
3680 XHLL(KHA) = LOG(.00001#*XHL(KHA))
3690 NEXT
3700 IREG = 4
3710 '
3720 ' CALCULATE LIQUID HOLDUP
3730 XXHA = LOG(XNL)
3740 FOR WW= 1 TO 10
3750 XF(WW)=XCNLL(WW)
3760 YF(WW)=YCNLL(WW)
3770 NEXT
3780 XARG = XXHA
3790 IDEG = 2
3800 NPTS = 10
3810 GOSUB 8390
3820 CNL = EXP(FLAGR)
3830 XXHA = LOG(XNLV*CNL/(XNGV^.5750001*XND)*(PAVG/14.7)^.1)
3840 FOR WW= 1 TO 12
3850 XF(WW)=XHLL(WW)
3860 YF(WW)=YHL(WW)
3870 NEXT
3880 XARG = XXHA
3890 IDEG = 2
3900 NPTS = 12
3910 GOSUB 8390
3920 HL = FLAGR
3930 XXHA = XNGV*XNL^.38/XND^2.14
3940 FOR WW= 1 TO 12
3950 XF(WW)=XPSI(WW)
3960 YF(WW)=YPSI(WW)
3970 NEXT
3980 XARG = XXHA
3990 IDEG = 2
4000 NPTS = 12
4010 GOSUB 8390
4020 PSI = FLAGR
4030 IF PSI < 1 THEN PSI=1
4040 HL = HL*PSI
4050 IF HL < 0 THEN HL=0
4060 IF HL > 1 THEN HL=1
4070 IF HL > HLNS THEN 4110
4080 IF KHL > 0 THEN HL=HLNS
4090 '
4100 ' CALCULATE NO-SLIP AND SLIP MIXTURE DENSITIES
4110 DENNS = DENL*HLNS+DENG*(1-HLNS)
4120 DENS = DENL*HL+DENG*(1-HL)
4130 '
4140 ' CALCULATE FRICTION FACTOR
4150 VISS = VISL^HL*GVIS^(1-HL)
4160 REY=1488*DENNS*VM*DIA/VISS
4170 GOSUB 8940
4180 '
4190 ' CALCULATE ELEVATION, FRICTION, ACCELERATION, AND TOTAL PRESSURE
4200 ' GRADIENTS.
4210 ELGR = DENS*SIN(AHA)/144
4220 FRGR = FF*DENNS^2*VM^2/(2*32.2*DIA*DENS*144)
4230 VSG = VM*(1-HLNS)
4240 EKK = DENS*VM*VSG/(32.2*PAVG*144)
4250 IF EKK > .95 THEN 4290
4260 DPDL = -(ELGR+FRGR)/(1-EKK)
4270 ACCGR = -DPDL*EKK
4280 RETURN
4290 AC=1
4300 RETURN
4310 STOP
4320 '****************************************************************
4330 'SUBROUTINE BEGBR
4340 '
4350 ' SUBROUTINE TO CALCULATE PRESSURE GRADIENT IN PSI/FT USING A
4360 ' MODIFIED BEGGS AND BRILL CORRELATION.]
4370 '
4380 ' CONVERT INCLINATION ANGLE TO RADIANS.
4390 ABE = AZO * 3.1416/180
4400 '
4410 'CALCULATE SUPERFICIAL VELOCITIES AND MIXTURE FROUDE NUMBER
4420 VSL = VM*HLNS
4430 VSG = VM-VSL
4440 XNFR = VM^2/(32.2*FD)
4450 '
4460 'CHECK FOR SINGLE PHASE FLOW
4470 IF HLNS > .99999 THEN IREG = 1
4480 IF HLNS < .00001# THEN IREG = 2
4490 IF IREG > 2 THEN 4540
4500 HL = HLNS
4510 GOTO 5390
4520 '
4530 ' DETERMINE FLOW REGIME USING A REVISED FLOW PATTERN MAP
4540 ITRAN =0
4550 XL1BE = 316*HLNS^.302
4560 XL2BE = .0009252/HLNS^2.46842
4570 XL3BE = .1/HLNS^1.45155
4580 XL4BE = .5/HLNS^6.738#
4590 XDD = XL1BE
4600 IF HLNS < .01 THEN 4660
4610 IF HLNS > .4 THEN XDD = XL4BE
4620 IF XNFR >= XL2BE AND XNFR < XL3BE THEN ITRAN = 1
4630 IF XNFR >= XL3BE AND XNFR < XDD THEN IREG = 4
4640 IF XNFR >= XDD THEN IREG = 3
4650 GOTO 4700
4660 IF XNFR >= XL1BE THEN IREG = 3
4670 '
4680 ' DETERMINE HORIZONTAL FLOW LIQUID HOLDUP AND C-FACTOR COEFFICIENTS
4690 ' FOR UPHILL FLOW
4700 IBE = IREG-2
4710 ON IBE GOTO 4740,4820,4900
4720 '
4730 'DISTRIBUTED FLOW
4740 HLO = 1.065*HLNS^.5824/XNFR^.0609
4750 DBE = 1
4760 EBE = 0
4770 FBE = 0
4780 GBE = 0
4790 GOTO 4970
4800 '
4810 'INTERMITTENT FLOW
4820 HLO = .845*HLNS^.5351/XNFR^.0173
4830 DBE = 2.96
4840 EBE = .305
4850 FBE =-.4473
4860 GBE = .0978#
4870 GOTO 4970
4880 '
4890 'SEGREGATED FLOW
4900 HLO = .98#*HLNS^.4846/XNFR^.0868#
4910 DBE = .011
4920 EBE = -3.768
4930 FBE = 3.539
4940 GBE = -1.614
4950 '
4960 ' RESTRICT MINIMUM VALUE OF HLO
4970 IF HLO < HLNS THEN HLO = HLNS
4980 '
4990 ' CHECK FOR HORIZONTAL FLOW
5000 IF ABE <> 0 THEN 5050
5010 HL = HLO
5020 GOTO 5280
5030 '
5040 ' FLOW IS INCLINED. CALCULATE C-FACTOR
5050 IF ABE > 0 THEN 5130
5060 ' DOWNHILL C-FACTOR COEFFICIENTS
5070 DBE = 4.7
5080 EBE = -.3692
5090 FBE = .1244
5100 GBE = -.5056
5110 '
5120 ' CALCULATE THE C-FACTOR
5130 CBE = (1-HLNS)*LOG(DBE*HLNS^EBE*XNLV^FBE*XNFR^GBE)
5140 IF CBE < 0 THEN CBE = 0
5150 '
5160 ' CALCULATE THE ANGLE CORRECTION FACTOR AND THE CORRECTED LIQUID
5170 ' HOLDUP FRACTION
5180 XXBE = SIN(1.8*ABE)
5190 FAC = 1+CBE*(XXBE-.333*XXBE^3)
5200 ' CHECK TO BE SURE THAT FAC IS NOT NEGATIVE
5210 IF FAC < 0 THEN FAC = 0
5220 HL = HLO * FAC
5230 IF HL > 1 THEN HL = 1
5240 ' CHECK TO BE SURE HOLDUP IS GREATER THAN 0
5250 IF HL < 0 THEN HL=.00001#
5260 '
5270 ' CHECK FOR TRANSITION FLOW
5280 IF ITRAN < 1 THEN 5390
5290 IF IREG < 5 THEN 5330
5300 HLS = HL
5310 IREG = 4
5320 GOTO 4700
5330 HLI = HL
5340 AA = (XL3BE-XNFR)/(XL3BE-XL2BE)
5350 BBE =1-AA
5360 HL = HLS*AA+HLI*BBE
5370 IREG = 6
5380 ' CALCULATE MIXTURE FLUID PROPERTIES
5390 DENNS = DENL*HLNS+DENG*(1-HLNS)
5400 DENS = DENL*HL+DENG*(1-HL)
5410 VISNS = VISL*HLNS+GVIS*(1-HLNS)
5420 '
5430 ' CALCULATE MOODY DIAGRAM FRICTION FACTOR
5440 REY = 1488*DENNS*VM*FD/VISNS
5450 GOSUB 8940
5460 IF IREG <=2 THEN 5570
5470 '
5480 ' CALCULATE TWO PHASE FRICTION FACTOR
5490 YBE = HLNS/(HL^2)
5500 XBE = LOG(YBE)
5510 SBE = XBE/(-.0523+3.182*XBE-.8724999*XBE^2+.01853*XBE^4)
5520 IF YBE > 1 AND YBE < 1.2 THEN SBE = LOG(2.2*YBE-1.2)
5530 FF = FF * EXP(SBE)
5540 '
5550 ' CALCULATE FRICTION, ELEVATION, ACCELERATION, AND TOTAL PRESSURE
5560 ' GRADIENTS
5570 FRGR = FF*DENNS*VM^2/(2*32.2*FD*144)
5580 ELGR = DENS*SIN(ABE)/144
5590 EKK = DENS*VM*VSG/(32.2*PAVG*144)
5600 IF EKK >.95 THEN 5640
5610 DPDL = -(FRGR+ELGR)/(1-EKK)
5620 ACCGR = -EKK*DPDL
5630 RETURN
5640 AC=1
5650 RETURN
5660 STOP
5670 '******************************************************************
5680 'SUBROUTINE LIQVIS
5690 '
5700 'CALCULATE DEAD OIL VISCOSITY AND LIVE OIL VISCOSITY BELOW
5710 'THE BUBBLE POINT PRESSURE USING THE BEGGS AND ROBINSON CORRELATIONS.
5720 'CALCULATE THE DEAD OIL VISCOSITY, CP
5730 ZLI=3.0324-.02023*API
5740 YLI=10^ZLI
5750 XLI=YLI/TAVG^1.163
5760 VISD=10^XLI-1
5770 '
5780 'CALCULATE LIVE OIL VISCOSITY, CP
5790 ALI=10.715/(RS+100)^.515#
5800 BLI=5.44/(RS+150)^.338
5810 VISO=ALI*VISD^BLI
5820 IF PAVG <= PB THEN 5890
5830 '
5840 'CALCULATE VISCOSITY OF OIL ABOVE THE BUBBLE POINT PRESSURE, CP
5850 VM=2.6*PAVG^1.187*10^(-.039*PAVG*.001-5)
5860 VISO=VISO*(PAVG/PB)^VM
5870 '
5880 'CALCULATE VISCOSITY OF WATER, CP
5890 VISW=EXP(1.003-.01479*TAVG+1.982E-05*TAVG^2)
5900 RETURN
5910 STOP
5920 '******************************************************************
5930 'SUBROUTINE SURFT
5940 '
5950 'CALCULATE GAS-OIL SURFACE TENSION USING THE BAKER AND
5960 'SWERDLOFF CORRELATION.
5970 IF SCOUNT > 0 THEN 6090
5980 SCOUNT = SCOUNT + 1
5990 OPEN "SURFT" FOR INPUT AS #2
6000 QZ=0
6010 FOR QZ= 1 TO 8
6020 INPUT #2, PERC(QZ), PI(QZ)
6030 NEXT
6040 QZ=0
6050 FOR QZ= 1 TO 10
6060 INPUT #2, STVA(QZ), STV74(QZ), STV280(QZ)
6070 NEXT
6080 CLOSE #2
6090 IF FO = 0 THEN 6280
6100 'CALCULATE DEAD OIL SURFACE TENSION, DYNES/CM
6110 SUR68=39-.2571*API
6120 SUR100=37.5-.2571*API
6130 SUR1=SUR68-(TAVG-68)*(SUR68-SUR100)/32
6140 IF TAVG <= 68 THEN SUR1 = SUR68
6150 IF TAVG >= 100 THEN SUR1 = SUR100
6160 FOR WW= 1 TO 8
6170 XF(WW)=PI(WW)
6180 YF(WW)=PERC(WW)
6190 NEXT
6200 XARG = PAVG
6210 IDEG = 2
6220 NPTS = 8
6230 GOSUB 8390
6240 SUR2=FLAGR
6250 '
6260 'CALCULATE GAS-OIL SURFACE TENSION AT A P & T, DYNES/CM
6270 SURO=SUR1*SUR2/100
6280 IF FW=0 THEN 6540
6290 'CALCULATE GAS WATER SURFACE TENSIONS AT 74 AND 280 DEG-F
6300 'DYNES/CM
6310 FOR WW= 1 TO 10
6320 XF(WW)=STVA(WW)
6330 YF(WW)=STV74(WW)
6340 NEXT
6350 XARG = PAVG
6360 IDEG = 2
6370 NPTS = 10
6380 GOSUB 8390
6390 STW74=FLAGR
6400 FOR WW= 1 TO 10
6410 XF(WW)=STVA(WW)
6420 YF(WW)=STV280(WW)
6430 NEXT
6440 XARG = PAVG
6450 IDEG = 2
6460 NPTS = 10
6470 GOSUB 8390
6480 STW280=FLAGR
6490 SURW=(STW74-STW280)/(280-74)*(TAVG-74)*(-1)+STW74
6500 IF TAVG<74 THEN SURW = STW74
6510 IF TAVG>280 THEN SURW = STW280
6520 '
6530 'CALCULATE VOLUME AVERAGED GAS LIQUID SURFACE TENSION, DYNES/CM
6540 SURL=SURO*FO+SURW*FW
6550 RETURN
6560 STOP
6570 '******************************************************************
6580 'SUBROUTINE CALRS
6590 '
6600 'CALCULATE SOLUTION GAS-OIL RATIO (SCF/STBO), SOLUTION GAS-WATER
6610 'RATIO (SCF/STBW), SPECIFIC GRAVITY OF DISSOLVED AND FREE GAS,
6620 'AND BUBBLE POINT PRESSURE (PSIA).
6630 '
6640 IF CCOUNT > 0 THEN 6960
6650 CCOUNT = CCOUNT + 1
6660 OPEN "CALRS" FOR INPUT AS #3
6670 QZ=0
6680 FOR QZ = 1 TO 10
6690 INPUT #3, EMW(QZ), APIEMW(QZ)
6700 NEXT
6710 '
6720 'ENTER BUBBLE POINT PRESSURE VS GAS MOLE FRACTION DATA.
6730 QZ=0
6740 FOR QZ = 1 TO 17
6750 INPUT #3, BPPF(QZ), GMF(QZ)
6760 NEXT
6770 '
6780 'ENTER DATA ARRAYS FOR INTERPOLATION. SOLUTION GAS-WATER RATIO VS
6790 'PRESSURE AND TEMPERATURE
6800 QZ=0
6810 FOR QZ = 1 TO 4
6820 INPUT #3, TRSW(QZ)
6830 NEXT
6840 QZ=0
6850 FOR QZ = 1 TO 5
6860 INPUT #3, PRSW(QZ)
6870 NEXT
6880 QZ=0
6890 ZQ=0
6900 FOR QZ = 1 TO 4
6910 FOR ZQ = 1 TO 5
6920 INPUT #3, RSWS(QZ,ZQ)
6930 NEXT
6940 NEXT
6950 CLOSE #3
6960 IF SGPG < .56 THEN SGPG = .7
6970 SG100=SGPG
6980 IF GOR <= 0 THEN 7720
6990 TEMR = TAVG+460
7000 SGO=141.5/(131.5+API)
7010 '****STANDING CORRELATION****
7020 X1CA=.0125*API-9.099999E-04*TAVG
7030 X2CA=10^X1CA
7040 '
7050 'CALCULATE SOLUTION GAS-OIL RATIO, SCF/STBO
7060 IF PAVG < 0 THEN 7790
7070 RS=SGPG*(PAVG*X2CA/18)^1.205
7080 '
7090 'DETERMINE BUBBLE POINT PRESSURE ASSUMING NEGLIGIBLE GAS IN
7100 'SOLUTION IN WATER, PSIA
7110 PB=(18/X2CA)*(GOR/SGPG)^.83
7120 GOTO 7130
7130 IF RS < 0 THEN RS=0
7140 IF RS<GOR THEN 7250
7150 RS=GOR
7160 '
7170 'IF ALL GAS IS IN SOLUTION, SET THE FREE AND DISSOLVED
7180 'GRAVITIES EQUAL TO THE PRODUCING GAS GRAVITY
7190 SGFG=SGPG
7200 SGDG=SGPG
7210 RSW=0
7220 GOTO 7690
7230 '
7240 'CALCULATE SOLUTION GAS-WATER RATIO, SCF/STBW.
7250 FOR II = 1 TO 5
7260 FOR J = 1 TO 4
7270 X(J)=RSWS(J,II)
7280 NEXT
7290 FOR WW= 1 TO 4
7300 YF(WW)=X(WW)
7310 XF(WW)=TRSW(WW)
7320 NEXT
7330 XARG = TAVG
7340 IDEG = 2
7350 NPTS = 4
7360 GOSUB 8390
7370 Y(II)=FLAGR
7380 NEXT
7390 FOR WW= 1 TO 5
7400 XF(WW)=PRSW(WW)
7410 YF(WW)=Y(WW)
7420 NEXT
7430 XARG = PAVG
7440 IDEG = 2
7450 NPTS = 5
7460 GOSUB 8390
7470 RSW=FLAGR
7480 QG=QO*GOR
7490 QGS=QO*RS+QW*RSW
7500 IF QG >= QGS THEN 7550
7510 RSW=(QG-QO*RS)/QW
7520 '
7530 'DETERMINE DISSOLVED GAS GRAVITY AND RESTRICT TO VALUES GREATER THAN
7540 '0.56 (METHANE) AND THE PRODUCING GAS GRAVITY.
7550 SGDG=(API+12.5)/50-3.5715E-06*API*RS
7560 IF SGDG < .56 THEN SGDG=.56
7570 IF SGDG < SGPG THEN SGDG=SGPG
7580 '
7590 'PERFORM MASS BALANCE ON GAS TO CALCULATE FREE GAS GRAVITY.
7600 WTGAST=QO*GOR*.0764*SGPG
7610 WTGASD=.0764*SGDG*(RS*QO+RSW*QW)
7620 WTGASF=WTGAST-WTGASD
7630 SGFG=WTGASF/(.0764*(QO*(GOR-RS)-QW*RSW))
7640 '
7650 'RESTRICT FREE GAS GRAVITY TO VALUES BETWEEN 0.56 (METHANE)
7660 'AND THE PRODUCING GAS GRAVITY.
7670 IF SGFG < .56 THEN SGFG=.56
7680 IF SGFG > SGPG THEN SGFG=SGPG
7690 RETURN
7700 '
7710 'SINGLE PHASE LIQUID
7720 RS=0
7730 RSW=0
7740 SGDG=SGPG
7750 SGFG=SGPG
7760 SG100=SGPG
7770 PB=14.7
7780 RETURN
7790 AC=1
7800 RETURN
7810 STOP
7820 '******************************************************************
7830 'SUBROUTINE CALFVF
7840 '
7850 'VAZQUEZ AND BEGGS CORRELATION IS USED BELOW THE BUBBLE POINT PRESSURE.
7860 '
7870 SGO=141.5/(131.5+API)
7880 DCF=(TAVG-60)*API/SG100
7890 IF API<= 30 THEN 7930
7900 ACF=.11
7910 BCF=.1337
7920 GOTO 7950
7930 ACF=.1751
7940 BCF=-1.8106
7950 IF PAVG < PB THEN 8030
7960 'CALCULATE OIL FORMATION VOLUME FACTOR AT THE BUBBLE POINT
7970 'PRESSURE, BBL/STBO.
7980 BOB=1+.000467*GOR+ACF*DCF*.0001+BCF*GOR*DCF*1E-08
7990 GOTO 8070
8000 '
8010 'CALCULATE OIL FORMATION VOLUME FACTOR BELOW THE BUBBLE POINT
8020 'PRESSURE, BBL/STBO.
8030 BO=1+.000467*RS+ACF*DCF*.0001+BCF*RS*DCF*1E-08
8040 GOTO 8130
8050 '
8060 'CALCULATE OIL COMPRESSIBILITY, PSI^-1
8070 CO=(-1433+5*RS+17.2*TAVG-1180*SG100+12.61*API)/(PAVG*1000*100)
8080 'CALCULATE OIL FORMATION VOLUME FACTOR ABOVE THE BUBBLE POINT
8090 'PRESSURE, BBL/STBO.
8100 BO=BOB*EXP(CO*(PB-PAVG))
8110 '
8120 'RESTRICT OIL FORMATION VOLUME FACTOR TO VALUES ABOVE 1
8130 IF BO<1 THEN BO=1
8140 '
8150 'CALCULATE WATER FORMATION VOLUME FACTOR, BBB/STBW
8160 BW=1+.00012*(TAVG-60)+.000001*(TAVG-60)^2-3.33E-06*PAVG
8170 RETURN
8180 STOP
8190 '******************************************************************
8200 'SUBROUTINE GASVIS
8210 '
8220 'CALCULATE VISCOSITY OF HYDROCARBON GASES USING THE LEE CORRELATION.
8230 '
8240 TABS=TAVG+460
8250 WGA=SGFG*29
8260 AK=(9.4# +.02*WGA)*(TABS^1.5)/(209+19*WGA+TABS)
8270 XGA=3.5+(986/TABS)+.01*WGA
8280 YGA=2.4-.2*XGA
8290 '
8300 'CALCULATE GAS DENSITY, GM/CC
8310 GOSUB 9380
8320 RHOG=PAVG*WGA/(10.72*Z*TABS*62.4)
8330 '
8340 'CALCULATE GAS VISCOSITY, CP.
8350 GVIS=AK*EXP(XGA*RHOG^YGA)/10000
8360 RETURN
8370 STOP
8380 '******************************************************************
8390 'FUNCTION FLAGR
8400 '
8410 NFL=INT(ABS(NPTS))
8420 N1FL=IDEG+1
8430 LFL=1
8440 IF XF(2) > XF(1) THEN 8460
8450 LFL=2
8460 ON LFL GOTO 8470,8500
8470 IF XARG <= XF(1) THEN 8530
8480 IF XARG >= XF(NFL) THEN 8550
8490 GOTO 8590
8500 IF XARG >= XF(1) THEN 8530
8510 IF XARG <= XF(NFL) THEN 8550
8520 GOTO 8590
8530 FLAGR=YF(1)
8540 RETURN
8550 FLAGR=YF(NFL)
8560 RETURN
8570 '
8580 'DETERMINE VALUE OF MAX
8590 ON LFL GOTO 8620,8670
8600 '
8610 'DATA ARE IN ORDER OF INCREASING VALUES OF X.
8620 FOR MAX = N1FL TO NFL
8630 IF XARG < XF(MAX) THEN 8720
8640 NEXT
8650 '
8660 'DATA ARE IN ORDER OF DECREASING VALUES OF X.
8670 FOR MAX = N1FL TO NFL
8680 IF XARG > XF(MAX) THEN 8720
8690 NEXT
8700 '
8710 'COMPUTE VALUE OF FACTOR.
8720 MIN=MAX-IDEG
8730 FACTOR=1
8740 FOR I = MIN TO MAX
8750 IF XARG <> XF(I) THEN 8780
8760 FLAGR = YF(I)
8770 RETURN
8780 FACTOR=FACTOR*(XARG-XF(I))
8790 NEXT
8800 '
8810 'EVALUATE INTERPOLATING POLYNOMIAL.
8820 YEST=0
8830 FOR I = MIN TO MAX
8840 TERM=YF(I)*FACTOR/(XARG-XF(I))
8850 FOR J = MIN TO MAX
8860 IF I <> J THEN TERM=TERM/(XF(I)-XF(J))
8870 NEXT
8880 YEST=YEST + TERM
8890 NEXT
8900 FLAGR=YEST
8910 RETURN
8920 STOP
8930 '******************************************************************
8940 'SUBROUTINE FRFACT
8950 '
8960 'CALCULATE THE MOODY FRICTION FACTOR USING EITHER THE LAMINAR
8970 'FLOW OR THE COLEBROOK EQUATIONS.
8980 '
8990 IF REY > 2000 THEN 9030
9000 'LAMINAR FLOW FRICTION FACTOR
9010 FF=64/REY
9020 GOTO 9130
9030 FGI=.0056+.5/REY^.32
9040 IFR=1
9050 DEN=1.14-2*LOG(ED+9.34/(REY*FGI^.5))/LOG(10)
9060 FF=(1/DEN)^2
9070 DIFF=ABS(FGI-FF)
9080 IF DIFF <= .0001 THEN 9130
9090 FGI=(FGI+FF)/2
9100 IFR=IFR+1
9110 IF IFR < 10 THEN 9050
9120 FF=FGI
9130 RETURN
9140 STOP
9150 '*****************************************************************
9160 'SUBROUTINE VELOCITY
9170 '
9180 GOSUB 6580
9190 GOSUB 7830
9200 GOSUB 9380
9210 '
9220 'CALCULATE IN SITU VOLUME FLOW RATES OF OIL, WATER, GAS & LIQUID.
9230 QOPT=QO*BO*5.614#/86400#
9240 QWPT=QW*BW*5.614#/86400#
9250 QGPT=(QO*(GOR-RS)-QW*RSW)*Z/100*(TAVG+460)/520*14.7/(864*PAVG)
9260 QLPT=QOPT+QWPT
9270 '
9280 'CALCULATE SUPERFICIAL LIQUID, GAS, AND MIXTURE VELOCITIES.
9290 VSL=QLPT/AP
9300 VSG=QGPT/AP
9310 VM=VSL+VSG
9320 '
9330 'CALCULATE IN SITU FRACTION OF OIL IN LIQUID PHASE.
9340 FO=QOPT/QLPT
9350 RETURN
9360 STOP
9370 '*****************************************************************
9380 'SUBROUTINE ZFACHY
9390 '
9400 'CALCULATE GAS COMPRESSIBILITY FACTOR USING THE HALL AND
9410 'YARBOROUGH CORRELATION FOR CURVE FITTING THE STANDING-
9420 'KATZ REDUCED PRESSURE-REDUCED TEMPERATURE Z-FACTOR CHART.
9430 '
9440 'CALCULATE CRITICAL AND REDUCED TEMPERATURE AND PRESSURE.
9450 TC=169+314*SGFG
9460 PC=708.75-57.5*SGFG
9470 TR=(TAVG+460)/TC
9480 PRZF=PAVG/PC
9490 '
9500 'IF REDUCED TEMPERATURE IS LESS THAN 1.01, CALCULATE A Z-FACTOR
9510 'FOR A REDUCED TEMPERATURE VALUE OF 1.0.
9520 IF TR > 1.01 THEN 9550
9530 RT=1
9540 GOTO 9580
9550 RT=1/TR
9560 '
9570 'CALCULATE TEMPERATURE DEPENDENT TERMS
9580 AZF=.06125*RT*EXP(-1.2*(1-RT)^2)
9590 BZF=RT*(14.76-9.76*RT+4.58*RT^2)
9600 CZF=RT*(90.7-242.2*RT+42.4*RT^2)
9610 DZF=2.18+2.82*RT
9620 '
9630 'CALCULATE REDUCED DENSITY, Y, USING THE NEWTON-RAPHSON METHOD.
9640 YZF=.001
9650 FOR J = 1 TO 25
9660 IF YZF > 1 THEN YZF=.6
9670 FZF=-AZF*PRZF+(YZF+YZF^2+YZF^3-YZF^4)/(1-YZF)^3-BZF*YZF^2+CZF*YZF^DZF
9680 IF ABS(FZF) <=.0001 THEN 9790
9690 '
9700 'IF CONVERGENCE IS NOT OBTAINED IN 25 ITERATIONS, SET Z=1 AND
9710 'RETURN.
9720 IF J < 25 THEN 9750
9730 Z=1
9740 RETURN
9750 DFDY=(1+4*YZF+4*YZF^2-4*YZF^3+4*YZF^4)/(1-YZF)^4-2*BZF*YZF+DZF*CZF*YZF^(DZF-1)
9760 YZF=YZF-FZF/DFDY
9770 NEXT
9780 'CALCULATE Z-FACTOR
9790 Z=AZF*PRZF/YZF
9800 RETURN
9810 STOP