Sei sulla pagina 1di 78

REM COMPUTER CODE FOR MONTE CARLO MARCHING CALCULATIONS BY JACK

LASHOVER 10/05/2012
DECLARE SUB DEW ()
DECLARE SUB VAPOR ()
DECLARE SUB BUBBLE ()
DECLARE SUB TEST ()
DECLARE SUB ENTHALPY ()
DECLARE SUB TEMPERATURE ()
DECLARE SUB PRESSURE ()
DECLARE SUB RK ()
DECLARE SUB WILSON ()
DECLARE SUB RACHFORD ()
DECLARE SUB CUBIC ()
DECLARE SUB ANTOINE ()
DECLARE SUB VANLAAR ()
DECLARE SUB MARGULES()
DECLARE SUB LLEFLASH()

1 CLS: ON ERROR GOTO 1000


DEFDBL A-Z
DEFINT I-K, N

DIM SHARED BRK(10, 10) AS DOUBLE, CRK(10, 10) AS DOUBLE, G(10) AS DOUBLE
DIM SHARED A(10) AS DOUBLE, B(10) AS DOUBLE, C(10) AS DOUBLE, X(10) AS DOUBLE,
XX(10) AS DOUBLE
DIM SHARED COMPONENT(10) AS STRING, W(10, 10) AS DOUBLE, N AS INTEGER
DIM SHARED MW(10) AS DOUBLE, TC(10) AS DOUBLE, PC(10) AS DOUBLE, TK(10) AS
DOUBLE

DIM SHARED AAL(10) AS DOUBLE, BB(10) AS DOUBLE, CC(10) AS DOUBLE


DIM SHARED AAH(10) AS DOUBLE, BBB(10) AS DOUBLE, CCC(10) AS DOUBLE
DIM SHARED AV(10) AS DOUBLE, BV(10) AS DOUBLE, CV(10) AS DOUBLE, BP(10) AS
DOUBLE
DIM SHARED H AS DOUBLE

PRINT: PRINT " WELCOME TO MONTE CARLO MARCHING CALCULATIONS "


PRINT " THE TIME IS " + TIME$ + " AND THE DATE IS " + DATE$
PRINT " COMPONENTS ARE USED IN ORDER OF BOILING POINTS, LOWEST TO
HIGHEST"

INPUT " NAME OF FILE TO STORE OUTPUT= ", FI$


OPEN "C:\QB64\" + FI$ + ".TXT" FOR OUTPUT AS #1

REM NUMBER OF COMPONENTS AND BOILING POINTS IN CENT.


BP(1) = 64.7: BP(2) = 82.5: BP(3) = 100!: N = 3
COMPONENT$(1) = "MEOH": COMPONENT$(2) = "IPA": COMPONENT$(3) = "H2O"

REM ANTOINE CONSTANTS FOR PRESSURE IN kPa


A(1) = 16.5725: B(1) = 3626.55: C(1) = 238.9
A(2) = 16.6779: B(2) = 3640.2: C(2) = 219.6
A(3) = 16.2886: B(3) = 3816.44: C(3) = 227!

REM WILSON CONSTANTS


W(1, 2) = 2.123: W(2, 1) = .369
W(1, 3) = .482: W(3, 1) = .959
W(2, 3) = .033: W(3, 2) = .768

W(1, 1) = 1: W(2, 2) = 1: W(3, 3) = 1

REM REDLICH-KISTER CONSTANTS


BRK(1, 2) = -.1931: BRK(2, 1) = -.1931: CRK(1, 2) = -.0363: CRK(2, 1) = 0.0363
BRK(1, 3) = .6204: BRK(3, 1) = .6204: CRK(1, 3) = -.0669: CRK(3, 1) = .0669
BRK(2, 3) = 1.4804: BRK(3, 2) = 1.4804: CRK(2, 3) = -.9372: CRK(3, 2) = .9372
BRK(1, 1) = 0!: BRK(2, 2) = 0!: BRK(3, 3) = 0!
CRK(1, 1) = 0!: CRK(2, 2) = 0!: CRK(3, 3) = 0!
C0 = 0!: C1 = 0!: C2 = 0! 'TERNARY CONSTANTS

REM ENERGY DATA FOR MEOH, IPA, AND H2O


MW(1) = 32.0422: MW(2) = 60.0959: MW(3) = 18.0153
REM MULTIPLY J/G BY 0.238846 TO GET CALORIES AND BY MW TO GET CAL/MOLE
AAL(1) = 2.33: BB(1) = .00782: CC(1) = .0000377# 'MEOH LIQ.CP J/G @T(C)
AAL(2) = 2.320857: BB(2) = .01242953#: CC(2) = 0! 'IPA LIQ CP J/G @T(C)
AAL(3) = 4.188: BB(3) = -.000569: CC(3) = .00000849# 'H2O LIQ CP J/G @T(C)
AAH(1) = 1218.4: BBB(1) = -1.3849: CCC(1) = -.006402 'HVAP MEOH J/G @T(C)
AAH(2) = 801.13: BBB(2) = -1.767583: CCC(2) = 0! 'HVAP IPA J/G @T(C)
AAH(3) = 2481.1: BBB(3) = -1.821: CCC(3) = -.004236 'HVAP H2O J/G @ T(C)
AV(1) = 42.63215: BV(1) = .07690246#: CV(1) = 0! / 32.0422 'MEOH VAP CP J/G @T(C)
AV(2) = 1.40664: BV(2) = .00353197#: CV(2) = 0! 'IPA VAP CP J/G @T(C)
AV(3) = 1.813: BV(3) = .0007439#: CV(3) = .0000001123# 'H2O VAP CP J/G @T(C)
TC(1) = 512.64: TC(2) = 508.3: TC(3) = 647.13: H = .238846# 'CONVERT JOULES TO
CALORIES, TC IN KELVIN
PC(1) = 79.9112 * 101.325: PC(2) = 46.9973 * 101.325: PC(3) = 217.666 * 101.325 'PC IN kPa

5 CLS: DO

PRINT: PRINT: PRINT "

QBVLE36--10/05/12"

PRINT
PRINT
PRINT "

ENTER A LETTER CORRESPONDING TO YOUR CHOICE

PRINT
PRINT
PRINT "

A. TEST FOR TWO PHASES

B. BUBBLE POINT"

PRINT
PRINT
PRINT "

C. CUBIC EQUATION

D. DEW POINT "

PRINT
PRINT
PRINT "

H. ENTHALPY

P. FLASH FOR P "

T. FLASH FOR T

V. FLASH FOR V "

PRINT
PRINT
PRINT "
PRINT
PRINT
PRINT "

R. RACHFORD-RICE

Q. QUIT

"

PRINT
PRINT
PRINT "

Z. TEST ANTOINE CONSTANTS

LINE INPUT CHOICE$


SELECT CASE CHOICE$
CASE "A", "a"
CALL TEST

L. LLE FLASH "

"

CASE "B", "b"


CALL BUBBLE
CASE "C", "c"
CALL CUBIC
CASE "D", "d"
CALL DEW
CASE "H", "h"
CALL ENTHALPY
CASE "P", "p"
CALL PRESSURE
CASE "R", "r"
CALL RACHFORD
CASE "T", "t"
CALL TEMPERATURE
CASE "V", "v"
CALL VAPOR
CASE "Z", "z"
CALL ANTOINE
CASE "L", "l"
CALL LLEFLASH
CASE "Q", "q"
CLS: PRINT: PRINT: PRINT " SEE YA!": GOTO 99
CASE ELSE
CLS: PRINT: PRINT: PRINT: PRINT: PRINT " PLEASE ENTER CHOICE: A, B, C, D, H, P,
T, V, OR Q"
END SELECT
LOOP UNTIL CHOICE$ = "Q" OR CHOICE$ = "q"

1000 PRINT "**********"; CHR$(7)


PRINT " ERROR NUMBER "; ERR; " HAS OCCURRED! ON LINE#= "; ERL
PRINT " PRESS ENTER TO ABORT OR ANY OTHER KEY TO CONTINUE: "
CHOICE$ = INPUT$(1)
IF ASC(CHOICE$) = 13 THEN
ON ERROR GOTO 0
ELSE
RESUME NEXT
END IF
CLS
GOTO 5

99 END

DEFINT N
SUB ANTOINE
CLS

DIM VP(10), TT(10)

PRINT: PRINT " SUBROUTINE TO TEST WHETHER ANTOINE CONSTANTS ARE


COMPATIBLE WITH PRESSURE AND TEMPERATURE UNITS"
PRINT #1,: PRINT #1, " SUBROUTINE TO TEST WHETHER ANTOINE CONSTANTS ARE
COMPATIBLE WITH PRESSURE AND TEMPERATURE UNITS"
PRINT

REM NUMBER OF COMPONENTS AND BOILING POINTS IN CENT.


N=3
REM BP(1) = 64.7: BP(2) = 82.50: BP(3) = 100!
COMPONENT$(1) = "MEOH": COMPONENT$(2) = "IPA": COMPONENT$(3) = "H2O"

REM ANTOINE CONSTANTS FOR PRESSURE IN kPa


A(1) = 16.5725: B(1) = 3626.55: C(1) = 238.9
A(2) = 16.6779: B(2) = 3640.2: C(2) = 219.6
A(3) = 16.2886: B(3) = 3816.44: C(3) = 227!

REM CHECK BPS OF PURE COMPONENTS


PRINT: PRINT " CHECK ANTOINE EQUATION AND CONSTANTS FOR EACH PURE
COMPONENT."
PT = 101.325
FOR I = 1 TO N
TT(I) = -C(I) - B(I) / (LOG(PT) - A(I)) 'BOILING TEMPERATURES AT 101.325 kPa
BP(I) = TT(I)
PRINT: PRINT: PRINT COMPONENT$(I)
PRINT I; " PURE COMPONENT BOILING TEMPERATURE, C= "; TT(I)
PRINT #1,: PRINT #1,: PRINT #1, COMPONENT$(I)
PRINT #1, I; " PURE COMPONENT BOILING TEMPERATURE, C= "; TT(I)
VP(I) = 2.718282 ^ (A(I) - (B(I) / ((TT(I)) + C(I)))) 'VAPOR PRESSURE AT BOILING POINT =
101.325 kPa
PRINT " PURE COMPONENT VAPOR PRESSURE AT BP= "; VP(I)
PRINT #1, " PURE COMPONENT VAPOR PRESSURE AT BP= "; VP(I)
NEXT I

INPUT " PRESS ENTER TO CONTINUE", YES

CLS
END SUB

SUB BUBBLE

CLS
DIM AA(10), LL(10), UL(10), XP(10), XX(10), DELX(10), VP(10), EK(10), Y(10)
DIM ELAPSE AS DOUBLE
25 PRINT: PRINT " INPUT DATA FOR BUBBLE POINT CALCS."
INPUT " NUMBER OF COMPONENTS= ", N
INPUT " TOTAL SYSTEM PRESSURE IN kPa= ", PT

PRINT: SUMX = 0
FOR K = 1 TO N
PRINT COMPONENT$(K)
INPUT " MOLE FRACTION IN LIQUID PHASE= ", X(K)
SUMX = SUMX + X(K)
NEXT K
PRINT " SUMX= "; SUMX
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 25
26 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON
AND '3' TO USE VAN LAAR: OP2= ", OP2%

IF OP2% = 0 OR OP2% > 3 THEN PRINT " ENTER '1', '2', OR '3' FOR ACTIVITY COEFFICIENT
MODEL: REDO": GOTO 26

IF OP2% = 1 THEN CALL RK: GOTO 50 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 50 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 50 'USE VAN LAAR ACTIVITY COEFFICIENTS

TS# = TIMER(.001)
50 OPT = 1E30
COUNT&& = 0: COUNTI% = 0: COUNTJ% = 0: FIL% = -111: RANDOMIZE (FIL%)

AA(1) = 0 'COMPOSITION VARIABLES IN PCT AND TEMPERATURE FROM 0 TO 100 C


WHERE AA(1) IS TEMPERATURE

FOR J = 1 TO 30
ZZZ = 500
FOR I = 1 TO ZZZ
COUNT&& = COUNT&& + 1
IF AA(1) - 100. / 2 ^ J < 0. THEN GOTO 250
GOTO 260
250 LL(K) = 0.
255 GOTO 265
260 LL(1) = AA(1) - 100 / 2 ^ J
265 IF AA(1) + 100 / 2 ^ J > 100 THEN GOTO 280
270 GOTO 290
280 UL(1) = 100 - LL(1)
285 GOTO 295

290 UL(1) = AA(1) + 100 / 2 ^ J - LL(1)


295 TB = LL(1) + RND * UL(1)

PRINT: PRINT " J= "; J; " I= "; I; " TEMPERATURE= "; TB

'INPUT " PRESS ENTER TO CONTINUE", YES

G1 = 0.0: SUMPT = 0.0


FOR II = 1 TO 3
VP(II) = 2.718282 ^ (A(II) - (B(II) / (TB + C(II)))): PRINT " VP(II)= "; VP(II)
EK(II) = VP(II) / PT
XP(II) = X(II) * G(II) * VP(II): PRINT " XP= "; XP(II): PRINT " PARTIAL PRESSURE(II)=
"; XP(II)
G1 = G1 + XP(II): SUMPT = SUMPT + XP(II)
NEXT II
G1 = ABS(G1 - 101.325)
PRINT: PRINT " G1= "; G1; " TOTAL PRESSURE FOR THIS TEMPERATURE= "; SUMPT

G = G1: PRINT: PRINT " G= "; G; " TB= "; TB


'INPUT " PRESS ENTER TO CONTINUE", YES
IF G < OPT THEN GOTO 360
GOTO 370

360 AA(1) = TB
OPT = G
370 COUNTI% = COUNTI% + 1: PRINT: PRINT " COUNTI= "; COUNTI%
NEXT I

PRINT " SUMY= "; SUMY; " SUMXX= "; SUMXX; " SUMPT= "; SUMPT
PRINT " G= "; G; " G1= "; G1; " OPT= "; OPT
PRINT " TB= "; AA(1); " I= "; I; " J= "; J
PRINT " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
SUMY = 0.
FOR II = 1 TO 3: VP(II) = 2.718282 ^ (A(II) - (B(II) / (AA(1) + C(II)))): EK(II) = VP(II) / PT:
Y(II) = EK(II) * G(II) * X(II): SUMY = SUMY + Y(II): NEXT II
PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT " XP(1)= "; XP(1); " XP(2)= "; XP(2); " XP(3)= "; XP(3)

COUNTI% = 0
COUNTJ% = COUNTJ% + 1: PRINT: PRINT " COUNTJ= "; COUNTJ%
'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT J

PRINT: PRINT " FINAL RESULTS FOR BUBBLE POINT TEMPERATURE CALCULATIONS!"
PRINT " G= "; G; " OPT= "; OPT; " TB= "; AA(1)
PRINT " G1= "; G1
PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3); " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT #1,: PRINT #1, " FINAL RESULTS FOR BUBBLE POINT TEMPERATURE
CALCULATIONS!"
PRINT #1, " G= "; G; " OPT= "; OPT; " TB= "; AA(1)
PRINT #1, " G1= "; G1
PRINT #1, " G1= "; G(1); " G2= "; G(2); "G3= "; G(3); " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= ";
X(3)
SUMY = 0.

FOR II = 1 TO 3: VP(II) = 2.718282 ^ (A(II) - (B(II) / (TB + C(II)))): EK(II) = VP(II) / PT: Y(II) =
EK(II) * G(II) * X(II): SUMY = SUMY + Y(II): NEXT II
PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&&
PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT #1, " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&&
TF# = TIMER(.001)
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE = (TF# - TS#) / 36000: PRINT " ELAPSED TIME= "; ELAPSE; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

DEFINT N
SUB CUBIC
REM SOLVING CUBIC EQUATIONS BY JACK LASHOVER 8/29/2012 SOLVING NEWTON'S
EXAMPLE FROM HIS ORIGINAL WORK
CLS: ON ERROR GOTO 1000
DEFDBL A-Z
DEFINT I-K

PRINT: PRINT " WELCOME TO SOLVING CUBIC EQUATIONS USING NEWTON'S


EXAMPLE FROM HIS ORIGINAL WORK "
PRINT " NEWTON'S POLYNOMIAL WAS X^3 -2*X - 5 = 0"
PRINT " THE TIME IS " + TIME$ + " AND THE DATE IS " + DATE$
PRINT #1,: PRINT #1, " WELCOME TO SOLVING CUBIC EQUATIONS USING NEWTON'S
EXAMPLE FROM HIS ORIGINAL WORK "

PRINT #1, NEWTON 'S POLYNOMIAL WAS X^3 -2*X - 5 = 0"


PRINT #1, " THE TIME IS " + TIME$ + " AND THE DATE IS " + DATE$

DIM AA(3), LL(3), UL(3), FLAG(3)

REM SOLUTION BY MONTE CARLO


TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1D+17: A(0) = 999999!: FLAG(1) = 0: FLAG(2) = 0: FLAG(3) = 0: X1 = 999999

REM INPUT COEFFICIENTS AS BELOW, THEN DETERMINE DISCRIMINANT TO SEE


WHAT THE ROOTS WILL BE.
'A1 = 1: B1 = -1: C1 = 0.2163: D1 = -0.01451
A1 = 1: B1 = 0: C1 = -2!: D1 = -5!
DISCRIMINANT = 18 * A1 * B1 * C1 * D1 - 4 * B1 ^ 3 * D1 + B1 ^ 2 * C1 ^ 2 - 4 * A1 * C1 ^ 3 27 * A1 ^ 2 * D1 ^ 2
PRINT: PRINT " DISCRIMINANT= "; DISCRIMINANT
PRINT " IF THE DISCRIMINANT IS > 0 THEN THE EQUATION HAS THREE DISTINCT REAL
ROOTS."
PRINT " IF THE DISCRIMINANT = 0 THEN THE EQUATION HAS A MULTIPLE ROOT AND
ALL ITS ROOTS ARE REAL."
PRINT " IF THE DISCRIMINANT IS < 0 THEN THE EQUATION HAS ONE REAL ROOT AND
TWO NONREAL COMPLEX CONJUGATE ROOTS."
PRINT " IF THE DISCRIMINANT = 0 AT LEAST TWO ROOTS COINCIDE AND THEY ARE
ALL REAL."
PRINT " IT MAY BE THAT THE EQUATION HAS A DOUBLE REAL ROOT AND ANOTHER
SINGLE REAL ROOT; ALTERNATIVELY, ALL_"
PRINT " THREE ROOTS COINCIDE YIELDING A TRIPLE REAL ROOT."
PRINT " NEWTON'S CUBIC EQUATION HAS ONE REAL AND A CONJUGATE PAIR OF
COMPLEX ROOTS." 'ROOT = 2.094551430177863 FOR NEWTON AND 0.7314 FOR OTHER
EXAMPLE FROM SEADER

PRINT #1,: PRINT #1, " DISCRIMINANT= "; DISCRIMINANT


PRINT #1, " IF THE DISCRIMINANT IS > 0 THEN THE EQUATION HAS THREE DISTINCT
REAL ROOTS."
PRINT #1, " IF THE DISCRIMINANT = 0 THEN THE EQUATION HAS A MULTIPLE ROOT
AND ALL ITS ROOTS ARE REAL."
PRINT #1, " IF THE DISCRIMINANT IS < 0 THEN THE EQUATION HAS ONE REAL ROOT
AND TWO NONREAL COMPLEX CONJUGATE ROOTS."
PRINT #1, " IF THE DISCRIMINANT = 0 AT LEAST TWO ROOTS COINCIDE AND THEY ARE
ALL REAL."
PRINT #1, " IT MAY BE THAT THE EQUATION HAS A DOUBLE REAL ROOT AND
ANOTHER SINGLE REAL ROOT; ALTERNATIVELY, ALL_"
PRINT #1, " THREE ROOTS COINCIDE YIELDING A TRIPLE REAL ROOT."
PRINT #1, " NEWTON'S CUBIC EQUATION HAS ONE REAL AND A CONJUGATE PAIR OF
COMPLEX ROOTS." 'ROOT = 2.094551430177863 FOR NEWTON AND 0.7314 FOR OTHER
EXAMPLE FROM SEADER

INPUT " PRESS ENTER TO CONTINUE", YES

TS# = TIMER
COUNT& = 0: COUNTJ% = 0: COUNTI% = 0

AA(1) = 0

FOR J = 1 TO 40
COUNTJ% = COUNTJ% + 1
ZZZ = 200
FOR I = 1 TO ZZZ
COUNTI% = COUNTI% + 1: COUNT& = COUNT& + 1

10 K = 1
11 IF AA(K) - 10! / 2 ^ J < 0! THEN GOTO 50
GOTO 60
50 LL(K) = 0!
55 GOTO 65
60 LL(K) = AA(K) - 10! / 2 ^ J
65 IF AA(K) + 10! / 2 ^ J > 10! THEN GOTO 80
70 GOTO 90
80 UL(K) = 10! - LL(K)
85 GOTO 91
90 UL(K) = AA(K) + 10! / 2 ^ J - LL(K)
91 X1 = LL(K) + RND * UL(K)

13 PRINT: PRINT " J= "; J; " I= "; I


PRINT " X1= "; X1; " AA(1)= "; AA(1); " LL(1)= "; LL(1); " UL(1)= "; UL(1)
PRINT #1,: PRINT #1, " J= "; J; " I= "; I
PRINT #1, " X1= "; X1; " AA(1)= "; AA(1); " LL(1)= "; LL(1); " UL(1)= "; UL(1)

G = ABS(A1 * X1 ^ 3 + B1 * X1 ^ 2 + C1 * X1 + D1)
IF G = 0 THEN PRINT " G = 0.": PRINT #1, " G = 0.": GOTO 300
PRINT: PRINT " G= "; G: PRINT #1,: PRINT #1, " G= "; G
'INPUT " PRESS ENTER TO CONTINUE", YES
110 IF ABS(G) < .0000008# THEN PRINT " G WITHIN TOLERANCE.": PRINT #1, " G
WITHIN TOLERANCE.": GOTO 300
120 IF G < OPT THEN GOTO 160
130 GOTO 170
160 ' SAVE BEST SO FAR X'S

AA(1) = X1: PRINT #1, " J= "; J; " I= "; I; " NEW LOCAL MINIMUM FOUND."
PRINT: PRINT " X1= "; X1: PRINT #1,: PRINT #1, " NEW X1= "; X1; " G= "; G; " OPT= ";
OPT; " AA(1)= "; AA(1); " LL(1)= "; LL(1); " UL= "; UL
OPT = G: PRINT " OPT= "; OPT: PRINT #1, " NEW OPT NOW IN USE= "; OPT
INPUT " PRESS ENTER TO CONTINUE", YES
170 PRINT " COUNTI= "; COUNTI%: PRINT #1, " COUNTI= "; COUNTI%
NEXT I

PRINT: PRINT " G= "; G; " G1= "; G1


PRINT: PRINT " I= "; I; " J= "; J
PRINT: PRINT " X1= "; X1; " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%

PRINT #1,: PRINT #1, " G= "; G; " G1= "; G1; " OPT= "; OPT
PRINT #1,: PRINT #1, " I= "; I; " J= "; J
PRINT #1,: PRINT #1, " X1= "; X1; " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%
COUNTI% = 0
'INPUT " PRESS ENTER TO CONTINUE", YES
180 NEXT J

300 CLS: PRINT: PRINT " FINAL RESULTS FOR SOLVING NEWTON'S CUBIC!"
PRINT " NEWTON'S POLYNOMIAL WAS X^3 - 2*X - 5 = 0 "
PRINT: PRINT " X1= "; X1
PRINT: PRINT " COUNTJ= "; COUNTJ%; " TOTAL SOLUTIONS CONSIDERED= "; COUNT&
PRINT: PRINT " G= "; G; " OPT= "; OPT
PRINT #1,: PRINT #1, " FINAL RESULTS FOR SOLVING NEWTON'S CUBIC!"
PRINT #1, NEWTON 'S POLYNOMIAL WAS X^3 - 2*X - 5 = 0"
PRINT #1,: PRINT #1, " X1= "; X1

PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " TOTAL SOLUTIONS CONSIDERED= ";
COUNT&
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

DEFINT N
SUB DEW

CLS
DIM AA(10), LL(10), UL(10), XP(10), Y(10), VP(10), EK(10), DELY(10), YY(10)
600 PRINT: PRINT " INPUT DATA FOR DEW POINT CALCS."
PRINT: PRINT
INPUT " NUMBER OF COMPONENTS= ", N
INPUT " TOTAL SYSTEM PRESSURE IN kPa= ", PT

PRINT: SUMY = 0
FOR KK = 1 TO N
PRINT COMPONENT$(KK)
INPUT " MOLE FRACTION IN VAPOR PHASE= ", Y(KK)
SUMY = SUMY + Y(KK)

NEXT KK
PRINT " SUMY= "; SUMY
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 600

REM SOLUTION BY MONTE CARLO

405 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT " YOU MUST ENTER A '1', '2', OR '3' TO SELECT AN
ACTIVITY COEFFICIENT MODEL: REDO": GOTO 405

TS# = TIMER
OPT = 1E+30

COUNTI% = 0: COUNTJ% = 0: COUNT& = 0


FOR I = 1 TO 4
AA(I) = 0 'COMPOSITION VARIABLES IN PCT AND TEMPERATURE FROM 0 TO 100 C
WHERE AA(4) IS TEMPERATURE
NEXT I

FOR J = 1 TO 30
ZZZ = 500
FOR I = 1 TO ZZZ
COUNT& = COUNT& + 1
FOR K = 1 TO 4
IF AA(K) - 100! / 2 ^ J < 0 THEN GOTO 15

GOTO 17
15 LL(K) = 0!
GOTO 16
17 LL(K) = AA(K) - 100! / 2 ^ J
16 IF AA(K) + 100! / 2 ^ J > BP(N) THEN GOTO 18
GOTO 19
18 UL(K) = 100! - LL(K)
GOTO 20
19 UL(K) = AA(K) + 100! / 2 ^ J - LL(K)
20 X(K) = LL(K) + RND * UL(K)
NEXT K

PRINT: PRINT " J= "; J; " I= "; I


FOR K = 1 TO 3
X(K) = X(K) / 100!
PRINT " X= "; X(K)
NEXT K
TD = X(4): PRINT " TD= "; TD

'INPUT " PRESS ENTER TO CONTINUE", YES

IF OP2% = 1 THEN CALL RK: GOTO 410 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 410 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 410 'USE VAN LAAR ACTIVITY
COEFFICIENTS

410 G1 = 0!: SUMPT = 0!

FOR II = 1 TO N
VP(II) = 2.718282 ^ (A(II) - (B(II) / (TD + C(II))))
EK(II) = VP(II) / PT
XP(II) = X(II) * G(II) * VP(II): PRINT " XP= "; XP(II)
G1 = G1 + XP(II): SUMPT = SUMPT + XP(II)
NEXT II
G1 = ABS(G1 - 101.325)
PRINT: PRINT " G1= "; G1; " SUMPT= "; SUMPT

G2 = 0!: SUMX = 0!
FOR II = 1 TO N
X(II) = X(II) * 100!
G2 = G2 + X(II): SUMX = SUMX + X(II)
NEXT II
G2 = ABS(G2 - 100!)
PRINT: PRINT " G2= "; G2; " SUMX= "; SUMX

G3 = 0!: SUMYY = 0!
FOR II = 1 TO 3
YY(II) = EK(II) * G(II) * X(II): PRINT " YY= "; YY(II)
DELY(II) = (YY(II) - Y(II) * 100!) ^ 2
G3 = G3 + DELY(II): SUMYY = SUMYY + YY(II)
NEXT II
PRINT " G3= "; G3; " SUMYY= "; SUMYY

G = G1 + G2 + G3: PRINT: PRINT " G= "; G

'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 21


GOTO 22
21 FOR II = 1 TO 4
AA(II) = X(II)
NEXT II

OPT = G
22 COUNTI% = COUNTI% + 1: PRINT: PRINT " COUNTI= "; COUNTI%
NEXT I
PRINT " SUMX= "; SUMX; " SUMPT= "; SUMPT
PRINT " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " OPT= "; OPT
PRINT " TD= "; AA(4); " I= "; I; " J= "; J
PRINT " AA(1)= "; AA(1); " AA(2)= "; AA(2); " AA(3)= "; AA(3); " AA(4)= "; AA(4)
PRINT " XP(1)= "; XP(1); " XP(2)= "; XP(2); " XP(3)= "; XP(3)
PRINT " X(1)= "; AA(1) / 100!; " X(2)= "; AA(2) / 100!; " X(3)= "; AA(3) / 100!; " TD= "; X(4)
PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT " EK(1)= "; EK(1); " EK(2)= "; EK(2); " EK(3)= "; EK(3)
PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)

COUNTI% = 0
COUNTJ% = COUNTJ% + 1: PRINT: PRINT " COUNTJ= "; COUNTJ%
'INPUT " PRESS ENTER TO CONTINUE", YES
23 NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR CALCULATING DEW TEMPERATURE!"
PRINT #1,: PRINT #1, " FINAL RESULTS FOR CALCULATING DEW TEMPERATURE!"
PRINT: PRINT " AA(1)= "; AA(1); " AA(2)= "; AA(2); " AA(3)= "; AA(3); " AA(4)= "; AA(4)
PRINT: PRINT " X(1)= "; AA(1) / 100.; " X(2)= "; AA(2) / 100.; " X(3)= "; AA(3) / 100.
PRINT #1,: PRINT #1, " AA(1)= "; AA(1); " AA(2)= "; AA(2); " AA(3)= "; AA(3); " AA(4)= ";
AA(4)
PRINT #1,: PRINT #1, " X(1)= "; AA(1) / 100.; " X(2)= "; AA(2) / 100.; " X(3)= "; AA(3) / 100.

SUMX = 0.
FOR II = 1 TO 3: X(II) = X(II) / 100.: SUMX = SUMX + X(II): NEXT II: PRINT " SUMX= ";
SUMX
IF OP2% = 1 THEN CALL RK: GOTO 227 'USE RK ACTIVITY COEFFS.
IF OP2% = 2 THEN CALL WILSON: GOTO 227 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 227 'USE VAN LAAR ACTIVITY COEFFS.
227 SUMY = 0.
FOR II = 1 TO 3: Y(II) = EK(II) * G(II) * X(II): SUMY = SUMY + Y(II): NEXT II
PRINT: PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT: PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT: PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT: PRINT " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)
PRINT: PRINT " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT: PRINT " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&&
PRINT: PRINT " G= "; G; " OPT= "; OPT; " TD= "; AA(4)

PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1,: PRINT #1, " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)

PRINT #1,: PRINT #1, " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)
PRINT #1,: PRINT #1, " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT; " TD= "; AA(4)

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS

END SUB

SUB ENTHALPY
CLS

PRINT: PRINT: PRINT: PRINT " CALCULATE HEAT OF VAPORIZATION OF FEED AND
FLASHQ-HEAT REQUIRED TO FLASH FEED TO TWO PHASE STATE"
PRINT " ENERGY NUMBERS ARE IN CALORIES FOR 100 MOLE/HR FEED"
PRINT

PRINT #1,: PRINT #1,: PRINT #1,: PRINT #1, " CALCULATE HEAT OF VAPORIZATION OF
FEED AND FLASHQ-HEAT REQUIRED TO FLASH FEED TO TWO PHASE STATE"
PRINT #1, " ENERGY NUMBERS ARE IN CALORIES FOR 100 MOLE/HR FEED"
PRINT #1,

DIM HL(10), HV(10), HLF(10), HVF(10), SUMHL(10), SUMHV(10)


DIM ENTHFV(10), ENTHFL(10), Y(10), Z(10)

'GOTO 2 'TEMP BYPASS FOR DEBUGGING

INPUT " NUMBER OF COMPONENTS= ", N


INPUT " FEED FLOW IN MOLES/HR= ", FF
INPUT " FEED PRESSURE IN kPa= ", PT
INPUT " FEED TEMPERATURE IN CENT.= ", TF
INPUT " FRACTION OF VAPOR FLASHED= ", V
INPUT " FEED BUBBLE POINT IN CENT.= ", FBP
INPUT " FEED DEW POINT IN CENT.= ", FDP

'2 PT = 101.325: TF = 74.57: V = 0.50: N = 3: FF = 100.: FBP = 72.78: FDP = 80.42


'Z(1) = 0.50: Z(2) = 0.15: Z(3) = 0.35
'Y(1) = 0.5827: Y(2) = 0.2876: Y(3) = 0.1297
'X(1) = 0.4368: X(2) = 0.3938: X(3) = 0.1694
'GOTO 4 'TEMP BYPASS FOR DEBUGGING

3 PRINT: SUMZ = 0
FOR KK = 1 TO N
PRINT COMPONENT$(KK)
INPUT " MOLE FRACT. IN FEED= ", Z(KK)
INPUT " MOLE FRACT. IN VAPOR PHASE= ", Y(KK)

INPUT " MOLE FRACT. IN LIQUID PHASE= ", X(KK)


SUMZ = SUMZ + Z(KK)
NEXT KK
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 3

420 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT " YOU MUST ENTER A '1', '2', OR '3' TO SELECT AN
ACTIVITY COEFFICIENT MODEL: REDO": GOTO 420

IF OP2% = 1 THEN CALL RK: GOTO 79 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 79 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 79 'USE VAN LAAR ACTIVITY COEFFICIENTS

REM CALCULATIONS BELOW ARE ONLY FOR TWO PHASE FEED


79 FOR I% = 1 TO N
HLF(I%) = (AAL(I%) * TF) + ((BB(I%) / 2!) * (TF ^ 2)) + ((CC(I%) / 3!) * (TF ^ 3))
HLF(I%) = HLF(I%) * H * MW(I%) 'CAL/MOLE
HVF(I%) = AAH(I%) + BBB(I%) * TF + CCC(I%) * TF ^ 2
HVF(I%) = HVF(I%) * H * MW(I%) 'CAL/MOLE
NEXT I%

SUMHLF = 0: SUMHVF = 0
FOR I% = 1 TO N
ENTHFL(I%) = (HLF(I%) * X(I%) * (1 - V) * FF)

ENTHFV(I%) = (HVF(I%) * Y(I%) * FF * V) + (FF * V * HLF(I%) * Y(I%))


SUMHLF = SUMHLF + ENTHFL(I%)
SUMHVF = SUMHVF + ENTHFV(I%)
PRINT " FOR COMPONENT= "; I%; " HLF= "; HLF(I%); " HVF= "; HVF(I%); " ENTHFL= ";
ENTHFL(I%); " ENTHFV= "; ENTHFV(I%)
PRINT #1, " FOR COMPONENT= "; I%; " HLF= "; HLF(I%); " HVF= "; HVF(I%); " ENTHFL=
"; ENTHFL(I%); " ENTHFV= "; ENTHFV(I%)
NEXT I%
QQF = SUMHLF + SUMHVF
PRINT " TOTAL FEED ENTHALPY= "; QQF
PRINT #1, " TOTAL FEED ENTHALPY= "; QQF
INPUT " PRESS ENTER TO CONTINUE", YES

REM DETERMINE HEAT OF VAPORIZATION OF FEED


REM GET ENTHALPY OF FEED LIQUID AT FEED BUBBLE POINT, FBP
T = FBP
FOR I% = 1 TO N
HLF(I%) = (AAL(I%) * T) + ((BB(I%) / 2!) * (T ^ 2)) + ((CC(I%) / 3!) * (T ^ 3))
HLF(I%) = HLF(I%) * H * MW(I%) 'CAL/MOLE
PRINT " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
PRINT #1, " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
NEXT I%
SUMHLF = 0
FOR I% = 1 TO N
ENTHFL(I%) = HLF(I%) * Z(I%) * FF
SUMHLF = SUMHLF + ENTHFL(I%)
NEXT I%

FHL = SUMHLF
PRINT " ENTHALPY FOR TOTAL LIQUID FEED AT FEED BP, FHL= "; FHL
PRINT #1, " ENTHALPY FOR TOTAL LIQUID FEED AT FEED BP, FHL= "; FHL
INPUT " PRESS ENTER TO CONTINUE", YES

REM THIRD, GET ENTHALPY OF FEED VAPOR AT FEED DEW POINT, FDP
T = FDP
FOR I% = 1 TO N
HLF(I%) = (AAL(I%) * T) + ((BB(I%) / 2!) * (T ^ 2)) + ((CC(I%) / 3!) * (T ^ 3))
HLF(I%) = HLF(I%) * H * MW(I%) 'CAL/MOLE
PRINT " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
PRINT #1, " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
HVF(I%) = AAH(I%) + BBB(I%) * T + CCC(I%) * T ^ 2
HVF(I%) = HVF(I%) * H * MW(I%) 'CAL/MOLE
NEXT I%
SUMHVF = 0
FOR I% = 1 TO N
ENTHFV(I%) = (HVF(I%) * Z(I%) * FF) + (HLF(I%) * Z(I%) * FF)
SUMHVF = SUMHVF + ENTHFV(I%)
NEXT I%
FHV = SUMHVF 'ENTHALPY IS A STATE FUNCTION. HERE WE HAVE TAKEN FEED AS
LIQUID UP TO ITS DEW POINT THEN VAPORIZED IT ALL AT ITS DEW POINT.
PRINT " ENTHALPY FOR FEED VAPOR AT FEED DEW POINT, FHV= "; FHV
PRINT #1, " ENTHALPY FOR FEED VAPOR AT FEED DEW POINT, FHV= "; FHV
INPUT " PRESS ENTER TO CONTINUE", YES

REM COLLECT ENTHALPY DATA FOR CALCULATION OF Q-FEED, QF

REM FIRST, GET ENTHALPY OF FEED LIQUID AT FEED TEMPERATURE

FOR I% = 1 TO N
HLF(I%) = (AAL(I%) * TF) + ((BB(I%) / 2!) * (TF ^ 2)) + ((CC(I%) / 3!) * (TF ^ 3))
HLF(I%) = HLF(I%) * H * MW(I%) 'CAL/MOLE
PRINT " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
PRINT #1, " FOR COMPONENT= "; I%; " HLF= "; HLF(I%)
NEXT I%
SUMHLF = 0
FOR I% = 1 TO N
ENTHFL(I%) = HLF(I%) * Z(I%) * FF 'BASE TEMPERATURE IS ZERO
SUMHLF = SUMHLF + ENTHFL(I%)
NEXT I%
HF = SUMHLF 'ENTHALPY OF FEED LIQUID AT FEED TEMPERATURE
PRINT " ENTHALPY FOR TOTAL LIQUID FEED AT FEED TEMPERATURE, HF= "; HF
PRINT #1, " ENTHALPY FOR TOTAL LIQUID FEED AT FEED TEMPERATURE, HF= "; HF

REM CALCULATE QF AND HEAT OF VAPORIZATION


REM NOTE THAT FOR FEED AT ITS BP (SATURATED LIQUID), HF = FHL, SO QF = 1
QF = (FHV - HF) / (FHV - FHL)
PRINT " QF= "; QF; " V= "; V
PRINT #1, " QF= "; QF; " V= "; V
LAMDA = FHV - FHL 'HEAT OF VAPORIZATION OF FEED
PRINT " HEAT OF VAPORIZATION FOR TOTAL FEED MOLE/HR(100.)= "; LAMDA

REM CALCULATE FLASH Q-HEAT REQUIRED TO FLASH LIQUID FEED AT FEED TEMP.
TO TWO PHASE FLASHED STATE

REM SUBTRACT ENTHALPY OF TOTAL LIQUID FEED, HF, AT TF FROM QQF, ENTHALPY
OF FLASHED TWO PHASE FEED

FLASHQ = QQF - HF
PRINT: PRINT " QQF= "; QQF; " HF= "; HF; " FLASHQ= "; FLASHQ
PRINT #1,: PRINT #1, " QQF= "; QQF; " HF= "; HF; " FLASHQ= "; FLASHQ

INPUT " PRESS ENTER TO CONTINUE", YES

CLS
END SUB

SUB PRESSURE
CLS

DIM AA(10), LL(10), UL(10), XP(10), VP(10), EK(10), ZX(10), Z(10), Y(10)

PRINT: PRINT: PRINT: PRINT " SUBROUTINE TO CALCULATE FLASH PRESSURE WITH
KNOWN V AND T"
PRINT
PRINT #1,: PRINT #1,: PRINT #1,: PRINT #1, " SUBROUTINE TO CALCULATE FLASH
PRESSURE WITH KNOWN V AND T"
PRINT #1,

800 PRINT: PRINT " INPUT DATA FOR FLASH WITH UNKNOWN PRESSURE CALCS."
INPUT " NUMBER OF COMPONENTS= ", N
INPUT " TEMPERATURE IN DEG. C= ", T
INPUT " FRACTION OF VAPOR FLASHED, V= ", V

PRINT: SUMZ = 0
FOR KK = 1 TO N
PRINT COMPONENT$(KK)
INPUT " MOLE FRACTION IN FEED= ", Z(KK)
SUMZ = SUMZ + Z(KK)
NEXT KK
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 800

95 REM SOLUTION BY MONTE CARLO

430 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT " YOU MUST ENTER A '1', '2', OR '3' TO SELECT AN
ACTIVITY COEFFICIENT MODEL: REDO": GOTO 430

TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1D+17

COUNT& = 0: COUNTI% = 0
FOR I = 1 TO 4
AA(I) = 0 'COMPOSITION VARIABLES IN PCT AND TEMPERATURE FROM 0 TO 100 C
WHERE AA(5) IS TEMPERATURE
NEXT I

FOR J = 1 TO 20

ZZZ = 200
FOR I = 1 TO ZZZ
COUNT& = COUNT& + 1
FOR K = 1 TO 3
IF AA(K) - 100! / 2 ^ J < 0! THEN GOTO 35
GOTO 36
35 LL(K) = 0!
GOTO 37
36 LL(K) = AA(K) - 100! / 2 ^ J
37 IF AA(K) + 100! / 2 ^ J > 100! THEN GOTO 38
GOTO 39
38 UL(K) = 100! - LL(K)
GOTO 40
39 UL(K) = AA(K) + 100! / 2 ^ J - LL(K)
40 X(K) = LL(K) + RND * UL(K)
NEXT K

K=4
IF AA(K) - 101.325 / 2 ^ J < 0! THEN GOTO 550
GOTO 560
550 LL(K) = 0!
555 GOTO 565
560 LL(K) = AA(K) - 101.325 / 2 ^ J
565 IF AA(K) + 101.325 / 2 ^ J > 101.325 THEN GOTO 580
570 GOTO 590
580 UL(K) = 101.325 - LL(K)

585 GOTO 591


590 UL(K) = AA(K) + 101.325 / 2 ^ J - LL(K)
591 PT = LL(K) + RND * UL(K)

PRINT: PRINT " J= "; J; " I= "; I 'FIRST THREE ARE LIQ. COMPS., FOURTH IS PRESSURE
FOR K = 1 TO 3
X(K) = X(K) / 100!
PRINT " X= "; X(K)
NEXT K
PRINT " PT= "; PT

'INPUT " PRESS ENTER TO CONTINUE", YES

IF OP2% = 1 THEN CALL RK: GOTO 12 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 12 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 12 'USE VAN LAAR ACTIVITY
COEFFICIENTS

12 G1 = 0!: SUMPT = 0!
FOR II = 1 TO 3
VP(II) = 2.718 ^ (A(II) - (B(II) / ((T) + C(II)))): PRINT " VP= "; VP(II)
EK(II) = VP(II) / PT: PRINT " EK= "; EK(II)
XP(II) = X(II) * G(II) * VP(II): PRINT " XP= "; XP(II)
G1 = G1 + XP(II): SUMPT = SUMPT + XP(II)
NEXT II
G1 = ABS(G1 - 101.325)

PRINT: PRINT " G1= "; G1; " SUMPT= "; SUMPT
'INPUT " PRESS ENTER TO CONTINUE", YES

G2 = 0!: SUMY = 0!
FOR II = 1 TO 3
X(II) = X(II) * 100!
Y(II) = EK(II) * G(II) * X(II)
G2 = G2 + Y(II): SUMY = SUMY + Y(II)
NEXT II
G2 = ABS(G2 - 100!)
PRINT " G2= "; G2; " SUMY= "; SUMY

G3 = 0!: SUMX = 0!
FOR II = 1 TO 3
G3 = G3 + X(II): SUMX = SUMX + X(II)
NEXT II
G3 = ABS(G3 - 100!)
PRINT: PRINT " G3= "; G3; " SUMX= "; SUMX

G4 = 0!: SUMZX = 0!
FOR II = 1 TO 3
ZX(II) = ABS(Z(II) * 100! - (V * X(II) * G(II) * EK(II)) - (1! - V) * X(II)): PRINT " ZX(II)=
"; ZX(II)
'ZX(II) = (V * EK(II) * G(II) * X(II)) + ((1.0 - V) * X(II)): PRINT " ZX(II)= "; ZX(II)
G4 = G4 + ZX(II): SUMZX = SUMZX + ZX(II)
NEXT II
PRINT " G4= "; G4; " SUMZX= "; SUMZX

G = G1 + G2 + G3 + G4: PRINT: PRINT " G= "; G; " PRESSURE= "; PT


'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 440


GOTO 43
REM SAVE BEST SO FAR X'S AND Y'S AND T
440 AA(1) = X(1): AA(2) = X(2): AA(3) = X(3): AA(4) = PT
SUMX = AA(1) + AA(2) + AA(3): PRINT " SUMX= "; SUMX
PRINT: PRINT " X(1)= "; AA(1) / 100!; " X(2)= "; AA(2) / 100!; " X(3)= "; AA(3) / 100!; " PT=
"; AA(4)
OPT = G: PRINT " OPT= "; OPT

43 COUNTI% = COUNTI% + 1: PRINT: PRINT " COUNTI= "; COUNTI%


'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT I

PRINT: PRINT " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4; " OPT= "; OPT
PRINT: PRINT " PT= "; PT; " I= "; I; " J= "; J
PRINT: PRINT " X(1)= "; AA(1) / 100!; " X(2)= "; AA(2) / 100!; " X(3)= "; AA(3) / 100!; " PT= ";
AA(4)
SUMX = AA(1) / 100! + AA(2) / 100! + AA(3) / 100!: PRINT " SUMX= "; SUMX
COUNTI% = 0
COUNTJ% = COUNTJ% + 1: PRINT: PRINT " COUNTJ= "; COUNTJ%
'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR CALCULATION OF FLASH PRESSURE!"
PRINT #1,: PRINT #1, " FINAL RESULTS FOR CALCULATION OF FLASH PRESSURE!"
SUMX = 0!
FOR II = 1 TO 3
X(II) = AA(II) / 100!: SUMX = SUMX + X(II)
NEXT II

IF OP2% = 1 THEN CALL RK: GOTO 204 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 204 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 204 'USE VAN LAAR ACTIVITY COEFFICIENTS

204 PT = AA(4)

SUMY = 0!
FOR II = 1 TO 3
VP(II) = 2.718282 ^ (A(II) - (B(II) / ((T) + C(II))))
EK(II) = VP(II) / PT
Y(II) = EK(II) * G(II) * X(II): SUMY = SUMY + Y(II)
NEXT II

199 REM
PRINT: PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT: PRINT " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT: PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT: PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT: PRINT " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)

PRINT: PRINT " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT: PRINT " COUNTJ= "; COUNTI%; " OVERALL COUNT= "; COUNT&
PRINT: PRINT " G= "; G; " OPT= "; OPT; " PT= "; PT

PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT #1,: PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1,: PRINT #1, " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT #1,: PRINT #1, " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)
PRINT #1,: PRINT #1, " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT; " PT= "; PT

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES

CLS
END SUB

SUB RACHFORD
CLS

PRINT: PRINT " DEMONSTRATE USE OF MONTE CARLO METHOD TO SOLVE


RACHFORD-RICE EXAMPLE PROBLEM"

PRINT #1,: PRINT #1, " DEMONSTRATE USE OF MONTE CARLO METHOD TO SOLVE
RACHFORD-RICE EXAMPLE PROBLEM"

DIM AA(10), LL(10), UL(10), Z(10)


DIM K(10) AS DOUBLE

PRINT: PRINT " PROBLEM TAKEN FROM EXAMPLE 4.1 ON PAGE 180 OF 'SEPARATION
PROCESS PRINCIPLES' BY J. D. SEADER AND E. J. HENLEY, JOHN WILEY & SONS, 1998."
PRINT " A 100-KMOL/H FEED CONSISTING OF 10,20,30, AND 40 MOL % OF PROPANE(3),
N-BUTANE(4), N-PENTANE(5), AND N-HEXANE(6), RESPECTIVELY, ENTERS"
PRINT " A DISTILLATION COLUMN AT 100 PSIA (689.5 kPa) AND 200 F (366.5 K).
ASSUMING EQUILIBRIUM, WHAT MOLE FRACTION OF THE FEED ENTERS AS VAPOR,"
PRINT " TAKEN FROM S.T. HADDEN AND H.G. GRAYSON VLE DATA FOR
HYDROCARBONS, AT FLASH CONDITIONS, K(1) = 4.2, K(2) = 1.75, K(3) = 0.74, AND K(4) =
0.34,"
PRINT " INDEPENDENT OF COMPOSITIONS. FROM RACHFORD-RICE, f(PHI) = THE SUM
FROM I=1 TO 4 OF [Z(I)*(1 - K(I)] / [(1 + PHI*(K(I) - 1)] = 0 WHERE"
PRINT " PHI = V/F AND Z(I) = THE FEED COMPOSITION IN MOLE FRACTION FOR THE
ITH COMPONENT, 0.1, 0.2, 0.3, AND 0.4, RESPECTIVELY. f(0) WAS CALCULATED TO"
PRINT " BE -0.128 AND f(1) WAS CALCULATED TO BE 0.720. SINCE f(0) < 0 THE MIXTURE
IS ABOVE ITS BUBBLE POINT TEMPERATURE, AND SINCE f(1) > 0 THE MIXTURE"
PRINT " IS BELOW ITS DEW POINT MEANING THAT TWO PHASES EXIST. THE
CALCULATION OF PHI USING MONTE CARLO INSTEAD OF NEWTON-RAPHSON FOLLOWS:"

PRINT #1,: PRINT #1, " PROBLEM TAKEN FROM EXAMPLE 4.1 ON PAGE 180 OF
'SEPARATION PROCESS PRINCIPLES' BY J. D. SEADER AND E. J. HENLEY, JOHN WILEY &
SONS, 1998."
PRINT #1, " A 100-KMOL/H FEED CONSISTING OF 10,20,30, AND 40 MOL % OF
PROPANE(3), N-BUTANE(4), N-PENTANE(5), AND N-HEXANE(6), RESPECTIVELY, ENTERS"
PRINT #1, " A DISTILLATION COLUMN AT 100 PSIA (689.5 kPa) AND 200 F (366.5 K).
ASSUMING EQUILIBRIUM, WHAT MOLE FRACTION OF THE FEED ENTERS AS VAPOR,"
PRINT #1, " TAKEN FROM S.T. HADDEN AND H.G. GRAYSON VLE DATA FOR
HYDROCARBONS, AT FLASH CONDITIONS, K(1) = 4.2, K(2) = 1.75, K(3) = 0.74, AND K(4) =
0.34,"

PRINT #1, " INDEPENDENT OF COMPOSITIONS. FROM RACHFORD-RICE, f(PHI) = THE


SUM FROM I=1 TO 4 OF [Z(I)*(1 - K(I)] / [(1 + PHI*(K(I) - 1)] = 0 WHERE"
PRINT #1, " PHI = V/F AND Z(I) = THE FEED COMPOSITION IN MOLE FRACTION FOR THE
ITH COMPONENT, 0.1, 0.2, 0.3, AND 0.4, RESPECTIVELY. f(0) WAS CALCULATED TO"
PRINT #1, " BE -0.128 AND f(1) WAS CALCULATED TO BE 0.720. SINCE f(0) < 0 THE
MIXTURE IS ABOVE ITS BUBBLE POINT TEMPERATURE, AND SINCE f(1) > 0 THE MIXTURE"
PRINT #1, " IS BELOW ITS DEW POINT MEANING THAT TWO PHASES EXIST. THE
CALCULATION OF PHI USING MONTE CARLO INSTEAD OF NEWTON-RAPHSON FOLLOWS:"
INPUT " PRESS ENTER TO CONTINUE", YES

REM SOLUTION BY MONTE CARLO

FIL% = -1111: RANDOMIZE (FIL%)


OPT = 1D+17

TS# = TIMER

COUNT& = 0: Z(1) = .1: Z(2) = .2: Z(3) = .3: Z(4) = .4


K(1) = 4.2: K(2) = 1.75: K(3) = .74: K(4) = .34
COUNTI% = 0: COUNTJ% = 0

AA(1) = 0
FOR J = 1 TO 10
ZZZ = 200
FOR I = 1 TO ZZZ
COUNT& = COUNT& + 1
IF AA(1) - 100! / 2 ^ J < 0! THEN GOTO 81
GOTO 83

81 LL(1) = 0!
GOTO 82
83 LL(1) = AA(1) - 100! / 2 ^ J
82 IF AA(1) + 100! / 2 ^ J > 100! THEN GOTO 84
GOTO 86
84 UL(1) = 100! - LL(1)
GOTO 87
86 UL(1) = AA(1) + 100! / 2 ^ J - LL(1)
87 V = LL(1) + RND * UL(1)

PRINT #1,: PRINT #1, " J= "; J; " I= "; I


PRINT #1, " AA(1)= "; AA(1); " LL(1)= "; LL(1); " UL(1)= "; UL(1)
PHI = V / 100!
PRINT #1, " PHI= "; PHI

G1 = 0!
FOR II = 1 TO 4: G1 = G1 + (Z(II) * (1 - K(II)) / (1 + PHI * (K(II) - 1))): NEXT II
'G1 = 0.3 * (7.0 - 1.) / (PHI * 7.0 + 1. - PHI) + 0.1 * (2.4 - 1.) / (PHI * 2.4 + 1. - PHI) + 0.15 *
(0.8 - 1.) / (PHI * 0.8 + 1. - PHI) + 0.45 * (0.3 - 1) / (PHI * 0.3 - PHI + 1.)
G = ABS(G1)
PRINT #1,: ' PRINT #1, " G= "; G
'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 501


GOTO 502
REM SAVE BEST SO FAR X'S
501 AA(1) = PHI * 100!

PRINT #1,: PRINT #1, " NEW PHI= "; PHI


OPT = G: PRINT #1, " NEW OPT= "; OPT; " NEW G= "; G
COUNTI% = COUNTI% + 1: PRINT " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%
502 NEXT I

PRINT: PRINT " G= "; G; " G1= "; G1; " OPT= "; OPT
PRINT: PRINT " I= "; I; " J= "; J
PRINT: PRINT " FRACTION OF FEED CONVERTED TO VAPOR, PHI= "; PHI
PRINT #1,: PRINT #1, " G= "; G; " G1= "; G1; " OPT= "; OPT
PRINT #1,: PRINT #1, " I= "; I; " J= "; J
PRINT #1,: PRINT #1, " FRACTION OF FEED CONVERTED TO VAPOR, PHI= "; PHI

COUNTI% = 0
COUNTJ% = COUNTJ% + 1: PRINT: PRINT " COUNTJ= "; COUNTJ%
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%
'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR RACHFORD-RICE CALCULATIONS!"

PRINT: PRINT " AA(1)= "; AA(1)


PRINT: PRINT " FRACTION OF FEED CONVERTED TO VAPOR, PHI= "; PHI
PRINT: PRINT " G1= "; G1
PRINT: PRINT " COUNTJ= "; COUNTJ%; " NUMBER OF SOLUTIONS EXAMINED= ";
COUNT&
PRINT: PRINT " G= "; G; " OPT= "; OPT
PRINT #1,: PRINT #1, " FINAL RESULTS FOR RACHFORD-RICE CALCULATIONS!"

PRINT #1,: PRINT #1, " FRACTION OF FEED CONVERTED TO VAPOR, PHI= "; PHI
PRINT #1, " NUMBER OF SOLUTIONS EXAMINED= "; COUNT&
PRINT #1, " G= "; G

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

SUB RK

SHARED G() AS DOUBLE

DIM AR(10) AS DOUBLE, PZX(10) AS DOUBLE, PAX(10, 10) AS DOUBLE


'N = 3
FOR JI = 1 TO N
PZX(JI) = 0
FOR KK = 1 TO N
S1 = BRK(KK, JI) * X(KK)
S2 = 2! * CRK(KK, JI) * X(KK) * (X(KK) - X(JI))
S3 = 2! * CRK(KK, JI) * X(KK) * X(JI)
PZX(JI) = PZX(JI) + S1 + S2 - S3
NEXT KK

NEXT JI

ZZ = 0
FOR KK = 1 TO N
AR(KK) = 0
FOR JI = 1 TO N
S4 = (BRK(KK, JI) + CRK(KK, JI) * (X(KK) - X(JI))) * X(JI)
S5 = CRK(KK, JI) * X(KK) * X(JI)
AR(KK) = AR(KK) + S4 + S5
S6 = BRK(KK, JI) * X(KK) * X(JI)
S7 = 2! * CRK(KK, JI) * X(KK) * X(JI) * (X(KK) - X(JI))
ZZ = ZZ + ((S6 + S7) / 2!)
NEXT JI
NEXT KK

REM CODE TO CALCULATE PARTIAL DERIVATIVES


FOR KK = 1 TO N
FOR KI = 1 TO N
PAX(KK, KI) = 0
FOR JI = 1 TO N
IF KK = KI THEN GOTO 661
PAX(KK, KI) = BRK(KK, KI) + (2! * CRK(KK, KI) * (X(KK) - X(KI)))
GOTO 665
661 PAX(KK, KI) = PAX(KK, KI) + 2! * CRK(KK, JI) * X(JI)
665 NEXT JI
NEXT KI

NEXT KK

FOR K = 1 TO N
G(K) = 2.718282 ^ (AR(K) - ZZ) ': PRINT " G= "; G(K); " ZZ= "; ZZ
NEXT K

'INPUT " PRESS ENTER TO CONTINUE", YES


END SUB

SUB TEMPERATURE
CLS

PRINT: PRINT: PRINT: PRINT " SUBROUTINE TO CALCULATE FLASH TEMPERATURE


WITH KNOWN V AND P"
PRINT
PRINT #1,: PRINT #1,: PRINT #1,: PRINT #1, " SUBROUTINE TO CALCULATE FLASH
TEMPERATURE WITH KNOWN V AND P"
PRINT #1,

DIM Y(10), AA(10), Z(10), LL(10), UL(10), VP(10), XP(10), EK(10), ZX(10)

100 PRINT: PRINT " INPUT DATA FOR FLASH WITH UNKNOWN TEMPERATURE CALCS."
INPUT " NUMBER OF COMPONENTS= ", N
INPUT " TOTAL SYSTEM PRESSURE IN kPa= ", PT
INPUT " FRACTION OF VAPOR FLASHED, V= ", V
PRINT: SUMZ = 0

FOR KK = 1 TO N
PRINT COMPONENT$(KK)
INPUT " MOLE FRACTION IN FEED= ", Z(KK)
SUMZ = SUMZ + Z(KK)
NEXT KK
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 100

REM SOLUTION BY MONTE CARLO


CALL ANTOINE

601 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT " YOU MUST ENTER A '1', '2', OR '3' TO SELECT AN
ACTIVITY COEFFICIENT MODEL: REDO": GOTO 601

TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1D+17

COUNT& = 0: COUNTI% = 0: COUNTJ% = 0


FOR I = 1 TO 4
AA(I) = LOW 'COMPOSITION VARIABLES IN PCT AND TEMPERATURE FROM 0 TO 100 C
WHERE AA(5) IS TEMPERATURE
NEXT I

FOR J = 1 TO 20

ZZZ = 500
FOR I = 1 TO ZZZ
COUNT& = COUNT& + 1
FOR K = 1 TO 3
IF AA(K) - 100! / 2 ^ J < 0! THEN GOTO 61
GOTO 62
61 LL(K) = 0!
GOTO 63
62 LL(K) = AA(K) - 100! / 2 ^ J
63 IF AA(K) + 100! / 2 ^ J > 100! THEN GOTO 64
GOTO 66
64 UL(K) = 100! - LL(K)
GOTO 67
66 UL(K) = AA(K) + 100! / 2 ^ J - LL(K)
67 X(K) = LL(K) + RND * UL(K)
NEXT K

K=4
IF AA(K) - 100! / 2 ^ J < BP(1) THEN GOTO 68
GOTO 69
68 LL(K) = BP(1)
GOTO 71
69 LL(K) = AA(K) - 100! / 2 ^ J
71 IF AA(K) + BP(3) / 2 ^ J > BP(3) THEN GOTO 72
GOTO 73
72 UL(K) = BP(3) - LL(K)

GOTO 74
73 UL(K) = AA(K) + BP(3) / 2 ^ J - LL(K)
74 T = LL(K) + RND * UL(K)

PRINT: PRINT " J= "; J; " I= "; I


FOR K = 1 TO 3
X(K) = X(K) / 100!
PRINT " X= "; X(K)
NEXT K
PRINT " T= "; T

'INPUT " PRESS ENTER TO CONTINUE", YES

IF OP2% = 1 THEN CALL RK: GOTO 602 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 602 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 602 'USE VAN LAAR ACTIVITY
COEFFICIENTS

602 G1 = 0!: SUMPT = 0!


FOR II = 1 TO 3
VP(II) = 2.718282 ^ (A(II) - (B(II) / ((T) + C(II)))): PRINT " VP(II)= "; VP(II)
XP(II) = X(II) * G(II) * VP(II): PRINT " XP= "; XP(II)
G1 = G1 + XP(II): SUMPT = SUMPT + XP(II)
NEXT II
G1 = ABS(G1 - 101.325)

PRINT: PRINT " G1= "; G1; " SUMPT= "; SUMPT
'INPUT " PRESS ENTER TO CONTINUE", YES

G2 = 0!: SUMX = 0!
FOR II = 1 TO 3
X(II) = X(II) * 100!
G2 = G2 + X(II): SUMX = SUMX + X(II)
NEXT II
G2 = ABS(G2 - 100!)
PRINT: PRINT " G2= "; G2; " SUMX= "; SUMX

G3 = 0!: SUMY = 0!
FOR II = 1 TO 3
EK(II) = VP(II) / PT
Y(II) = EK(II) * G(II) * X(II)
G3 = G3 + Y(II): SUMY = SUMY + Y(II)
NEXT II
G3 = ABS(G3 - 100!)
PRINT " G3= "; G3; " SUMY= "; SUMY

G4 = 0!: SUMZX = 0!
FOR II = 1 TO 3
ZX(II) = ABS(Z(II) * 100! - (V * X(II) * G(II) * EK(II)) - (1! - V) * X(II)): PRINT " ZX(II)=
"; ZX(II)
'ZX(II) = (V * EK(II) * G(II) * X(II)) + ((1.0 - V) * X(II)): PRINT " ZX(II)= "; ZX(II)
G4 = G4 + ZX(II): SUMZX = SUMZX + ZX(II)
NEXT II

PRINT " G4= "; G4; " SUMZX= "; SUMZX

G = G1 + G2 + G3 + G4: PRINT: PRINT " G= "; G; " PRESSURE= "; PT


'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 77


GOTO 76
77 REM SAVE BEST SO FAR X'S AND Y'S AND T
AA(1) = X(1): AA(2) = X(2): AA(3) = X(3): AA(4) = T
SUMX = AA(1) + AA(2) + AA(3)
PRINT: PRINT " X(1)= "; AA(1) / 100!; " X(2)= "; AA(2) / 100!; " X(3)= "; AA(3) / 100!; "
SUMX= "; SUMX
135 OPT = G: PRINT " OPT= "; OPT; " G= "; G; " T= "; AA(4)

76 COUNTI% = COUNTI% + 1: PRINT: PRINT " COUNTI= "; COUNTI%


'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT I

PRINT: PRINT " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4; " OPT= "; OPT
PRINT: PRINT " T= "; AA(4); " I= "; I; " J= "; J
PRINT: PRINT " XP(1)= "; XP(1); " XP(2)= "; XP(2); " XP(3)= "; XP(3)
PRINT: PRINT " X(1)= "; AA(1) / 100!; " X(2)= "; AA(2) / 100!; " X(3)= "; AA(3) / 100!
SUMX = X(1) + X(2) + X(3): PRINT " SUMX= "; SUMX
COUNTI% = 0
COUNTJ% = COUNTJ% + 1: PRINT: PRINT " COUNTJ= "; COUNTJ%
'INPUT " PRESS ENTER TO CONTINUE", YES
NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR CALCULATING FLASH TEMPERATURE!"
PRINT #1,: PRINT #1, " FINAL RESULTS FOR CALCULATING FLASH TEMPERATURE!"
SUMX = 0!
FOR II = 1 TO 3
X(II) = AA(II) / 100!: SUMX = SUMX + X(II)
NEXT II

IF OP2% = 1 THEN CALL RK: GOTO 203 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 203 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 203 'USE VAN LAAR ACTIVITY COEFFICIENTS
203 T = AA(4)

SUMY = 0!
FOR II = 1 TO 3
VP(II) = 2.718282 ^ (A(II) - (B(II) / ((T) + C(II))))
EK(II) = VP(II) / PT
Y(II) = EK(II) * G(II) * X(II): SUMY = SUMY + Y(II)
NEXT II

PRINT: PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT: PRINT " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT: PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT: PRINT " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT: PRINT " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)

PRINT: PRINT " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT: PRINT " COUNTJ= "; COUNTJ%; " COUNTI= "; COUNTI%; " OVERALL COUNT= ";
COUNT&
PRINT: PRINT " G= "; G; " OPT= "; OPT; " T= "; T
PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT #1,: PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1,: PRINT #1, " G1= "; G(1); " G2= "; G(2); "G3= "; G(3)
PRINT #1,: PRINT #1, " VP(1)= "; VP(1); " VP(2)= "; VP(2); " VP(3)= "; VP(3)
PRINT #1,: PRINT #1, " EK(1)= "; VP(1) / PT; " EK(2)= "; VP(2) / PT; " EK(3)= "; VP(3) / PT
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT; " T= "; T

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

SUB TEST 'CALCS FOR BUBBLE AND DEW POINTS TO DETERMINE WHETHE TWO
PHASES EXIST

CLS
PRINT: PRINT: PRINT " CHECK FOR TWO PHASES."
PRINT #1,: PRINT #1,: PRINT #1, " CHECK FOR TWO PHASES."

DIM PZX(10), AR(10), PAX(10, 10), CY(10), Z(10), Y(10), VP(10), EK(10)
PRINT #1,: PRINT #1,
INPUT " NUMBER OF COMPONENTS= ", N
INPUT " SYSTEM TEMPERATURE IN DEGREES C= ", T
INPUT " SYSTEM PRESSURE AT EQUILIBRIUM IN kPa= ", PT

605 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT: PRINT " YOU MUST ENTER A 1, 2, OR 3: REDO":
GOTO 605

IF OP2% = 1 THEN CALL RK: GOTO 500 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 500 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 500 'USE VAN LAAR ACTIVITY COEFFICIENTS

500 SUMZ = 0!: FOR KK = 1 TO N


PRINT COMPONENT$(KK)
INPUT " MOLE FRACTION IN FEED= ", Z(KK)
X(KK) = Z(KK) ': Y(KK) = Z(KK)
SUMZ = SUMZ + Z(KK)
NEXT KK
PRINT: PRINT " SUMZ= "; SUMZ

OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 500

505 FOR KK = 1 TO N

VP(KK) = (2.718282 ^ (A(KK) - (B(KK)) / (T + C(KK))))


EK(KK) = VP(KK) / PT
PRINT COMPONENT$(KK)
PRINT " PURE COMPONENT VP= "; VP(KK); " KEQ= "; EK(KK)
PRINT #1, COMPONENT$(KK)
PRINT #1, " PURE COMPONENT VP= "; VP(KK); " KEQ= "; EK(KK)
NEXT KK

PBUBL = 0: SUMY = 0!
FOR KK = 1 TO N
CY(KK) = X(KK) * G(KK) * EK(KK)
SUMY = SUMY + CY(KK)
PBUBL = PBUBL + (X(KK) * G(KK) * VP(KK))
NEXT KK

FOR KK = 1 TO N
Y(KK) = CY(KK) / SUMY: PRINT " Y= "; Y(KK): PRINT #1, " Y= "; Y(KK)
NEXT KK

PRINT: PRINT " BUBBLE PRESSURE= "; PBUBL


PRINT #1,: PRINT #1, " BUBBLE PRESSURE= "; PBUBL
INPUT " PRESS ENTER TO CONTINUE", YES

REM CALC DEW PRESSURE ASSUMING G'S DON'T CHANGE


PDEW = 1 / ((Z(1) / (VP(1) * G(1))) + (Z(2) / (VP(2) * G(2))) + (Z(3) / (VP(3) * G(3))))

PRINT: PRINT " DEW PRESSURE= "; PDEW


PRINT #1,: PRINT #1, " DEW PRESSURE= "; PDEW

REM ESTIMATE FRACTION VAPOR BY INTERPOLATION


'VB = (PBUBL - PT) / (PBUBL - PDEW)
'PRINT " ESTIMATE VB FOR PT= "; PT; " VB ESTIMATE= "; VB
'PRINT #1, " ESTIMATE VB FOR PT= "; PT; " VB ESTIMATE= "; VB
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

DEFINT N
SUB VANLAAR
CLS

SHARED G() AS DOUBLE

REM CALCULATE ACTIVITY COEFFICIENTS FROM NEW VAN LAAR MODEL JACK
LASHOVER 09/08/12 VANLAAR1.BAS
DIM VLB(3), E(3, 3)

REM SHAPE FACTORS


VLB(1) = 28.559
VLB(2) = 41.44736
VLB(3) = 18.953

REM ENERGY FACTORS

E(1, 2) = -.00373: E(2, 1) = E(1, 2)


E(1, 3) = .0268: E(3, 1) = E(1, 3)
E(2, 3) = .059451: E(3, 2) = E(2, 3)

REM CALCULATE GERT WITH COMPUTER ALGEBRA


GERT1 = 0
FOR I = 1 TO N - 1
FOR J = I + 1 TO N
IF I = J THEN GOTO 92
GERT1 = GERT1 + (X(I) * X(J) * VLB(I) * VLB(J) * E(I, J))
92 NEXT J
NEXT I

'INPUT " PRESS ENTER TO CONTINUE", YES

SUMG = 0
FOR I = 1 TO N
SUMG = SUMG + (X(I) * VLB(I))
NEXT I

GERT = GERT1 / SUMG: PRINT #1, " GE/RT= "; GERT; " SUMG= "; SUMG

'INPUT " PRESS ENTER TO CONTINUE", YES

R1 = X(2) * VLB(1) * VLB(2) * E(1, 2) + X(3) * VLB(1) * VLB(3) * E(1, 3)


R2 = X(1) * VLB(1) * VLB(2) * E(1, 2) + X(3) * VLB(2) * VLB(3) * E(2, 3)

R3 = X(1) * VLB(1) * VLB(3) * E(1, 3) + X(2) * VLB(2) * VLB(3) * E(2, 3)


G(1) = 2.718282 ^ ((R1 - VLB(1) * GERT) / SUMG)
G(2) = 2.718282 ^ ((R2 - VLB(2) * GERT) / SUMG)
G(3) = 2.718282 ^ ((R3 - VLB(3) * GERT) / SUMG)

PRINT #1,
PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT #1,
PRINT: PRINT " G(1)= "; G(1); " G(2)= "; G(2); " G(3)= "; G(3)
PRINT #1, " G(1)= "; G(1); " G(2)= "; G(2); " G(3)= "; G(3)
'INPUT " PRESS ENTER TO CONTINUE", YES

CLS
END SUB

DEFINT N
SUB VAPOR

CLS
PRINT: PRINT: PRINT " INPUT DATA FOR FLASH WITH UNKNOWN V"
DIM LL(10), UL(10), PP(10), Z(10), VP(10), Y(10), EK(10), ZX(10), R(10), XP(10) 'DIMENSION
FOR TEN COMPONENTS

101 INPUT " NUMBER OF COMPONENTS= ", N


INPUT " TOTAL SYSTEM PRESSURE IN kPa= ", PT
INPUT " TEMPERATURE IN DEG. C, T= ", T
PRINT: SUMZ = 0

FOR K = 1 TO N
PRINT COMPONENT$(K)
INPUT " MOLE FRACTION IN FEED= ", Z(K)
SUMZ = SUMZ + Z(K)
NEXT K
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 101

REM SOLUTION BY MONTE CARLO

615 OP2% = 0: INPUT " ENTER '1' TO USE REDLICH-KISTER, ENTER '2' TO USE WILSON,
ENTER '3' TO USE VAN LAAR: OP2= ", OP2%
IF OP2% = 0 OR OP2% > 3 THEN PRINT: PRINT " YOU MUST ENTER A 1, 2, OR 3: REDO":
GOTO 615

TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1E+30

COUNT& = 0: COUNTI% = 0: COUNTJ% = 0


XP(1) = 0.0: XP(2) = 0.0: XP(3) = 0.0: XP(4) = 0.0 'INITIAL VALUES OF X AND V
UL(1) = 100.: UL(2) = 100.: UL(3) = 100.: UL(4) = 100. 'UPPER LIMITS OF X'S AND V
LL(1) = 0: LL(2) = 0: LL(3) = 0: LL(4) = 0 'LOWER LIMITS OF X'S AND V

FOR J = 1 TO 30
COUNTJ% = COUNTJ% + 1

FOR I = 1 TO 500
COUNT& = COUNT& + 1: COUNTI% = COUNTI% + 1
FOR K = 1 TO 4
IF XP(K) - 100. / 2 ^ J < 1. THEN GOTO 350
GOTO 366
350 LL(K) = 1!
GOTO 365
366 LL(K) = XP(K) - UL(K) / 2 ^ J
365 IF XP(K) + UL(K) / 2 ^ J > UL(K) THEN GOTO 380
GOTO 390
380 R(K) = UL(K) - LL(K)
GOTO 391
390 R(K) = XP(K) + UL(K) / 2 ^ J - LL(K)
391 X(K) = LL(K) + RND * R(K)
NEXT K

X(1) = X(1) / 100!: X(2) = X(2) / 100!: X(3) = X(3) / 100!: V = X(4) / 100!

'INPUT " PRESS ENTER TO CONTINUE", YES

IF OP2% = 1 THEN CALL RK: GOTO 1213 'USE RK ACTIVITY COEFFS.


IF OP2% = 2 THEN CALL WILSON: GOTO 1213 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 1213

1213 G1 = 0!: SUMPT = 0!


FOR II = 1 TO 3

VP(II) = 2.718282 ^ (A(II) - (B(II) / ((T) + C(II)))): 'PRINT #1, " VP(II)= "; VP(II)
PP(II) = X(II) * G(II) * VP(II): 'PRINT #1, " PP= "; PP(II)
G1 = G1 + PP(II): SUMPT = SUMPT + PP(II)
111 NEXT II
G1 = ABS(G1 - 101.325)
'PRINT #1,': PRINT #1, " G1= "; G1; " SUMPT= "; SUMPT
'INPUT " PRESS ENTER TO CONTINUE", YES

G2 = 0!: SUMX = 0!
FOR II = 1 TO 3
X(II) = 100! * X(II)
G2 = G2 + X(II): SUMX = SUMX + X(II)
NEXT II
G2 = ABS(G2 - 100!)
'PRINT #1,': PRINT #1, " G2= "; G2; " SUMX= "; SUMX

G3 = 0!: SUMY = 0!
FOR II = 1 TO 3
EK(II) = VP(II) / PT
Y(II) = EK(II) * G(II) * X(II)
G3 = G3 + Y(II): SUMY = SUMY + Y(II)
NEXT II
G3 = ABS(G3 - 100!)
'PRINT #1,': PRINT #1, " G3= "; G3; " SUMY= "; SUMY

G4 = 0!: SUMZX = 0!

FOR II = 1 TO 3
ZX(II) = ABS(Z(II) * 100! - (V * X(II) * G(II) * EK(II)) - (1! - V) * X(II)) ': PRINT "
ZX(II)= "; ZX(II)
'ZX(II) = (V * EK(II) * G(II) * X(II)) + ((1.0 - V) * X(II))': PRINT " ZX(II)= "; ZX(II)
G4 = G4 + ZX(II): SUMZX = SUMZX + ZX(II)
NEXT II
'PRINT #1,': PRINT #1, " G4= "; G4; " SUMZX= "; SUMZX

G = G1 + G2 + G3 + G4: 'PRINT: 'PRINT " G= "; G; " V= "; V; " OPT= "; OPT
'PRINT #1,: 'PRINT #1, " G= "; G; " V= "; V; " OPT= "; OPT
'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 392


GOTO 393
REM SAVE BEST SO FAR X'S AND V
392 XP(1) = X(1): XP(2) = X(2): XP(3) = X(3): XP(4) = V * 100!
PRINT #1,: PRINT #1, " V= "; XP(4) / 100!
PRINT " G < OPT, SAVE BEST AND SET NEW OPT = G"
PRINT " OLD OPT= "; OPT; " G= "; G
PRINT #1, " OLD OPT= "; OPT; " G= "; G
OPT = G: PRINT " NEW OPT= "; OPT: PRINT #1, " NEW OPT= "; OPT
SUMX = 0: FOR II = 1 TO 3: X(II) = XP(II) / 100!: SUMX = SUMX + X(II): NEXT II
IF OP2% = 1 THEN CALL RK: GOTO 776 'USE RK ACTIVITY COEFFS.
IF OP2% = 2 THEN CALL WILSON: GOTO 776 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 776
776 SUMY = 0!: SUMZX = 0
FOR II = 1 TO 3

ZX(II) = ABS(Z(II) * 100! - (V * X(II) * G(II) * EK(II)) - (1! - V) * X(II)): ZX(II) = ZX(II) /
100.
Y(II) = EK(II) * G(II) * X(II):
SUMY = SUMY + Y(II): SUMZX = SUMZX + ZX(II)
NEXT II
SUMPT = 0!
FOR II = 1 TO 3
PP(II) = X(II) * G(II) * VP(II)
SUMPT = SUMPT + PP(II)
NEXT II

PRINT #1,: PRINT #1, " SUMX= "; SUMX


PRINT #1,: PRINT #1, " SUMY= "; SUMY
PRINT #1,: PRINT #1, " SUMPT= "; SUMPT
PRINT #1,: PRINT #1, " SUMZX= "; SUMZX
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4; " G= "; G
PRINT #1,: PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3)
PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT #1,: PRINT #1, " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= ";
LL(4)
PRINT #1,: PRINT #1, " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= ";
UL(4)
PRINT #1,: PRINT #1, " R(1)= "; R(1); " R(2)= "; R(2); " R(3)= "; R(3); " R(4)= "; R(4)
PRINT #1,: PRINT #1, " ZX(1)= "; ZX(1); " ZX(2)= "; ZX(2); " ZX(3)= "; ZX(3)
PRINT #1,: PRINT #1, " PP(1)= "; PP(1); " PP(2)= "; PP(2); " PP(3)= "; PP(3)
PRINT: PRINT " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%
PRINT #1,: PRINT #1, " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%
INPUT " PRESS ENTER TO CONTINUE", YES

393 NEXT I
GOTO 777

PRINT #1,: PRINT #1, " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4; " OPT= ";
OPT
PRINT #1,: PRINT #1, " V= "; V; " I= "; I; " J= "; J
SUMX = 0: FOR II = 1 TO N: X(II) = XP(II) / 100!: SUMX = SUMX + X(II): NEXT II
IF OP2% = 1 THEN CALL RK: GOTO 695 'USE RK ACTIVITY COEFFS.
IF OP2% = 2 THEN CALL WILSON: GOTO 695 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 695 'USE VANLAAR ACTIVITY COEFFS.
695 SUMY = 0!
FOR II = 1 TO N
Y(II) = EK(II) * G(II) * X(II)
SUMY = SUMY + Y(II)
NEXT II
PRINT #1,: PRINT #1, " V= "; XP(4) / 100!
PRINT #1,: PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3); " SUMX= "; SUMX
PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT #1,: PRINT #1, " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= "; LL(4)
PRINT #1,: PRINT #1, " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= ";
UL(4)
PRINT #1,: PRINT #1, " R(1)= "; R(1); " R(2)= "; R(2); " R(3)= "; R(3); " R(4)= "; R(4)
SUMPT = 0!
FOR II = 1 TO 3
PP(II) = X(II) * G(II) * VP(II)
SUMPT = SUMPT + PP(II)
NEXT II

PRINT #1,: PRINT #1, " SUMPT= "; SUMPT

SUMZX = 0!
FOR II = 1 TO 3
ZX(II) = ABS(Z(II) * 100! - (V * X(II) * G(II) * EK(II) * 100.) - (1! - V) * X(II) * 100.): PRINT
" ZX(II)= "; ZX(II)
SUMZX = SUMZX + ZX(II)
NEXT II
PRINT #1,: PRINT #1, " SUMZX= "; SUMZX

PRINT #1,: PRINT #1, " COUNTI= "; COUNTI%


COUNTI% = 0
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%
INPUT " PRESS ENTER TO CONTINUE", YES
777 NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR FRACTION OF VAPOR FLASHED!"
PRINT #1,: PRINT #1, " FINAL RESULTS FOR FRACTION OF VAPOR FLASHED!"
X(1) = XP(1) / 100!: X(2) = XP(2) / 100!: X(3) = XP(3) / 100!: V = XP(4) / 100!
SUMX = 0!
FOR II = 1 TO 3: SUMX = SUMX + X(II): NEXT II
IF OP2% = 1 THEN CALL RK: GOTO 297 'USE RK ACTIVITY COEFFS.
IF OP2% = 2 THEN CALL WILSON: GOTO 297 'USE WILSON ACTIVITY COEFFS.
IF OP2% = 3 THEN CALL VANLAAR: GOTO 297 'USE VAN LAAR ACTIVITY COEFFS.
297 SUMY = 0!
FOR II = 1 TO 3: Y(II) = EK(II) * G(II) * X(II): SUMY = SUMY + Y(II): NEXT II
PRINT " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3); " SUMX= "; SUMX

PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT: PRINT " SUMPT= "; SUMPT; " SUMZX= "; SUMZX
PRINT " COUNTJ= "; COUNTJ%; " TOTAL FEASIBLE SOLUTIONS EXAMINED= "; COUNT&
PRINT " G= "; G; " OPT= "; OPT; " V= "; V

PRINT #1,: PRINT #1, " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3); " SUMX= "; SUMX
PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; SUMY
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1,: PRINT #1, " SUMPT= "; SUMPT; " SUMZX= "; SUMZX
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " TOTAL FEASIBLE SOLUTIONS
EXAMINED= "; COUNT&
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT; " V= "; V

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS
END SUB

SUB WILSON

SHARED G() AS DOUBLE

PRINT " CALCULATE GAMMA'S FOR COMPONENTS"

'N = 3
333 FOR KI = 1 TO N
Q1 = 0
FOR JI = 1 TO N
Q1 = Q1 + X(JI) * W(KI, JI)
NEXT JI
Q2 = 0
FOR KK = 1 TO N
Q3 = 0
FOR JI = 1 TO N
Q3 = Q3 + X(JI) * W(KK, JI)
NEXT JI
Q2 = Q2 + (X(KK) * W(KK, KI)) / Q3
NEXT KK
G(KI) = 2.71828183# ^ (1 - LOG(Q1) - Q2)
PRINT " GAMMA= "; G(KI); " FOR COMPONENT= "; KI
NEXT KI

334 'INPUT " PRESS ENTER TO CONTINUE", YES


END SUB

SUB MARGULES
REM SUB TO CALCULATE ACTIVITY COEFFICIENTS

SHARED G() AS DOUBLE

DIM AVAL(10, 10) AS DOUBLE 'BINARY INTERACTION CONSTANTS


DIM ASTAR(10, 10, 10) AS DOUBLE 'THREE DIMENSIONAL ARRAY OF A* VALUES
DIM RHO(10) AS DOUBLE
DIM KMIN AS INTEGER
DIM JMAX AS INTEGER
DIM TAU AS DOUBLE
DIM THETA AS DOUBLE
DIM TSTO AS DOUBLE
DIM OMEGA AS DOUBLE
DIM PSI AS DOUBLE
DIM SUBRTG AS INTEGER
DIM MFMIN AS DOUBLE

PRINT

AVAL(1, 1) = 0: AVAL(1, 2) = -6.1287274: AVAL(1, 3) = 4.51023124


AVAL(2, 1) = 1.52284992: AVAL(2, 2) = 0: AVAL(2, 3) = 1.52647
AVAL(3, 1) = 8.93688177: AVAL(3, 2) = -2.86937: AVAL(3, 3) = 0
MFMIN = 0.0000000001 'SMALLEST VALUE OF A MOLE FRACTIOB IS 0.0000000001
SUBRTG = 0

FOR II = 1 TO N
JMAX = N - 1
FOR JJ = 1 TO JMAX
IF (JJ - II) = 0 THEN GOTO 20 'NEXT JJ

KMIN = JJ + 1
FOR KK = KMIN TO N
IF (KK - II) = 0 THEN GOTO 10 'NEXT KK
ASTAR(II, JJ, KK) = 0.5 * (AVAL(II, JJ) + AVAL(JJ, II) + AVAL(II, KK) + AVAL(KK, II) +
AVAL(JJ, KK) + AVAL(KK, JJ))
10 NEXT KK
20 NEXT JJ
30 NEXT II
SUBRTG = SUBRTG + 1
TAU = 0
FOR II = 1 TO N
RHO(II) = 0
JMAX = N - 1
FOR JJ = 1 TO JMAX
IF (JJ - II) = 0 THEN GOTO 50
KMIN = JJ + 1
FOR KK = KMIN TO N
IF (KK - II) = 0 THEN GOTO 40
RHO(II) = RHO(II) + (XX(JJ) + MFMIN) * (XX(KK) + MFMIN) * ASTAR(II, JJ, KK)
40 NEXT KK
50 NEXT JJ
TAU = TAU + (XX(II) + MFMIN) * RHO(II)
60 NEXT II
TAU = TAU / 3.0
THETA = 0.0
FOR II = 1 TO N
TSTO = 0.0

FOR JJ = 1 TO N
TSTO = TSTO + (XX(JJ) + MFMIN) * AVAL(JJ, II)
70 NEXT JJ
THETA = THETA + TSTO * (XX(II) + MFMIN) * (XX(II) + MFMIN)
80 NEXT II
FOR II = 1 TO N
OMEGA = 0.0
PSI = 0.0
FOR JJ = 1 TO N
OMEGA = OMEGA + (XX(JJ) + MFMIN) * AVAL(JJ, II)
PSI = PSI + (XX(JJ) + MFMIN) * (XX(JJ) + MFMIN) * AVAL(II, JJ)
90 NEXT JJ
PRINT: PRINT COMPONENT$(II)
G(II) = 2.71828183# ^ (2.0 * XX(II) * OMEGA + PSI + RHO(II) - 2.0 * THETA - 2.0 * TAU)
PRINT II, " GAMMA= "; G(II), " XX(II)= "; XX(II)
NEXT II
'INPUT " PRESS ENTER TO CONTINUE", YES

END SUB

SUB LLEFLASH

CLS
PRINT: PRINT: PRINT " INPUT DATA FOR LLE FLASH WITH UNKNOWN ALPHA"
DIM LL(10), UL(10), ZO(10), ZC(10), Y(10), EKA(10), EKX(10), ZX(10), R(10), XP(10), GO(10),
GA(10), DELTAK(10) 'DIMENSION FOR TEN COMPONENTS

DIM GAB(10), GOB(10), EKAB(10), EKXB(10), YB(10), XB(10), Z(10)

1001 INPUT " NUMBER OF COMPONENTS= ", N


FOR K = 1 TO N
PRINT " COMPONENT NO.= "; K
INPUT " NAME OF COMPONENT= ", COMPONENT$(K)
NEXT K

REM WORK ON DISPERSED PHASE


PRINT: SUMZ = 0
FOR K = 1 TO N
PRINT COMPONENT$(K)
INPUT " MOLE FRACTION IN FEED= ", ZO(K): XX(K) = ZO(K)
SUMZ = SUMZ + ZO(K)
NEXT K
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 1001

CALL MARGULES 'GET DISPERSED PHASE GAMMAS


GO(1) = G(1): GO(2) = G(2): GO(3) = G(3)
INPUT " PRESS ENTER TO CONTINUE", YES

REM WORK ON CONTINUOUS PHASE


1002 PRINT: SUMZ = 0
FOR K = 1 TO N

PRINT COMPONENT$(K)
INPUT " MOLE FRACTION IN SOLVENT= ", ZC(K): XX(K) = ZC(K)
SUMZ = SUMZ + ZC(K)
NEXT K
PRINT " SUMZ= "; SUMZ
OP1% = 0: INPUT " OP1=0 NO ERRORS CONTINUE, OP1=1 REDO, OP1= ", OP1%
IF OP1% = 1 THEN GOTO 1002

CALL MARGULES 'GET AQUEOUS GAMMAS


GA(1) = G(1): GA(2) = G(2): GA(3) = G(3)
INPUT " PRESS ENTER TO CONTINUE", YES

REM SAMPLE PROBLEM IS TERNARY SYSTEM USED IN UOLAB--H2O, IPA, AND nNONANE, REPRESENTED BY ISOPAR-E
REM FEED IS 50 ML/MIN OF NONANE CONTAINING 6.0 WT. % OF IPA, SOLVENT IS 100
ML/MIN OF BR TAP WATER
REM COMPONENT(1) = WATER, COMPONENT(2) = IPA, AND COMPONENT(3) = nNONANE
REM LLE DATA WAS FIT TO MARGULES ACTIVITY COEFFICIENT MODEL
REM FEED CONTAINS 0.03603 MOLES OF IPA AND 0.2645 MOLES OF NONANE FOR
TOTAL MOLES = 0.3005/MIN
REM IPA MOLE FRACTION = 0.1199, NONANE MOLE FRACTION = 0.8801
REM SOLVENT IS 5.5349 MOLES OF WATER/MIN
REM MIXING POINT IN MOLE FRACTIONS IS 0.9485 OF H2O, 0.006175 OF IPA, AND
0.04533 OF NONANE
REM SOLVENT TO FEED RATIO, S/F, ON MOLAR SOLUTE FREE BASIS = 20.93

Z(1) = 0.9484988: Z(2) = 0.006174685: Z(3) = 0.04532658 'MIXING POINT COMPOSITION

REM SOLUTION BY MONTE CARLO MARCHING

TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1E+30

COUNT& = 0: COUNTI% = 0: COUNTJ% = 0


XP(1) = 1.: XP(2) = 0.5: XP(3) = 94.: XP(4) = 0.5
LL(1) = 0.0001: LL(2) = 0001.: LL(3) = 88.: LL(4) = 0.
UL(1) = 2.: UL(2) = 1.: UL(3) = 100.: UL(4) = 6.

FOR J = 1 TO 15
COUNTJ% = COUNTJ% + 1

FOR I = 1 TO 500
COUNT& = COUNT& + 1: COUNTI% = COUNTI% + 1

K = 1 'MOLE PCT OF WATER IN RAFFINATE IS 0. TO 2.0


IF XP(K) - 2. / 2 ^ J < 0. THEN GOTO 150
GOTO 166
150 LL(K) = 0.
GOTO 165
166 LL(K) = XP(K) - UL(K) / 2 ^ J
165 IF XP(K) + UL(K) / 2 ^ J > UL(K) THEN GOTO 180
GOTO 190

180 R(K) = UL(K) - LL(K)


GOTO 191
190 R(K) = XP(K) + UL(K) / 2 ^ J - LL(K)
191 X(K) = LL(K) + RND * R(K)

K = 2 'MOLE PCT OF IPA IN RAFFINATE IS 0. TO 12.0/20 = 0.6 OR SAY 1 BECAUSE IT IS


DILUTED BY 20+ TO 1 S/F RATIO
IF XP(K) - 1. / 2 ^ J < 0. THEN GOTO 250
GOTO 266
250 LL(K) = 0.
GOTO 265
266 LL(K) = XP(K) - UL(K) / 2 ^ J
265 IF XP(K) + UL(K) / 2 ^ J > UL(K) THEN GOTO 280
GOTO 290
280 R(K) = UL(K) - LL(K)
GOTO 291
290 R(K) = XP(K) + UL(K) / 2 ^ J - LL(K)
291 X(K) = LL(K) + RND * R(K)

K = 3 'MOLE PCT OF NONANE IN RAFFINATE IS 88. TO 100., CAN'T BE LESS THAN


MOL PCT IN FEED
IF XP(K) - 100. / 2 ^ J < 88. THEN GOTO 350
GOTO 366
350 LL(K) = 88.
GOTO 365

366 LL(K) = XP(K) - UL(K) / 2 ^ J


365 IF XP(K) + UL(K) / 2 ^ J > UL(K) THEN GOTO 380
GOTO 390
380 R(K) = UL(K) - LL(K)
GOTO 391
390 R(K) = XP(K) + UL(K) / 2 ^ J - LL(K)
391 X(K) = LL(K) + RND * R(K)

K = 4 'FRACTION FLASHED, ALPHA, IS 0.0001 TO 0.3001/(3001+5.5349)=0.051 SAY .06


OR 1
IF XP(K) - 1. / 2 ^ J < 0. THEN GOTO 450
GOTO 466
450 LL(K) = 0.
GOTO 465
466 LL(K) = XP(K) - UL(K) / 2 ^ J
465 IF XP(K) + UL(K) / 2 ^ J > UL(K) THEN GOTO 480
GOTO 490
480 R(K) = UL(K) - LL(K)
GOTO 491
490 R(K) = XP(K) + UL(K) / 2 ^ J - LL(K)
491 X(K) = LL(K) + RND * R(K)

FOR K = 1 TO 3
XX(K) = X(K) / 100.
NEXT K

CALL MARGULES 'GET DISPERSED PHASE GAMMAS


GO(1) = G(1): GO(2) = G(2): GO(3) = G(3)

ALPHA = X(4) / 100.


'IF ALPHA > 0.06 THEN G = 1E30: GOTO 1005

G1 = 0.: SUMX = 0.
FOR II = 1 TO N
G1 = G1 + X(II): SUMX = SUMX + X(II)
NEXT II
G1 = ABS(G1 - 100.)
' IF X(1) > 5. THEN G = 1E30: GOTO 1005
' IF X(2) > ZO(2)*100. THEN G = 1E30: GOTO 1005
' IF X(3) < (ZO(3)*100. - 10.) THEN G = 1E30: GOTO 1005

G2 = 0.: SUMY = 0. 'CALCULATE Y'S FROM COMPONENT MASS BALANCES


FOR II = 1 TO N
Y(II) = (Z(II) * 100. - X(II) * ALPHA) / (1 - ALPHA)
IF Y(II) >= 100.0 THEN GOTO 1005 'THROW OUT OBVIOUSLY UNFEASIBLE
SOLUTION
IF Y(II) <= 0.0 THEN GOTO 1005 'THROW OUT OBVIOUSLY UNFEASIBLE
SOLUTION
SUMY = SUMY + Y(II): G2 = G2 + Y(II)
NEXT II
G2 = ABS(G2 - 100.)

FOR II = 1 TO N
XX(II) = Y(II) / 100.
NEXT II

CALL MARGULES 'GET AQUEOUS GAMMAS


GA(1) = G(1): GA(2) = G(2): GA(3) = G(3)

G3 = 0.

G4 = 0. 'GAMMAX * X = GAMMAY * Y
FOR II = 1 TO N
ZX(II) = ABS((GO(II) * X(II) / 100) - (GA(II) * Y(II) / 100))
G4 = G4 + ZX(II)
NEXT II

G = G1 + G2 + G3 + G4: PRINT " G= "; G; " ALPHA= "; ALPHA; " OPT= "; OPT
PRINT: PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT " SUMX= "; SUMX; " SUMY= "; SUMY

PRINT #1,: PRINT #1, " G= "; G; " ALPHA= "; ALPHA; " OPT= "; OPT
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1, " SUMX= "; SUMX; " SUMY= "; SUMY

'INPUT " PRESS ENTER TO CONTINUE", YES

IF G < OPT THEN GOTO 392

GOTO 393
REM SAVE BEST SO FAR X'S AND V
392 XP(1) = X(1): XP(2) = X(2): XP(3) = X(3): XP(4) = ALPHA * 100.
YB(1) = Y(1): YB(2) = Y(2): YB(3) = Y(3): XB(1) = X(1): XB(2) = X(2): XB(3) = X(3): SUMY
= YB(1) + YB(2) + YB(3): SUMX = XB(1) + XB(2) + XB(3)
OPT = G: ALPHAB = ALPHA: GB = G
PRINT: PRINT " XP(1)= "; XP(1); " XP(2)= "; XP(2); " XP(3)= "; XP(3); " XP(4)= "; XP(4)
PRINT: PRINT " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3); " GA(1)= "; GA(1);
" GA(2)= "; GA(2); " GA(3)= "; GA(3)
PRINT: PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; Y(1) + Y(2) +
Y(3)
PRINT: PRINT " X(1)= "; XP(1); " X(2)= "; XP(2); " X(3)= "; XP(3); " SUMX= "; XP(1) +
XP(2) + XP(3)
PRINT #1,: PRINT #1, " XP(1)= "; XP(1); " XP(2)= "; XP(2); " XP(3)= "; XP(3); " ALPHA= ";
XP(4)
PRINT #1,: PRINT #1, " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3); " GA(1)= ";
GA(1); " GA(2)= "; GA(2); " GA(3)= "; GA(3)
PRINT #1,: PRINT #1, " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3); " SUMY= "; Y(1) +
Y(2) + Y(3)
PRINT #1,: PRINT #1, " X(1)= "; XP(1); " X(2)= "; XP(2); " X(3)= "; XP(3); " SUMX= ";
XP(1) + XP(2) + XP(3)
PRINT #1,: PRINT #1, " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= ";
LL(4)
PRINT #1,: PRINT #1, " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= ";
UL(4)
PRINT " OPT= "; OPT; " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1, " OPT= "; OPT; " G= "; G; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
'INPUT " PRESS ENTER TO CONTINUE", YES
393 PRINT: PRINT " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%; " OVERALL
COUNT= "; COUNT&

PRINT #1,: PRINT #1, " COUNTI= "; COUNTI%; " COUNTJ= "; COUNTJ%; " OVERALL
COUNT= "; COUNT&
'INPUT " PRESS ENTER TO CONTINUE", YES
1005 NEXT I

PRINT #1,: PRINT #1, " G= "; GB; " OPT= "; OPT; " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4=
"; G4
PRINT #1,: PRINT #1, " ALPHA= "; ALPHAB; " I= "; I; " J= "; J
PRINT #1,: PRINT #1, " X(1)= "; XB(1); " X(2)= "; XB(2); " X(3)= "; XB(3); " SUMX= "; XB(1)
+ XB(2) + XB(3)
PRINT #1,: PRINT #1, " Y(1)= "; YB(1); " Y(2)= "; YB(2); " Y(3)= "; YB(3); " SUMY= "; YB(1)
+ YB(2) + YB(3)
PRINT #1,: PRINT #1, " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= "; LL(4)
PRINT #1,: PRINT #1, " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= ";
UL(4)
PRINT #1,: PRINT #1, " R(1)= "; R(1); " R(2)= "; R(2); " R(3)= "; R(3); " R(4)= "; R(4)
PRINT #1,: PRINT #1, " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3); " GA(1)= ";
GA(1); " GA(2)= "; GA(2); " GA(3)= "; GA(3)

PRINT #1,: PRINT #1, " COUNTI= "; COUNTI%; " OVERALL COUNT= "; COUNT&
COUNTI% = 0
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " OVERALL COUNT= "; COUNT&
'INPUT " PRESS ENTER TO CONTINUE", YES

NEXT J

CLS: PRINT: PRINT " FINAL RESULTS FOR LLE FLASH!"


PRINT #1,: PRINT #1, " FINAL RESULTS FOR LLE FLASH!"
X(1) = XP(1) / 100!: X(2) = XP(2) / 100!: X(3) = XP(3) / 100!: ALPHA = XP(4) / 100!

Y(1) = YB(1) / 100.: Y(2) = YB(2) / 100.: Y(3) = YB(3) / 100.: SUMY = Y(1) + Y(2) + Y(3)
FOR II = 1 TO 3: Y(II) = Y(II) / SUMY: NEXT II
PRINT " X(1)= "; X(1); " X(2)= "; X(2); " X(3)= "; X(3); " ALPHA= "; ALPHA
PRINT " Y(1)= "; Y(1); " Y(2)= "; Y(2); " Y(3)= "; Y(3)
PRINT " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3); " GA(1)= "; GA(1); " GA(2)= ";
GA(2); " GA(3)= "; GA(3)
PRINT " G= "; G; " OPT= "; OPT; " ALPHA= "; ALPHA
PRINT: PRINT " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT: PRINT " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= "; LL(4)
PRINT: PRINT " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= "; UL(4)
PRINT: PRINT " R(1)= "; R(1); " R(2)= "; R(2); " R(3)= "; R(3); " R(4)= "; R(4)
PRINT: PRINT " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3); " GA(1)= "; GA(1); "
GA(2)= "; GA(2); " GA(3)= "; GA(3)
PRINT " COUNTJ= "; COUNTJ%; " TOTAL FEASIBLE SOLUTIONS EXAMINED= "; COUNT&
INPUT " PRESS ENTER TO CONTINUE", YES

PRINT #1,: PRINT #1, " X(1)= "; XB(1); " X(2)= "; XB(2); " X(3)= "; XB(3); " SUMX= "; XB(1) +
XB(2) + XB(3)
PRINT #1,: PRINT #1, " Y(1)= "; YB(1); " Y(2)= "; YB(2); " Y(3)= "; YB(3); " SUMY= "; YB(1) +
YB(2) + YB(3)
PRINT #1,: PRINT #1, " G1= "; G1; " G2= "; G2; " G3= "; G3; " G4= "; G4
PRINT #1,: PRINT #1, " G= "; G; " OPT= "; OPT; " ALPHA= "; ALPHA
PRINT #1,: PRINT #1, " LL(1)= "; LL(1); " LL(2)= "; LL(2); " LL(3)= "; LL(3); " LL(4)= "; LL(4)
PRINT #1,: PRINT #1, " UL(1)= "; UL(1); " UL(2)= "; UL(2); " UL(3)= "; UL(3); " UL(4)= "; UL(4)
PRINT #1,: PRINT #1, " R(1)= "; R(1); " R(2)= "; R(2); " R(3)= "; R(3); " R(4)= "; R(4)
PRINT #1,: PRINT #1, " GO(1)= "; GO(1); " GO(2)= "; GO(2); " GO(3)= "; GO(3)
PRINT #1,: PRINT #1, " GA(1)= "; GA(1); " GA(2)= "; GA(2); " GA(3)= "; GA(3)
PRINT #1,: PRINT #1, " EKA(1)= "; EKA(1); " EKA(2)= "; EKA(2); " EKA(3)= "; EKA(3)

PRINT #1,: PRINT #1, " EKX(1)= "; EKX(1); " EKX(2)= "; EKX(2); " EKX(3)= "; EKX(3)
PRINT #1,: PRINT #1, " COUNTJ= "; COUNTJ%; " TOTAL FEASIBLE SOLUTIONS
EXAMINED= "; COUNT&

TF# = TIMER
PRINT: PRINT " START TIME= "; TS#; " FINISH TIME= "; TF#
ELAPSE# = (TF# - TS#): PRINT " ELAPSED TIME= "; ELAPSE#; " SECONDS"
PRINT #1, " ELAPSED TIME= "; ELAPSE#; " SECONDS"
INPUT " PRESS ENTER TO CONTINUE", YES
CLS

END SUB

Potrebbero piacerti anche