home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hall of Fame
/
HallofFameCDROM.cdr
/
oilfield
/
spe-10.lzh
/
PRESSURE.BAS
< prev
Wrap
BASIC Source File
|
1985-05-04
|
59KB
|
1,556 lines
10 ' ********************************************************************
20 ' ********************************************************************
30 ' ** **
40 ' ** Program: PRESSURE.BAS **
50 ' ** Written by Tim Franklin **
60 ' ** **
70 ' ** This program calculates static, or flowing, surface **
80 ' ** tubing, or bottom-hole pressure for a gas well given **
90 ' ** well and fluid data. **
100 ' ** **
110 ' ********************************************************************
120 ' ********************************************************************
130 '
140 '
150 CLEAR :KEY OFF : COLOR 7,0 : CLS
160 KEY 1,"":KEY 2,"":KEY 3,"":KEY 4,"":KEY 5,"":KEY 6,""
170 KEY 7,"":KEY 8,"":KEY 9,"":KEY 10,""
180 DEFINT I-N : DEFDBL A-H, O-Z
190 OPTION BASE 1
200 DIM PRESSURE(20)
210 CLS:PRINT
220 PRINT SPC(20);"GAS WELL PRESSURE DETERMINATION":PRINT :PRINT :PRINT
230 PRINT " Pressures are calculated using Cullender and Smith method."
240 PRINT " Gas compressibility factors are calculated using Gopal method."
250 PRINT :PRINT
260 PRINT SPC(22);"Select Calculation":PRINT
270 PRINT SPC(16);" 1. Static Bottom-Hole Pressure"
280 PRINT SPC(16);" 2. Flowing Bottom-Hole Pressure"
290 PRINT SPC(16);" 3. Static Tubing Pressure"
300 PRINT SPC(16);" 4. Flowing Tubing Pressure":PRINT
310 PRINT SPC(16);" ENTER CHOICE ";:INPUT "", IRUN
320 IF IRUN <> 1 GOTO 330 ELSE 420
330 IF IRUN <> 2 GOTO 340 ELSE 2940
340 IF IRUN <> 3 GOTO 350 ELSE 5490
350 IF IRUN <> 4 GOTO 360 ELSE 7950
360 BEEP:BEEP:CLS:GOTO 210
370 '
380 '
390 ' *********************************************************************
400 ' *********************************************************************
410 '
420 ' PRES-WS.BAS
430 '
440 '
450 ' This section calculates static bottom-hole pressure
460 ' from surface pressure and temperature, bottom-hole
470 ' temperature, well depth, and fluid analysis or gas
480 ' gravity.
490 '
500 '
510 IRUN = 1 : IKOUNT = 0
520 '
530 CLS ':PRINT SPC(15);"STATIC BOTTOM-HOLE PRESSURE DETERMINATION":PRINT
540 COLOR 0,7
550 LOCATE 25,15 : PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
560 LOCATE 2,1 : COLOR 7,0
570 PRINT : PRINT "Input Requirements:"
580 PRINT " Bottom-Hole Temperature"
590 PRINT " Surface Temperature"
600 PRINT " Static Surface Pressure (WHSIP)"
610 PRINT " Well Depth (mean of perfs)"
620 PRINT " Fluid Data (analysis or gravity)"
630 PRINT : PRINT
640 INPUT "Bottom-Hole Temperature, degF = ",TEMP.WS
650 TEMP.WS = TEMP.WS + 459.67# : PRINT
660 INPUT "Surface Temp, degF = ",TEMP.TS
670 TEMP.TS = TEMP.TS + 459.67# : PRINT
680 INPUT "Static Surface Pressure, psi = ",PRES.TS : PRINT
690 INPUT "Well Depth, ft = ",DEPTH : PRINT
700 IF IIIRUN <> 10 THEN 770
710 INPUT "Does fluid data change ? ( 1 = yes, 2 = no ) ", ICHECK
720 IF ICHECK = 1 THEN 750
730 IF ICHECK = 2 THEN 960
740 BEEP : GOTO 710
750 IF INGAS = 1 THEN 770
760 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
770 PRINT "Input Fluid Data Type:" : PRINT
780 PRINT SPC(23);"1 = Gas Gravity"
790 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
800 PRINT SPC(26);" Enter 1 or 2"
810 PRINT SPC(29);:INPUT " ",INGAS
820 IF INGAS <> 1 THEN 850
830 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from gas gravity
840 GOTO 960
850 IF INGAS <> 2 THEN 900
860 GOSUB 13090 ' **** gas-in, fluid analysis input
870 ' return from gas-in
880 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from fluid analysis
890 GOTO 960
900 CLS : BEEP
910 COLOR 0,7 : LOCATE 25,15
920 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
930 COLOR 7,0 : LOCATE 1,1 : GOTO 770
940 '
950 '
960 ' return from Ppc-Tpc subroutine with gas gravity, pseudocritical
970 ' pressure, and pseudocritical temperature
980 '
990 PRINT
1000 PRINT "CRITICAL TEMP = ";
1010 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT " degR"
1020 PRINT "CRITICAL PRES = ";
1030 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT " psi"
1040 PRINT "GAS GRAVITY = ";
1050 PRINT USING "#####.####";GAS.GRAV
1060 IF INGAS = 1 THEN 1090
1070 PRINT "APPARENT MOLECULAR WEIGHT = ";
1080 PRINT USING "#####.####";APPARENT.MOL.WT
1090 PRINT
1100 '
1110 TEMP.MS = (TEMP.TS + TEMP.WS) / 2#
1120 '
1130 WELL.FACTOR = .01875# * GAS.GRAV * DEPTH
1140 '
1150 '
1160 ' calculate Pms, static midpoint pressure
1170 '
1180 PSEUDO.REDUCED.TEMP = TEMP.TS / PSEUDO.CRIT.TEMP
1190 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
1200 '
1210 ' get Zts
1220 GOSUB 12250 ' **** calculate Z in z-gopal
1230 ' calculate Its
1240 TEMP = TEMP.TS : PRES = PRES.TS
1250 GOSUB 10560 ' **** calculate In, static
1260 XITS = XI
1270 '
1280 ' calculate Pms
1290 PRES.N = PRES.TS
1300 GOSUB 10610 ' **** calculate Pn
1310 PRES.MS = PRESSURE(IKOUNT)
1320 '
1330 ' find new Zms
1340 PSEUDO.REDUCED.TEMP = TEMP.MS / PSEUDO.CRIT.TEMP
1350 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
1360 GOSUB 12250 ' **** calculate Z in z-gopal
1370 '
1380 ' calculate Ims
1390 TEMP = TEMP.MS : PRES = PRES.MS
1400 GOSUB 10560 ' **** calculate In, static
1410 '
1420 ' calculate new Pms, reiterate
1430 PRES.N = PRES.TS
1440 GOSUB 10610 ' **** calculate Pn
1450 PRES.MS = PRESSURE(IKOUNT)
1460 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 1330
1470 '
1480 '
1490 ' calculate Pws, static bottom-hole pressure
1500 '
1510 IKOUNT = 0
1520 '
1530 ' find Zms for last Ims
1540 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
1550 GOSUB 12250 ' **** calculate Z in z-gopal
1560 ZMS = Z ' Z-factor well midpoint conditions
1570 '
1580 ' calculate Ims, this is its last value
1590 PRES = PRES.MS : TEMP = TEMP.MS
1600 GOSUB 10560 ' **** calculate In, static
1610 XIMS = XI
1620 '
1630 ' assume Iws = Ims, calculate Pws
1640 PRES.N = PRES.MS
1650 GOSUB 10610 ' **** calculate Pn
1660 PRES.WS = PRESSURE(IKOUNT)
1670 '
1680 ' find Zws
1690 PSEUDO.REDUCED.TEMP = TEMP.WS / PSEUDO.CRIT.TEMP
1700 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
1710 GOSUB 12250 ' **** calculate Z in z-gopal
1720 '
1730 ' calculate Iws
1740 PRES = PRES.WS : TEMP = TEMP.WS
1750 GOSUB 10560 ' **** calculate In, static
1760 '
1770 ' calculate Pws, reiterate
1780 PRES.N = PRES.MS
1790 GOSUB 10610 ' **** calculate Pn
1800 PRES.WS = PRESSURE(IKOUNT)
1810 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 1680
1820 '
1830 '
1840 ' last calculated Iws
1850 ' find Zws
1860 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
1870 GOSUB 12250 ' **** calculate Z in z-gopal
1880 ZWS = Z ' Z-factor, bottom-hole conditions
1890 '
1900 ' calculate Its
1910 PRES = PRES.WS : TEMP = TEMP.WS
1920 GOSUB 10560 ' **** calculate In, static
1930 XIWS = XI
1940 '
1950 '
1960 ' apply Simpson's Rule
1970 '
1980 PRES.1 = (6# * WELL.FACTOR)
1990 PRES.2 = XITS + 4# * XIMS + XIWS
2000 PRES.WS = PRES.1 / PRES.2 + PRES.TS
2010 '
2020 '
2030 ' calculate formation volume factor
2040 '
2050 B.GAS = 35.348 * PRES.WS / ( ZWS * TEMP.WS )
2060 '
2070 '
2080 PRINT :PRINT "Formation Volume Factor = ";
2090 PRINT USING "####.##";B.GAS;:PRINT " SCF/cu.ft."
2100 PRINT :PRINT
2110 PRINT : PRINT "STATIC BOTTOM-HOLE PRESSURE = ";
2120 PRINT USING "#######.##";PRES.WS;: PRINT " psi":PRINT
2130 '
2140 '
2150 PRINT "press any key to continue"
2160 A$ = INKEY$ : IF A$ = "" THEN 2160
2170 CLS
2180 COLOR 0,7 : LOCATE 25,15
2190 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
2200 COLOR 7,0 : LOCATE 1,1
2210 PRINT "Would you like:" : PRINT
2220 PRINT " 1. hard copy output of data"
2230 PRINT " 2. calculate another Pws "
2240 PRINT " 3. calculate a Pwf, Pts, or Ptf "
2250 PRINT " 4. end session" : PRINT
2260 INPUT "Enter choice ", ICHOICE : PRINT
2270 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 2170
2280 ON ICHOICE GOTO 2290, 2830, 40, 2840
2290 BEEP : PRINT "READY PRINTER, press any key to continue"
2300 B$ = INKEY$ : IF B$ = "" THEN 2300
2310 LPRINT CHR$(18)
2320 FOR I = 1 TO 5 : LPRINT : NEXT I
2330 LPRINT SPC(20);"STATIC BOTTOM-HOLE PRESSURE DETERMINATION"
2340 LPRINT:PRINT :PRINT :PRINT
2350 PRINT "Enter well name or note (one line only)"
2360 INPUT NOTE$ : LPRINT NOTE$
2370 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
2380 LPRINT USING "\ \";"Surface Temperature";
2390 LPRINT USING "######.#";TEMP.TS - 459.67 ;
2400 LPRINT " deg.F"
2410 LPRINT USING "\ \";"Bottom-Hole Temperature";
2420 LPRINT USING "######.#";TEMP.WS - 459.67 ;
2430 LPRINT " deg.F"
2440 LPRINT USING "\ \";"Shut-in Well Head Pressure";
2450 LPRINT USING "######.#";PRES.TS;:LPRINT " psi"
2460 LPRINT USING "\ \";"Well Depth";
2470 LPRINT USING "######.#";DEPTH;:LPRINT " ft."
2480 IF INGAS = 1 THEN 2610
2490 LPRINT : LPRINT "Fluid Analysis:"
2500 FOR J = 1 TO NUMBER.COMPOUNDS
2510 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
2520 LPRINT USING "\ \";COMPOUND.NAME$(J);
2530 LPRINT " mole % = ";
2540 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
2550 NEXT J : LPRINT
2560 LPRINT "Apparent Molecular Weight = ";
2570 LPRINT USING "####.####";APPARENT.MOL.WT
2580 LPRINT "Gas Gravity = ";
2590 LPRINT USING "##.####";GAS.GRAV
2600 GOTO 2640
2610 LPRINT USING "\ \";"Gas Gravity";
2620 LPRINT USING "##.####";GAS.GRAV
2630 LPRINT
2640 LPRINT "Critical Temp = ";
2650 LPRINT USING "####.###";PSEUDO.CRIT.TEMP;:LPRINT " degR"
2660 LPRINT "Critical Pres = ";
2670 LPRINT USING "####.###";PSEUDO.CRIT.PRES;:LPRINT " psi"
2680 LPRINT : LPRINT : LPRINT
2690 LPRINT " Zws = ";
2700 LPRINT USING "##.####";ZWS;
2710 LPRINT " (reservoir conditions)"
2720 LPRINT " Zms = ";
2730 LPRINT USING "##.####";ZMS;
2740 LPRINT " (well midpoint conditions)"
2750 LPRINT
2760 LPRINT " Formation Volume Factor = ";
2770 LPRINT USING "####.##";B.GAS;:LPRINT " SCF/cu.ft."
2780 LPRINT :LPRINT
2790 LPRINT "STATIC BOTTOM-HOLE PRESSURE = ";
2800 LPRINT USING "######.##";PRES.WS;:LPRINT " psi"
2810 LPRINT CHR$(12)
2820 PRINT : PRINT "print complete " : PRINT : GOTO 2210
2830 ERASE PRESSURE : IIIRUN = 10 : GOTO 420
2840 CLS : LOCATE 11,1,0
2850 PRINT SPC(23)"Remove diskette. Turn machine off."
2860 PRINT : PRINT SPC(33) ; "Have a nice day."
2870 PRINT :PRINT :PRINT :PRINT
2880 '
2890 '
2900 END
2910 ' ***********************************************************************
2920 ' ***********************************************************************
2930 '
2940 ' PRES-WF.BAS
2950 '
2960 '
2970 ' This section calculates flowing bottom-hole pressure
2980 ' from flowing tubing pressure and temperature, bottom-
2990 ' hole temperature, well depth, tubing ID, flow rate, and
3000 ' fluid analysis or gravity.
3010 '
3020 '
3030 IRUN = 2 : IKOUNT = 0
3040 '
3050 CLS ':PRINT SPC(15);"FLOWING BOTTOM-HOLE PRESSURE DETERMINATION"
3060 COLOR 0,7 : LOCATE 25,15
3070 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
3080 COLOR 7,0 : LOCATE 2,1 : PRINT : PRINT
3090 PRINT "Input Requirements:"
3100 PRINT " Bottom-Hole Temperature"
3110 PRINT " Flowing Tubing Temperature"
3120 PRINT " Flowing Tubing Pressure "
3130 PRINT " Well Depth (mean of perfs)"
3140 PRINT " Tubing ID"
3150 PRINT " Flow Rate"
3160 PRINT " Fluid Data (analysis or gravity)"
3170 PRINT : PRINT
3180 INPUT "Bottom-Hole Temp, degF = ",TEMP.WF
3190 TEMP.WF = TEMP.WF + 459.67# : PRINT
3200 INPUT "Flowing Tubing Temp, degF = ",TEMP.TF
3210 TEMP.TF = TEMP.TF + 459.67# : PRINT
3220 INPUT "Flowing Tubing Pressure, psi = ",PRES.TF : PRINT
3230 INPUT "Well Depth, ft = ",DEPTH : PRINT
3240 INPUT "Tubing ID, inches = ",PIPE.ID : PRINT
3250 INPUT "Flow Rate, MMCF/D = ",Q : PRINT : PRINT
3260 IF IIIRUN <> 10 THEN 3340
3270 IF INGAS = 1 THEN 3340
3280 INPUT "Does fluid data change ? ( 1 = yes, 2 = no ) ",ICHECK
3290 IF ICHECK = 1 THEN 3320
3300 IF ICHECK = 2 THEN 3530
3310 BEEP : GOTO 3280
3320 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
3330 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
3340 PRINT "Input Fluid Data Type:" : PRINT
3350 PRINT SPC(23);"1 = Gas Gravity"
3360 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
3370 PRINT SPC(26);" Enter 1 or 2"
3380 PRINT SPC(29);:INPUT " ",INGAS
3390 IF INGAS <> 1 THEN 3420
3400 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from gas gravity
3410 GOTO 3530
3420 IF INGAS <> 2 THEN
3430 GOSUB 13090 ' **** gas-in, fluid analysis input
3440 ' return from gas-in
3450 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from fluid analysis
3460 GOTO 3530
3470 CLS : BEEP
3480 COLOR 0,7 : LOCATE 25,15
3490 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
3500 COLOR 7,0 : LOCATE 1,1 : GOTO 3340
3510 '
3520 '
3530 ' return from Ppc-Tpc subroutine with gas gravity, pseudocritical
3540 ' pressure, and pseudocritical temperature
3550 '
3560 '
3570 PRINT : PRINT "CRITICAL TEMP = ";
3580 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT " degR"
3590 PRINT "CRITICAL PRES = ";
3600 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT " psi"
3610 PRINT "GAS GRAVITY = ";
3620 PRINT USING "#####.####";GAS.GRAV
3630 IF INGAS = 1 THEN 3660
3640 PRINT "APPARENT MOLECULAR WEIGHT = ";
3650 PRINT USING "#####.####";APPARENT.MOL.WT
3660 PRINT
3670 '
3680 TEMP.MF = (TEMP.TF + TEMP.WF) / 2#
3690 '
3700 WELL.FACTOR = 18.75# * GAS.GRAV * DEPTH
3710 '
3720 IF PIPE.ID <4.277# THEN 3750
3730 F = .10337# * Q / PIPE.ID^2.582#
3740 GOTO 3780
3750 F = .10797# * Q / PIPE.ID^2.612#
3760 '
3770 '
3780 ' calculate Pmf, midpoint flowing pressure
3790 '
3800 PSEUDO.REDUCED.TEMP = TEMP.TF / PSEUDO.CRIT.TEMP
3810 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
3820 '
3830 ' get Ztf
3840 GOSUB 12250 ' **** calculate Z in z-gopal
3850 ' calculate Itf
3860 TEMP = TEMP.TF : PRES = PRES.TF
3870 GOSUB 10670
3880 XITF = XI
3890 '
3900 ' calculate Pmf
3910 PRES.N = PRES.TF
3920 GOSUB 10610 ' **** calculate Pn
3930 PRES.MF = PRESSURE(IKOUNT)
3940 '
3950 ' find new Zmf
3960 PSEUDO.REDUCED.TEMP = TEMP.MF / PSEUDO.CRIT.TEMP
3970 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
3980 GOSUB 12250 ' **** calculate Z in z-gopal
3990 '
4000 ' calculate Imf
4010 TEMP = TEMP.MF : PRES = PRES.MF
4020 GOSUB 10670
4030 '
4040 ' calculate new Pmf, reiterate
4050 PRES.N = PRES.TF
4060 GOSUB 10610 ' **** calculate Pn
4070 PRES.MF = PRESSURE(IKOUNT)
4080 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 3950
4090 '
4100 '
4110 ' calculate Pwf, bottom hole flowing pressure
4120 '
4130 IKOUNT = 0
4140 '
4150 ' find Zmf for last Imf
4160 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
4170 GOSUB 12250 ' **** calculate Z in z-gopal
4180 ZMF = Z
4190 '
4200 ' calculate Imf, this is its last value
4210 PRES = PRES.MF : TEMP = TEMP.MF
4220 GOSUB 10670
4230 XIMF = XI
4240 '
4250 ' assume Iwf = Imf, calculate Pwf
4260 PRES.N = PRES.MF
4270 GOSUB 10610 ' **** calculate Pn
4280 PRES.WF = PRESSURE(IKOUNT)
4290 '
4300 ' find Zwf
4310 PSEUDO.REDUCED.TEMP = TEMP.WF / PSEUDO.CRIT.TEMP
4320 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
4330 GOSUB 12250 ' **** calculate Z in z-gopal
4340 '
4350 ' calculate Iwf
4360 PRES = PRES.WF : TEMP = TEMP.WF
4370 GOSUB 10670
4380 '
4390 ' calculate Pwf, reiterate
4400 PRES.N = PRES.MF
4410 GOSUB 10610 ' **** calculate Pn
4420 PRES.WF = PRESSURE(IKOUNT)
4430 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 4300
4440 '
4450 ' last calculated Iwf
4460 ' find Zwf
4470 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
4480 GOSUB 12250 ' **** calculate Z in z-gopal
4490 ZWF = Z
4500 '
4510 ' calculate Iwf
4520 PRES = PRES.WF : TEMP = TEMP.WF
4530 GOSUB 10670
4540 XIWF = XI
4550 '
4560 '
4570 ' apply Simpson's Rule
4580 '
4590 PRES.1 = 3# * WELL.FACTOR
4600 PRES.2 = XITF + 4# * XIMF + XIWF
4610 PRES.WF = PRES.1 / PRES.2 + PRES.TF
4620 '
4630 '
4640 PRINT : PRINT "FLOWING BOTTOM-HOLE PRESSURE = ";
4650 PRINT USING "#######.##";PRES.WF ;: PRINT " psi" : PRINT
4660 '
4670 '
4680 PRINT "press any key to continue"
4690 A$ = INKEY$ : IF A$ = "" THEN 4690
4700 CLS
4710 COLOR 0,7 : LOCATE 25,15
4720 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
4730 COLOR 7,0 : LOCATE 1,1
4740 PRINT "Would you like:" : PRINT
4750 PRINT " 1. hard copy output of data"
4760 PRINT " 2. calculate another Pwf "
4770 PRINT " 3. calculate a Pws, Pts, or Ptf "
4780 PRINT " 4. end session" : PRINT
4790 INPUT "Enter choice ", ICHOICE : PRINT
4800 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 4700
4810 ON ICHOICE GOTO 4820, 5390, 40, 5400
4820 BEEP : PRINT "READY PRINTER, press any key to continue"
4830 B$ = INKEY$ : IF B$ = "" THEN 4830
4840 LPRINT CHR$(18)
4850 FOR I = 1 TO 5 : LPRINT : NEXT I
4860 LPRINT SPC(21);"FLOWING BOTTOM-HOLE PRESSURE DETERMINATION"
4870 LPRINT :LPRINT
4880 PRINT "Enter well name or note (one line only)"
4890 INPUT NOTE$ : LPRINT NOTE$
4900 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
4910 LPRINT USING "\ \";"Tubing Temperature";
4920 LPRINT USING "######.#";TEMP.TF - 459.67 ;
4930 LPRINT " deg.F"
4940 LPRINT USING "\ \";"Bottom-Hole Temperature";
4950 LPRINT USING "######.#";TEMP.WF - 459.67 ;
4960 LPRINT " deg.F"
4970 LPRINT USING "\ \";"Flowing Tubing Pressure";
4980 LPRINT USING "######.#";PRES.TF;:LPRINT " psi"
4990 LPRINT USING "\ \";"Well Depth";
5000 LPRINT USING "######.#";DEPTH;:LPRINT " ft."
5010 LPRINT USING "\ \";"Tubing ID";
5020 LPRINT USING "###.####";PIPE.ID;:LPRINT " inches"
5030 LPRINT USING "\ \";"Flow Rate";
5040 LPRINT USING "###.####";Q;:LPRINT " MMCFD"
5050 IF INGAS = 1 THEN 5180
5060 LPRINT : LPRINT "Fluid Analysis:"
5070 FOR J = 1 TO NUMBER.COMPOUNDS
5080 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
5090 LPRINT USING "\ \";COMPOUND.NAME$(J);
5100 LPRINT " mole % = ";
5110 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
5120 NEXT J : LPRINT
5130 LPRINT "Apparent Molecular Weight = ";
5140 LPRINT USING "####.####";APPARENT.MOL.WT
5150 LPRINT "Gas Gravity = ";
5160 LPRINT USING "##.####";GAS.GRAV
5170 GOTO 5210
5180 LPRINT USING "\ \";"Gas Gravity";
5190 LPRINT USING "##.####";GAS.GRAV
5200 LPRINT
5210 LPRINT "Critical Temp = ";
5220 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
5230 LPRINT "Critical Pres = ";
5240 LPRINT USING "####.###";PSEUDO.CRIT.PRES
5250 LPRINT : LPRINT : LPRINT
5260 LPRINT " Zwf = ";:LPRINT USING "##.####";ZWF;
5270 LPRINT " (reservoir conditions)"
5280 LPRINT " Zmf = ";:LPRINT USING "##.####";ZMF;
5290 LPRINT " (well midpoint conditions)"
5300 LPRINT
5310 LPRINT "FLOWING BOTTOM-HOLE PRESSURE = ";
5320 LPRINT USING "######.##";PRES.WF;:LPRINT " psi"
5330 LPRINT CHR$(12)
5340 CLS : PRINT : PRINT "print complete "
5350 COLOR 0,7 : LOCATE 25,15
5360 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
5370 COLOR 7,0 : LOCATE 1,1
5380 PRINT : GOTO 4740
5390 ERASE PRESSURE : IIIRUN = 10 : GOTO 2940
5400 CLS : LOCATE 11,1,0
5410 PRINT SPC(23)"Remove diskette. Turn machine off."
5420 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
5430 '
5440 '
5450 END
5460 ' ************************************************************************
5470 ' ************************************************************************
5480 '
5490 ' PRES-TS.BAS
5500 '
5510 '
5520 ' This section calculates static tubing pressure from
5530 ' bottom-hole pressure and temperature, surface temperature,
5540 ' well depth, and fluid analysis or gas gravity.
5550 '
5560 '
5570 IRUN = 3 : IKOUNT = 0
5580 '
5590 CLS ':PRINT SPC(20);"STATIC TUBING PRESSURE DETERMINATION"
5600 COLOR 0,7 : LOCATE 25,20
5610 PRINT "STATIC TUBING PRESSURE DETERNINATION";
5620 COLOR 7,0 : LOCATE 2,1
5630 PRINT :PRINT
5640 PRINT "Input Requirements:"
5650 PRINT " Surface Temperature"
5660 PRINT " Bottom-Hole Temperature"
5670 PRINT " Static Bottom-Hole Pressure (SIBHP)"
5680 PRINT " Well Depth (mean of perfs)"
5690 PRINT " Fluid Data (analysis or gravity)"
5700 PRINT " Fluid Data (analysis or gravity)"
5710 PRINT : PRINT
5720 INPUT "Surface Temp, degF = ",TEMP.TS
5730 TEMP.TS = TEMP.TS + 459.67# : PRINT
5740 INPUT "Bottom-Hole Temp, degF = ",TEMP.WS
5750 TEMP.WS = TEMP.WS + 459.67# : PRINT
5760 INPUT "Static Bottom-Hole Pressure, psi = ",PRES.WS : PRINT
5770 INPUT "Well Depth, ft = ",DEPTH : PRINT
5780 IF IIIRUN <> 10 THEN 5860
5790 IF INGAS = 1 THEN 5860
5800 INPUT "Does fluid data change ? ( 1 = yes, 2 = no ) ", ICHECK
5810 IF ICHECK = 1 THEN 5840
5820 IF ICHECK = 2 THEN 6050
5830 BEEP : GOTO 5800
5840 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
5850 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
5860 PRINT "Input Fluid Data Type:" : PRINT
5870 PRINT SPC(23);"1 = Gas Gravity"
5880 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
5890 PRINT SPC(26);" Enter 1 or 2"
5900 PRINT SPC(29);:INPUT " ",INGAS
5910 IF INGAS <> 1 THEN 5940
5920 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from gas gravity
5930 GOTO 6050
5940 IF INGAS <> 2 THEN 5990
5950 GOSUB 13090 ' **** gas-in, fluid analysis input
5960 ' return from gas-in
5970 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from fluid analysis
5980 GOTO 6050
5990 CLS : BEEP
6000 COLOR 0,7 : LOCATE 25,20
6010 PRINT "STATIC TUBING PRESSURE DETERNINATION";
6020 COLOR 7,0 : LOCATE 2,1 : GOTO 5860
6030 '
6040 '
6050 ' return from Ppc-Tpc subroutine with gas gravity, pseudocritical
6060 ' pressure, and pseudocritical temperature
6070 '
6080 PRINT : PRINT "CRITICAL TEMP = ";
6090 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT " degR"
6100 PRINT "CRITICAL PRES = ";
6110 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT " psi"
6120 PRINT "GAS GRAVITY = ";
6130 PRINT USING "#####.####";GAS.GRAV
6140 IF INGAS = 1 THEN 6170
6150 PRINT "APPARENT MOLECULAR WEIGHT = ";
6160 PRINT USING "#####.####";APPARENT.MOL.WT
6170 PRINT
6180 '
6190 TEMP.MS = (TEMP.TS + TEMP.WS) / 2#
6200 '
6210 WELL.FACTOR = .01875# * GAS.GRAV * DEPTH
6220 '
6230 '
6240 ' calculate Pms, static midpoint pressure
6250 '
6260 PSEUDO.REDUCED.TEMP = TEMP.WS / PSEUDO.CRIT.TEMP
6270 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
6280 '
6290 ' get Zws
6300 GOSUB 12250 ' **** calculate Z in z-gopal
6310 ZWS = Z
6320 '
6330 ' calculate Iws
6340 TEMP = TEMP.WS : PRES = PRES.WS
6350 GOSUB 10560 ' **** calculate In, static
6360 XIWS = XI
6370 '
6380 ' calculate Pms
6390 PRES.N = PRES.WS
6400 GOSUB 10610 ' **** calculate Pn
6410 PRES.MS = PRESSURE(IKOUNT)
6420 '
6430 ' find new Zms
6440 PSEUDO.REDUCED.TEMP = TEMP.MS / PSEUDO.CRIT.TEMP
6450 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
6460 GOSUB 12250 ' **** calculate Z in z-gopal
6470 '
6480 ' calculate Ims
6490 TEMP = TEMP.MS : PRES = PRES.MS
6500 GOSUB 10560 ' **** calculate In, static
6510 '
6520 ' calculate new Pms, reiterate
6530 PRES.N = PRES.WS
6540 GOSUB 10610 ' **** calculate Pn
6550 PRES.MS = PRESSURE(IKOUNT)
6560 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 6430
6570 '
6580 '
6590 ' calculate Pts, static tubing pressure
6600 '
6610 IKOUNT = 0
6620 '
6630 ' find Zms for last Ims
6640 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
6650 GOSUB 12250 ' **** calculate Z in z-gopal
6660 ZMS = Z
6670 '
6680 ' calculate Ims, this is its last value
6690 PRES = PRES.MS : TEMP = TEMP.MS
6700 GOSUB 10560 ' **** calculate In, static
6710 XIMS = XI
6720 '
6730 ' assume Its = Ims, calculate Pts
6740 PRES.N = PRES.MS
6750 GOSUB 10610 ' **** calculate Pn
6760 PRES.TS = PRESSURE(IKOUNT)
6770 '
6780 ' find Zts
6790 PSEUDO.REDUCED.TEMP = TEMP.TS / PSEUDO.CRIT.TEMP
6800 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
6810 GOSUB 12250 ' **** calculate Z in z-gopal
6820 '
6830 ' calculate Its
6840 PRES = PRES.TS : TEMP = TEMP.TS
6850 GOSUB 10560 ' **** calculate In, static
6860 '
6870 ' calculate Pts, reiterate
6880 PRES.N = PRES.MS
6890 GOSUB 10610 ' **** calculate Pn
6900 PRES.TS = PRESSURE(IKOUNT)
6910 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 6780
6920 '
6930 '
6940 ' last calculated Its
6950 ' find Zts
6960 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
6970 GOSUB 12250 ' **** calculate Z in z-gopal
6980 '
6990 ' calculate Its
7000 PRES = PRES.TS : TEMP = TEMP.TS
7010 GOSUB 10560 ' **** calculate In, static
7020 XITS = XI
7030 '
7040 '
7050 ' apply Simpson's Rule
7060 '
7070 PRES.1 = -(6# * WELL.FACTOR)
7080 PRES.2 = XITS + 4# * XIMS + XIWS
7090 PRES.TS = PRES.1 / PRES.2 + PRES.WS
7100 '
7110 '
7120 PRINT : PRINT "STATIC TUBING PRESSURE = ";
7130 PRINT USING "#######.##";PRES.TS;: PRINT " psi":PRINT
7140 '
7150 '
7160 PRINT "press any key to continue"
7170 A$ = INKEY$ : IF A$ = "" THEN 7170
7180 CLS
7190 COLOR 0,7 : LOCATE 25,20
7200 PRINT "STATIC TUBING PRESSURE DETERNINATION";
7210 COLOR 7,0 : LOCATE 2,1
7220 PRINT "Would you like:" : PRINT
7230 PRINT " 1. hard copy output of data"
7240 PRINT " 2. calculate another Pts "
7250 PRINT " 3. calculate a Pws, Pwf, or Ptf "
7260 PRINT " 4. end session" : PRINT
7270 INPUT "Enter choice ", ICHOICE : PRINT
7280 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 7180
7290 ON ICHOICE GOTO 7300, 7850, 40, 7860
7300 BEEP : PRINT "READY PRINTER, press any key to continue"
7310 B$ = INKEY$ : IF B$ = "" THEN 7310
7320 LPRINT CHR$(18)
7330 FOR I = 1 TO 5 : LPRINT : NEXT I
7340 LPRINT SPC(23);"STATIC TUBING PRESSURE DETERMINATION"
7350 LPRINT:PRINT :PRINT :PRINT
7360 PRINT "Enter well name or note (one line only)"
7370 INPUT NOTE$
7380 LPRINT NOTE$
7390 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
7400 LPRINT USING "\ \";"Surface Temperature";
7410 LPRINT USING "######.#";TEMP.TS - 459.67 ;
7420 LPRINT " deg.F"
7430 LPRINT USING "\ \";"Bottom-Hole Temperature";
7440 LPRINT USING "######.#";TEMP.WS - 459.67 ;
7450 LPRINT " deg.F"
7460 LPRINT USING "\ \";"Static Bottom-Hole Pressure";
7470 LPRINT USING "######.#";PRES.WS;:LPRINT " psi"
7480 LPRINT USING "\ \";"Well Depth";
7490 LPRINT USING "######.#";DEPTH;:LPRINT " ft."
7500 IF INGAS = 1 THEN 7630
7510 LPRINT : LPRINT "Fluid Analysis:"
7520 FOR J = 1 TO NUMBER.COMPOUNDS
7530 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
7540 LPRINT USING "\ \";COMPOUND.NAME$(J);
7550 LPRINT " mole % = ";
7560 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
7570 NEXT J : LPRINT
7580 LPRINT "Apparent Molecular Weight = ";
7590 LPRINT USING "####.####";APPARENT.MOL.WT
7600 LPRINT "Gas Gravity = ";
7610 LPRINT USING "##.####";GAS.GRAV
7620 GOTO 7660
7630 LPRINT USING "\ \";"Gas Gravity";
7640 LPRINT USING "##.####";GAS.GRAV
7650 LPRINT
7660 LPRINT "Critical Temp = ";
7670 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
7680 LPRINT "Critical Pres = ";
7690 LPRINT USING "####.###";PSEUDO.CRIT.PRES
7700 LPRINT : LPRINT : LPRINT
7710 LPRINT " Zws = ";
7720 LPRINT USING "##.####";ZWS;
7730 LPRINT " (reservoir conditions)"
7740 LPRINT " Zms = ";
7750 LPRINT USING "##.####";ZMS;
7760 LPRINT " (well midpoint conditions)"
7770 LPRINT
7780 LPRINT "STATIC TUBING PRESSURE = ";
7790 LPRINT USING "######.##";PRES.TS ;:LPRINT " psi"
7800 LPRINT CHR$(12)
7810 CLS : PRINT : PRINT "print complete "
7820 COLOR 0,7 : LOCATE 25,20
7830 PRINT "STATIC TUBING PRESSURE DETERNINATION";
7840 COLOR 7,0 : LOCATE 3,1 : PRINT : GOTO 7220
7850 ERASE PRESSURE : IIIRUN = 10 : GOTO 5490
7860 CLS : LOCATE 11,1,0
7870 PRINT SPC(23)"Remove diskette. Turn machine off."
7880 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
7890 '
7900 '
7910 END
7920 ' ***********************************************************************
7930 ' ***********************************************************************
7940 '
7950 ' PRES-TF.BAS
7960 '
7970 '
7980 ' This section calculates flowing tubing pressure
7990 ' from flowing bottom-hole pressure, reservoir temperature,
8000 ' flowing tubing temperature, well depth, tubing ID, flow
8010 ' rate, and fluid analysis or gas gravity.
8020 '
8030 '
8040 IRUN = 4 : IKOUNT = 0
8050 '
8060 '
8070 CLS ':PRINT SPC(20);"FLOWING TUBING PRESSURE DETERMINATION"
8080 COLOR 0,7 : LOCATE 25,20
8090 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
8100 COLOR 7,0 : LOCATE 2,1
8110 PRINT :PRINT
8120 PRINT "Input Requirements:"
8130 PRINT " Bottom-Hole Temperature"
8140 PRINT " Flowing Tubing Temperature"
8150 PRINT " Flowing Bottom-Hole Pressure"
8160 PRINT " Well Depth (mean of perfs)"
8170 PRINT " Tubing ID"
8180 PRINT " Flow Rate"
8190 PRINT " Fluid Data (analysis or gravity)"
8200 PRINT : PRINT
8210 INPUT "Bottom-Hole Temp, degF = ",TEMP.WF
8220 TEMP.WF = TEMP.WF + 459.67# : PRINT
8230 INPUT "Flowing Tubing Temp, degF = ",TEMP.TF
8240 TEMP.TF = TEMP.TF + 459.67# : PRINT
8250 INPUT "Flowing Bottom-Hole Pressure, psi = ",PRES.WF : PRINT
8260 INPUT "Well Depth, ft = ",DEPTH : PRINT
8270 INPUT "Tubing ID, inches = ",PIPE.ID : PRINT
8280 INPUT "Flow Rate, MMCF/D = ",Q : PRINT : PRINT
8290 IF IIIRUN <> 10 THEN 8370
8300 IF INGAS = 1 THEN 8370
8310 INPUT "Does fluid data change ? ( 1 = yes, 2 = no ) ", ICHECK
8320 IF ICHECK = 1 THEN 8350
8330 IF ICHECK = 2 THEN 8560
8340 BEEP : GOTO 8310
8350 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
8360 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
8370 PRINT "Input Fluid Data Type:" : PRINT
8380 PRINT SPC(23);"1 = Gas Gravity"
8390 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
8400 PRINT SPC(26);" Enter 1 or 2"
8410 PRINT SPC(29);:INPUT " ",INGAS
8420 IF INGAS <> 1 THEN 8450
8430 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from gas gravity
8440 GOTO 8560
8450 IF INGAS <> 2 THEN 8500
8460 GOSUB 13090 ' **** gas-in, fluid analysis input
8470 ' return from gas-in
8480 GOSUB 10740 ' **** pseudotp for Ppc-Tpc from fluid analysis
8490 GOTO 8560
8500 CLS : BEEP
8510 COLOR 0,7 : LOCATE 25,20
8520 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
8530 COLOR 7,0 : LOCATE 2,1 : GOTO 8370
8540 '
8550 '
8560 ' return from Ppc-Tpc subroutine with gas gravity, pseudocritical
8570 ' pressure, and pseudocritical temperature
8580 '
8590 '
8600 PRINT : PRINT "Critical Temp = ";
8610 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT " degR"
8620 PRINT "Critical Pres = ";
8630 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT " psi"
8640 PRINT "Gas Gravity = ";
8650 PRINT USING "##.####";GAS.GRAV
8660 IF INGAS = 1 THEN 8690
8670 PRINT "Apparent Molecular Weight = ";
8680 PRINT USING "#####.####";APPARENT.MOL.WT
8690 PRINT
8700 '
8710 TEMP.MF = (TEMP.TF + TEMP.WF) / 2#
8720 '
8730 WELL.FACTOR = 18.75# * GAS.GRAV * DEPTH
8740 '
8750 IF PIPE.ID <4.277# THEN 8780
8760 F = .10337# * Q / PIPE.ID^2.582#
8770 GOTO 8810
8780 F = .10797# * Q / PIPE.ID^2.612#
8790 '
8800 '
8810 ' calculate Pmf, midpoint flowing pressure
8820 '
8830 PSEUDO.REDUCED.TEMP = TEMP.WF / PSEUDO.CRIT.TEMP
8840 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
8850 '
8860 ' get Zwf
8870 GOSUB 12250 ' **** calculate Z in z-gopal
8880 ZWF = Z
8890 '
8900 ' calculate Itf
8910 TEMP = TEMP.WF : PRES = PRES.WF
8920 GOSUB 10670
8930 XIWF = XI
8940 '
8950 ' calculate Pmf
8960 PRES.N = PRES.WF
8970 GOSUB 10610 ' **** calculate Pn
8980 PRES.MF = PRESSURE(IKOUNT)
8990 '
9000 ' find new Zmf
9010 PSEUDO.REDUCED.TEMP = TEMP.MF / PSEUDO.CRIT.TEMP
9020 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
9030 GOSUB 12250 ' **** calculate Z in z-gopal
9040 '
9050 ' calculate Imf
9060 TEMP = TEMP.MF : PRES = PRES.MF
9070 GOSUB 10670
9080 '
9090 ' calculate new Pmf, reiterate
9100 PRES.N = PRES.WF
9110 GOSUB 10610 ' **** calculate Pn
9120 PRES.MF = PRESSURE(IKOUNT)
9130 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 9000
9140 '
9150 '
9160 ' calculate Ptf, flowing tubing pressure
9170 '
9180 IKOUNT = 0
9190 '
9200 ' find Zmf for last Imf
9210 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
9220 GOSUB 12250 ' **** calculate Z in z-gopal
9230 ZMF = Z
9240 '
9250 ' calculate Imf, this is its last value
9260 PRES = PRES.MF : TEMP = TEMP.MF
9270 GOSUB 10670
9280 XIMF = XI
9290 '
9300 ' assume Itf = Imf, calculate Ptf
9310 PRES.N = PRES.MF
9320 GOSUB 10610 ' **** calculate Pn
9330 PRES.TF = PRESSURE(IKOUNT)
9340 '
9350 ' find Ztf
9360 PSEUDO.REDUCED.TEMP = TEMP.TF / PSEUDO.CRIT.TEMP
9370 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
9380 GOSUB 12250 ' **** calculate Z in z-gopal
9390 '
9400 ' calculate Itf
9410 PRES = PRES.TF : TEMP = TEMP.TF
9420 GOSUB 10670
9430 '
9440 ' calculate Ptf, reiterate
9450 PRES.N = PRES.MF
9460 GOSUB 10610 ' **** calculate Pn
9470 PRES.TF = PRESSURE(IKOUNT)
9480 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 9350
9490 '
9500 ' last calculated Itf
9510 ' find Ztf
9520 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
9530 GOSUB 12250 ' **** calculate Z in z-gopal
9540 '
9550 ' calculate Itf
9560 PRES = PRES.TF : TEMP = TEMP.TF
9570 GOSUB 10670
9580 XITF = XI
9590 '
9600 '
9610 ' apply Simpson's Rule
9620 '
9630 PRES.1 = -( 3# * WELL.FACTOR )
9640 PRES.2 = XITF + 4# * XIMF + XIWF
9650 PRES.TF = PRES.1 / PRES.2 + PRES.WF
9660 '
9670 '
9680 PRINT "FLOWING TUBING PRESSURE = ";
9690 PRINT USING "#######.##";PRES.TF ;: PRINT " psi" :PRINT
9700 '
9710 '
9720 PRINT "press any key to continue"
9730 A$ = INKEY$ : IF A$ = "" THEN 9730
9740 CLS
9750 COLOR 0,7 : LOCATE 25,20
9760 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
9770 COLOR 7,0 : LOCATE 1,1
9780 PRINT "Would you like:" : PRINT
9790 PRINT " 1. hard copy output of data"
9800 PRINT " 2. calculate another Ptf "
9810 PRINT " 3. calculate a Pws, Pwf, or Pts "
9820 PRINT " 4. end session" : PRINT
9830 INPUT "Enter choice ", ICHOICE : PRINT
9840 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 9740
9850 ON ICHOICE GOTO 9860, 10420, 40, 10430
9860 BEEP : PRINT "READY PRINTER, press any key to continue"
9870 B$ = INKEY$ : IF B$ = "" THEN 9870
9880 LPRINT CHR$(18)
9890 FOR I = 1 TO 5 : LPRINT : NEXT I
9900 LPRINT SPC(24);"FLOWING TUBING PRESSURE DETERMINATION"
9910 LPRINT :LPRINT :PRINT :PRINT
9920 PRINT "Enter well name or note (one line only)"
9930 INPUT NOTE$ : LPRINT NOTE$
9940 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
9950 LPRINT USING "\ \";"Tubing Temperature";
9960 LPRINT USING "######.#";TEMP.TF - 459.67 ;
9970 LPRINT " deg.F"
9980 LPRINT USING "\ \";"Bottom-Hole Temperature";
9990 LPRINT USING "######.#";TEMP.WF - 459.67 ;
10000 LPRINT " deg.F"
10010 LPRINT USING "\ \";"Flowing Bottom-Hole Pressure";
10020 LPRINT USING "######.#";PRES.WF;:LPRINT " psi"
10030 LPRINT USING "\ \";"Well Depth";
10040 LPRINT USING "######.#";DEPTH;:LPRINT " ft."
10050 LPRINT USING "\ \";"Tubing ID";
10060 LPRINT USING "###.####";PIPE.ID;:LPRINT " inches"
10070 LPRINT USING "\ \";"Flow Rate";
10080 LPRINT USING "###.####";Q;:LPRINT " MMCFD"
10090 IF INGAS = 1 THEN 10220
10100 LPRINT : LPRINT "Fluid Analysis:"
10110 FOR J = 1 TO NUMBER.COMPOUNDS
10120 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
10130 LPRINT USING "\ \";COMPOUND.NAME$(J);
10140 LPRINT " mole % = ";
10150 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
10160 NEXT J : LPRINT
10170 LPRINT "Apparent Molecular Weight = ";
10180 LPRINT USING "####.####";APPARENT.MOL.WT
10190 LPRINT "Gas Gravity = ";
10200 LPRINT USING "##.####";GAS.GRAV
10210 GOTO 10250
10220 LPRINT USING "\ \";"Gas Gravity";
10230 LPRINT USING "##.####";GAS.GRAV
10240 LPRINT
10250 LPRINT "Critical Temp = ";
10260 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
10270 LPRINT "Critical Pres = ";
10280 LPRINT USING "####.###";PSEUDO.CRIT.PRES
10290 LPRINT : LPRINT : LPRINT
10300 LPRINT " Zwf = ";:LPRINT USING "##.####";ZWF;
10310 LPRINT " (reservoir conditions)"
10320 LPRINT " Zmf = ";:LPRINT USING "##.####";ZMF;
10330 LPRINT " (well midpoint conditions)"
10340 LPRINT
10350 LPRINT "FLOWING TUBING PRESSURE = ";
10360 LPRINT USING "######.##";PRES.TF ;:LPRINT " psi"
10370 LPRINT CHR$(12)
10380 CLS : PRINT : PRINT "print complete "
10390 COLOR 0,7 : LOCATE 25,20
10400 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
10410 COLOR 7,0 : LOCATE 3,1 : PRINT : GOTO 9780
10420 ERASE PRESSURE : IIIRUN = 10 : GOTO 7950
10430 CLS : LOCATE 11,1,0
10440 PRINT SPC(23)"Remove diskette. Turn machine off."
10450 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
10460 '
10470 '
10480 END
10490 ' **********************************************************************
10500 ' **********************************************************************
10510 ' **********************************************************************
10520 ' **********************************************************************
10530 '
10540 ' subroutines
10550 '
10560 ' calculate In, static
10570 XI = Z * TEMP / PRES
10580 RETURN
10590 '
10600 '
10610 ' calculate pressure
10620 IKOUNT = IKOUNT + 1
10630 PRESSURE(IKOUNT) = WELL.FACTOR / (2# * XI) + PRES.N
10640 RETURN
10650 '
10660 '
10670 ' calculate In, flowing
10680 XI.1 = PRES / (TEMP * Z)
10690 XI.2 = .001# * XI.1^2#
10700 XI = XI.1 / (F^2# + XI.2)
10710 RETURN
10720 '
10730 '
10740 ' This subroutine calculates pseudocritical
10750 ' properties of a reservoir given fluid
10760 ' analysis or gas gravity.
10770 '
10780 ' PSEUDOTP.BAS
10790 '
10800 IF INGAS = 1 THEN 11820
10810 '
10820 ' calculate Ppc and Tpc from fluid analysis ( INGAS=2 )
10830 DIM IID(67), CHEM.NAME$(67), FORM$(67), MW#(67), CP(67), CT(67), SG(67)
10840 N = NUMBER.COMPOUNDS
10850 DIM ID(N), MOLE.WEIGHT#(N), CRIT.PRES(N), CRIT.TEMP(N), SP.GR(N)
10860 APPARENT.MOL.WT = 0!
10870 APPARENT.CRIT.TEMP = 0!
10880 APPARENT.CRIT.PRES = 0!
10890 '
10900 ' search for critical properties of the input fluid mixture
10910 '
10920 PRINT "searching data file for physical constants ..."
10930 FOR I = 1 TO NUMBER.COMPOUNDS
10931 IF I>1 GOTO 10948
10932 INPUT "Enter drive on which data file disk is located: ",DRV$
10934 IF DRV$="a" OR DRV$="A" OR DRV$="b" OR DRV$="B" GOTO 10944
10936 IF DRV$="c" OR DRV$="C" OR DRV$="d" OR DRV$="D" GOTO 10944
10938 IF DRV$="e" OR DRV$="E" GOTO 10944
10940 BEEP:BEEP:PRINT:PRINT "INVALID DRIVE SPECIFICATION. REDO "
10942 PRINT : GOTO 10932
10944 CCC$="pcons.dat"
10946 PPP$=DRV$ + ":" + CCC$
10948 OPEN PPP$ FOR INPUT AS #1
10950 FOR J = 1 TO 67
10960 IF EOF(1) GOTO 11060
10970 INPUT #1, IID(J), CHEM.NAME$(J), FORM$(J), MW#(J), CP(J), CT(J), SG(J)
10980 IF COMPOUND.NAME$(I) <> CHEM.NAME$(J) THEN GOTO 11050
10990 ID(I) = IID(J)
11000 MOLE.WEIGHT#(I) = MW#(J)
11010 CRIT.PRES(I) = CP(J)
11020 CRIT.TEMP(I) = CT(J) + 459.67#
11030 SP.GR (I) = SG(J)
11040 GOTO 11060
11050 NEXT J
11060 CLOSE #1
11070 '
11080 ' calculate pseudocritical properties
11090 '
11100 APPARENT.MOL.WT = MOLE.FRACTION#(I) * MOLE.WEIGHT#(I) + APPARENT.MOL.WT
11110 APPARENT.CRIT.PRES = MOLE.FRACTION#(I)*CRIT.PRES(I) + APPARENT.CRIT.PRES
11120 APPARENT.CRIT.TEMP = MOLE.FRACTION#(I)*CRIT.TEMP(I) + APPARENT.CRIT.TEMP
11130 NEXT I
11140 '
11150 '
11160 ' correction for presense of N2, C-O2, and H2-S
11170 '
11180 PRINT : PRINT
11190 PRINT " SPECIFY METHOD FOR IMPURITIES CORRECTION"
11200 PRINT
11210 PRINT " 1 = None"
11220 PRINT " 2 = Carr, et.al."
11230 PRINT " corrects for C-O2, H2-S, and N2"
11240 PRINT " 3 = Wichert and Aziz"
11250 PRINT " corrects for C-O2, and H2-S"
11260 PRINT
11270 PRINT " ENTER 1, 2, or 3"
11280 PRINT SPC(22);: INPUT "",METHOD.CORR
11290 '
11300 IF METHOD.CORR <> 1 GOTO 11310 ELSE GOTO 11700
11310 FOR I = 1 TO NUMBER.COMPOUNDS
11320 ' C-O2 check
11330 IF ID(I) <> 53 GOTO 11360 ELSE XCO2 = MOLE.FRACTION#(I)
11340 GOTO 11400
11350 ' H2-S check
11360 IF ID(I) <> 54 GOTO 11390 ELSE XH2S = MOLE.FRACTION#(I)
11370 GOTO 11400
11380 ' N2 check
11390 IF ID(I) <> 60 GOTO 11400 ELSE XN2 = MOLE.FRACTION#(I)
11400 NEXT I
11410 '
11420 IF METHOD.CORR <> 2 GOTO 11430 ELSE GOTO 11550
11430 IF METHOD.CORR <> 3 GOTO 11440 ELSE GOTO 11600
11440 CLS : PRINT : PRINT "REDO" : BEEP : COLOR 0,7
11450 IF IRUN = 1 THEN LOCATE 25,15 ELSE 11470
11460 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
11470 IF IRUN = 2 THEN LOCATE 25,15 ELSE 11490
11480 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
11490 IF IRUN = 3 THEN LOCATE 25,20 ELSE 11510
11500 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
11510 LOCATE 25,20:PRINT "FLOWING TUBING PRESSURE DETERMINATION";
11520 LOCATE 2,1
11530 COLOR 7,0 : GOTO 11180
11540 '
11550 ' Carr, et.al. method
11560 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP-80#*XCO2+130#*XH2S-250#*XN2
11570 PSEUDO.CRIT.PRES = APPARENT.CRIT.PRES-440#*XCO2+600#*XH2S-170#*XN2
11580 GOTO 11750
11590 '
11600 ' Wichert and Aziz method
11610 CWA1 = 120#*((XCO2+XH2S)^.9# - (XCO2+XH2S)^1.6#)
11620 CWA2 = 15#*(XH2S^.5# - XH2S^4#)
11630 CWA = CWA1 + CWA2
11640 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP - CWA
11650 PSEUDO.CRIT.PRES1 = PSEUDO.CRIT.TEMP * APPARENT.CRIT.PRES
11660 PSEUDO.CRIT.PRES2 = APPARENT.CRIT.TEMP + XH2S*(1#-XH2S)*CWA
11670 PSEUDO.CRIT.PRES = PSEUDO.CRIT.PRES1 / PSEUDO.CRIT.PRES2
11680 GOTO 11750
11690 '
11700 ' no correction for impurities
11710 PSEUDO.CRIT.PRES = APPARENT.CRIT.PRES
11720 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP
11730 '
11740 '
11750 ' calculation of gas gravity
11760 '
11770 GAS.GRAV = APPARENT.MOL.WT / 28.964#
11780 '
11790 GOTO 12210
11800 '
11810 '
11820 ' calculation of pseudocritical properties given gas gravity
11830 '
11840 IF INGAS <> 1 GOTO 13030
11850 INGAS = 1
11860 CLS : PRINT SPC(20);"PSEUDOTP: Gas Gravity Input" : PRINT
11870 COLOR 0,7 : IF IRUN = 1 THEN LOCATE 25,15 ELSE 11890
11880 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
11890 IF IRUN = 2 THEN LOCATE 25,15 ELSE 11910
11900 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
11910 IF IRUN = 3 THEN LOCATE 25,20 ELSE 11930
11920 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
11930 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
11940 LOCATE 3,1
11950 COLOR 7,0 : PRINT SPC(21);"INPUT WELL FLUID TYPE" : PRINT
11960 PRINT " 1 = CONDENSATE WELL FLUIDS"
11970 PRINT " 2 = MISCELLANEOUS GASES" : PRINT
11980 PRINT " ENTER 1 or 2 "
11990 PRINT SPC(33);: INPUT "",KTYPE
12000 IF KTYPE <> 1 GOTO 12100
12010 PRINT : PRINT "CONDENSATE WELL FLUID" : PRINT : PRINT
12020 INPUT "Enter gas gravity ";GAS.GRAV
12030 IF GAS.GRAV >= .7# GOTO 12070
12040 PSEUDO.CRIT.TEMP = 191# + 274# * GAS.GRAV
12050 PSEUDO.CRIT.PRES = 693# - 36# * GAS.GRAV
12060 GOTO 12210
12070 PSEUDO.CRIT.TEMP = 238# + 210# * GAS.GRAV
12080 PSEUDO.CRIT.PRES = 740# + 36# * GAS.GRAV
12090 GOTO 12210
12100 IF KTYPE <> 2 GOTO 12200
12110 PRINT : PRINT "MISCELLANEOUS GASES" :PRINT : PRINT
12120 INPUT "Enter gas gravity "; GAS.GRAV
12130 IF GAS.GRAV >= .7# GOTO 12170
12140 PSEUDO.CRIT.TEMP = 166# + 318# * GAS.GRAV
12150 PSEUDO.CRIT.PRES = 693# - 36# * GAS.GRAV
12160 GOTO 12210
12170 PSEUDO.CRIT.TEMP = 166# + 318# * GAS.GRAV
12180 PSEUDO.CRIT.PRES = 708# - 56# * GAS.GRAV
12190 GOTO 12210
12200 BEEP : BEEP : GOTO 11820
12210 ' have all critical constants now
12220 RETURN
12230 '
12240 '
12250 ' This subroutine calculates the compressibility factor for
12260 ' a gas mixture using Gopal method.
12270 '
12280 ' Z-GOPAL.BAS
12290 '
12300 TPR = PSEUDO.REDUCED.TEMP
12310 PPR = PSEUDO.REDUCED.PRES
12320 '
12330 '
12340 IF PPR < .2# GOTO 12530
12350 IF (TPR<1.05#) AND (TPR>3#) GOTO 12580
12360 '
12370 '
12380 ' **** special cases
12390 '
12400 IF (1.2#<PPR) AND (PPR<=1.4#) GOTO 12410 ELSE 12430
12410 IF (1.08#<=TPR) AND (TPR<=1.19#) GOTO 12810
12420 '
12430 IF (2.6#<PPR) AND (PPR<=2.8#) GOTO 12440 ELSE 12480
12440 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12910
12450 '
12460 '
12470 ' ***** general cases
12480 IF (.2#<=PPR) AND (PPR<=1.2#) GOTO 12650 ELSE 12490
12490 IF (1.2#<PPR) AND (PPR<=2.8#) GOTO 12700 ELSE 12500
12500 IF (2.8#<PPR) AND (PPR<=5.4#) GOTO 12750 ELSE 12510
12510 IF (5.4#<PPR) GOTO 13010
12520 '
12530 PRINT : PRINT
12540 PRINT "This program cannot calculate Z for pseudoreduced pressures"
12550 PRINT "less than 0.2 "
12560 PRINT : PRINT "sorry, program crashes"
12570 PRINT:PRINT:STOP
12580 PRINT : PRINT
12590 PRINT "This program cannot calculate Z for pseudoreduced temperatures"
12600 PRINT "less than 1.05 or greater than 3.0"
12610 PRINT : PRINT "sorry, program crashes"
12620 PRINT:PRINT:STOP
12630 '
12640 '
12650 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12810 ELSE 12660
12660 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12820 ELSE 12670
12670 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12830 ELSE 12680
12680 IF (2#<TPR) AND (TPR<=3#) GOTO 12840
12690 '
12700 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12860 ELSE 12710
12710 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12870 ELSE 12720
12720 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12880 ELSE 12730
12730 IF (2#<TPR) AND (TPR<=3#) GOTO 12890
12740 '
12750 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12910 ELSE 12760
12760 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12920 ELSE 12770
12770 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12930 ELSE 12780
12780 IF (2#<TPR) AND (TPR<=3#) GOTO 12940
12790 '
12800 '
12810 A=1.6643# : B=-2.2114# : C=-.3647# : D=1.4385# : GOTO 12970
12820 A=.5222# : B=-.8511# : C=-.0364# : D=1.049# : GOTO 12970
12830 A=.1391# : B=-.2988# : C=.0007# : D=.9969# : GOTO 12970
12840 A=.0295# : B=-.0825# : C=.0009# : D=.9967# : GOTO 12970
12850 '
12860 A=-1.357# : B=1.4942# : C=4.6315# : D=-4.7009# : GOTO 12970
12870 A=.1717# : B=-.3232# : C=.5869# : D=.1229# : GOTO 12970
12880 A=.0984# : B=-.2053# : C=.0621# : D=.858# : GOTO 12970
12890 A=.0211# : B=-.0527# : C=.0127# : D=.9549# : GOTO 12970
12900 '
12910 A=-.3278# : B=.4752# : C=1.8223# : D=-1.9036# : GOTO 12970
12920 A=-.2521# : B=.3871# : C=1.6087# : D=-1.6635# : GOTO 12970
12930 A=-.0284# : B=.0625# : C=.4714# : D=-.0011# : GOTO 12970
12940 A=.0041# : B=.0039# : C=.0607# : D=.7927# : GOTO 12970
12950 '
12960 '
12970 Z = PPR*(A*TPR + B) + C*TPR + D
12980 GOTO 13040
12990 '
13000 '
13010 Z1 = PPR*(.711# + 3.66#*TPR)^-1.4667#
13020 Z2 = -1.637#/(.319#*TPR + .522#)
13030 Z = Z1 + Z2 + 2.071#
13040 '
13050 RETURN
13060 '
13070 '
13080 '
13090 ' This subroutine inputs the component compounds and their
13100 ' molar fraction in a fluid sample either by keydoard or
13110 ' data file. A data file from keyboard input will be
13120 ' created if desired.
13130 '
13140 ' GAS-IN.BAS
13150 '
13160 CLS : PRINT SPC(25);"GAS-IN" : COLOR 0,7
13170 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13190
13180 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
13190 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13210
13200 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
13210 IF IRUN = 3 THEN LOCATE 25,20 ELSE 13230
13220 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
13230 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
13240 LOCATE 2,1
13250 COLOR 7,0 : PRINT : PRINT
13260 PRINT : PRINT "Component compounds in fluid sample will be input by :"
13270 PRINT
13280 PRINT SPC(10);" 1 = DATA FILE"
13290 PRINT SPC(10);" 2 = KEYBOARD"
13300 PRINT
13310 PRINT SPC(10);" ENTER 1 or 2"
13320 PRINT SPC(23);: INPUT " ",IN
13330 IF IN <> 1 GOTO 13340 ELSE 13360
13340 IF IN <> 2 GOTO 13350 ELSE 13710
13350 PRINT : PRINT "REDO" : BEEP : GOTO 13160
13360 CLS : PRINT SPC(25);"GAS-IN" : COLOR 0,7
13370 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13390
13380 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
13390 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13410
13400 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
13410 IF IRUN = 3 THEN LOCATE 25,20 ELSE 13430
13420 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
13430 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
13440 LOCATE 2,1
13450 COLOR 7,0
13460 '
13470 PRINT SPC(20);"DATA FILE INPUT" : PRINT : PRINT
13480 INPUT "Enter drive on which data file disk is located: ",DRV$
13490 IF DRV$="a" OR DRV$="A" OR DRV$="b" OR DRV$="B" GOTO 13540
13500 IF DRV$="c" OR DRV$="C" OR DRV$="d" OR DRV$="D" GOTO 13540
13510 IF DRV$="e" OR DRV$="E" GOTO 13540
13520 BEEP:BEEP:PRINT:PRINT "INVALID DRIVE SPECIFICATION. REDO "
13530 PRINT : GOTO 13480
13540 PRINT
13550 INPUT "Input name of data file: " , DAT.FILE$
13560 DAT.FILE$ = DRV$ + ":" + DAT.FILE$
13570 OPEN DAT.FILE$ FOR INPUT AS #1
13580 INPUT #1, NUMBER.COMPOUNDS
13590 N = NUMBER.COMPOUNDS
13600 DIM COMPOUND.NAME$(N), MOLE.FRACTION#(N)
13610 SUMMOLE = 0
13620 FOR I = 1 TO NUMBER.COMPOUNDS
13630 IF EOF(1) GOTO 13680
13640 INPUT #1, COMPOUND.NAME$(I), MOL.FRAC#
13650 SUMMOLE = SUMMOLE + MOL.FRAC#
13660 MOLE.FRACTION#(I) = MOL.FRAC# / 100#
13670 NEXT I
13680 CLOSE #1
13690 GOTO 14290
13700 '
13710 CLS : COLOR 0,7
13720 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13740
13730 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
13740 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13760
13750 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
13760 IF IRUN = 3 THEN LOCATE 25,20 ELSE 13780
13770 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
13780 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
13790 LOCATE 1,1
13800 COLOR 7,0 : PRINT SPC(24),"KEYBOARD INPUT" : PRINT : PRINT
13810 INPUT "Input number of compounds in mixture "; NUMBER.COMPOUNDS
13820 N = NUMBER.COMPOUNDS
13830 DIM COMPOUND.NAME$(N), MOLE.FRACTION#(N)
13840 ' ***** CLS : PRINT : PRINT : PRINT
13850 ' ***** PRINT " Input either the NAME or the CAS number of each "
13860 ' ***** PRINT " component in the mixture and its mole fraction"
13870 ' ***** PRINT " when prompted."
13880 ' ***** PRINT
13890 ' ***** PRINT " 1 = components identified by NAME"
13900 ' ***** PRINT " 2 = components identified by CAS # "
13910 ' ***** PRINT " ENTER 1 or 2"
13920 ' ***** INPUT SEARCH.MODE
13930 ' ***** IF SEARCH.MODE <> 1 THEN 550 ELSE 600
13940 ' ***** IF SEARCH.MODE <> 2 THEN 560 ELSE 570
13950 ' ***** CLS : PRINT "REDO" : BEEP : GOTO 490
13960 ' ***** CLS: PRINT : PRINT
13970 ' ***** PRINT "program capable of searching by name only at this time"
13980 ' ***** PRINT "enter 1 " : GOTO 490
13990 BEEP : PRINT : PRINT "*** NOTE ***"
14000 PRINT "COMPOUND NAME MUST BE EXACT AND ALL LOWER CASE."
14010 PRINT "EXAMPLE:"
14020 PRINT " 2-4-dimethylpentane OR carbon-dioxide"
14030 SUMMOLE = 0
14040 FOR I = 1 TO NUMBER.COMPOUNDS
14050 PRINT : PRINT : PRINT
14060 PRINT "INPUT COMPOUND NAME FOR COMPONENT # ";I;" of ";N
14070 PRINT
14080 INPUT COMPOUND.NAME$(I)
14090 PRINT : PRINT :PRINT
14100 PRINT "INPUT MOLE FRACTION (%) OF `";COMPOUND.NAME$(I);
14110 PRINT "' IN THE MIXTURE"
14120 PRINT
14130 INPUT MOL.FRAC#
14140 SUMMOLE = SUMMOLE + MOL.FRAC#
14150 MOLE.FRACTION#(I) = MOL.FRAC# / 100#
14160 CLS : COLOR 0,7
14170 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14190
14180 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
14190 IF IRUN = 2 THEN LOCATE 25,15 ELSE 14210
14200 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
14210 IF IRUN = 3 THEN LOCATE 25,20 ELSE 14230
14220 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
14230 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
14240 LOCATE 1,1
14250 COLOR 7,0
14260 NEXT I
14270 '
14280 '
14290 CLS : COLOR 0,7
14300 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14320
14310 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
14320 IF IRUN = 2 THEN LOCATE 25,15 ELSE 14340
14330 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
14340 IF IRUN = 3 THEN LOCATE 25,20 ELSE 14360
14350 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
14360 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
14370 LOCATE 1,1
14380 COLOR 7,0
14390 FOR J = 1 TO NUMBER.COMPOUNDS : IF J=1 THEN SUMMOLE = 0#
14400 PRINT "COMPONENT # ";
14410 PRINT USING "##";J;
14420 PRINT " : ";
14430 PRINT USING "\ \";COMPOUND.NAME$(J);
14440 PRINT " MOLE % = ";
14450 PRINT USING "####.####";MOLE.FRACTION#(J) * 100#
14460 SUMMOLE = SUMMOLE + MOLE.FRACTION#(J)*100#
14470 NEXT J
14480 PRINT SPC(48);"---------"
14490 PRINT SPC(48);:PRINT USING "####.####";SUMMOLE
14500 IF SUMMOLE>99.99999999# AND SUMMOLE<100.00001# THEN 14570
14510 PRINT:BEEP:BEEP:BEEP:ILINE=CSRLIN:LFLAG=1
14520 PRINT SPC(28);"*** WARNING ***"
14530 PRINT SPC(16);"Sum Of Mole Fractions Does Not Equal 100"
14540 PRINT : PRINT "press any key to continue"
14550 A$ = INKEY$ : IF A$ = "" THEN 14550
14560 LOCATE ILINE:FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT
14570 PRINT
14580 IF LFLAG = 1 GOTO 14590 ELSE ILINE = CSRLIN
14590 LOCATE ILINE,27 : PRINT "IS LIST CORRECT ?"
14600 PRINT " 1 = YES : 2 = NO"
14610 PRINT SPC(34); : INPUT " ", TEST
14620 IF TEST = 1 AND IN = 1 THEN 15420
14630 IF TEST = 1 AND IN = 2 THEN 14740
14640 IF TEST = 2 THEN 14650 ELSE BEEP:BEEP:GOTO 14290
14650 LOCATE ILINE+4,24 : PRINT "CHANGE ALL OR SOME VALUES ?"
14660 PRINT SPC(27); "1 = ALL : 2 = SOME"
14670 PRINT SPC(35);: INPUT "", ICHANGE
14680 IF ICHANGE = 1 THEN ERASE COMPOUND.NAME$, MOLE.FRACTION# : GOTO 13160
14690 IF ICHANGE = 2 THEN 15080
14700 BEEP:BEEP:LOCATE ILINE
14710 FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT I
14720 LOCATE ILINE : GOTO 14640
14730 BEEP : PRINT "REDO" : GOTO 14290
14740 CLS : PRINT : PRINT
14750 PRINT "Do you want to save this data in a data file ?" : PRINT
14760 PRINT " 1 = YES : 2 = NO"
14770 PRINT SPC(28);: INPUT "",TEST
14780 IF TEST <> 1 GOTO 15050
14790 PRINT : PRINT
14800 INPUT "Enter drive of `formated' target diskette ", DRIVE$
14810 A$ = INKEY$ : IF A$ = "" GOTO 14810
14820 CLS : PRINT : PRINT
14830 PRINT : PRINT
14840 PRINT "Enter desired name of data file " : PRINT
14850 PRINT "The file name should end with .DAT, for example GAS.DAT"
14860 INPUT IDAT.FILE$
14870 DAT.FILE$ = DRIVE$ + ":" + IDAT.FILE$
14880 OPEN DAT.FILE$ FOR OUTPUT AS #1
14890 WRITE #1, NUMBER.COMPOUNDS
14900 FOR I = 1 TO NUMBER.COMPOUNDS
14910 WRITE #1, COMPOUND.NAME$(I), MOLE.FRACTION#(I) * 100#
14920 NEXT I
14930 CLOSE #1
14940 PRINT:PRINT "File ";IDAT.FILE$;" saved":PRINT:PRINT:ILINE=POS(0)
14950 COLOR 0,7
14960 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14980
14970 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
14980 IF IRUN = 2 THEN LOCATE 25,15 ELSE 15000
14990 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
15000 IF IRUN = 3 THEN LOCATE 25,20 ELSE 15020
15010 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
15020 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
15030 LOCATE ILINE,1
15040 COLOR 7,0 : GOTO 15420
15050 IF TEST <>2 THEN 15060 ELSE 15420
15060 BEEP : GOTO 14740
15070 '
15080 ' change input fluid data
15090 LOCATE ILINE:FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT
15100 LOCATE ILINE-1,1
15110 PRINT " ***** ENTER NULL LINE WHEN FINISHED EDIT *****"
15120 LOCATE ILINE,1 :PRINT "ENTER COMPONENT # TO CHANGE ";:INPUT "",NUMCHG
15130 IF NUMCHG<0 OR NUMCHG>NUMBER.COMPOUNDS THEN 15150
15140 IF NUMCHG = 0 GOTO 14290 ELSE 15160
15150 BEEP:GOTO 15090
15160 COLOR 0,7
15170 LOCATE NUMCHG,18 : PRINT SPC(19)
15180 LOCATE NUMCHG,18
15190 PRINT USING "\ \";COMPOUND.NAME$(NUMCHG)
15200 COLOR 7,0:LOCATE ILINE:PRINT SPC(79):LOCATE ILINE
15210 PRINT "ENTER NEW NAME OR `OK' ";:COLOR 0,7:PRINT SPC(21);
15220 LOCATE ILINE+1,24 : INPUT " ",NNEW$ : COLOR 7,0
15230 IF NNEW$ = "" THEN 14290
15240 IF NNEW$ = "ok" OR NNEW$ = "OK" THEN 15260
15250 COMPOUND.NAME$(NUMCHG) = NNEW$ : LOCATE NUMCHG,18
15260 COLOR 7,0 : PRINT SPC(19) : LOCATE NUMCHG,18
15270 PRINT USING "\ \";COMPOUND.NAME$(NUMCHG)
15280 COLOR 0,7 : LOCATE NUMCHG,49 : PRINT SPC(10)
15290 LOCATE NUMCHG,49
15300 PRINT USING "####.####";MOLE.FRACTION#(NUMCHG) * 100#
15310 COLOR 7,0 : LOCATE ILINE : PRINT SPC(79) : LOCATE ILINE
15320 PRINT "ENTER NEW MOLE FRACTION (%) OR `OK' "; : COLOR 0,7
15330 PRINT SPC(10):LOCATE ILINE+1,37:INPUT "",NVAL$:COLOR 7,0
15340 IF NVAL$ = "" THEN 14290
15350 IF NVAL$ = "ok" OR NVAL$ = "OK" THEN 15090
15360 MOLE.FRACTION#(NUMCHG) = VAL(NVAL$) / 100# : LOCATE NUMCHG,49
15370 PRINT SPC(10):LOCATE NUMCHG,49
15380 PRINT USING "####.####";MOLE.FRACTION#(NUMCHG) *100
15390 LOCATE ILINE+1 : PRINT SPC(79) : GOTO 15120
15400 '
15410 '
15420 RETURN
15430 '
15440 '
15450 END
(NUMCHG) *100
15390 LOCATE ILINE+1 : PR