Computer Code For Monte Carlo Marching
Computer Code For Monte Carlo Marching
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()
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
5 CLS: DO
QBVLE36--10/05/12"
PRINT
PRINT
PRINT "
PRINT
PRINT
PRINT "
B. BUBBLE POINT"
PRINT
PRINT
PRINT "
C. CUBIC EQUATION
PRINT
PRINT
PRINT "
H. ENTHALPY
T. FLASH FOR T
PRINT
PRINT
PRINT "
PRINT
PRINT
PRINT "
R. RACHFORD-RICE
Q. QUIT
"
PRINT
PRINT
PRINT "
"
99 END
DEFINT N
SUB ANTOINE
CLS
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
TS# = TIMER(.001)
50 OPT = 1E30
COUNT&& = 0: COUNTI% = 0: COUNTJ% = 0: FIL% = -111: RANDOMIZE (FIL%)
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
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
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)
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 #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
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
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
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
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,
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)
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
SUMHLF = 0: SUMHVF = 0
FOR I% = 1 TO N
ENTHFL(I%) = (HLF(I%) * X(I%) * (1 - V) * FF)
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
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 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
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
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)
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
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
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
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 #1,: PRINT #1, " DEMONSTRATE USE OF MONTE CARLO METHOD TO SOLVE
RACHFORD-RICE EXAMPLE PROBLEM"
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,"
TS# = TIMER
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)
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
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
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
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
NEXT KK
FOR K = 1 TO N
G(K) = 2.718282 ^ (AR(K) - ZZ) ': PRINT " G= "; G(K); " ZZ= "; ZZ
NEXT K
SUB TEMPERATURE
CLS
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
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
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 " 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: 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
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
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
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
DEFINT N
SUB VANLAAR
CLS
REM CALCULATE ACTIVITY COEFFICIENTS FROM NEW VAN LAAR MODEL JACK
LASHOVER 09/08/12 VANLAAR1.BAS
DIM VLB(3), E(3, 3)
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
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
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
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
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!
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
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
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
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
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
'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
SUB MARGULES
REM SUB TO CALCULATE ACTIVITY COEFFICIENTS
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
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
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
TS# = TIMER
FIL% = -1111: RANDOMIZE (FIL%)
OPT = 1E+30
FOR J = 1 TO 15
COUNTJ% = COUNTJ% + 1
FOR I = 1 TO 500
COUNT& = COUNT& + 1: COUNTI% = COUNTI% + 1
FOR K = 1 TO 3
XX(K) = X(K) / 100.
NEXT K
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
FOR II = 1 TO N
XX(II) = Y(II) / 100.
NEXT II
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
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
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