91
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

Computer Code for Monte Carlo Marching

Embed Size (px)

DESCRIPTION

A supplement to "Monte Carlo Marching" which includes the QB64 computer code for all of the calculations presented.

Citation preview

Page 1: Computer Code for Monte Carlo Marching

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

Page 2: Computer Code for Monte Carlo Marching

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

Page 3: Computer Code for Monte Carlo Marching

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

Page 4: Computer Code for Monte Carlo Marching

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 "

PRINT

PRINT

PRINT " T. FLASH FOR T V. FLASH FOR V "

PRINT

PRINT

PRINT " R. RACHFORD-RICE Q. QUIT "

PRINT

PRINT

PRINT " Z. TEST ANTOINE CONSTANTS L. LLE FLASH "

LINE INPUT CHOICE$

SELECT CASE CHOICE$

CASE "A", "a"

CALL TEST

Page 5: Computer Code for Monte Carlo Marching

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"

Page 6: Computer Code for Monte Carlo Marching

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

Page 7: Computer Code for Monte Carlo Marching

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

Page 8: Computer Code for Monte Carlo Marching

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%

Page 9: Computer Code for Monte Carlo Marching

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

Page 10: Computer Code for Monte Carlo Marching

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

Page 11: Computer Code for Monte Carlo Marching

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.

Page 12: Computer Code for Monte Carlo Marching

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 "

Page 13: Computer Code for Monte Carlo Marching

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

Page 14: Computer Code for Monte Carlo Marching

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

Page 15: Computer Code for Monte Carlo Marching

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

Page 16: Computer Code for Monte Carlo Marching

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

Page 17: Computer Code for Monte Carlo Marching

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)

Page 18: Computer Code for Monte Carlo Marching

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

Page 19: Computer Code for Monte Carlo Marching

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!

Page 20: Computer Code for Monte Carlo Marching

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

Page 21: Computer Code for Monte Carlo Marching

'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

Page 22: Computer Code for Monte Carlo Marching

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)

Page 23: Computer Code for Monte Carlo Marching

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,

Page 24: Computer Code for Monte Carlo Marching

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)

Page 25: Computer Code for Monte Carlo Marching

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)

Page 26: Computer Code for Monte Carlo Marching

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%

Page 27: Computer Code for Monte Carlo Marching

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

Page 28: Computer Code for Monte Carlo Marching

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

Page 29: Computer Code for Monte Carlo Marching

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

Page 30: Computer Code for Monte Carlo Marching

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

Page 31: Computer Code for Monte Carlo Marching

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)

Page 32: Computer Code for Monte Carlo Marching

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

Page 33: Computer Code for Monte Carlo Marching

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

Page 34: Computer Code for Monte Carlo Marching

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

Page 35: Computer Code for Monte Carlo Marching

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)

Page 36: Computer Code for Monte Carlo Marching

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

Page 37: Computer Code for Monte Carlo Marching

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,"

Page 38: Computer Code for Monte Carlo Marching

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

Page 39: Computer Code for Monte Carlo Marching

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

Page 40: Computer Code for Monte Carlo Marching

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&

Page 41: Computer Code for Monte Carlo Marching

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)

Page 42: Computer Code for Monte Carlo Marching

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)

Page 43: Computer Code for Monte Carlo Marching

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

Page 44: Computer Code for Monte Carlo Marching

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

Page 45: Computer Code for Monte Carlo Marching

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

Page 46: Computer Code for Monte Carlo Marching

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

Page 47: Computer Code for Monte Carlo Marching

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)

Page 48: Computer Code for Monte Carlo Marching

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%

Page 49: Computer Code for Monte Carlo Marching

'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

Page 50: Computer Code for Monte Carlo Marching

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

Page 51: Computer Code for Monte Carlo Marching

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

Page 52: Computer Code for Monte Carlo Marching

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

Page 53: Computer Code for Monte Carlo Marching

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

Page 54: Computer Code for Monte Carlo Marching

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

Page 55: Computer Code for Monte Carlo Marching

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

Page 56: Computer Code for Monte Carlo Marching

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

Page 57: Computer Code for Monte Carlo Marching

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

Page 58: Computer Code for Monte Carlo Marching

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

Page 59: Computer Code for Monte Carlo Marching

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

Page 60: Computer Code for Monte Carlo Marching

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%

Page 61: Computer Code for Monte Carlo Marching

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)

Page 62: Computer Code for Monte Carlo Marching

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!

Page 63: Computer Code for Monte Carlo Marching

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

Page 64: Computer Code for Monte Carlo Marching

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

Page 65: Computer Code for Monte Carlo Marching

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

Page 66: Computer Code for Monte Carlo Marching

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

Page 67: Computer Code for Monte Carlo Marching

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

Page 68: Computer Code for Monte Carlo Marching

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

Page 69: Computer Code for Monte Carlo Marching

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 n-NONANE, 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) = n-NONANE

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

Page 70: Computer Code for Monte Carlo Marching

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

Page 71: Computer Code for Monte Carlo Marching

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

Page 72: Computer Code for Monte Carlo Marching

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.

Page 73: Computer Code for Monte Carlo Marching

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

Page 74: Computer Code for Monte Carlo Marching

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

Page 75: Computer Code for Monte Carlo Marching

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

Page 76: Computer Code for Monte Carlo Marching

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!"

Page 77: Computer Code for Monte Carlo Marching

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)

Page 78: Computer Code for Monte Carlo Marching

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