home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / oilfield / spe-10.lzh / PRESSURE.BAS < prev   
BASIC Source File  |  1985-05-04  |  59KB  |  1,556 lines

  1. 10 '  ********************************************************************
  2. 20 '  ********************************************************************
  3. 30 '  **                                                                **
  4. 40 '  **   Program: PRESSURE.BAS                                        **
  5. 50 '  **   Written by Tim Franklin                                      **
  6. 60 '  **                                                                **
  7. 70 '  **   This program calculates static, or flowing, surface          **
  8. 80 '  **   tubing, or bottom-hole pressure for a gas well given         **
  9. 90 '  **   well and fluid data.                                         **
  10. 100 ' **                                                                **
  11. 110 ' ********************************************************************
  12. 120 ' ********************************************************************
  13. 130 '
  14. 140 '
  15. 150 CLEAR :KEY OFF : COLOR 7,0 : CLS
  16. 160 KEY 1,"":KEY 2,"":KEY 3,"":KEY 4,"":KEY 5,"":KEY 6,""
  17. 170 KEY 7,"":KEY 8,"":KEY 9,"":KEY 10,""
  18. 180 DEFINT I-N : DEFDBL A-H, O-Z
  19. 190 OPTION BASE 1
  20. 200 DIM PRESSURE(20)
  21. 210 CLS:PRINT
  22. 220 PRINT SPC(20);"GAS WELL PRESSURE DETERMINATION":PRINT :PRINT :PRINT
  23. 230 PRINT "  Pressures are calculated using Cullender and Smith method."
  24. 240 PRINT "  Gas compressibility factors are calculated using Gopal method."
  25. 250 PRINT :PRINT
  26. 260 PRINT SPC(22);"Select Calculation":PRINT
  27. 270 PRINT SPC(16);"  1.  Static Bottom-Hole Pressure"
  28. 280 PRINT SPC(16);"  2.  Flowing Bottom-Hole Pressure"
  29. 290 PRINT SPC(16);"  3.  Static Tubing Pressure"
  30. 300 PRINT SPC(16);"  4.  Flowing Tubing Pressure":PRINT
  31. 310 PRINT SPC(16);"          ENTER CHOICE  ";:INPUT "", IRUN
  32. 320 IF IRUN <> 1 GOTO 330 ELSE 420
  33. 330 IF IRUN <> 2 GOTO 340 ELSE 2940
  34. 340 IF IRUN <> 3 GOTO 350 ELSE 5490
  35. 350 IF IRUN <> 4 GOTO 360 ELSE 7950
  36. 360 BEEP:BEEP:CLS:GOTO 210
  37. 370 '
  38. 380 '
  39. 390 ' *********************************************************************
  40. 400 ' *********************************************************************
  41. 410 '
  42. 420 '   PRES-WS.BAS
  43. 430 '
  44. 440 '
  45. 450 '   This section calculates static bottom-hole pressure
  46. 460 '   from surface pressure and temperature, bottom-hole
  47. 470 '   temperature, well depth, and fluid analysis or gas
  48. 480 '   gravity.
  49. 490 '
  50. 500 '
  51. 510 IRUN = 1 : IKOUNT = 0
  52. 520 '
  53. 530 CLS ':PRINT SPC(15);"STATIC BOTTOM-HOLE PRESSURE DETERMINATION":PRINT
  54. 540 COLOR 0,7
  55. 550 LOCATE 25,15 : PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
  56. 560 LOCATE 2,1 : COLOR 7,0
  57. 570 PRINT : PRINT "Input Requirements:"
  58. 580 PRINT "   Bottom-Hole Temperature"
  59. 590 PRINT "   Surface Temperature"
  60. 600 PRINT "   Static Surface Pressure (WHSIP)"
  61. 610 PRINT "   Well Depth (mean of perfs)"
  62. 620 PRINT "   Fluid Data (analysis or gravity)"
  63. 630 PRINT : PRINT
  64. 640 INPUT "Bottom-Hole Temperature, degF =  ",TEMP.WS
  65. 650 TEMP.WS = TEMP.WS + 459.67# : PRINT
  66. 660 INPUT "Surface Temp, degF =  ",TEMP.TS
  67. 670 TEMP.TS = TEMP.TS + 459.67# : PRINT
  68. 680 INPUT "Static Surface Pressure, psi =  ",PRES.TS : PRINT
  69. 690 INPUT "Well Depth, ft =  ",DEPTH : PRINT
  70. 700 IF IIIRUN <> 10 THEN 770
  71. 710 INPUT "Does fluid data change ?  ( 1 = yes, 2 = no )  ", ICHECK
  72. 720 IF ICHECK = 1 THEN 750
  73. 730 IF ICHECK = 2 THEN 960
  74. 740 BEEP : GOTO 710
  75. 750 IF INGAS = 1 THEN 770
  76. 760 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
  77. 770 PRINT "Input Fluid Data Type:" : PRINT
  78. 780 PRINT SPC(23);"1 = Gas Gravity"
  79. 790 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
  80. 800 PRINT SPC(26);" Enter 1 or 2"
  81. 810 PRINT SPC(29);:INPUT " ",INGAS
  82. 820 IF INGAS <> 1 THEN 850
  83. 830 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from gas gravity
  84. 840 GOTO 960
  85. 850 IF INGAS <> 2 THEN 900
  86. 860 GOSUB 13090   ' **** gas-in, fluid analysis input
  87. 870 '   return from gas-in
  88. 880 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from fluid analysis
  89. 890 GOTO 960
  90. 900 CLS : BEEP
  91. 910 COLOR 0,7 : LOCATE 25,15
  92. 920 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
  93. 930 COLOR 7,0 : LOCATE 1,1 : GOTO 770
  94. 940 '
  95. 950 '
  96. 960 '   return from Ppc-Tpc subroutine with gas gravity, pseudocritical
  97. 970 '   pressure, and pseudocritical temperature
  98. 980 '
  99. 990 PRINT
  100. 1000 PRINT "CRITICAL TEMP = ";
  101. 1010 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT "  degR"
  102. 1020 PRINT "CRITICAL PRES = ";
  103. 1030 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT "  psi"
  104. 1040 PRINT "GAS GRAVITY = ";
  105. 1050 PRINT USING "#####.####";GAS.GRAV
  106. 1060 IF INGAS = 1 THEN 1090
  107. 1070 PRINT "APPARENT MOLECULAR WEIGHT = ";
  108. 1080 PRINT USING "#####.####";APPARENT.MOL.WT
  109. 1090 PRINT
  110. 1100 '
  111. 1110 TEMP.MS = (TEMP.TS + TEMP.WS) / 2#
  112. 1120 '
  113. 1130 WELL.FACTOR = .01875# * GAS.GRAV * DEPTH
  114. 1140 '
  115. 1150 '
  116. 1160 '   calculate Pms, static midpoint pressure
  117. 1170 '
  118. 1180 PSEUDO.REDUCED.TEMP = TEMP.TS / PSEUDO.CRIT.TEMP
  119. 1190 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
  120. 1200 '
  121. 1210 '   get Zts
  122. 1220 GOSUB 12250   ' **** calculate Z in z-gopal
  123. 1230 '   calculate Its
  124. 1240 TEMP = TEMP.TS : PRES = PRES.TS
  125. 1250 GOSUB 10560   ' **** calculate In, static
  126. 1260 XITS = XI
  127. 1270 '
  128. 1280 '   calculate Pms
  129. 1290 PRES.N = PRES.TS
  130. 1300 GOSUB 10610   ' **** calculate Pn
  131. 1310 PRES.MS = PRESSURE(IKOUNT)
  132. 1320 '
  133. 1330 '   find new Zms
  134. 1340 PSEUDO.REDUCED.TEMP = TEMP.MS / PSEUDO.CRIT.TEMP
  135. 1350 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
  136. 1360 GOSUB 12250   ' **** calculate Z in z-gopal
  137. 1370 '
  138. 1380 '   calculate Ims
  139. 1390 TEMP = TEMP.MS : PRES = PRES.MS
  140. 1400 GOSUB 10560   ' **** calculate In, static
  141. 1410 '
  142. 1420 '   calculate new Pms, reiterate
  143. 1430 PRES.N = PRES.TS
  144. 1440 GOSUB 10610   ' **** calculate Pn
  145. 1450 PRES.MS = PRESSURE(IKOUNT)
  146. 1460 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 1330
  147. 1470 '
  148. 1480 '
  149. 1490 '   calculate Pws, static bottom-hole pressure
  150. 1500 '
  151. 1510 IKOUNT = 0
  152. 1520 '
  153. 1530 '   find Zms for last Ims
  154. 1540 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
  155. 1550 GOSUB 12250   ' **** calculate Z in z-gopal
  156. 1560 ZMS = Z       ' Z-factor well midpoint conditions
  157. 1570 '
  158. 1580 '   calculate Ims, this is its last value
  159. 1590 PRES = PRES.MS : TEMP = TEMP.MS
  160. 1600 GOSUB 10560   ' **** calculate In, static
  161. 1610 XIMS = XI
  162. 1620 '
  163. 1630 '   assume Iws = Ims, calculate Pws
  164. 1640 PRES.N = PRES.MS
  165. 1650 GOSUB 10610   ' **** calculate Pn
  166. 1660 PRES.WS = PRESSURE(IKOUNT)
  167. 1670 '
  168. 1680 '   find Zws
  169. 1690 PSEUDO.REDUCED.TEMP = TEMP.WS / PSEUDO.CRIT.TEMP
  170. 1700 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
  171. 1710 GOSUB 12250   ' **** calculate Z in z-gopal
  172. 1720 '
  173. 1730 '   calculate Iws
  174. 1740 PRES = PRES.WS : TEMP = TEMP.WS
  175. 1750 GOSUB 10560   ' **** calculate In, static
  176. 1760 '
  177. 1770 '   calculate Pws, reiterate
  178. 1780 PRES.N = PRES.MS
  179. 1790 GOSUB 10610   ' **** calculate Pn
  180. 1800 PRES.WS = PRESSURE(IKOUNT)
  181. 1810 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 1680
  182. 1820 '
  183. 1830 '
  184. 1840 '   last calculated Iws
  185. 1850 '   find Zws
  186. 1860 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
  187. 1870 GOSUB 12250   ' **** calculate Z in z-gopal
  188. 1880 ZWS = Z       ' Z-factor, bottom-hole conditions
  189. 1890 '
  190. 1900 '   calculate Its
  191. 1910 PRES = PRES.WS : TEMP = TEMP.WS
  192. 1920 GOSUB 10560   ' **** calculate In, static
  193. 1930 XIWS = XI
  194. 1940 '
  195. 1950 '
  196. 1960 '   apply Simpson's Rule
  197. 1970 '
  198. 1980 PRES.1 = (6# * WELL.FACTOR)
  199. 1990 PRES.2 = XITS + 4# * XIMS + XIWS
  200. 2000 PRES.WS = PRES.1 / PRES.2 + PRES.TS
  201. 2010 '
  202. 2020 '
  203. 2030 '   calculate formation volume factor
  204. 2040 '
  205. 2050 B.GAS = 35.348 * PRES.WS / ( ZWS * TEMP.WS )
  206. 2060 '
  207. 2070 '
  208. 2080 PRINT :PRINT "Formation Volume Factor = ";
  209. 2090 PRINT USING "####.##";B.GAS;:PRINT "  SCF/cu.ft."
  210. 2100 PRINT :PRINT
  211. 2110 PRINT : PRINT "STATIC BOTTOM-HOLE PRESSURE = ";
  212. 2120 PRINT USING "#######.##";PRES.WS;: PRINT "  psi":PRINT
  213. 2130 '
  214. 2140 '
  215. 2150 PRINT "press any key to continue"
  216. 2160 A$ = INKEY$ : IF A$ = "" THEN 2160
  217. 2170 CLS
  218. 2180 COLOR 0,7 : LOCATE 25,15
  219. 2190 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";
  220. 2200 COLOR 7,0 : LOCATE 1,1
  221. 2210 PRINT "Would you like:" : PRINT
  222. 2220 PRINT "    1.  hard copy output of data"
  223. 2230 PRINT "    2.  calculate another Pws "
  224. 2240 PRINT "    3.  calculate a Pwf, Pts, or Ptf "
  225. 2250 PRINT "    4.  end session" : PRINT
  226. 2260 INPUT "Enter choice  ", ICHOICE : PRINT
  227. 2270 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 2170
  228. 2280 ON ICHOICE GOTO 2290, 2830, 40, 2840
  229. 2290 BEEP : PRINT "READY PRINTER, press any key to continue"
  230. 2300 B$ = INKEY$ : IF B$ = "" THEN 2300
  231. 2310 LPRINT CHR$(18)
  232. 2320 FOR I = 1 TO 5 : LPRINT  : NEXT I
  233. 2330 LPRINT SPC(20);"STATIC BOTTOM-HOLE PRESSURE DETERMINATION"
  234. 2340 LPRINT:PRINT :PRINT :PRINT
  235. 2350 PRINT "Enter well name or note (one line only)"
  236. 2360 INPUT NOTE$ : LPRINT NOTE$
  237. 2370 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
  238. 2380 LPRINT USING "\                            \";"Surface Temperature";
  239. 2390 LPRINT USING "######.#";TEMP.TS - 459.67 ;
  240. 2400 LPRINT "  deg.F"
  241. 2410 LPRINT USING "\                            \";"Bottom-Hole Temperature";
  242. 2420 LPRINT USING "######.#";TEMP.WS - 459.67 ;
  243. 2430 LPRINT "  deg.F"
  244. 2440 LPRINT USING "\                            \";"Shut-in Well Head Pressure";
  245. 2450 LPRINT USING "######.#";PRES.TS;:LPRINT "  psi"
  246. 2460 LPRINT USING "\                            \";"Well Depth";
  247. 2470 LPRINT USING "######.#";DEPTH;:LPRINT "  ft."
  248. 2480 IF INGAS = 1 THEN 2610
  249. 2490 LPRINT : LPRINT "Fluid Analysis:"
  250. 2500 FOR J = 1 TO NUMBER.COMPOUNDS
  251. 2510 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
  252. 2520 LPRINT USING "\                  \";COMPOUND.NAME$(J);
  253. 2530 LPRINT "  mole % = ";
  254. 2540 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
  255. 2550 NEXT J : LPRINT
  256. 2560 LPRINT "Apparent Molecular Weight = ";
  257. 2570 LPRINT USING "####.####";APPARENT.MOL.WT
  258. 2580 LPRINT "Gas Gravity = ";
  259. 2590 LPRINT USING "##.####";GAS.GRAV
  260. 2600 GOTO 2640
  261. 2610 LPRINT USING "\                            \";"Gas Gravity";
  262. 2620 LPRINT USING "##.####";GAS.GRAV
  263. 2630 LPRINT
  264. 2640 LPRINT "Critical Temp = ";
  265. 2650 LPRINT USING "####.###";PSEUDO.CRIT.TEMP;:LPRINT "  degR"
  266. 2660 LPRINT "Critical Pres = ";
  267. 2670 LPRINT USING "####.###";PSEUDO.CRIT.PRES;:LPRINT "   psi"
  268. 2680 LPRINT : LPRINT : LPRINT
  269. 2690 LPRINT "    Zws = ";
  270. 2700 LPRINT USING "##.####";ZWS;
  271. 2710 LPRINT "  (reservoir conditions)"
  272. 2720 LPRINT "    Zms = ";
  273. 2730 LPRINT USING "##.####";ZMS;
  274. 2740 LPRINT "  (well midpoint conditions)"
  275. 2750 LPRINT
  276. 2760 LPRINT "    Formation Volume Factor = ";
  277. 2770 LPRINT USING "####.##";B.GAS;:LPRINT "  SCF/cu.ft."
  278. 2780 LPRINT :LPRINT
  279. 2790 LPRINT "STATIC BOTTOM-HOLE PRESSURE = ";
  280. 2800 LPRINT USING "######.##";PRES.WS;:LPRINT "  psi"
  281. 2810 LPRINT CHR$(12)
  282. 2820 PRINT : PRINT "print complete " : PRINT : GOTO 2210
  283. 2830 ERASE PRESSURE : IIIRUN = 10 : GOTO 420
  284. 2840 CLS : LOCATE 11,1,0
  285. 2850 PRINT SPC(23)"Remove diskette. Turn machine off."
  286. 2860 PRINT : PRINT SPC(33) ; "Have a nice day."
  287. 2870 PRINT :PRINT :PRINT :PRINT
  288. 2880 '
  289. 2890 '
  290. 2900 END
  291. 2910 ' ***********************************************************************
  292. 2920 ' ***********************************************************************
  293. 2930 '
  294. 2940 '   PRES-WF.BAS
  295. 2950 '
  296. 2960 '
  297. 2970 '   This section calculates flowing bottom-hole pressure
  298. 2980 '   from flowing tubing pressure and temperature, bottom-
  299. 2990 '   hole temperature, well depth, tubing ID, flow rate, and
  300. 3000 '   fluid analysis or gravity.
  301. 3010 '
  302. 3020 '
  303. 3030 IRUN = 2 : IKOUNT = 0
  304. 3040 '
  305. 3050 CLS ':PRINT SPC(15);"FLOWING BOTTOM-HOLE PRESSURE DETERMINATION"
  306. 3060 COLOR 0,7 : LOCATE 25,15
  307. 3070 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
  308. 3080 COLOR 7,0 : LOCATE 2,1 : PRINT : PRINT
  309. 3090 PRINT "Input Requirements:"
  310. 3100 PRINT "   Bottom-Hole Temperature"
  311. 3110 PRINT "   Flowing Tubing Temperature"
  312. 3120 PRINT "   Flowing Tubing Pressure "
  313. 3130 PRINT "   Well Depth (mean of perfs)"
  314. 3140 PRINT "   Tubing ID"
  315. 3150 PRINT "   Flow Rate"
  316. 3160 PRINT "   Fluid Data (analysis or gravity)"
  317. 3170 PRINT : PRINT
  318. 3180 INPUT "Bottom-Hole Temp, degF =  ",TEMP.WF
  319. 3190 TEMP.WF = TEMP.WF + 459.67# : PRINT
  320. 3200 INPUT "Flowing Tubing Temp, degF =  ",TEMP.TF
  321. 3210 TEMP.TF = TEMP.TF + 459.67# : PRINT
  322. 3220 INPUT "Flowing Tubing Pressure, psi =  ",PRES.TF : PRINT
  323. 3230 INPUT "Well Depth, ft =  ",DEPTH : PRINT
  324. 3240 INPUT "Tubing ID, inches =  ",PIPE.ID : PRINT
  325. 3250 INPUT "Flow Rate, MMCF/D =  ",Q : PRINT : PRINT
  326. 3260 IF IIIRUN <> 10 THEN 3340
  327. 3270 IF INGAS = 1 THEN 3340
  328. 3280 INPUT "Does fluid data change ?  ( 1 = yes, 2 = no )  ",ICHECK
  329. 3290 IF ICHECK = 1 THEN 3320
  330. 3300 IF ICHECK = 2 THEN 3530
  331. 3310 BEEP : GOTO 3280
  332. 3320 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
  333. 3330 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
  334. 3340 PRINT "Input Fluid Data Type:" : PRINT
  335. 3350 PRINT SPC(23);"1 = Gas Gravity"
  336. 3360 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
  337. 3370 PRINT SPC(26);" Enter 1 or 2"
  338. 3380 PRINT SPC(29);:INPUT " ",INGAS
  339. 3390 IF INGAS <> 1 THEN 3420
  340. 3400 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from gas gravity
  341. 3410 GOTO 3530
  342. 3420 IF INGAS <> 2 THEN
  343. 3430 GOSUB 13090   ' **** gas-in, fluid analysis input
  344. 3440 '   return from gas-in
  345. 3450 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from fluid analysis
  346. 3460 GOTO 3530
  347. 3470 CLS : BEEP
  348. 3480 COLOR 0,7 : LOCATE 25,15
  349. 3490 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
  350. 3500 COLOR 7,0 : LOCATE 1,1 : GOTO 3340
  351. 3510 '
  352. 3520 '
  353. 3530 '   return from Ppc-Tpc subroutine with gas gravity, pseudocritical
  354. 3540 '   pressure, and pseudocritical temperature
  355. 3550 '
  356. 3560 '
  357. 3570 PRINT : PRINT "CRITICAL TEMP = ";
  358. 3580 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT "  degR"
  359. 3590 PRINT "CRITICAL PRES = ";
  360. 3600 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT "  psi"
  361. 3610 PRINT "GAS GRAVITY = ";
  362. 3620 PRINT USING "#####.####";GAS.GRAV
  363. 3630 IF INGAS = 1 THEN 3660
  364. 3640 PRINT "APPARENT MOLECULAR WEIGHT = ";
  365. 3650 PRINT USING "#####.####";APPARENT.MOL.WT
  366. 3660 PRINT
  367. 3670 '
  368. 3680 TEMP.MF = (TEMP.TF + TEMP.WF) / 2#
  369. 3690 '
  370. 3700 WELL.FACTOR = 18.75# * GAS.GRAV * DEPTH
  371. 3710 '
  372. 3720 IF PIPE.ID <4.277# THEN 3750
  373. 3730 F = .10337# * Q / PIPE.ID^2.582#
  374. 3740 GOTO 3780
  375. 3750 F = .10797# * Q / PIPE.ID^2.612#
  376. 3760 '
  377. 3770 '
  378. 3780 '   calculate Pmf, midpoint flowing pressure
  379. 3790 '
  380. 3800 PSEUDO.REDUCED.TEMP = TEMP.TF / PSEUDO.CRIT.TEMP
  381. 3810 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
  382. 3820 '
  383. 3830 '   get Ztf
  384. 3840 GOSUB 12250   ' **** calculate Z in z-gopal
  385. 3850 '   calculate Itf
  386. 3860 TEMP = TEMP.TF : PRES = PRES.TF
  387. 3870 GOSUB 10670
  388. 3880 XITF = XI
  389. 3890 '
  390. 3900 '   calculate Pmf
  391. 3910 PRES.N = PRES.TF
  392. 3920 GOSUB 10610   ' **** calculate Pn
  393. 3930 PRES.MF = PRESSURE(IKOUNT)
  394. 3940 '
  395. 3950 '   find new Zmf
  396. 3960 PSEUDO.REDUCED.TEMP = TEMP.MF / PSEUDO.CRIT.TEMP
  397. 3970 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
  398. 3980 GOSUB 12250   ' **** calculate Z in z-gopal
  399. 3990 '
  400. 4000 '   calculate Imf
  401. 4010 TEMP = TEMP.MF : PRES = PRES.MF
  402. 4020 GOSUB 10670
  403. 4030 '
  404. 4040 '   calculate new Pmf, reiterate
  405. 4050 PRES.N = PRES.TF
  406. 4060 GOSUB 10610   ' **** calculate Pn
  407. 4070 PRES.MF = PRESSURE(IKOUNT)
  408. 4080 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 3950
  409. 4090 '
  410. 4100 '
  411. 4110 '   calculate Pwf, bottom hole flowing pressure
  412. 4120 '
  413. 4130 IKOUNT = 0
  414. 4140 '
  415. 4150 '   find Zmf for last Imf
  416. 4160 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
  417. 4170 GOSUB 12250   ' **** calculate Z in z-gopal
  418. 4180 ZMF = Z
  419. 4190 '
  420. 4200 '   calculate Imf, this is its last value
  421. 4210 PRES = PRES.MF : TEMP = TEMP.MF
  422. 4220 GOSUB 10670
  423. 4230 XIMF = XI
  424. 4240 '
  425. 4250 '   assume Iwf = Imf, calculate Pwf
  426. 4260 PRES.N = PRES.MF
  427. 4270 GOSUB 10610   ' **** calculate Pn
  428. 4280 PRES.WF = PRESSURE(IKOUNT)
  429. 4290 '
  430. 4300 '   find Zwf
  431. 4310 PSEUDO.REDUCED.TEMP = TEMP.WF / PSEUDO.CRIT.TEMP
  432. 4320 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
  433. 4330 GOSUB 12250   ' **** calculate Z in z-gopal
  434. 4340 '
  435. 4350 '   calculate Iwf
  436. 4360 PRES = PRES.WF : TEMP = TEMP.WF
  437. 4370 GOSUB 10670
  438. 4380 '
  439. 4390 '   calculate Pwf, reiterate
  440. 4400 PRES.N = PRES.MF
  441. 4410 GOSUB 10610   ' **** calculate Pn
  442. 4420 PRES.WF = PRESSURE(IKOUNT)
  443. 4430 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 4300
  444. 4440 '
  445. 4450 '   last calculated Iwf
  446. 4460 '   find Zwf
  447. 4470 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
  448. 4480 GOSUB 12250   ' **** calculate Z in z-gopal
  449. 4490 ZWF = Z
  450. 4500 '
  451. 4510 '   calculate Iwf
  452. 4520 PRES = PRES.WF : TEMP = TEMP.WF
  453. 4530 GOSUB 10670
  454. 4540 XIWF = XI
  455. 4550 '
  456. 4560 '
  457. 4570 '   apply Simpson's Rule
  458. 4580 '
  459. 4590 PRES.1 = 3# * WELL.FACTOR
  460. 4600 PRES.2 = XITF + 4# * XIMF + XIWF
  461. 4610 PRES.WF = PRES.1 / PRES.2 + PRES.TF
  462. 4620 '
  463. 4630 '
  464. 4640 PRINT : PRINT "FLOWING BOTTOM-HOLE PRESSURE = ";
  465. 4650 PRINT USING "#######.##";PRES.WF ;: PRINT "  psi" : PRINT
  466. 4660 '
  467. 4670 '
  468. 4680 PRINT "press any key to continue"
  469. 4690 A$ = INKEY$ : IF A$ = "" THEN 4690
  470. 4700 CLS
  471. 4710 COLOR 0,7 : LOCATE 25,15
  472. 4720 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
  473. 4730 COLOR 7,0 : LOCATE 1,1
  474. 4740 PRINT "Would you like:" : PRINT
  475. 4750 PRINT "    1.  hard copy output of data"
  476. 4760 PRINT "    2.  calculate another Pwf "
  477. 4770 PRINT "    3.  calculate a Pws, Pts, or Ptf "
  478. 4780 PRINT "    4.  end session" : PRINT
  479. 4790 INPUT "Enter choice  ", ICHOICE : PRINT
  480. 4800 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 4700
  481. 4810 ON ICHOICE GOTO 4820, 5390, 40, 5400
  482. 4820 BEEP : PRINT "READY PRINTER, press any key to continue"
  483. 4830 B$ = INKEY$ : IF B$ = "" THEN 4830
  484. 4840 LPRINT CHR$(18)
  485. 4850 FOR I = 1 TO 5 : LPRINT  : NEXT I
  486. 4860 LPRINT SPC(21);"FLOWING BOTTOM-HOLE PRESSURE DETERMINATION"
  487. 4870 LPRINT :LPRINT
  488. 4880 PRINT "Enter well name or note (one line only)"
  489. 4890 INPUT NOTE$ : LPRINT NOTE$
  490. 4900 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
  491. 4910 LPRINT USING "\                            \";"Tubing Temperature";
  492. 4920 LPRINT USING "######.#";TEMP.TF - 459.67 ;
  493. 4930 LPRINT "  deg.F"
  494. 4940 LPRINT USING "\                            \";"Bottom-Hole Temperature";
  495. 4950 LPRINT USING "######.#";TEMP.WF - 459.67 ;
  496. 4960 LPRINT "  deg.F"
  497. 4970 LPRINT USING "\                            \";"Flowing Tubing Pressure";
  498. 4980 LPRINT USING "######.#";PRES.TF;:LPRINT "  psi"
  499. 4990 LPRINT USING "\                            \";"Well Depth";
  500. 5000 LPRINT USING "######.#";DEPTH;:LPRINT "  ft."
  501. 5010 LPRINT USING "\                            \";"Tubing ID";
  502. 5020 LPRINT USING "###.####";PIPE.ID;:LPRINT "  inches"
  503. 5030 LPRINT USING "\                            \";"Flow Rate";
  504. 5040 LPRINT USING "###.####";Q;:LPRINT "  MMCFD"
  505. 5050 IF INGAS = 1 THEN 5180
  506. 5060 LPRINT : LPRINT "Fluid Analysis:"
  507. 5070 FOR J = 1 TO NUMBER.COMPOUNDS
  508. 5080 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
  509. 5090 LPRINT USING "\                  \";COMPOUND.NAME$(J);
  510. 5100 LPRINT "  mole % = ";
  511. 5110 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
  512. 5120 NEXT J : LPRINT
  513. 5130 LPRINT "Apparent Molecular Weight = ";
  514. 5140 LPRINT USING "####.####";APPARENT.MOL.WT
  515. 5150 LPRINT "Gas Gravity = ";
  516. 5160 LPRINT USING "##.####";GAS.GRAV
  517. 5170 GOTO 5210
  518. 5180 LPRINT USING "\                            \";"Gas Gravity";
  519. 5190 LPRINT USING "##.####";GAS.GRAV
  520. 5200 LPRINT
  521. 5210 LPRINT "Critical Temp = ";
  522. 5220 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
  523. 5230 LPRINT "Critical Pres = ";
  524. 5240 LPRINT USING "####.###";PSEUDO.CRIT.PRES
  525. 5250 LPRINT : LPRINT : LPRINT
  526. 5260 LPRINT "    Zwf = ";:LPRINT USING "##.####";ZWF;
  527. 5270 LPRINT "  (reservoir conditions)"
  528. 5280 LPRINT "    Zmf = ";:LPRINT USING "##.####";ZMF;
  529. 5290 LPRINT "  (well midpoint conditions)"
  530. 5300 LPRINT
  531. 5310 LPRINT "FLOWING BOTTOM-HOLE PRESSURE = ";
  532. 5320 LPRINT USING "######.##";PRES.WF;:LPRINT "  psi"
  533. 5330 LPRINT CHR$(12)
  534. 5340 CLS : PRINT : PRINT "print complete "
  535. 5350 COLOR 0,7 : LOCATE 25,15
  536. 5360 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";
  537. 5370 COLOR 7,0 : LOCATE 1,1
  538. 5380 PRINT : GOTO 4740
  539. 5390 ERASE PRESSURE : IIIRUN = 10 : GOTO 2940
  540. 5400 CLS : LOCATE 11,1,0
  541. 5410 PRINT SPC(23)"Remove diskette. Turn machine off."
  542. 5420 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
  543. 5430 '
  544. 5440 '
  545. 5450 END
  546. 5460 ' ************************************************************************
  547. 5470 ' ************************************************************************
  548. 5480 '
  549. 5490 '   PRES-TS.BAS
  550. 5500 '
  551. 5510 '
  552. 5520 '   This section calculates static tubing pressure from
  553. 5530 '   bottom-hole  pressure and temperature, surface temperature,
  554. 5540 '   well depth, and fluid analysis or gas gravity.
  555. 5550 '
  556. 5560 '
  557. 5570 IRUN = 3 : IKOUNT = 0
  558. 5580 '
  559. 5590 CLS ':PRINT SPC(20);"STATIC TUBING PRESSURE DETERMINATION"
  560. 5600 COLOR 0,7 : LOCATE 25,20
  561. 5610 PRINT "STATIC TUBING PRESSURE DETERNINATION";
  562. 5620 COLOR 7,0 : LOCATE 2,1
  563. 5630 PRINT :PRINT
  564. 5640 PRINT "Input Requirements:"
  565. 5650 PRINT "   Surface Temperature"
  566. 5660 PRINT "   Bottom-Hole Temperature"
  567. 5670 PRINT "   Static Bottom-Hole Pressure (SIBHP)"
  568. 5680 PRINT "   Well Depth (mean of perfs)"
  569. 5690 PRINT "   Fluid Data (analysis or gravity)"
  570. 5700 PRINT "   Fluid Data (analysis or gravity)"
  571. 5710 PRINT : PRINT
  572. 5720 INPUT "Surface Temp, degF =  ",TEMP.TS
  573. 5730 TEMP.TS = TEMP.TS + 459.67# : PRINT
  574. 5740 INPUT "Bottom-Hole Temp, degF =  ",TEMP.WS
  575. 5750 TEMP.WS = TEMP.WS + 459.67# : PRINT
  576. 5760 INPUT "Static Bottom-Hole Pressure, psi =  ",PRES.WS : PRINT
  577. 5770 INPUT "Well Depth, ft =  ",DEPTH : PRINT
  578. 5780 IF IIIRUN <> 10 THEN 5860
  579. 5790 IF INGAS = 1 THEN 5860
  580. 5800 INPUT "Does fluid data change ?  ( 1 = yes, 2 = no )  ", ICHECK
  581. 5810 IF ICHECK = 1 THEN 5840
  582. 5820 IF ICHECK = 2 THEN 6050
  583. 5830 BEEP : GOTO 5800
  584. 5840 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
  585. 5850 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
  586. 5860 PRINT "Input Fluid Data Type:" : PRINT
  587. 5870 PRINT SPC(23);"1 = Gas Gravity"
  588. 5880 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
  589. 5890 PRINT SPC(26);" Enter 1 or 2"
  590. 5900 PRINT SPC(29);:INPUT " ",INGAS
  591. 5910 IF INGAS <> 1 THEN 5940
  592. 5920 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from gas gravity
  593. 5930 GOTO 6050
  594. 5940 IF INGAS <> 2 THEN 5990
  595. 5950 GOSUB 13090   ' **** gas-in, fluid analysis input
  596. 5960 '   return from gas-in
  597. 5970 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from fluid analysis
  598. 5980 GOTO 6050
  599. 5990 CLS : BEEP
  600. 6000 COLOR 0,7 : LOCATE 25,20
  601. 6010 PRINT "STATIC TUBING PRESSURE DETERNINATION";
  602. 6020 COLOR 7,0 : LOCATE 2,1 : GOTO 5860
  603. 6030 '
  604. 6040 '
  605. 6050 '   return from Ppc-Tpc subroutine with gas gravity, pseudocritical
  606. 6060 '   pressure, and pseudocritical temperature
  607. 6070 '
  608. 6080 PRINT : PRINT "CRITICAL TEMP = ";
  609. 6090 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT "  degR"
  610. 6100 PRINT "CRITICAL PRES = ";
  611. 6110 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT "  psi"
  612. 6120 PRINT "GAS GRAVITY = ";
  613. 6130 PRINT USING "#####.####";GAS.GRAV
  614. 6140 IF INGAS = 1 THEN 6170
  615. 6150 PRINT "APPARENT MOLECULAR WEIGHT = ";
  616. 6160 PRINT USING "#####.####";APPARENT.MOL.WT
  617. 6170 PRINT
  618. 6180 '
  619. 6190 TEMP.MS = (TEMP.TS + TEMP.WS) / 2#
  620. 6200 '
  621. 6210 WELL.FACTOR = .01875# * GAS.GRAV * DEPTH
  622. 6220 '
  623. 6230 '
  624. 6240 '   calculate Pms, static midpoint pressure
  625. 6250 '
  626. 6260 PSEUDO.REDUCED.TEMP = TEMP.WS / PSEUDO.CRIT.TEMP
  627. 6270 PSEUDO.REDUCED.PRES = PRES.WS / PSEUDO.CRIT.PRES
  628. 6280 '
  629. 6290 '   get Zws
  630. 6300 GOSUB 12250   ' **** calculate Z in z-gopal
  631. 6310 ZWS = Z
  632. 6320 '
  633. 6330 '   calculate Iws
  634. 6340 TEMP = TEMP.WS : PRES = PRES.WS
  635. 6350 GOSUB 10560   ' **** calculate In, static
  636. 6360 XIWS = XI
  637. 6370 '
  638. 6380 '   calculate Pms
  639. 6390 PRES.N = PRES.WS
  640. 6400 GOSUB 10610   ' **** calculate Pn
  641. 6410 PRES.MS = PRESSURE(IKOUNT)
  642. 6420 '
  643. 6430 '   find new Zms
  644. 6440 PSEUDO.REDUCED.TEMP = TEMP.MS / PSEUDO.CRIT.TEMP
  645. 6450 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
  646. 6460 GOSUB 12250   ' **** calculate Z in z-gopal
  647. 6470 '
  648. 6480 '   calculate Ims
  649. 6490 TEMP = TEMP.MS : PRES = PRES.MS
  650. 6500 GOSUB 10560   ' **** calculate In, static
  651. 6510 '
  652. 6520 '   calculate new Pms, reiterate
  653. 6530 PRES.N = PRES.WS
  654. 6540 GOSUB 10610   ' **** calculate Pn
  655. 6550 PRES.MS = PRESSURE(IKOUNT)
  656. 6560 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 6430
  657. 6570 '
  658. 6580 '
  659. 6590 '   calculate Pts, static tubing pressure
  660. 6600 '
  661. 6610 IKOUNT = 0
  662. 6620 '
  663. 6630 '   find Zms for last Ims
  664. 6640 PSEUDO.REDUCED.PRES = PRES.MS / PSEUDO.CRIT.PRES
  665. 6650 GOSUB 12250   ' **** calculate Z in z-gopal
  666. 6660 ZMS = Z
  667. 6670 '
  668. 6680 '   calculate Ims, this is its last value
  669. 6690 PRES = PRES.MS : TEMP = TEMP.MS
  670. 6700 GOSUB 10560   ' **** calculate In, static
  671. 6710 XIMS = XI
  672. 6720 '
  673. 6730 '   assume Its = Ims, calculate Pts
  674. 6740 PRES.N = PRES.MS
  675. 6750 GOSUB 10610   ' **** calculate Pn
  676. 6760 PRES.TS = PRESSURE(IKOUNT)
  677. 6770 '
  678. 6780 '   find Zts
  679. 6790 PSEUDO.REDUCED.TEMP = TEMP.TS / PSEUDO.CRIT.TEMP
  680. 6800 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
  681. 6810 GOSUB 12250   ' **** calculate Z in z-gopal
  682. 6820 '
  683. 6830 '   calculate Its
  684. 6840 PRES = PRES.TS : TEMP = TEMP.TS
  685. 6850 GOSUB 10560   ' **** calculate In, static
  686. 6860 '
  687. 6870 '   calculate Pts, reiterate
  688. 6880 PRES.N = PRES.MS
  689. 6890 GOSUB 10610   ' **** calculate Pn
  690. 6900 PRES.TS = PRESSURE(IKOUNT)
  691. 6910 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 6780
  692. 6920 '
  693. 6930 '
  694. 6940 '   last calculated Its
  695. 6950 '   find Zts
  696. 6960 PSEUDO.REDUCED.PRES = PRES.TS / PSEUDO.CRIT.PRES
  697. 6970 GOSUB 12250   ' **** calculate Z in z-gopal
  698. 6980 '
  699. 6990 '   calculate Its
  700. 7000 PRES = PRES.TS : TEMP = TEMP.TS
  701. 7010 GOSUB 10560   ' **** calculate In, static
  702. 7020 XITS = XI
  703. 7030 '
  704. 7040 '
  705. 7050 '   apply Simpson's Rule
  706. 7060 '
  707. 7070 PRES.1 = -(6# * WELL.FACTOR)
  708. 7080 PRES.2 = XITS + 4# * XIMS + XIWS
  709. 7090 PRES.TS = PRES.1 / PRES.2 + PRES.WS
  710. 7100 '
  711. 7110 '
  712. 7120 PRINT : PRINT "STATIC TUBING PRESSURE = ";
  713. 7130 PRINT USING "#######.##";PRES.TS;: PRINT "  psi":PRINT
  714. 7140 '
  715. 7150 '
  716. 7160 PRINT "press any key to continue"
  717. 7170 A$ = INKEY$ : IF A$ = "" THEN 7170
  718. 7180 CLS
  719. 7190 COLOR 0,7 : LOCATE 25,20
  720. 7200 PRINT "STATIC TUBING PRESSURE DETERNINATION";
  721. 7210 COLOR 7,0 : LOCATE 2,1
  722. 7220 PRINT "Would you like:" : PRINT
  723. 7230 PRINT "    1.  hard copy output of data"
  724. 7240 PRINT "    2.  calculate another Pts "
  725. 7250 PRINT "    3.  calculate a Pws, Pwf, or Ptf "
  726. 7260 PRINT "    4.  end session" : PRINT
  727. 7270 INPUT "Enter choice  ", ICHOICE : PRINT
  728. 7280 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 7180
  729. 7290 ON ICHOICE GOTO 7300, 7850, 40, 7860
  730. 7300 BEEP : PRINT "READY PRINTER, press any key to continue"
  731. 7310 B$ = INKEY$ : IF B$ = "" THEN 7310
  732. 7320 LPRINT CHR$(18)
  733. 7330 FOR I = 1 TO 5 : LPRINT  : NEXT I
  734. 7340 LPRINT SPC(23);"STATIC TUBING PRESSURE DETERMINATION"
  735. 7350 LPRINT:PRINT :PRINT :PRINT
  736. 7360 PRINT "Enter well name or note (one line only)"
  737. 7370 INPUT NOTE$
  738. 7380 LPRINT NOTE$
  739. 7390 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
  740. 7400 LPRINT USING "\                            \";"Surface Temperature";
  741. 7410 LPRINT USING "######.#";TEMP.TS - 459.67 ;
  742. 7420 LPRINT "  deg.F"
  743. 7430 LPRINT USING "\                            \";"Bottom-Hole Temperature";
  744. 7440 LPRINT USING "######.#";TEMP.WS - 459.67 ;
  745. 7450 LPRINT "  deg.F"
  746. 7460 LPRINT USING "\                            \";"Static Bottom-Hole Pressure";
  747. 7470 LPRINT USING "######.#";PRES.WS;:LPRINT "  psi"
  748. 7480 LPRINT USING "\                            \";"Well Depth";
  749. 7490 LPRINT USING "######.#";DEPTH;:LPRINT "  ft."
  750. 7500 IF INGAS = 1 THEN 7630
  751. 7510 LPRINT : LPRINT "Fluid Analysis:"
  752. 7520 FOR J = 1 TO NUMBER.COMPOUNDS
  753. 7530 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
  754. 7540 LPRINT USING "\                  \";COMPOUND.NAME$(J);
  755. 7550 LPRINT "  mole % = ";
  756. 7560 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
  757. 7570 NEXT J : LPRINT
  758. 7580 LPRINT "Apparent Molecular Weight = ";
  759. 7590 LPRINT USING "####.####";APPARENT.MOL.WT
  760. 7600 LPRINT "Gas Gravity = ";
  761. 7610 LPRINT USING "##.####";GAS.GRAV
  762. 7620 GOTO 7660
  763. 7630 LPRINT USING "\                            \";"Gas Gravity";
  764. 7640 LPRINT USING "##.####";GAS.GRAV
  765. 7650 LPRINT
  766. 7660 LPRINT "Critical Temp = ";
  767. 7670 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
  768. 7680 LPRINT "Critical Pres = ";
  769. 7690 LPRINT USING "####.###";PSEUDO.CRIT.PRES
  770. 7700 LPRINT : LPRINT : LPRINT
  771. 7710 LPRINT "    Zws = ";
  772. 7720 LPRINT USING "##.####";ZWS;
  773. 7730 LPRINT "  (reservoir conditions)"
  774. 7740 LPRINT "    Zms = ";
  775. 7750 LPRINT USING "##.####";ZMS;
  776. 7760 LPRINT "  (well midpoint conditions)"
  777. 7770 LPRINT
  778. 7780 LPRINT "STATIC TUBING PRESSURE = ";
  779. 7790 LPRINT USING "######.##";PRES.TS ;:LPRINT "  psi"
  780. 7800 LPRINT CHR$(12)
  781. 7810 CLS : PRINT : PRINT "print complete "
  782. 7820 COLOR 0,7 : LOCATE 25,20
  783. 7830 PRINT "STATIC TUBING PRESSURE DETERNINATION";
  784. 7840 COLOR 7,0 : LOCATE 3,1 : PRINT : GOTO 7220
  785. 7850 ERASE PRESSURE : IIIRUN = 10 : GOTO 5490
  786. 7860 CLS : LOCATE 11,1,0
  787. 7870 PRINT SPC(23)"Remove diskette. Turn machine off."
  788. 7880 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
  789. 7890 '
  790. 7900 '
  791. 7910 END
  792. 7920 ' ***********************************************************************
  793. 7930 ' ***********************************************************************
  794. 7940 '
  795. 7950 '   PRES-TF.BAS
  796. 7960 '
  797. 7970 '
  798. 7980 '   This section calculates flowing tubing pressure
  799. 7990 '   from flowing bottom-hole pressure, reservoir temperature,
  800. 8000 '   flowing tubing temperature, well depth, tubing ID, flow
  801. 8010 '   rate, and fluid analysis or gas gravity.
  802. 8020 '
  803. 8030 '
  804. 8040 IRUN = 4 : IKOUNT = 0
  805. 8050 '
  806. 8060 '
  807. 8070 CLS ':PRINT SPC(20);"FLOWING TUBING PRESSURE DETERMINATION"
  808. 8080 COLOR 0,7 : LOCATE 25,20
  809. 8090 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  810. 8100 COLOR 7,0 : LOCATE 2,1
  811. 8110 PRINT :PRINT
  812. 8120 PRINT "Input Requirements:"
  813. 8130 PRINT "   Bottom-Hole Temperature"
  814. 8140 PRINT "   Flowing Tubing Temperature"
  815. 8150 PRINT "   Flowing Bottom-Hole Pressure"
  816. 8160 PRINT "   Well Depth (mean of perfs)"
  817. 8170 PRINT "   Tubing ID"
  818. 8180 PRINT "   Flow Rate"
  819. 8190 PRINT "   Fluid Data (analysis or gravity)"
  820. 8200 PRINT : PRINT
  821. 8210 INPUT "Bottom-Hole Temp, degF =  ",TEMP.WF
  822. 8220 TEMP.WF = TEMP.WF + 459.67# : PRINT
  823. 8230 INPUT "Flowing Tubing Temp, degF =  ",TEMP.TF
  824. 8240 TEMP.TF = TEMP.TF + 459.67# : PRINT
  825. 8250 INPUT "Flowing Bottom-Hole Pressure, psi =  ",PRES.WF : PRINT
  826. 8260 INPUT "Well Depth, ft =  ",DEPTH : PRINT
  827. 8270 INPUT "Tubing ID, inches =  ",PIPE.ID : PRINT
  828. 8280 INPUT "Flow Rate, MMCF/D =  ",Q : PRINT : PRINT
  829. 8290 IF IIIRUN <> 10 THEN 8370
  830. 8300 IF INGAS = 1 THEN 8370
  831. 8310 INPUT "Does fluid data change ?  ( 1 = yes, 2 = no )  ", ICHECK
  832. 8320 IF ICHECK = 1 THEN 8350
  833. 8330 IF ICHECK = 2 THEN 8560
  834. 8340 BEEP : GOTO 8310
  835. 8350 ERASE COMPOUND.NAME$,MOLE.FRACTION#,IID,CHEM.NAME$,FORM$,MW#,CP,CT
  836. 8360 ERASE SG,ID,MOLE.WEIGHT#,CRIT.PRES,CRIT.TEMP,SP.GR
  837. 8370 PRINT "Input Fluid Data Type:" : PRINT
  838. 8380 PRINT SPC(23);"1 = Gas Gravity"
  839. 8390 PRINT SPC(23);"2 = Fluid Analysis" : PRINT
  840. 8400 PRINT SPC(26);" Enter 1 or 2"
  841. 8410 PRINT SPC(29);:INPUT " ",INGAS
  842. 8420 IF INGAS <> 1 THEN 8450
  843. 8430 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from gas gravity
  844. 8440 GOTO 8560
  845. 8450 IF INGAS <> 2 THEN 8500
  846. 8460 GOSUB 13090   ' **** gas-in, fluid analysis input
  847. 8470 '   return from gas-in
  848. 8480 GOSUB 10740   ' **** pseudotp for Ppc-Tpc from fluid analysis
  849. 8490 GOTO 8560
  850. 8500 CLS : BEEP
  851. 8510 COLOR 0,7 : LOCATE 25,20
  852. 8520 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  853. 8530 COLOR 7,0 : LOCATE 2,1 : GOTO 8370
  854. 8540 '
  855. 8550 '
  856. 8560 '   return from Ppc-Tpc subroutine with gas gravity, pseudocritical
  857. 8570 '   pressure, and pseudocritical temperature
  858. 8580 '
  859. 8590 '
  860. 8600 PRINT : PRINT "Critical Temp = ";
  861. 8610 PRINT USING "#####.####";PSEUDO.CRIT.TEMP;:PRINT "  degR"
  862. 8620 PRINT "Critical Pres = ";
  863. 8630 PRINT USING "#####.####";PSEUDO.CRIT.PRES;:PRINT "  psi"
  864. 8640 PRINT "Gas Gravity = ";
  865. 8650 PRINT USING "##.####";GAS.GRAV
  866. 8660 IF INGAS = 1 THEN 8690
  867. 8670 PRINT "Apparent Molecular Weight = ";
  868. 8680 PRINT USING "#####.####";APPARENT.MOL.WT
  869. 8690 PRINT
  870. 8700 '
  871. 8710 TEMP.MF = (TEMP.TF + TEMP.WF) / 2#
  872. 8720 '
  873. 8730 WELL.FACTOR = 18.75# * GAS.GRAV * DEPTH
  874. 8740 '
  875. 8750 IF PIPE.ID <4.277# THEN 8780
  876. 8760 F = .10337# * Q / PIPE.ID^2.582#
  877. 8770 GOTO 8810
  878. 8780 F = .10797# * Q / PIPE.ID^2.612#
  879. 8790 '
  880. 8800 '
  881. 8810 '   calculate Pmf, midpoint flowing pressure
  882. 8820 '
  883. 8830 PSEUDO.REDUCED.TEMP = TEMP.WF / PSEUDO.CRIT.TEMP
  884. 8840 PSEUDO.REDUCED.PRES = PRES.WF / PSEUDO.CRIT.PRES
  885. 8850 '
  886. 8860 '   get Zwf
  887. 8870 GOSUB 12250   ' **** calculate Z in z-gopal
  888. 8880 ZWF = Z
  889. 8890 '
  890. 8900 '   calculate Itf
  891. 8910 TEMP = TEMP.WF : PRES = PRES.WF
  892. 8920 GOSUB 10670
  893. 8930 XIWF = XI
  894. 8940 '
  895. 8950 '   calculate Pmf
  896. 8960 PRES.N = PRES.WF
  897. 8970 GOSUB 10610   ' **** calculate Pn
  898. 8980 PRES.MF = PRESSURE(IKOUNT)
  899. 8990 '
  900. 9000 '   find new Zmf
  901. 9010 PSEUDO.REDUCED.TEMP = TEMP.MF / PSEUDO.CRIT.TEMP
  902. 9020 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
  903. 9030 GOSUB 12250   ' **** calculate Z in z-gopal
  904. 9040 '
  905. 9050 '   calculate Imf
  906. 9060 TEMP = TEMP.MF : PRES = PRES.MF
  907. 9070 GOSUB 10670
  908. 9080 '
  909. 9090 '   calculate new Pmf, reiterate
  910. 9100 PRES.N = PRES.WF
  911. 9110 GOSUB 10610   ' **** calculate Pn
  912. 9120 PRES.MF = PRESSURE(IKOUNT)
  913. 9130 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 9000
  914. 9140 '
  915. 9150 '
  916. 9160 '   calculate Ptf, flowing tubing pressure
  917. 9170 '
  918. 9180 IKOUNT = 0
  919. 9190 '
  920. 9200 '   find Zmf for last Imf
  921. 9210 PSEUDO.REDUCED.PRES = PRES.MF / PSEUDO.CRIT.PRES
  922. 9220 GOSUB 12250   ' **** calculate Z in z-gopal
  923. 9230 ZMF = Z
  924. 9240 '
  925. 9250 '   calculate Imf, this is its last value
  926. 9260 PRES = PRES.MF : TEMP = TEMP.MF
  927. 9270 GOSUB 10670
  928. 9280 XIMF = XI
  929. 9290 '
  930. 9300 '   assume Itf = Imf, calculate Ptf
  931. 9310 PRES.N = PRES.MF
  932. 9320 GOSUB 10610   ' **** calculate Pn
  933. 9330 PRES.TF = PRESSURE(IKOUNT)
  934. 9340 '
  935. 9350 '   find Ztf
  936. 9360 PSEUDO.REDUCED.TEMP = TEMP.TF / PSEUDO.CRIT.TEMP
  937. 9370 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
  938. 9380 GOSUB 12250   ' **** calculate Z in z-gopal
  939. 9390 '
  940. 9400 '   calculate Itf
  941. 9410 PRES = PRES.TF : TEMP = TEMP.TF
  942. 9420 GOSUB 10670
  943. 9430 '
  944. 9440 '   calculate Ptf, reiterate
  945. 9450 PRES.N = PRES.MF
  946. 9460 GOSUB 10610   ' **** calculate Pn
  947. 9470 PRES.TF = PRESSURE(IKOUNT)
  948. 9480 IF ABS(PRESSURE(IKOUNT)-PRESSURE(IKOUNT-1)) > 1# THEN 9350
  949. 9490 '
  950. 9500 '   last calculated Itf
  951. 9510 '   find Ztf
  952. 9520 PSEUDO.REDUCED.PRES = PRES.TF / PSEUDO.CRIT.PRES
  953. 9530 GOSUB 12250   ' **** calculate Z in z-gopal
  954. 9540 '
  955. 9550 '   calculate Itf
  956. 9560 PRES = PRES.TF : TEMP = TEMP.TF
  957. 9570 GOSUB 10670
  958. 9580 XITF = XI
  959. 9590 '
  960. 9600 '
  961. 9610 '   apply Simpson's Rule
  962. 9620 '
  963. 9630 PRES.1 = -( 3# * WELL.FACTOR )
  964. 9640 PRES.2 = XITF + 4# * XIMF + XIWF
  965. 9650 PRES.TF = PRES.1 / PRES.2 + PRES.WF
  966. 9660 '
  967. 9670 '
  968. 9680 PRINT "FLOWING TUBING PRESSURE = ";
  969. 9690 PRINT USING "#######.##";PRES.TF ;: PRINT "  psi" :PRINT
  970. 9700 '
  971. 9710 '
  972. 9720 PRINT "press any key to continue"
  973. 9730 A$ = INKEY$ : IF A$ = "" THEN 9730
  974. 9740 CLS
  975. 9750 COLOR 0,7 : LOCATE 25,20
  976. 9760 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  977. 9770 COLOR 7,0 : LOCATE 1,1
  978. 9780 PRINT "Would you like:" : PRINT
  979. 9790 PRINT "    1.  hard copy output of data"
  980. 9800 PRINT "    2.  calculate another Ptf "
  981. 9810 PRINT "    3.  calculate a Pws, Pwf, or Pts "
  982. 9820 PRINT "    4.  end session" : PRINT
  983. 9830 INPUT "Enter choice  ", ICHOICE : PRINT
  984. 9840 IF ABS(1-ICHOICE) > 5 OR ICHOICE <1 THEN BEEP : GOTO 9740
  985. 9850 ON ICHOICE GOTO 9860, 10420, 40, 10430
  986. 9860 BEEP : PRINT "READY PRINTER, press any key to continue"
  987. 9870 B$ = INKEY$ : IF B$ = "" THEN 9870
  988. 9880 LPRINT CHR$(18)
  989. 9890 FOR I = 1 TO 5 : LPRINT  : NEXT I
  990. 9900 LPRINT SPC(24);"FLOWING TUBING PRESSURE DETERMINATION"
  991. 9910 LPRINT :LPRINT :PRINT :PRINT
  992. 9920 PRINT "Enter well name or note (one line only)"
  993. 9930 INPUT NOTE$ : LPRINT NOTE$
  994. 9940 LPRINT : LPRINT : LPRINT "Input Data:" : LPRINT
  995. 9950 LPRINT USING "\                            \";"Tubing Temperature";
  996. 9960 LPRINT USING "######.#";TEMP.TF - 459.67 ;
  997. 9970 LPRINT "  deg.F"
  998. 9980 LPRINT USING "\                            \";"Bottom-Hole Temperature";
  999. 9990 LPRINT USING "######.#";TEMP.WF - 459.67 ;
  1000. 10000 LPRINT "  deg.F"
  1001. 10010 LPRINT USING "\                            \";"Flowing Bottom-Hole Pressure";
  1002. 10020 LPRINT USING "######.#";PRES.WF;:LPRINT "  psi"
  1003. 10030 LPRINT USING "\                            \";"Well Depth";
  1004. 10040 LPRINT USING "######.#";DEPTH;:LPRINT "  ft."
  1005. 10050 LPRINT USING "\                            \";"Tubing ID";
  1006. 10060 LPRINT USING "###.####";PIPE.ID;:LPRINT "  inches"
  1007. 10070 LPRINT USING "\                            \";"Flow Rate";
  1008. 10080 LPRINT USING "###.####";Q;:LPRINT "  MMCFD"
  1009. 10090 IF INGAS = 1 THEN 10220
  1010. 10100 LPRINT : LPRINT "Fluid Analysis:"
  1011. 10110 FOR J = 1 TO NUMBER.COMPOUNDS
  1012. 10120 LPRINT "Component # ";:LPRINT USING "##";J;:LPRINT " : ";
  1013. 10130 LPRINT USING "\                  \";COMPOUND.NAME$(J);
  1014. 10140 LPRINT "  mole % = ";
  1015. 10150 LPRINT USING "####.####";MOLE.FRACTION#(J) * 100
  1016. 10160 NEXT J : LPRINT
  1017. 10170 LPRINT "Apparent Molecular Weight = ";
  1018. 10180 LPRINT USING "####.####";APPARENT.MOL.WT
  1019. 10190 LPRINT "Gas Gravity = ";
  1020. 10200 LPRINT USING "##.####";GAS.GRAV
  1021. 10210 GOTO 10250
  1022. 10220 LPRINT USING "\                            \";"Gas Gravity";
  1023. 10230 LPRINT USING "##.####";GAS.GRAV
  1024. 10240 LPRINT
  1025. 10250 LPRINT "Critical Temp = ";
  1026. 10260 LPRINT USING "####.###";PSEUDO.CRIT.TEMP
  1027. 10270 LPRINT "Critical Pres = ";
  1028. 10280 LPRINT USING "####.###";PSEUDO.CRIT.PRES
  1029. 10290 LPRINT : LPRINT : LPRINT
  1030. 10300 LPRINT "    Zwf = ";:LPRINT USING "##.####";ZWF;
  1031. 10310 LPRINT "  (reservoir conditions)"
  1032. 10320 LPRINT "    Zmf = ";:LPRINT USING "##.####";ZMF;
  1033. 10330 LPRINT "  (well midpoint conditions)"
  1034. 10340 LPRINT
  1035. 10350 LPRINT "FLOWING TUBING PRESSURE = ";
  1036. 10360 LPRINT USING "######.##";PRES.TF ;:LPRINT "  psi"
  1037. 10370 LPRINT CHR$(12)
  1038. 10380 CLS : PRINT : PRINT "print complete "
  1039. 10390 COLOR 0,7 : LOCATE 25,20
  1040. 10400 PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1041. 10410 COLOR 7,0 : LOCATE 3,1 : PRINT : GOTO 9780
  1042. 10420 ERASE PRESSURE : IIIRUN = 10 : GOTO 7950
  1043. 10430 CLS : LOCATE 11,1,0
  1044. 10440 PRINT SPC(23)"Remove diskette. Turn machine off."
  1045. 10450 PRINT : PRINT SPC(33) ; "Have a nice day.":PRINT :PRINT :PRINT
  1046. 10460 '
  1047. 10470 '
  1048. 10480 END
  1049. 10490 ' **********************************************************************
  1050. 10500 ' **********************************************************************
  1051. 10510 ' **********************************************************************
  1052. 10520 ' **********************************************************************
  1053. 10530 '
  1054. 10540 '   subroutines
  1055. 10550 '
  1056. 10560 '   calculate In, static
  1057. 10570 XI = Z * TEMP / PRES
  1058. 10580 RETURN
  1059. 10590 '
  1060. 10600 '
  1061. 10610 '   calculate pressure
  1062. 10620 IKOUNT = IKOUNT + 1
  1063. 10630 PRESSURE(IKOUNT) = WELL.FACTOR / (2# * XI) + PRES.N
  1064. 10640 RETURN
  1065. 10650 '
  1066. 10660 '
  1067. 10670 '   calculate In, flowing
  1068. 10680 XI.1 = PRES / (TEMP * Z)
  1069. 10690 XI.2 = .001# * XI.1^2#
  1070. 10700 XI = XI.1 / (F^2# + XI.2)
  1071. 10710 RETURN
  1072. 10720 '
  1073. 10730 '
  1074. 10740 '    This subroutine calculates pseudocritical
  1075. 10750 '    properties of a reservoir given fluid
  1076. 10760 '    analysis or gas gravity.
  1077. 10770 '
  1078. 10780 '    PSEUDOTP.BAS
  1079. 10790 '
  1080. 10800 IF INGAS = 1 THEN 11820
  1081. 10810 '
  1082. 10820 '    calculate Ppc and Tpc from fluid analysis ( INGAS=2 )
  1083. 10830 DIM IID(67), CHEM.NAME$(67), FORM$(67), MW#(67), CP(67), CT(67), SG(67)
  1084. 10840 N = NUMBER.COMPOUNDS
  1085. 10850 DIM ID(N), MOLE.WEIGHT#(N), CRIT.PRES(N), CRIT.TEMP(N), SP.GR(N)
  1086. 10860 APPARENT.MOL.WT = 0!
  1087. 10870 APPARENT.CRIT.TEMP = 0!
  1088. 10880 APPARENT.CRIT.PRES = 0!
  1089. 10890 '
  1090. 10900 '  search for critical properties of the input fluid mixture
  1091. 10910 '
  1092. 10920 PRINT "searching data file for physical constants ..."
  1093. 10930 FOR I = 1 TO NUMBER.COMPOUNDS
  1094. 10931 IF I>1 GOTO 10948
  1095. 10932 INPUT "Enter drive on which data file disk is located: ",DRV$
  1096. 10934 IF DRV$="a" OR DRV$="A" OR DRV$="b" OR DRV$="B" GOTO 10944
  1097. 10936 IF DRV$="c" OR DRV$="C" OR DRV$="d" OR DRV$="D" GOTO 10944
  1098. 10938 IF DRV$="e" OR DRV$="E" GOTO 10944
  1099. 10940 BEEP:BEEP:PRINT:PRINT "INVALID DRIVE SPECIFICATION.  REDO "
  1100. 10942 PRINT : GOTO 10932
  1101. 10944 CCC$="pcons.dat"
  1102. 10946 PPP$=DRV$ + ":" + CCC$
  1103. 10948 OPEN PPP$ FOR INPUT AS #1
  1104. 10950 FOR J = 1 TO 67
  1105. 10960 IF EOF(1) GOTO 11060
  1106. 10970 INPUT #1, IID(J), CHEM.NAME$(J), FORM$(J), MW#(J), CP(J), CT(J), SG(J)
  1107. 10980 IF COMPOUND.NAME$(I) <> CHEM.NAME$(J) THEN GOTO 11050
  1108. 10990 ID(I) = IID(J)
  1109. 11000 MOLE.WEIGHT#(I) = MW#(J)
  1110. 11010 CRIT.PRES(I) = CP(J)
  1111. 11020 CRIT.TEMP(I) = CT(J) + 459.67#
  1112. 11030 SP.GR (I) = SG(J)
  1113. 11040 GOTO 11060
  1114. 11050 NEXT J
  1115. 11060 CLOSE #1
  1116. 11070 '
  1117. 11080 '  calculate pseudocritical properties
  1118. 11090 '
  1119. 11100 APPARENT.MOL.WT = MOLE.FRACTION#(I) * MOLE.WEIGHT#(I) + APPARENT.MOL.WT
  1120. 11110 APPARENT.CRIT.PRES = MOLE.FRACTION#(I)*CRIT.PRES(I) + APPARENT.CRIT.PRES
  1121. 11120 APPARENT.CRIT.TEMP = MOLE.FRACTION#(I)*CRIT.TEMP(I) + APPARENT.CRIT.TEMP
  1122. 11130 NEXT I
  1123. 11140 '
  1124. 11150 '
  1125. 11160 '  correction for presense of N2, C-O2, and H2-S
  1126. 11170 '
  1127. 11180 PRINT : PRINT
  1128. 11190 PRINT "    SPECIFY METHOD FOR IMPURITIES CORRECTION"
  1129. 11200 PRINT
  1130. 11210 PRINT "            1 = None"
  1131. 11220 PRINT "            2 = Carr, et.al."
  1132. 11230 PRINT "                corrects for C-O2, H2-S, and N2"
  1133. 11240 PRINT "            3 = Wichert and Aziz"
  1134. 11250 PRINT "                corrects for C-O2, and H2-S"
  1135. 11260 PRINT
  1136. 11270 PRINT  "             ENTER 1, 2, or 3"
  1137. 11280 PRINT SPC(22);: INPUT "",METHOD.CORR
  1138. 11290 '
  1139. 11300 IF METHOD.CORR <> 1 GOTO 11310 ELSE GOTO 11700
  1140. 11310 FOR I = 1 TO NUMBER.COMPOUNDS
  1141. 11320  '  C-O2 check
  1142. 11330 IF ID(I) <> 53 GOTO 11360 ELSE XCO2 = MOLE.FRACTION#(I)
  1143. 11340 GOTO 11400
  1144. 11350 '  H2-S check
  1145. 11360 IF ID(I) <> 54 GOTO 11390 ELSE XH2S = MOLE.FRACTION#(I)
  1146. 11370 GOTO 11400
  1147. 11380 '  N2 check
  1148. 11390 IF ID(I) <> 60 GOTO 11400 ELSE XN2 = MOLE.FRACTION#(I)
  1149. 11400 NEXT I
  1150. 11410 '
  1151. 11420 IF METHOD.CORR <> 2 GOTO 11430 ELSE GOTO 11550
  1152. 11430 IF METHOD.CORR <> 3 GOTO 11440 ELSE GOTO 11600
  1153. 11440 CLS : PRINT : PRINT "REDO" : BEEP : COLOR 0,7
  1154. 11450 IF IRUN = 1 THEN LOCATE 25,15 ELSE 11470
  1155. 11460 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
  1156. 11470 IF IRUN = 2 THEN LOCATE 25,15 ELSE 11490
  1157. 11480 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
  1158. 11490 IF IRUN = 3 THEN LOCATE 25,20 ELSE 11510
  1159. 11500 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 11530
  1160. 11510 LOCATE 25,20:PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1161. 11520 LOCATE 2,1
  1162. 11530 COLOR 7,0 : GOTO 11180
  1163. 11540 '
  1164. 11550 '  Carr, et.al. method
  1165. 11560 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP-80#*XCO2+130#*XH2S-250#*XN2
  1166. 11570 PSEUDO.CRIT.PRES = APPARENT.CRIT.PRES-440#*XCO2+600#*XH2S-170#*XN2
  1167. 11580 GOTO 11750
  1168. 11590 '
  1169. 11600 '  Wichert and Aziz method
  1170. 11610 CWA1 = 120#*((XCO2+XH2S)^.9# - (XCO2+XH2S)^1.6#)
  1171. 11620 CWA2 = 15#*(XH2S^.5# - XH2S^4#)
  1172. 11630 CWA = CWA1 + CWA2
  1173. 11640 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP - CWA
  1174. 11650 PSEUDO.CRIT.PRES1 = PSEUDO.CRIT.TEMP * APPARENT.CRIT.PRES
  1175. 11660 PSEUDO.CRIT.PRES2 = APPARENT.CRIT.TEMP + XH2S*(1#-XH2S)*CWA
  1176. 11670 PSEUDO.CRIT.PRES = PSEUDO.CRIT.PRES1 / PSEUDO.CRIT.PRES2
  1177. 11680 GOTO 11750
  1178. 11690 '
  1179. 11700 '  no correction for impurities
  1180. 11710 PSEUDO.CRIT.PRES = APPARENT.CRIT.PRES
  1181. 11720 PSEUDO.CRIT.TEMP = APPARENT.CRIT.TEMP
  1182. 11730 '
  1183. 11740 '
  1184. 11750 '  calculation of gas gravity
  1185. 11760 '
  1186. 11770 GAS.GRAV = APPARENT.MOL.WT / 28.964#
  1187. 11780 '
  1188. 11790 GOTO 12210
  1189. 11800 '
  1190. 11810 '
  1191. 11820 '  calculation of pseudocritical properties given gas gravity
  1192. 11830 '
  1193. 11840 IF INGAS <> 1 GOTO 13030
  1194. 11850 INGAS = 1
  1195. 11860 CLS : PRINT SPC(20);"PSEUDOTP: Gas Gravity Input" : PRINT
  1196. 11870 COLOR 0,7 : IF IRUN = 1 THEN LOCATE 25,15 ELSE 11890
  1197. 11880 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
  1198. 11890 IF IRUN = 2 THEN LOCATE 25,15 ELSE 11910
  1199. 11900 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
  1200. 11910 IF IRUN = 3 THEN LOCATE 25,20 ELSE 11930
  1201. 11920 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 3,1:GOTO 11950
  1202. 11930 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1203. 11940 LOCATE 3,1
  1204. 11950 COLOR 7,0 : PRINT SPC(21);"INPUT WELL FLUID TYPE" : PRINT
  1205. 11960 PRINT "                   1 = CONDENSATE WELL FLUIDS"
  1206. 11970 PRINT "                   2 = MISCELLANEOUS GASES" : PRINT
  1207. 11980 PRINT "                         ENTER 1 or 2  "
  1208. 11990 PRINT SPC(33);: INPUT "",KTYPE
  1209. 12000 IF KTYPE <> 1 GOTO 12100
  1210. 12010 PRINT : PRINT "CONDENSATE WELL FLUID" : PRINT : PRINT
  1211. 12020 INPUT "Enter gas gravity  ";GAS.GRAV
  1212. 12030 IF GAS.GRAV >= .7# GOTO 12070
  1213. 12040 PSEUDO.CRIT.TEMP = 191# + 274# * GAS.GRAV
  1214. 12050 PSEUDO.CRIT.PRES = 693# - 36# * GAS.GRAV
  1215. 12060 GOTO 12210
  1216. 12070 PSEUDO.CRIT.TEMP = 238# + 210# * GAS.GRAV
  1217. 12080 PSEUDO.CRIT.PRES = 740# + 36# * GAS.GRAV
  1218. 12090 GOTO 12210
  1219. 12100 IF KTYPE <> 2 GOTO 12200
  1220. 12110 PRINT : PRINT "MISCELLANEOUS GASES" :PRINT : PRINT
  1221. 12120 INPUT "Enter gas gravity  "; GAS.GRAV
  1222. 12130 IF GAS.GRAV >= .7# GOTO 12170
  1223. 12140 PSEUDO.CRIT.TEMP = 166# + 318# * GAS.GRAV
  1224. 12150 PSEUDO.CRIT.PRES = 693# - 36# * GAS.GRAV
  1225. 12160 GOTO 12210
  1226. 12170 PSEUDO.CRIT.TEMP = 166# + 318# * GAS.GRAV
  1227. 12180 PSEUDO.CRIT.PRES = 708# - 56# * GAS.GRAV
  1228. 12190 GOTO 12210
  1229. 12200 BEEP : BEEP : GOTO 11820
  1230. 12210 '  have all critical constants now
  1231. 12220 RETURN
  1232. 12230 '
  1233. 12240 '
  1234. 12250 '    This subroutine calculates the compressibility factor for
  1235. 12260 '    a gas mixture using Gopal method.
  1236. 12270 '
  1237. 12280 '    Z-GOPAL.BAS
  1238. 12290 '
  1239. 12300 TPR = PSEUDO.REDUCED.TEMP
  1240. 12310 PPR = PSEUDO.REDUCED.PRES
  1241. 12320 '
  1242. 12330 '
  1243. 12340 IF PPR < .2# GOTO 12530
  1244. 12350 IF (TPR<1.05#) AND (TPR>3#) GOTO 12580
  1245. 12360 '
  1246. 12370 '
  1247. 12380 '    **** special cases
  1248. 12390 '
  1249. 12400 IF (1.2#<PPR) AND (PPR<=1.4#) GOTO 12410 ELSE 12430
  1250. 12410 IF (1.08#<=TPR) AND (TPR<=1.19#) GOTO 12810
  1251. 12420 '
  1252. 12430 IF (2.6#<PPR) AND (PPR<=2.8#) GOTO 12440 ELSE 12480
  1253. 12440 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12910
  1254. 12450 '
  1255. 12460 '
  1256. 12470 '    ***** general cases
  1257. 12480 IF (.2#<=PPR) AND (PPR<=1.2#) GOTO 12650 ELSE 12490
  1258. 12490 IF (1.2#<PPR) AND (PPR<=2.8#) GOTO 12700 ELSE 12500
  1259. 12500 IF (2.8#<PPR) AND (PPR<=5.4#) GOTO 12750 ELSE 12510
  1260. 12510 IF (5.4#<PPR) GOTO 13010
  1261. 12520 '
  1262. 12530 PRINT : PRINT
  1263. 12540 PRINT "This program cannot calculate Z for pseudoreduced pressures"
  1264. 12550 PRINT "less than 0.2 "
  1265. 12560 PRINT : PRINT "sorry, program crashes"
  1266. 12570 PRINT:PRINT:STOP
  1267. 12580 PRINT : PRINT
  1268. 12590 PRINT "This program cannot calculate Z for pseudoreduced temperatures"
  1269. 12600 PRINT "less than 1.05 or greater than 3.0"
  1270. 12610 PRINT : PRINT "sorry, program crashes"
  1271. 12620 PRINT:PRINT:STOP
  1272. 12630 '
  1273. 12640 '
  1274. 12650 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12810 ELSE 12660
  1275. 12660 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12820 ELSE 12670
  1276. 12670 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12830 ELSE 12680
  1277. 12680 IF (2#<TPR) AND (TPR<=3#) GOTO 12840
  1278. 12690 '
  1279. 12700 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12860 ELSE 12710
  1280. 12710 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12870 ELSE 12720
  1281. 12720 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12880 ELSE 12730
  1282. 12730 IF (2#<TPR) AND (TPR<=3#) GOTO 12890
  1283. 12740 '
  1284. 12750 IF (1.05#<=TPR) AND (TPR<=1.2#) GOTO 12910 ELSE 12760
  1285. 12760 IF (1.2#<TPR) AND (TPR<=1.4#) GOTO 12920 ELSE 12770
  1286. 12770 IF (1.4#<TPR) AND (TPR<=2#) GOTO 12930 ELSE 12780
  1287. 12780 IF (2#<TPR) AND (TPR<=3#) GOTO 12940
  1288. 12790 '
  1289. 12800 '
  1290. 12810 A=1.6643# : B=-2.2114# : C=-.3647# : D=1.4385# : GOTO 12970
  1291. 12820 A=.5222# : B=-.8511# : C=-.0364# : D=1.049# : GOTO 12970
  1292. 12830 A=.1391# : B=-.2988# : C=.0007# : D=.9969# : GOTO 12970
  1293. 12840 A=.0295# : B=-.0825# : C=.0009# : D=.9967# : GOTO 12970
  1294. 12850 '
  1295. 12860 A=-1.357# : B=1.4942# : C=4.6315# : D=-4.7009# : GOTO 12970
  1296. 12870 A=.1717# : B=-.3232# : C=.5869# : D=.1229# : GOTO 12970
  1297. 12880 A=.0984# : B=-.2053# : C=.0621# : D=.858# : GOTO 12970
  1298. 12890 A=.0211# : B=-.0527# : C=.0127# : D=.9549# : GOTO 12970
  1299. 12900 '
  1300. 12910 A=-.3278# : B=.4752# : C=1.8223# : D=-1.9036# : GOTO 12970
  1301. 12920 A=-.2521# : B=.3871# : C=1.6087# : D=-1.6635# : GOTO 12970
  1302. 12930 A=-.0284# : B=.0625# : C=.4714# : D=-.0011# : GOTO 12970
  1303. 12940 A=.0041# : B=.0039# : C=.0607# : D=.7927# : GOTO 12970
  1304. 12950 '
  1305. 12960 '
  1306. 12970 Z = PPR*(A*TPR + B) + C*TPR + D
  1307. 12980 GOTO 13040
  1308. 12990 '
  1309. 13000 '
  1310. 13010 Z1 = PPR*(.711# + 3.66#*TPR)^-1.4667#
  1311. 13020 Z2 = -1.637#/(.319#*TPR + .522#)
  1312. 13030 Z = Z1 + Z2 + 2.071#
  1313. 13040 '
  1314. 13050 RETURN
  1315. 13060 '
  1316. 13070 '
  1317. 13080 '
  1318. 13090 '   This subroutine inputs the component compounds and their
  1319. 13100 '   molar fraction in a fluid sample either by keydoard or
  1320. 13110 '   data file. A data file from keyboard input will be
  1321. 13120 '   created if desired.
  1322. 13130 '
  1323. 13140 '   GAS-IN.BAS
  1324. 13150 '
  1325. 13160 CLS : PRINT SPC(25);"GAS-IN" : COLOR 0,7
  1326. 13170 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13190
  1327. 13180 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
  1328. 13190 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13210
  1329. 13200 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
  1330. 13210 IF IRUN = 3 THEN LOCATE 25,20  ELSE 13230
  1331. 13220 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13250
  1332. 13230 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1333. 13240 LOCATE 2,1
  1334. 13250 COLOR 7,0 : PRINT : PRINT
  1335. 13260 PRINT : PRINT "Component compounds in fluid sample will be input by :"
  1336. 13270 PRINT
  1337. 13280 PRINT SPC(10);"       1 = DATA FILE"
  1338. 13290 PRINT SPC(10);"       2 = KEYBOARD"
  1339. 13300 PRINT
  1340. 13310 PRINT SPC(10);"       ENTER 1 or 2"
  1341. 13320 PRINT SPC(23);: INPUT " ",IN
  1342. 13330 IF IN <> 1 GOTO 13340 ELSE 13360
  1343. 13340 IF IN <> 2 GOTO 13350 ELSE 13710
  1344. 13350 PRINT : PRINT "REDO" : BEEP : GOTO 13160
  1345. 13360 CLS : PRINT SPC(25);"GAS-IN" : COLOR 0,7
  1346. 13370 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13390
  1347. 13380 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
  1348. 13390 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13410
  1349. 13400 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
  1350. 13410 IF IRUN = 3 THEN LOCATE 25,20 ELSE 13430
  1351. 13420 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 2,1:GOTO 13450
  1352. 13430 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1353. 13440 LOCATE 2,1
  1354. 13450 COLOR 7,0
  1355. 13460 '
  1356. 13470 PRINT SPC(20);"DATA FILE INPUT" : PRINT : PRINT
  1357. 13480 INPUT "Enter drive on which data file disk is located: ",DRV$
  1358. 13490 IF DRV$="a" OR DRV$="A" OR DRV$="b" OR DRV$="B" GOTO 13540
  1359. 13500 IF DRV$="c" OR DRV$="C" OR DRV$="d" OR DRV$="D" GOTO 13540
  1360. 13510 IF DRV$="e" OR DRV$="E" GOTO 13540
  1361. 13520 BEEP:BEEP:PRINT:PRINT "INVALID DRIVE SPECIFICATION.  REDO "
  1362. 13530 PRINT : GOTO 13480
  1363. 13540 PRINT
  1364. 13550 INPUT "Input name of data file: " , DAT.FILE$
  1365. 13560 DAT.FILE$ = DRV$ + ":" + DAT.FILE$
  1366. 13570 OPEN DAT.FILE$ FOR INPUT AS #1
  1367. 13580 INPUT #1, NUMBER.COMPOUNDS
  1368. 13590 N = NUMBER.COMPOUNDS
  1369. 13600 DIM COMPOUND.NAME$(N), MOLE.FRACTION#(N)
  1370. 13610 SUMMOLE = 0
  1371. 13620 FOR I = 1 TO NUMBER.COMPOUNDS
  1372. 13630 IF EOF(1) GOTO 13680
  1373. 13640 INPUT #1, COMPOUND.NAME$(I), MOL.FRAC#
  1374. 13650 SUMMOLE = SUMMOLE + MOL.FRAC#
  1375. 13660 MOLE.FRACTION#(I) = MOL.FRAC# / 100#
  1376. 13670 NEXT I
  1377. 13680 CLOSE #1
  1378. 13690 GOTO 14290
  1379. 13700 '
  1380. 13710 CLS : COLOR 0,7
  1381. 13720 IF IRUN = 1 THEN LOCATE 25,15 ELSE 13740
  1382. 13730 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
  1383. 13740 IF IRUN = 2 THEN LOCATE 25,15 ELSE 13760
  1384. 13750 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
  1385. 13760 IF IRUN = 3 THEN LOCATE 25,20 ELSE 13780
  1386. 13770 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 13800
  1387. 13780 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1388. 13790 LOCATE 1,1
  1389. 13800 COLOR 7,0 : PRINT SPC(24),"KEYBOARD INPUT" : PRINT : PRINT
  1390. 13810 INPUT "Input number of compounds in mixture "; NUMBER.COMPOUNDS
  1391. 13820 N = NUMBER.COMPOUNDS
  1392. 13830 DIM COMPOUND.NAME$(N), MOLE.FRACTION#(N)
  1393. 13840 '  *****   CLS : PRINT : PRINT : PRINT
  1394. 13850 '  *****   PRINT " Input either the NAME or the CAS number of each "
  1395. 13860 '  *****   PRINT " component in the mixture and its mole fraction"
  1396. 13870 '  *****   PRINT " when prompted."
  1397. 13880 '  *****   PRINT
  1398. 13890 '  *****   PRINT "     1 = components identified by NAME"
  1399. 13900 '  *****   PRINT "     2 = components identified by CAS # "
  1400. 13910 '  *****   PRINT "              ENTER 1 or 2"
  1401. 13920 '  *****   INPUT SEARCH.MODE
  1402. 13930 '  *****   IF SEARCH.MODE <> 1 THEN 550 ELSE 600
  1403. 13940 '  *****   IF SEARCH.MODE <> 2 THEN 560 ELSE 570
  1404. 13950 '  *****   CLS : PRINT "REDO" : BEEP : GOTO 490
  1405. 13960 '  *****   CLS: PRINT : PRINT
  1406. 13970 '  *****   PRINT "program capable of searching by name only at this time"
  1407. 13980 '  *****   PRINT "enter 1 " : GOTO 490
  1408. 13990 BEEP : PRINT : PRINT "***  NOTE  ***"
  1409. 14000 PRINT "COMPOUND NAME MUST BE EXACT AND ALL LOWER CASE."
  1410. 14010 PRINT "EXAMPLE:"
  1411. 14020 PRINT "          2-4-dimethylpentane OR carbon-dioxide"
  1412. 14030 SUMMOLE = 0
  1413. 14040 FOR I = 1 TO NUMBER.COMPOUNDS
  1414. 14050 PRINT : PRINT : PRINT
  1415. 14060 PRINT "INPUT COMPOUND NAME FOR COMPONENT # ";I;" of ";N
  1416. 14070 PRINT
  1417. 14080 INPUT COMPOUND.NAME$(I)
  1418. 14090 PRINT : PRINT :PRINT
  1419. 14100 PRINT "INPUT MOLE FRACTION (%) OF  `";COMPOUND.NAME$(I);
  1420. 14110 PRINT "'  IN THE MIXTURE"
  1421. 14120 PRINT
  1422. 14130 INPUT MOL.FRAC#
  1423. 14140 SUMMOLE = SUMMOLE + MOL.FRAC#
  1424. 14150 MOLE.FRACTION#(I) = MOL.FRAC# / 100#
  1425. 14160 CLS : COLOR 0,7
  1426. 14170 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14190
  1427. 14180 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
  1428. 14190 IF IRUN = 2 THEN LOCATE 25,15 ELSE 14210
  1429. 14200 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
  1430. 14210 IF IRUN = 3 THEN LOCATE 25,20 ELSE 14230
  1431. 14220 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14250
  1432. 14230 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1433. 14240 LOCATE 1,1
  1434. 14250 COLOR 7,0
  1435. 14260 NEXT I
  1436. 14270 '
  1437. 14280 '
  1438. 14290 CLS : COLOR 0,7
  1439. 14300 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14320
  1440. 14310 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
  1441. 14320 IF IRUN = 2 THEN LOCATE 25,15 ELSE 14340
  1442. 14330 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
  1443. 14340 IF IRUN = 3 THEN LOCATE 25,20 ELSE 14360
  1444. 14350 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE 1,1:GOTO 14370
  1445. 14360 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1446. 14370 LOCATE 1,1
  1447. 14380 COLOR 7,0
  1448. 14390 FOR J = 1 TO NUMBER.COMPOUNDS : IF J=1 THEN SUMMOLE = 0#
  1449. 14400 PRINT "COMPONENT # ";
  1450. 14410 PRINT USING "##";J;
  1451. 14420 PRINT " : ";
  1452. 14430 PRINT USING "\                  \";COMPOUND.NAME$(J);
  1453. 14440 PRINT "  MOLE % = ";
  1454. 14450 PRINT USING "####.####";MOLE.FRACTION#(J) * 100#
  1455. 14460 SUMMOLE = SUMMOLE + MOLE.FRACTION#(J)*100#
  1456. 14470 NEXT J
  1457. 14480 PRINT SPC(48);"---------"
  1458. 14490 PRINT SPC(48);:PRINT USING "####.####";SUMMOLE
  1459. 14500 IF SUMMOLE>99.99999999# AND SUMMOLE<100.00001# THEN 14570
  1460. 14510 PRINT:BEEP:BEEP:BEEP:ILINE=CSRLIN:LFLAG=1
  1461. 14520 PRINT SPC(28);"*** WARNING ***"
  1462. 14530 PRINT SPC(16);"Sum Of Mole Fractions Does Not Equal 100"
  1463. 14540 PRINT : PRINT "press any key to continue"
  1464. 14550 A$ = INKEY$ : IF A$ = "" THEN 14550
  1465. 14560 LOCATE ILINE:FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT
  1466. 14570 PRINT
  1467. 14580 IF LFLAG = 1 GOTO 14590 ELSE ILINE = CSRLIN
  1468. 14590 LOCATE ILINE,27 : PRINT "IS LIST CORRECT ?"
  1469. 14600 PRINT "                           1 = YES : 2 = NO"
  1470. 14610 PRINT SPC(34); : INPUT " ", TEST
  1471. 14620 IF TEST = 1 AND IN = 1 THEN 15420
  1472. 14630 IF TEST = 1 AND IN = 2 THEN 14740
  1473. 14640 IF TEST = 2 THEN 14650 ELSE BEEP:BEEP:GOTO 14290
  1474. 14650 LOCATE ILINE+4,24 : PRINT "CHANGE ALL OR SOME VALUES ?"
  1475. 14660 PRINT SPC(27); "1 = ALL : 2 = SOME"
  1476. 14670 PRINT SPC(35);: INPUT "", ICHANGE
  1477. 14680 IF ICHANGE = 1 THEN ERASE COMPOUND.NAME$, MOLE.FRACTION# : GOTO 13160
  1478. 14690 IF ICHANGE = 2 THEN 15080
  1479. 14700 BEEP:BEEP:LOCATE ILINE
  1480. 14710 FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT I
  1481. 14720 LOCATE ILINE : GOTO 14640
  1482. 14730 BEEP : PRINT "REDO" : GOTO 14290
  1483. 14740 CLS : PRINT : PRINT
  1484. 14750 PRINT "Do you want to save this data in a data file ?" : PRINT
  1485. 14760 PRINT "                    1 = YES : 2 = NO"
  1486. 14770 PRINT SPC(28);: INPUT "",TEST
  1487. 14780 IF TEST <> 1 GOTO 15050
  1488. 14790 PRINT : PRINT
  1489. 14800 INPUT "Enter drive of `formated' target diskette  ", DRIVE$
  1490. 14810 A$ = INKEY$ : IF A$ = "" GOTO 14810
  1491. 14820 CLS : PRINT : PRINT
  1492. 14830 PRINT : PRINT
  1493. 14840 PRINT "Enter desired name of data file " : PRINT
  1494. 14850 PRINT "The file name should end with .DAT, for example GAS.DAT"
  1495. 14860 INPUT IDAT.FILE$
  1496. 14870 DAT.FILE$ = DRIVE$ + ":" + IDAT.FILE$
  1497. 14880 OPEN DAT.FILE$ FOR OUTPUT AS #1
  1498. 14890 WRITE #1, NUMBER.COMPOUNDS
  1499. 14900 FOR I = 1 TO NUMBER.COMPOUNDS
  1500. 14910 WRITE #1, COMPOUND.NAME$(I), MOLE.FRACTION#(I) * 100#
  1501. 14920 NEXT I
  1502. 14930 CLOSE #1
  1503. 14940 PRINT:PRINT "File ";IDAT.FILE$;" saved":PRINT:PRINT:ILINE=POS(0)
  1504. 14950 COLOR 0,7
  1505. 14960 IF IRUN = 1 THEN LOCATE 25,15 ELSE 14980
  1506. 14970 PRINT "STATIC BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
  1507. 14980 IF IRUN = 2 THEN LOCATE 25,15 ELSE 15000
  1508. 14990 PRINT "FLOWING BOTTOM-HOLE PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
  1509. 15000 IF IRUN = 3 THEN LOCATE 25,20 ELSE 15020
  1510. 15010 PRINT "STATIC TUBING PRESSURE DETERMINATION";:LOCATE ILINE,1:GOTO 15040
  1511. 15020 LOCATE 25,20 : PRINT "FLOWING TUBING PRESSURE DETERMINATION";
  1512. 15030 LOCATE ILINE,1
  1513. 15040 COLOR 7,0 : GOTO 15420
  1514. 15050 IF TEST <>2 THEN 15060 ELSE 15420
  1515. 15060 BEEP : GOTO 14740
  1516. 15070 '
  1517. 15080 '   change input fluid data
  1518. 15090 LOCATE ILINE:FOR I=1 TO (24-ILINE):PRINT SPC(75):NEXT
  1519. 15100 LOCATE ILINE-1,1
  1520. 15110 PRINT "   *****  ENTER NULL LINE WHEN FINISHED EDIT  *****"
  1521. 15120 LOCATE ILINE,1 :PRINT "ENTER COMPONENT # TO CHANGE ";:INPUT "",NUMCHG
  1522. 15130 IF NUMCHG<0 OR NUMCHG>NUMBER.COMPOUNDS THEN 15150
  1523. 15140 IF NUMCHG = 0 GOTO 14290 ELSE 15160
  1524. 15150 BEEP:GOTO 15090
  1525. 15160 COLOR 0,7
  1526. 15170 LOCATE NUMCHG,18 : PRINT SPC(19)
  1527. 15180 LOCATE NUMCHG,18
  1528. 15190 PRINT USING "\                  \";COMPOUND.NAME$(NUMCHG)
  1529. 15200 COLOR 7,0:LOCATE ILINE:PRINT SPC(79):LOCATE ILINE
  1530. 15210 PRINT "ENTER NEW NAME OR `OK' ";:COLOR 0,7:PRINT SPC(21);
  1531. 15220 LOCATE ILINE+1,24 : INPUT " ",NNEW$ : COLOR 7,0
  1532. 15230 IF NNEW$ = "" THEN 14290
  1533. 15240 IF NNEW$ = "ok" OR NNEW$ = "OK" THEN 15260
  1534. 15250 COMPOUND.NAME$(NUMCHG) = NNEW$ : LOCATE NUMCHG,18
  1535. 15260 COLOR 7,0 : PRINT SPC(19) : LOCATE NUMCHG,18
  1536. 15270 PRINT USING "\                  \";COMPOUND.NAME$(NUMCHG)
  1537. 15280 COLOR 0,7 : LOCATE NUMCHG,49 : PRINT SPC(10)
  1538. 15290 LOCATE NUMCHG,49
  1539. 15300 PRINT USING "####.####";MOLE.FRACTION#(NUMCHG) * 100#
  1540. 15310 COLOR 7,0 : LOCATE ILINE : PRINT SPC(79) : LOCATE ILINE
  1541. 15320 PRINT "ENTER NEW MOLE FRACTION (%) OR `OK' "; : COLOR 0,7
  1542. 15330 PRINT SPC(10):LOCATE ILINE+1,37:INPUT "",NVAL$:COLOR 7,0
  1543. 15340 IF NVAL$ = "" THEN 14290
  1544. 15350 IF NVAL$ = "ok" OR NVAL$ = "OK" THEN 15090
  1545. 15360 MOLE.FRACTION#(NUMCHG) = VAL(NVAL$) / 100# : LOCATE NUMCHG,49
  1546. 15370 PRINT SPC(10):LOCATE NUMCHG,49
  1547. 15380 PRINT USING "####.####";MOLE.FRACTION#(NUMCHG) *100
  1548. 15390 LOCATE ILINE+1 : PRINT SPC(79) : GOTO 15120
  1549. 15400 '
  1550. 15410 '
  1551. 15420 RETURN
  1552. 15430 '
  1553. 15440 '
  1554. 15450 END
  1555. (NUMCHG) *100
  1556. 15390 LOCATE ILINE+1 : PR