mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-02-28 16:59:21 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
1122 lines
88 KiB
Plaintext
1122 lines
88 KiB
Plaintext
BEGIN BDIS0001
|
|
COMMENT BATCH DISTILLATION PROGRAM BDIS0002
|
|
BY DONALD L. VOSS BDIS0003
|
|
PROFESSIONAL SERVICES GROUP, BURROUGHS CORPORATION BDIS0004
|
|
CARD SEQUENCE CODE STARTS WITH BDIS0001. BDIS0005
|
|
FIRST RELEASE DATE 10-28-64 ; BDIS0006
|
|
BDIS0007
|
|
REAL P, TDIFF, STOP, QM, POIR1, R, DELQ1, DELQM, SUMD, SUMR, BDIS0008
|
|
DELD ; BDIS0009
|
|
INTEGER M, N, KEY, MAXIT, I, J, IDNO, STIME1, DAY, YEAR, IPOIR1, BDIS0010
|
|
ELMIN, ELSEC, PRMIN, PRSEC, IOMIN, IOSEC, STIME2, STIME3, BDIS0011
|
|
READF, READH, READIE, READCD, POPD, POCD, POIR, POIR2 ; BDIS0012
|
|
ALPHA MONTH ; BDIS0013
|
|
LABEL BD1, EOFCARD ; BDIS0014
|
|
REAL ARRAY TOL[0:3], LIMIT[0:2], SPEC[0:3] ; BDIS0015
|
|
BOOLEAN ARRAY CALCDHV[0:3] ; BDIS0016
|
|
ALPHA ARRAY ID[0:12] ; BDIS0017
|
|
FILE IN FIN1 (2, 10) ; BDIS0018
|
|
FILE OUT FOUT1 1 (2, 15) ; BDIS0019
|
|
FORMAT IN FNAME (2A6, 3F20.10), BDIS0020
|
|
FKH (E17.8, 3E16.8, X1, A2, 2A6) ; BDIS0021
|
|
FORMAT OUT FID1 ("BATCH DISTILLATION PROGRAM" // "INPUT DATA PRINT-",BDIS0022
|
|
"OUT" // "PROBLEM NUMBER", I15 BDIS0023
|
|
/// 6A6 // 6A6 /// "TOTAL NUMBER OF TRAYS", I11, BDIS0024
|
|
X7,"COLUMN PRESSURE, PSIA",F15.3//"TOTAL NUMBER OF ",BDIS0025
|
|
"COMPONENTS",I6,X7,"TEMPERATURE TOLERANCE, F.", BDIS0026
|
|
F11.3//"KEY COMPONENT NUMBER",I12,X7,"MOL FRACTION ",BDIS0027
|
|
"TOLERANCE, %",F11.3//"MAX. NO. OF ITERATIONS",I10,X7BDIS0028
|
|
, "HOLDUP TOLERANCE, %", F17.3//"LOWER LIMIT ON T, ",BDIS0029
|
|
"F.", X7, I5, X7, "UPPER LIMIT ON T, F.", X9, I7 /// BDIS0030
|
|
"PROBLEM SPECIFICATIONS: % OF INITIAL FEED WITH", BDIS0031
|
|
"DRAWN", F8.1, // X27, "REFLUX RATIO, L1/D", F17.1), BDIS0032
|
|
FID3 (X27, "MAXIMUM REFLUX RATIO, L1/D", F9.1 // X27, BDIS0033
|
|
"SPECIFICATION COMPONENT NO.", I6), BDIS0034
|
|
FID4 (X27, "% OF INITIAL FEED WITHDRAWN", F8.1 // X27, BDIS0035
|
|
"NO. OF CYCLES", I20), BDIS0036
|
|
FID5 (// "FEED MOLS, TRAY HOLDUP (CU. FT.), AND INITIAL ",BDIS0037
|
|
"ESTIMATES:"//X4,"HUM[M] =",F10.4," MOLS T[1] =", BDIS0038
|
|
F6.1, " F. T[M] = ", F6.1, " F." // X6, "I", X9, BDIS0039
|
|
"F[I]", X11, "X[M,I]", X9, "J", X7, "HUV[J]"), BDIS0040
|
|
FID6 (I7, F16.4, E16.5, I8, F14.5), BDIS0041
|
|
FID7 (I7, F16.4, E16.5), BDIS0042
|
|
FID8 (X39, I8, F14.5), BDIS0043
|
|
FID9 ("COMPONENT K-RATIO AND ENTHALPY DATA:" // BDIS0044
|
|
(2A6, X6, "TC[I] =", F9.3, X5, "PC[I] =", F9.3, X5, BDIS0045
|
|
"S[I] =", F10.5 / 7(4E16.8, X1, A2, 2A6 / ) BDIS0046
|
|
4E16.8, X1, A2, 2A6 / 4E16.8, X1, A2, 2A6 // )), BDIS0047
|
|
FERR (// "THIS PROBLEM WAS TERMINATED DUE TO THE", BDIS0048
|
|
" FOLLOWING REASON:" / ), BDIS0049
|
|
FERR1 (/ "THE MATRIX USED IN THE STARTUP PROCEDURE IS ", BDIS0050
|
|
"SINGULAR OR ILL-CONDITIONED" / ), BDIS0051
|
|
FERR2 (/ "THE MAXIMUM NUMBER OF ITERATIONS ALLOWED IN ", BDIS0052
|
|
"THE STARTUP PROCEDURE WAS EXCEEDED" / ), BDIS0053
|
|
FERR3 ( / "THE TEMPERATURE LIMITS WERE EXCEEDED IN THE ", BDIS0054
|
|
"TRANSIENT PROCEDURE"), BDIS0055
|
|
FSS1 ("BATCH DISTILLATION PROGRAM" // "PRINT-OUT OF ", BDIS0056
|
|
"STEADY-STATE CONDITIONS AT TOTAL REFLUX" // BDIS0057
|
|
"PROBLEM NUMBER", I15 /// 6A6 // 6A6 /// "T[J]:" / BDIS0058
|
|
(8F10.2)), BDIS0059
|
|
FSS2 (// "HUM[J]:" / (8F10.4)), BDIS0060
|
|
FSS3 (// "X[J,I]:"), BDIS0061
|
|
FSS4 (5E15.7), BDIS0062
|
|
FFP1 ("BATCH DISTILLATION PROGRAM" // "PRINT-OUT OF ", BDIS0063
|
|
"FINAL RESULTS AT END OF DISTILLATION" // BDIS0064
|
|
"PROBLEM NUMBER", I15 /// 6A6 // 6A6 /// BDIS0065
|
|
"DATE", X17, A6, I3, ",", I5 // "ELAPSED TIME", BDIS0066
|
|
I10, " MIN.,", I3, " SEC." // "PROCESSOR TIME", I8, BDIS0067
|
|
" MIN.," I3, " SEC." // "I/O TIME", I14, " MIN.,", BDIS0068
|
|
I3, " SEC." // BDIS0069
|
|
BDIS0070
|
|
BDIS0071
|
|
/" TRAY TEMPERATURE TRAY LIQUID TRAY LIQUI",BDIS0072
|
|
"D X SUMMATION Y SUMMATION" / X10, "OF TRAY, ",BDIS0073
|
|
"F. HOLDUP, MOLS HOLDUP,CU.FT. ON TRAY", BDIS0074
|
|
" ON TRAY"), BDIS0075
|
|
FFP2 (I4, F15.2, X1, 2F14.4, X2, 2F14.7), BDIS0076
|
|
FFP3 (/// "TOTAL MOLS OF DISTILLATE WITHDRAWN: ", F15.4, BDIS0077
|
|
/// " COMPONENT MOL FRACTIONS OF TOTAL DISTILLATE ", BDIS0078
|
|
"WITHDRAWN FROM COLUMN:" / (5E15.7)), BDIS0079
|
|
FFP4 (/// " COMPONENT MOLS OF TOTAL DISTILLATE WITHDRAWN",BDIS0080
|
|
" FROM COLUMN:" / (5F15.3)), BDIS0081
|
|
FFP5 (/// " TRAY LIQUID MOL FRACTIONS, X[J,I]:"), BDIS0082
|
|
FFP6 (5E15.7), BDIS0083
|
|
FFP7 (/// " TRAY VAPOR MOL FRACTIONS, Y[J,I]:") ; BDIS0084
|
|
BDIS0085
|
|
PROCEDURE DATE (MONTH, DAY, YEAR) ; BDIS0086
|
|
COMMENT THIS PROCEDURE CALCULATES THE MONTH, DAY OF THE MONTH, BDIS0087
|
|
AND YEAR FROM THE TIME(0) FUNCTION. MONTH IS ALPHA. DAY BDIS0088
|
|
AND YEAR ARE INTEGERS. ; BDIS0089
|
|
ALPHA MONTH ; BDIS0090
|
|
INTEGER DAY, YEAR ; BDIS0091
|
|
BEGIN BDIS0092
|
|
INTEGER T1, T6, T7, T9, DAZ, X ; BDIS0093
|
|
INTEGER ARRAY MESS[0:13] ; BDIS0094
|
|
ALPHA ARRAY MO [1:12] ; BDIS0095
|
|
INTEGER PROCEDURE ICV1 (SO, CH, SGN, LGTH) ; BDIS0096
|
|
VALUE CH, SGN, LGTH ; BDIS0097
|
|
INTEGER CH, SGN, LGTH ; BDIS0098
|
|
REAL SO ; BDIS0099
|
|
BEGIN BDIS0100
|
|
INTEGER EDE ; BDIS0101
|
|
INTEGER STREAM PROCEDURE IC8 (SO, CH, LGTH) ; BDIS0102
|
|
VALUE CH, LGTH ; BDIS0103
|
|
BEGIN BDIS0104
|
|
DI ~ LOC IC8 ; SI ~ SO ; SI ~ SI + CH ; BDIS0105
|
|
DS ~ LGTH OCT BDIS0106
|
|
END OF IC8 PROCEDURE ; BDIS0107
|
|
ICV1 ~ IC8 (SO, CH, LGTH) BDIS0108
|
|
END OF ICV1 PROCEDURE ; BDIS0109
|
|
FILL MO[*] WITH " JAN.", " FEB.", " MARCH", " APRIL", BDIS0110
|
|
" MAY", " JUNE", " JULY", "AUGUST", " SEPT.", BDIS0111
|
|
" OCT.", " NOV.", " DEC." ; BDIS0112
|
|
T6 ~ TIME(0) ; BDIS0113
|
|
T6 ~ ICV1 (T6, 3, 0, 5) ; BDIS0114
|
|
T1 ~ T6 MOD 1000 ; BDIS0115
|
|
IF T1 > 368 THEN T1 ~ 1 ; BDIS0116
|
|
T9 ~ T6 DIV 1000 ; BDIS0117
|
|
X ~ IF (T9 MOD 4) = 0 THEN 1 ELSE 0 ; BDIS0118
|
|
MESS[0] ~ 0 ; BDIS0119
|
|
MESS[1] ~ 31 ; MESS[2] ~ 59 + X ; BDIS0120
|
|
MESS[3] ~ 90 + X ; MESS[4] ~ 120 + X ; BDIS0121
|
|
MESS[5] ~ 151 + X ; MESS[6] ~ 181 + X ; BDIS0122
|
|
MESS[7] ~ 212 + X ; MESS[8] ~ 243 + X ; BDIS0123
|
|
MESS[9] ~ 273 + X ; MESS[10] ~ 304 + X ; BDIS0124
|
|
MESS[11] ~ 334 + X ; MESS[12] ~ 367 ; BDIS0125
|
|
MESS[13] ~ 1000 ; BDIS0126
|
|
X ~ 0 ; WHILE T1 > MESS[X] DO BDIS0127
|
|
BEGIN BDIS0128
|
|
X ~ X + 1 ; T7 ~ X BDIS0129
|
|
END ; BDIS0130
|
|
DAZ ~ T1 - MESS[X-1] ; BDIS0131
|
|
MONTH ~ MO[T7] ; DAY ~ DAZ ; YEAR ~ T9 + 1900 BDIS0132
|
|
END OF DATE PROCEDURE ; BDIS0133
|
|
BDIS0134
|
|
COMMENT DECLARATIONS AND FILL STATEMENTS FOR THE GLOBAL ARRAYS BDIS0135
|
|
OF THE HVPCOR PROCEDURE ; BDIS0136
|
|
REAL ARRAY HVC3, HVC4, HVC7, HVC8[0:2,0:6], HVC5, HVC9[0:49], BDIS0137
|
|
TR1S3, TR1S4[0:2] ; BDIS0138
|
|
INTEGER ARRAY HVC2[0:2] ; BDIS0139
|
|
FILL HVC2[*] WITH 0, 6, 6 ;BDIS0140
|
|
FILL HVC3[1,*] WITH 0.0, -1.1671875, -1.4894278, BDIS0141
|
|
-1.1559073, -1.3616489, -1.2883117, -1.3995702 ;BDIS0142
|
|
FILL HVC3[2,*] WITH 0.0, -1.2935283, -2.9748991, BDIS0143
|
|
-2.4260566, -1.8061761, -1.5492552, -1.4278796 ;BDIS0144
|
|
FILL HVC4[1,*] WITH 0.0, 0.0, -0.10587647, BDIS0145
|
|
-0.15860289, -0.15248362, -0.11896855, -0.12173253 ;BDIS0146
|
|
FILL HVC4[2,*] WITH 0.0, 0.0, -1.7678550, BDIS0147
|
|
-1.8686137, -1.2165188, -0.67716468, -0.61318349 ;BDIS0148
|
|
FILL HVC5[*] WITH 0.0, -0.68264275, -1.0872225, BDIS0149
|
|
0.047697762, -0.024306088, -0.0090858597, -0.001729015,BDIS0150
|
|
-0.0027521429, -2.2596067, 0.11921812, -0.046204775,BDIS0151
|
|
0.014351991, -0.023163497, 0.025471511, 0.013133272,BDIS0152
|
|
0.78097570, -0.17094139, 0.098209577, -0.044902667,BDIS0153
|
|
0.015565173, -0.010983720, 0.013622787, 0.28893313, BDIS0154
|
|
-0.25370399, 0.0052142570, 0.071616235, 0.046127269,BDIS0155
|
|
-0.11245569, -0.067557734, -2.5307361, -0.039864924,BDIS0156
|
|
-0.12607210, 0.13765330, -0.039550505, 0.0075315843,BDIS0157
|
|
-0.21354763, 2.2361128, -0.36080301, 0.49691013, BDIS0158
|
|
-0.41863117, -0.076349532, 0.43597890, -0.40507180, BDIS0159
|
|
0.26338300, 0.0083735620, -0.016716827, -0.016240225, BDIS0160
|
|
0.10507060, -0.12106818, 0.025741676 ; BDIS0161
|
|
FILL HVC7[1,*] WITH 0.0, -1.2729166, -1.6239677, BDIS0162
|
|
-1.5317194, -1.4788939, -1.4345722, -1.5801600 ;BDIS0163
|
|
FILL HVC7[2,*] WITH 0.0, -6.5718750, -12.149681, BDIS0164
|
|
-11.497100, -11.065928, -10.278189, -10.667091 ;BDIS0165
|
|
FILL HVC8[1,*] WITH 0.0, 0.0, -0.090954100,BDIS0166
|
|
-0.056326597, -0.075512113, -0.071434341, -0.063708461;BDIS0167
|
|
FILL HVC8[2,*] WITH 0.0, 0.0, -41.217490, BDIS0168
|
|
-22.312134, -21.043415, -20.693912, -26.268748 ;BDIS0169
|
|
FILL HVC9[*] WITH 0.0, 39.745103, 6.3744973, BDIS0170
|
|
-0.11410040, -0.0036340168, -8.2198154@-5, -2.1580705@-5, BDIS0171
|
|
2.9001251@-6, -44.671381, -6.7048192, 0.073453717, BDIS0172
|
|
-0.0066641733, 0.0017309322, -9.824585@-5, 1.343254@-5, BDIS0173
|
|
41.351011, 4.5915409, -0.029361153, 0.0018827038,BDIS0174
|
|
-0.0040032069, 7.6001770@-4, -9.750253@-5, -27.356096, BDIS0175
|
|
0.97045128, -0.28080321, 0.032749281, 0.0074142633,BDIS0176
|
|
-0.0017002214, 4.3344771@-4, 39.904305, -4.4069227, BDIS0177
|
|
0.52546214, -0.092967052, 0.0057307519, 0.0034063759,BDIS0178
|
|
-1.2990048@-4, 46.719260, 8.5852725, -0.62558932, BDIS0179
|
|
-0.011829404, -0.041450650, 0.014043180, -9.8770289@-4,BDIS0180
|
|
-3.7232051, -0.30920320, -0.0049008792, 0.0011831959,BDIS0181
|
|
9.1663621@-4, -1.8376908@-4, 3.8674416@-5 ;BDIS0182
|
|
BDIS0183
|
|
COMMENT READ IN DATA SET 1 ; BDIS0184
|
|
BD1: STIME1 ~ TIME(1) ; STIME2 ~ TIME(2) ; BDIS0185
|
|
STIME3 ~ TIME(3) ; BDIS0186
|
|
READ (FIN1, /, FOR I ~ 1 STEP 1 UNTIL 12 DO ID[I], BDIS0187
|
|
IDNO, M, N, KEY, MAXIT, P, TOL[1], TOL[2], TOL[3], BDIS0188
|
|
LIMIT[1], LIMIT[2], POPD, POCD, POIR, IPOIR1, POIR2, QM, BDIS0189
|
|
SPEC[1], SPEC[2] ) [EOFCARD] ; BDIS0190
|
|
BDIS0191
|
|
BEGIN BDIS0192
|
|
COMMENT START OF BLOCK 2 OF PROGRAM ; BDIS0193
|
|
OWN REAL ARRAY F, S, TC, PC[0:N], BDIS0194
|
|
HUM, HUV, DELL, DELV, T[0:M], BDIS0195
|
|
X, Y[0:M,0:N] ; BDIS0196
|
|
OWN ALPHA ARRAY NAME1, NAME2[0:N], AHV, AHL[0:N,0:3], AK[0:N,0:7,0:3] ; BDIS0197
|
|
LABEL BD2, ERR1, ERR2, ERR3 ; BDIS0198
|
|
BDIS0199
|
|
COMMENT GLOBAL ARRAYS FOR THE KNGAA PROCEDURE ; BDIS0200
|
|
OWN REAL ARRAY KC1[0:N,0:28], KC15[0:N,0:4], KC16[0:7] ; BDIS0201
|
|
BDIS0202
|
|
COMMENT GLOBAL ARRAY FOR THE HVPCOR PROCEDURE ; BDIS0203
|
|
OWN REAL ARRAY HVC1[0:N,0:4] ; BDIS0204
|
|
BDIS0205
|
|
COMMENT GLOBAL ARRAY FOR THE HLIQ PROCEDURE ; BDIS0206
|
|
OWN REAL ARRAY HLC5[0:N,0:4] ; BDIS0207
|
|
BDIS0208
|
|
COMMENT GLOBAL ARRAYS FOR THE PHIPART PROCEDURE ; BDIS0209
|
|
INTEGER ARRAY TI1S1, TI1S2[0:3], TI1S3[0:2] ; BDIS0210
|
|
BDIS0211
|
|
COMMENT GLOBAL ARRAY FOR THE PHIPART AND TRANSIENT PROCEDURES ; BDIS0212
|
|
REAL ARRAY TR1S2 [0: IF (M>N-1 AND M>2) THEN M ELSE IF N-1>2 THEN BDIS0213
|
|
N-1 ELSE 2] ; BDIS0214
|
|
BDIS0215
|
|
COMMENT GLOBAL ARRAY FOR THE KNGAA, PHIPART, AND TRANSIENT BDIS0216
|
|
PROCEDURES ; BDIS0217
|
|
REAL ARRAY TR1S1 [0:IF (M>N-1 AND M>14) THEN M ELSE IF 14>N-1 THEN 14BDIS0218
|
|
ELSE N-1] ; BDIS0219
|
|
BDIS0220
|
|
COMMENT GLOBAL ARRAYS FOR THE STARTUP PROCEDURE ; BDIS0221
|
|
REAL ARRAY PHUMT[0:M,0:M], PHUMX[0:M,0:N], A[0:M+N,0:M+N], B, BDIS0222
|
|
C[0:M+N] ; BDIS0223
|
|
BDIS0224
|
|
COMMENT GLOBAL ARRAYS FOR THE TRANSIENT PROCEDURE ; BDIS0225
|
|
REAL ARRAY HV, HL, PHLT[0:M], PHLX[0:M,0:N], D[0:N] ; BDIS0226
|
|
BDIS0227
|
|
COMMENT GLOBAL ARRAYS FOR THE STARTUP AND TRANSIENT PROCEDURES ; BDIS0228
|
|
REAL ARRAY K, PKT[0:M,0:N], SBAR[0:M] ; BDIS0229
|
|
BDIS0230
|
|
COMMENT . . BDIS0231
|
|
. . BDIS0232
|
|
. . BDIS0233
|
|
. . BDIS0234
|
|
. . BDIS0235
|
|
THE KNGAA, PHIPART, HLIQ, HVPCOR, AND SOLVE PROCEDURES BDIS0236
|
|
MUST BE INSERTED HERE, IN THAT ORDER. BDIS0237
|
|
. . BDIS0238
|
|
. . BDIS0239
|
|
. . BDIS0240
|
|
. . BDIS0241
|
|
. . ;BDIS0242
|
|
BDIS0243
|
|
PROCEDURE STARTUP (M, N, KEY, P, F, S, HUV, TOL, LIMIT, MAXIT, POIR,BDIS0244
|
|
T, HUM, X, ERR1, ERR2) ; BDIS0245
|
|
BDIS0246
|
|
COMMENT THIS PROCEDURE CALCULATES THE STEADY-STATE CONDITIONS OF BDIS0247
|
|
A BATCH DISTILLATION COLUMN OPERATING AT TOTAL REFLUX. BDIS0248
|
|
THE TEMPERATURE, COMPONENT MOL FRACTIONS, AND MOLS OF BDIS0249
|
|
LIQUID HOLDUP ON EACH TRAY ARE CALCULATED BY MEANS OF A BDIS0250
|
|
NEWTON-RAPHSON TECHNIQUE. BDIS0251
|
|
BDIS0252
|
|
THE INPUT PARAMETERS ARE BDIS0253
|
|
M - TOTAL NUMBER OF TRAYS - INTEGER BDIS0254
|
|
N - TOTAL NUMBER OF COMPONENTS - INTEGER BDIS0255
|
|
KEY - KEY COMPONENT NUMBER - INTEGER BDIS0256
|
|
P - COLUMN PRESSURE, PSIA - REAL BDIS0257
|
|
F - COMPONENT FEED MOLS - REAL ARRAY [0:N], WHERE BDIS0258
|
|
F[0] = TOTAL MOLS OF FEED. BDIS0259
|
|
S - COMPONENT LIQUID MOLAR VOLUMES, CU. FT./MOL - BDIS0260
|
|
REAL ARRAY[0:N] BDIS0261
|
|
HUV - LIQUID HOLDUP ON TRAYS, CU. FT. - REAL ARRAY[0:M-1]BDIS0262
|
|
TOL - TOLERANCES ON VARIABLES - REAL ARRAY [0:3] BDIS0263
|
|
TOL[1] = TRAY TEMPERATURES, DEG. F. BDIS0264
|
|
TOL[2] = REBOILER LIQUID MOL FRACTIONS, PER CENT BDIS0265
|
|
TOL[3] = REBOILER LIQUID MOLAR HOLDUP, PER CENT BDIS0266
|
|
LIMIT - TEMPERATURE LIMITS - REAL ARRAY [0:2] BDIS0267
|
|
LIMIT[1] = MINIMUM T, F. BDIS0268
|
|
LIMIT[2] = MAXIMUM T, F. BDIS0269
|
|
MAXIT - MAXIMUM NUMBER OF ITERATIONS ALLOWED - INTEGER BDIS0270
|
|
POIR - INTEGER. IF = 1, PRINT INTERMEDIATE RESULTS. BDIS0271
|
|
T - INITIAL ESTIMATES OF THE TRAY TEMPERATURES, BDIS0272
|
|
DEG. F. - REAL ARRAY [0:M] BDIS0273
|
|
HUM[M] - INITIAL ESTIMATE OF REBOILER LIQUID HOLDUP, MOLS BDIS0274
|
|
(SEE OUTPUT PARAMETERS) BDIS0275
|
|
X[M,I] - INITIAL ESTIMATES OF REBOILER LIQUID MOL BDIS0276
|
|
MOL FRACTIONS (SEE OUTPUT PARAMETERS) BDIS0277
|
|
BDIS0278
|
|
IN ADDITION, THE REAL ARRAYS A[0:M+N,0:M+N], B, C[0:M+N], BDIS0279
|
|
K, PKT[0:M,0:N], PHUMT[0:M,0:M], PHUMX[0:M,0:N], AND BDIS0280
|
|
SBAR[0:M] PLUS THE GLOBAL ARRAYS OF KNGAA ARE GLOBAL BDIS0281
|
|
TO STARTUP. BDIS0282
|
|
BDIS0283
|
|
ALSO, THE OUTPUT FILE, FOUT1, MUST BE DECLARED GLOBAL TO BDIS0284
|
|
STARTUP. IT IS USED TO PRINT THE INTERMEDIATE RESULTS. BDIS0285
|
|
BDIS0286
|
|
THE OUTPUT PARAMETERS ARE BDIS0287
|
|
T - TRAY TEMPERATURES, DEG. F. - REAL ARRAY [0:M] BDIS0288
|
|
HUM - LIQUID HOLDUP ON TRAYS, MOLS - REAL ARRAY [0:M] BDIS0289
|
|
X - LIQUID TRAY COMPOSITIONS, MOL FRACTIONS - BDIS0290
|
|
REAL ARRAY [0:M,0:N] BDIS0291
|
|
BDIS0292
|
|
THE REFERENCE PARAMETERS ARE BDIS0293
|
|
ERR1 - REFERENCE STATEMENT LABEL TO WHICH CONTROL IS BDIS0294
|
|
CHANGED IF THE MATRIX USED IN STARTUP IS SINGULAR OR BDIS0295
|
|
ILL-CONDITIONED. BDIS0296
|
|
ERR2 - REFERENCE STATEMENT LABEL TO WHICH CONTROL IS BDIS0297
|
|
CHANGED IF MAXIT IS EXCEEDED. BDIS0298
|
|
BDIS0299
|
|
THE PROCEDURES SOLVE AND KNGAA MUST BE DECLARED PRIOR TO BDIS0300
|
|
STARTUP. CARDS 0230 AND 0250 OF SOLVE WERE MODIFIED TO BDIS0301
|
|
REMOVE THE OWN TYPE. ; BDIS0302
|
|
BDIS0303
|
|
VALUE N, M, KEY, P, F, S, HUV, TOL, LIMIT, MAXIT, POIR ; BDIS0304
|
|
REAL P ; BDIS0305
|
|
INTEGER N, M, KEY, MAXIT ; BDIS0306
|
|
INTEGER POIR ; BDIS0307
|
|
REAL ARRAY F, S, HUV, TOL, LIMIT, T, HUM[0], X[0,0] ; BDIS0308
|
|
LABEL ERR1, ERR2 ; BDIS0309
|
|
BDIS0310
|
|
BEGIN BDIS0311
|
|
REAL SUMX, SUMSX, PXM, EPS, CORR, TCORR, MAXDT, MAXDH, BDIS0312
|
|
MAXDX, LHFAC, UHFAC, LXFAC, UXFAC ; BDIS0313
|
|
INTEGER I, J, Q, MPN, MPI, G, MPG, L, ITER ; BDIS0314
|
|
BOOLEAN CALCPDC, RECYCLE, IR2, IR3, IR4, IR5, IR6, IR7, IR13, BDIS0315
|
|
IR14, IR15, IR16 ; BDIS0316
|
|
LABEL S1, S2, S3, S4, S5 ; BDIS0317
|
|
FORMAT OUT FIR1 (//"CORRECTIONS MULTIPLIED BY", F8.4), BDIS0318
|
|
FIR2 ( "X[M,I] SET TO LOWER LIMIT"), BDIS0319
|
|
FIR3 ( "SUMX > 1 NORMALIZED" ), BDIS0320
|
|
FIR4 ( "T SET TO LOWER LIMIT" ), BDIS0321
|
|
FIR5 ( "T SET TO UPPER LIMIT" ), BDIS0322
|
|
FIR6 ( "DELTA T SET TO MAXDT"), BDIS0323
|
|
FIR7 ( "HUM[M] SET TO LOWER LIMIT"), BDIS0324
|
|
FIR8 (/ "PRINT-OUT OF INTERMEDIATE RESULTS IN STARTUP"), BDIS0325
|
|
FIR9 ( "HUM[M] = ", F10.4 / "X[M,I]:" / (8E15.5) ), BDIS0326
|
|
FIR10 ( "T[J]:" / (12F10.2) ), BDIS0327
|
|
FIR11( "OVER-ALL MATERIAL UNBALANCE =", E14.5 BDIS0328
|
|
/ "COMPONENT MATERIAL UNBALANCE:" / (8E15.5)), BDIS0329
|
|
FIR12 ( "EQUILIBRIUM CONDITION UNBALANCES:" / (8E15.5)), BDIS0330
|
|
FIR14 ( "X[M,I] SET TO UPPER LIMIT"), BDIS0331
|
|
FIR15 ( "DELTA X[M,I] SET TO MAXDX"), BDIS0332
|
|
FIR16 ( "DELTA HUM[M] SET TO MAXDH") ; BDIS0333
|
|
BDIS0334
|
|
RECYCLE ~ TRUE ; ITER ~ 1 ; BDIS0335
|
|
BDIS0336
|
|
COMMENT PRINT OUT INTERMEDIATE RESULTS HEADING IF POIR = 1 ; BDIS0337
|
|
IF POIR = 1 THEN BDIS0338
|
|
BEGIN BDIS0339
|
|
FOR I ~ 1 STEP 1 UNTIL M + N DO C[I] ~ 0 ; BDIS0340
|
|
IR2 ~ IR3 ~ IR4 ~ IR5 ~ IR6 ~ IR7 ~ FALSE ; BDIS0341
|
|
WRITE (FOUT1[PAGE]) ; WRITE (FOUT1, FIR8) BDIS0342
|
|
END OF HEADING PRINTOUT ; BDIS0343
|
|
BDIS0344
|
|
COMMENT SET LIMITS ON CORRECTIONS TO HUM[M], X[M,I], AND T[J] ; BDIS0345
|
|
MAXDT ~ 20.0 ; BDIS0346
|
|
MAXDX ~ 1.0 ; LXFAC ~ 1.0@-4 ; UXFAC ~ 0.9999 ; BDIS0347
|
|
LHFAC ~ 0.2 ; UHFAC ~ 0.9999 ; MAXDH ~ 0.5 | F[0];BDIS0348
|
|
BDIS0349
|
|
COMMENT CALCULATE K-RATIOS AND T DERIVATIVES ; BDIS0350
|
|
CALCPDC ~ TRUE ; BDIS0351
|
|
S1: FOR J ~ 1 STEP 1 UNTIL M DO BDIS0352
|
|
BEGIN BDIS0353
|
|
IF J = 2 THEN CALCPDC ~ FALSE ; BDIS0354
|
|
KNGAA (T[J], P, N, CALCPDC, TRUE, FALSE, K[J,*], PKT[J,*],BDIS0355
|
|
C) BDIS0356
|
|
END OF K AND PKT CALCULATIONS ; BDIS0357
|
|
BDIS0358
|
|
COMMENT CALCULATE LIQUID MOL FRACTIONS OF ALL PLATES EXCEPT M ; BDIS0359
|
|
FOR J ~ M-1 STEP -1 UNTIL 1 DO BDIS0360
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0361
|
|
IF X[J,I] ~ (K[J+1,I] | X[J+1,I]) < 0 THEN BDIS0362
|
|
BEGIN BDIS0363
|
|
X[J,I] ~ 1.0@-20 ; IR2 ~ TRUE BDIS0364
|
|
END OF X CALCULATIONS ; BDIS0365
|
|
BDIS0366
|
|
COMMENT CALCULATE TRAY AVERAGE SPECIFIC VOLUME AND TRAY MOLAR BDIS0367
|
|
LIQUID HOLDUP ; BDIS0368
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS0369
|
|
BEGIN BDIS0370
|
|
SUMSX ~ 0 ; BDIS0371
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0372
|
|
SUMSX ~ X[J,I] | S[I] + SUMSX ; BDIS0373
|
|
SBAR[J] ~ SUMSX ; BDIS0374
|
|
IF J ! M THEN HUM[J] ~ HUV[J] / SBAR[J] BDIS0375
|
|
END OF SBAR AND HUM CALCULATIONS ; BDIS0376
|
|
BDIS0377
|
|
COMMENT CALCULATE PHUMT ( PARTIAL DERIVATIVE OF TRAY MOLAR LIQUID BDIS0378
|
|
HOLDUP WITH RESPECT TO EACH TRAY TEMPERATURE), A1, A3, BDIS0379
|
|
AND A7, WHERE THE COEFFICIENT MATRIX, A, IS STRUCTURED BDIS0380
|
|
AS FOLLOWS: . A1,M|M . A2,M|(N-1) . A3,M|1 . BDIS0381
|
|
............................................. BDIS0382
|
|
. A4,(N-1)|M . A5,(N-1)|(N-1) . A6,(N-1)|1 . BDIS0383
|
|
............................................. BDIS0384
|
|
. A7,1|M . A8,1|(N-1) . A9,1|1 .;BDIS0385
|
|
MPN ~ M + N ; BDIS0386
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS0387
|
|
BEGIN BDIS0388
|
|
A[J,MPN] ~ 0 ; BDIS0389
|
|
FOR Q ~ 1 STEP 1 UNTIL M DO BDIS0390
|
|
BEGIN BDIS0391
|
|
IF J = 1 THEN A[MPN,Q] ~ 0 ; BDIS0392
|
|
IF Q > J THEN BDIS0393
|
|
BEGIN BDIS0394
|
|
IF Q ! 1 AND J ! M THEN BDIS0395
|
|
BEGIN BDIS0396
|
|
SUMX ~ 0 ; BDIS0397
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0398
|
|
SUMX ~ (X[J,I] | PKT[Q,I] | S[I] / (X[M,I] | K[Q,I]) - BDIS0399
|
|
X[J,KEY] | PKT[Q,KEY] | S[KEY] / (X[M,KEY] | K[Q,KEY])) | BDIS0400
|
|
X[M,I] + SUMX ; BDIS0401
|
|
PHUMT[J,Q] ~ - (X[J,KEY] | PKT[Q,KEY] | S[KEY] / (X[M,KEY]BDIS0402
|
|
| K[Q,KEY]) + SUMX) | HUM[J] / SBAR[J] ; BDIS0403
|
|
A[MPN,Q] ~ A[MPN,Q] - PHUMT[J,Q] BDIS0404
|
|
END OF PHUMT AND A7 CALCULATIONS FOR Q GREATER THEN J ; BDIS0405
|
|
GO TO S2 BDIS0406
|
|
END OF A1 CALCULATIONS FOR Q GREATER THAN J BDIS0407
|
|
ELSE IF Q = J THEN BDIS0408
|
|
BEGIN BDIS0409
|
|
PHUMT[J,Q] ~ 0 ; BDIS0410
|
|
GO TO S2 BDIS0411
|
|
END OF PHUMT AND A1 CALCULATIONS FOR Q EQUAL TO J BDIS0412
|
|
ELSE BDIS0413
|
|
BEGIN BDIS0414
|
|
PHUMT[J,Q] ~ 0 ; A[J,Q] ~ 0 BDIS0415
|
|
END OF PHUMT AND A1 CALCULATIONS FOR Q LESS THAN J ; BDIS0416
|
|
GO TO S3 ; BDIS0417
|
|
S2: SUMX ~ 0 ; BDIS0418
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0419
|
|
SUMX ~ X[J,I] | K[J,I] | PKT[Q,I] / K[Q,I] - X[J,KEY] | BDIS0420
|
|
K[J,KEY] | X[M,I] | PKT[Q,KEY] / (X[M,KEY] | K[Q,KEY]) + BDIS0421
|
|
SUMX ; BDIS0422
|
|
A[J,Q] ~ X[J,KEY] | K[J,KEY] | PKT[Q,KEY] / (X[M,KEY] | BDIS0423
|
|
K[Q,KEY]) + SUMX ; BDIS0424
|
|
S3: END OF A3 CALCULATIONS BDIS0425
|
|
END OF PHUMT A1 A3 AND A7 CALCULATIONS ; BDIS0426
|
|
BDIS0427
|
|
COMMENT CALCULATE A2, A4, A6, A8, AND PHUMX (PARTIAL DERIVATIVE BDIS0428
|
|
OF TRAY MOLAR LIQUID HOLDUP WITH RESPECT TO REBOILER MOL BDIS0429
|
|
FRACTION) ; BDIS0430
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0431
|
|
BEGIN BDIS0432
|
|
IF I < KEY THEN MPI ~ M + I ELSE MPI ~ M + I - 1 ; BDIS0433
|
|
A[MPN,MPI] ~ 0 ; BDIS0434
|
|
A[MPI,MPN] ~ - X[M,I] ; BDIS0435
|
|
FOR Q ~ M STEP -1 UNTIL 1 DO BDIS0436
|
|
BEGIN BDIS0437
|
|
A[Q,MPI] ~ K[Q,I] | X[Q,I] / X[M,I] - K[Q,KEY] | X[Q,KEY] BDIS0438
|
|
/ X[M,KEY]; BDIS0439
|
|
IF Q ! 1 THEN BDIS0440
|
|
BEGIN BDIS0441
|
|
SUMX ~ 0 ; BDIS0442
|
|
FOR J ~ Q - 1 STEP -1 UNTIL 1 DO BDIS0443
|
|
SUMX ~ HUM[J] | X[J,I] | PKT[Q,I] / K[Q,I] + X[J,I] | BDIS0444
|
|
PHUMT[J,Q] + SUMX ; BDIS0445
|
|
A[MPI,Q] ~ - SUMX BDIS0446
|
|
END OF A4 CALCULATIONS BDIS0447
|
|
ELSE A[MPI,Q] ~ 0 ; BDIS0448
|
|
PHUMX[Q,I] ~ (S[KEY] | X[Q,KEY] / X[M,KEY] - S[I] | X[Q,I]BDIS0449
|
|
/ X[M,I]) | HUM[Q] / SBAR[Q] ; BDIS0450
|
|
A[MPN,MPI] ~ A[MPN,MPI] - PHUMX[Q,I] BDIS0451
|
|
END OF PHUMX A2 AND A8 CALCULATIONS BDIS0452
|
|
END OF PHUMX A2 A4 A6 AND A8 CALCULATIONS ; BDIS0453
|
|
BDIS0454
|
|
COMMENT CALCULATE A5 ; BDIS0455
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0456
|
|
BEGIN BDIS0457
|
|
IF I < KEY THEN MPI ~ M + I ELSE MPI ~ M + I - 1 ; BDIS0458
|
|
FOR G ~ 1 STEP 1 UNTIL N DO IF G ! KEY THEN BDIS0459
|
|
BEGIN BDIS0460
|
|
SUMX ~ 0 ; BDIS0461
|
|
FOR J ~ M STEP -1 UNTIL 1 DO BDIS0462
|
|
BEGIN BDIS0463
|
|
IF I ! G THEN PXM ~ 0 ELSE PXM ~ X[J,I] / X[M,I] ; BDIS0464
|
|
SUMX ~ X[J,I] | PHUMX[J,G] + HUM[J] | PXM + SUMX BDIS0465
|
|
END ; BDIS0466
|
|
IF G < KEY THEN MPG ~ M + G ELSE MPG ~ M + G - 1 ; BDIS0467
|
|
A[MPI,MPG] ~ - SUMX BDIS0468
|
|
END BDIS0469
|
|
END OF A5 CALCULATIONS ; BDIS0470
|
|
BDIS0471
|
|
COMMENT CALCULATE A9 ; BDIS0472
|
|
A[MPN,MPN] ~ -1.0 ; BDIS0473
|
|
BDIS0474
|
|
COMMENT CALCULATE THE CONSTANT VECTOR ; BDIS0475
|
|
C[MPN] ~ 0 ; BDIS0476
|
|
FOR L ~ 1 STEP 1 UNTIL MPN DO BDIS0477
|
|
IF L { M THEN BDIS0478
|
|
BEGIN BDIS0479
|
|
C[MPN] ~ HUM[L] + C[MPN] ; SUMX ~ 0 ; BDIS0480
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0481
|
|
SUMX ~ K[L,I] | X[L,I] + SUMX ; BDIS0482
|
|
C[L] ~ 1.0 - SUMX BDIS0483
|
|
END BDIS0484
|
|
ELSE IF Q ~ L - M ! KEY THEN BDIS0485
|
|
BEGIN BDIS0486
|
|
SUMX ~ 0 ; FOR J ~ 1 STEP 1 UNTIL M DO BDIS0487
|
|
SUMX ~ X[J,Q] | HUM[J] + SUMX ; BDIS0488
|
|
G ~ IF Q < KEY THEN L ELSE L - 1 ; BDIS0489
|
|
C[G] ~ SUMX - F[Q] BDIS0490
|
|
END ; BDIS0491
|
|
C[MPN] ~ C[MPN] - F[0] ; BDIS0492
|
|
BDIS0493
|
|
COMMENT PRINT OUT INTERMEDIATE RESULTS IF POIR = 1 ; BDIS0494
|
|
IF POIR = 1 THEN BDIS0495
|
|
BEGIN BDIS0496
|
|
IF CORR ! 0 THEN BDIS0497
|
|
WRITE (FOUT1, FIR1, CORR) ; BDIS0498
|
|
WRITE (FOUT1, FIR9, HUM[M], FOR I ~ 1 STEP 1 UNTIL N DO BDIS0499
|
|
X[M,I] ) ; BDIS0500
|
|
WRITE (FOUT1, FIR10, FOR J ~ 1 STEP 1 UNTIL M DO T[J] ) ; BDIS0501
|
|
WRITE (FOUT1, FIR11, C[M+N], FOR I ~ 1 STEP 1 UNTIL N-1 DOBDIS0502
|
|
C[M+I] ) ; BDIS0503
|
|
WRITE (FOUT1, FIR12, FOR J ~ 1 STEP 1 UNTIL M DO C[J] ) ; BDIS0504
|
|
IF IR2 THEN WRITE (FOUT1, FIR2) ; BDIS0505
|
|
IF IR3 THEN WRITE (FOUT1, FIR3) ; BDIS0506
|
|
IF IR4 THEN WRITE (FOUT1, FIR4) ; BDIS0507
|
|
IF IR5 THEN WRITE (FOUT1, FIR5) ; BDIS0508
|
|
IF IR6 THEN WRITE (FOUT1, FIR6) ; BDIS0509
|
|
IF IR7 THEN WRITE (FOUT1, FIR7) ; BDIS0510
|
|
IF IR14 THEN WRITE (FOUT1, FIR14) ; BDIS0511
|
|
IF IR15 THEN WRITE (FOUT1, FIR15) ; BDIS0512
|
|
IF IR16 THEN WRITE (FOUT1, FIR16) ; BDIS0513
|
|
IR2 ~ IR3 ~ IR4 ~ IR5 ~ IR6 ~ IR7 ~ IR13 ~ IR14 ~ IR15 ~ BDIS0514
|
|
IR16 ~ FALSE BDIS0515
|
|
END OF INTERMEDIATE PRINT OUT ; BDIS0516
|
|
BDIS0517
|
|
COMMENT EXIT IF TOLERANCES ARE MET ; BDIS0518
|
|
IF NOT RECYCLE THEN GO TO S5 ; BDIS0519
|
|
BDIS0520
|
|
COMMENT EXIT TO ERR2 IF MAXIT HAS BEEN EXCEEDED ; BDIS0521
|
|
IF ITER ~ ITER + 1 > MAXIT + 1 THEN GO TO ERR2 ; BDIS0522
|
|
BDIS0523
|
|
COMMENT ENTER THE SOLVE PROCEDURE TO CALCULATE THE CORRECTIONS TO BDIS0524
|
|
T[], X[M,], AND HUM[M] ; BDIS0525
|
|
EPS ~ (M + N) / 2.0 | 1.0 @ -10 ; BDIS0526
|
|
SOLVE (MPN, A, C, FALSE, 0, 0, EPS, B, ERR1, S4) ; BDIS0527
|
|
BDIS0528
|
|
COMMENT ADD CORRECTIONS TO PREVIOUS VALUES AND TEST IF TOLERANCES BDIS0529
|
|
ARE MET ; BDIS0530
|
|
S4: CORR ~ 1.0 ; RECYCLE ~ FALSE ; BDIS0531
|
|
FOR L ~ 1 STEP 1 UNTIL MPN DO BDIS0532
|
|
IF L { M THEN BDIS0533
|
|
BEGIN BDIS0534
|
|
IF TOL[1] < ABS(B[L]) THEN RECYCLE ~ TRUE ; BDIS0535
|
|
IF ABS(B[L]) > MAXDT THEN BDIS0536
|
|
BEGIN BDIS0537
|
|
IF TCORR ~ ABS(MAXDT / B[L]) < CORR THEN CORR ~ TCORR ; BDIS0538
|
|
IR6 ~ TRUE BDIS0539
|
|
END OF MAXDT TEST ; BDIS0540
|
|
IF T[L] + B[L] < LIMIT[1] THEN BDIS0541
|
|
BEGIN BDIS0542
|
|
IF TCORR ~ ABS((T[L] - LIMIT[1]) / B[L]) < CORR THEN BDIS0543
|
|
CORR ~ TCORR ; IR4 ~ TRUE BDIS0544
|
|
END OF TEST ON LOWER LIMIT OF T BDIS0545
|
|
ELSE IF T[L] + B[L] > LIMIT[2] THEN BDIS0546
|
|
BEGIN BDIS0547
|
|
IF TCORR ~ ABS((LIMIT[2] - T[L]) / B[L]) < CORR THEN BDIS0548
|
|
CORR ~ TCORR ; IR5 ~ TRUE BDIS0549
|
|
END OF TEST ON UPPER LIMIT OF T BDIS0550
|
|
END OF TOLERANCE TEST ON T BDIS0551
|
|
ELSE IF Q ~ L - M ! KEY THEN BDIS0552
|
|
BEGIN BDIS0553
|
|
G ~ IF Q < KEY THEN L ELSE L - 1 ; BDIS0554
|
|
IF ABS(B[G]) > MAXDX THEN BDIS0555
|
|
BEGIN BDIS0556
|
|
IF TCORR ~ ABS(MAXDX / B[G]) < CORR THEN CORR ~ TCORR ; BDIS0557
|
|
IR15 ~ TRUE BDIS0558
|
|
END OF MAXDX TEST; BDIS0559
|
|
IF X[M,Q] + B[G] { 0 THEN BDIS0560
|
|
BEGIN BDIS0561
|
|
IF TCORR ~ ABS(X[M,Q] | (1.0 - LXFAC) / B[G]) < CORR THEN BDIS0562
|
|
CORR ~ TCORR ; IR2 ~ TRUE BDIS0563
|
|
END OF TEST FOR NEGATIVE X VALUES ; BDIS0564
|
|
IF X[M,Q] + B[G] } 1.0 THEN BDIS0565
|
|
BEGIN BDIS0566
|
|
IF TCORR ~ ABS((1.0 - X[M,Q]) | UXFAC / B[G]) < CORR THEN BDIS0567
|
|
CORR ~ TCORR ; IR14 ~ TRUE BDIS0568
|
|
END OF TEST FOR X GREATER THAN OR EQUAL TO 1 ; BDIS0569
|
|
IF TOL[2] < ABS(B[G] / X[M,Q] | 100.0) THEN RECYCLE ~ TRUEBDIS0570
|
|
END OF TOLERANCE TEST ON X ; BDIS0571
|
|
IF ABS(B[MPN]) > MAXDH THEN BDIS0572
|
|
BEGIN BDIS0573
|
|
IF TCORR ~ ABS(MAXDH / B[MPN]) < CORR THEN BDIS0574
|
|
CORR ~ TCORR ; IR16 ~ TRUE BDIS0575
|
|
END OF MAXDH TEST ; BDIS0576
|
|
IF HUM[M] + B[MPN] { 0 THEN BDIS0577
|
|
BEGIN BDIS0578
|
|
IF TCORR ~ ABS(HUM[M] | (1.0 - LHFAC) / B[MPN]) < CORR BDIS0579
|
|
THEN CORR ~ TCORR ; IR7 ~ TRUE BDIS0580
|
|
END OF TEST FOR NEGATIVE HUM ; BDIS0581
|
|
IF TOL[3] < ABS (B[MPN] / HUM[M] | 100.0) THEN BDIS0582
|
|
RECYCLE ~ TRUE ; BDIS0583
|
|
FOR L ~ 1 STEP 1 UNTIL MPN DO BDIS0584
|
|
IF L { M THEN T[L] ~ T[L] + B[L] | CORR BDIS0585
|
|
ELSE IF Q ~ (L-M) ! KEY THEN BDIS0586
|
|
BEGIN BDIS0587
|
|
G ~ IF Q < KEY THEN L ELSE L-1 ; BDIS0588
|
|
X[M,Q] ~ X[M,Q] + B[G] | CORR BDIS0589
|
|
END ; BDIS0590
|
|
HUM[M] ~ HUM[M] + B[MPN] | CORR ; BDIS0591
|
|
BDIS0592
|
|
COMMENT CALCULATE X[M,KEY] ; BDIS0593
|
|
SUMX ~ 0 ; BDIS0594
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0595
|
|
SUMX ~ X[M,I] + SUMX ; BDIS0596
|
|
IF SUMX > 1.0 THEN BDIS0597
|
|
BEGIN BDIS0598
|
|
X[M,KEY] ~ 1.0@-20 ; IR3 ~ TRUE ; BDIS0599
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0600
|
|
X[M,I] ~ X[M,I] / SUMX BDIS0601
|
|
END BDIS0602
|
|
ELSE X[M,KEY] ~ 1.0 - SUMX ; BDIS0603
|
|
GO TO S1 ; BDIS0604
|
|
BDIS0605
|
|
S5: END OF STARTUP PROCEDURE ; BDIS0606
|
|
PROCEDURE TRANSIENT (M, N, KEY, P, TC, PC, S, LIMIT, STOP, QM, BDIS0607
|
|
POIR1, POIR2, R, HUM, T, X, Y, DELL, DELV, DELQ1, DELQM, BDIS0608
|
|
DELD, D, SUMD, SUMR, SBAR, ERR1) ; BDIS0609
|
|
BDIS0610
|
|
COMMENT THIS PROCEDURE CALCULATES THE TRANSIENT CONDITIONS OF A BDIS0611
|
|
BATCH DISTILLATION COLUMN OPERATING AT CONSTANT REFLUX OR BDIS0612
|
|
AT VARIABLE REFLUX IN WHICH THE DISTILLATE COMPOSITION OF BDIS0613
|
|
A SPECIFIED COMPONENT IS MAINTAINED AT A CONSTANT VALUE. BDIS0614
|
|
BDIS0615
|
|
THE INPUT PARAMETERS ARE BDIS0616
|
|
M - TOTAL NUMBER OF TRAYS - INTEGER BDIS0617
|
|
N - TOTAL NUMBER OF COMPONENTS - INTEGER BDIS0618
|
|
KEY - KEY COMPONENT NUMBER - INTEGER BDIS0619
|
|
P - COLUMN PRESSURE, PSIA - REAL BDIS0620
|
|
TC - COMPONENT CRITICAL TEMPERATURES, DEG. R. - REAL BDIS0621
|
|
ARRAY[0:N] BDIS0622
|
|
PC - COMPONENT CRITICAL PRESSURES, PSIA - REAL BDIS0623
|
|
ARRAY [0:N] BDIS0624
|
|
S - COMPONENT LIQUID MOLAR VOLUMES, CU. FT./MOL - BDIS0625
|
|
REAL ARRAY[0:N] BDIS0626
|
|
LIMIT - TEMPERATURE LIMITS - REAL ARRAY [0:2] BDIS0627
|
|
LIMIT[1] = MINIMUM T, F. BDIS0628
|
|
LIMIT[2] = MAXIMUM T, F. BDIS0629
|
|
STOP - STOP = THE MOLS OF DISTILLATE TO BE WITHDRAWN, BDIS0630
|
|
UNLESS THE COLUMN IS TO OPERATE AT TOTAL REFLUX. BDIS0631
|
|
THEN, STOP = THE MOLS OF REFLUX TO BE RETURNED TO BDIS0632
|
|
THE COLUMN. - REAL BDIS0633
|
|
QM - IF THE REBOILER HEAT DUTY IS HELD CONSTANT. BDIS0634
|
|
THROUGHOUT THE DISTILLATION, IT MAY BE SPECIFIED BDIS0635
|
|
HERE AS BTU/HOUR TO ALLOW CALCULATION OF THE BDIS0636
|
|
CONDENSER DUTY AND THE LIQUID AND VAPOR RATES. SET BDIS0637
|
|
TO ZERO OTHERWISE. BDIS0638
|
|
POIR1 - INCREMENTAL VALUE OF D OR L1 (TOTAL REFLUX) USED BDIS0639
|
|
TO INDICATE THE POINT(S) OF INTERMEDIATE PRINTOUT, BDIS0640
|
|
MOLS - REAL. TO OMIT INTERMEDIATE PRINTOUT, SET BDIS0641
|
|
POIR1 > TOTAL MOLS WITHDRAWN OR REFLUXED (TOTAL BDIS0642
|
|
REFLUX). BDIS0643
|
|
POIR2 - INTEGER. IF = 1, PRINT X[J,I] WITH THE BDIS0644
|
|
INTERMEDIATE RESULTS. BDIS0645
|
|
R - REFLUX RATIO, L1/D. SET R > 1.0@10 FOR TOTAL BDIS0646
|
|
REFLUX OPERATION - REAL BDIS0647
|
|
HUM - INITIAL LIQUID HOLDUP ON TRAYS, MOLS - REAL BDIS0648
|
|
ARRAY [0:M] BDIS0649
|
|
T - INITIAL TRAY TEMPERATURES, F. - REAL ARRAY [0:M] BDIS0650
|
|
X - INITIAL LIQUID TRAY COMPOSITIONS, MOL FRACTIONS - BDIS0651
|
|
REAL ARRAY [0:M,0:N] BDIS0652
|
|
BDIS0653
|
|
THE OUTPUT PARAMETERS ARE BDIS0654
|
|
HUM - FINAL LIQUID HOLDUP ON TRAYS,MOLS - REAL ARRAY[0:M]BDIS0655
|
|
T - FINAL TRAY TEMPERATURES, DEG. F. - REAL ARRAY[0:M]BDIS0656
|
|
X - FINAL LIQUID TRAY COMPOSITIONS, MOL FRACTIONS - BDIS0657
|
|
REAL ARRAY [0:M,0:N] BDIS0658
|
|
Y - FINAL VAPOR TRAY COMPOSITIONS, MOL FRACTIONS - BDIS0659
|
|
REAL ARRAY [0:M,0:N] BDIS0660
|
|
DELL - FINAL INCREMENTAL LIQUID TRAY FLOWS, MOLS - REAL BDIS0661
|
|
ARRAY [0:M] BDIS0662
|
|
DELV - FINAL INCREMENTAL VAPOR TRAY FLOWS, MOLS - REAL BDIS0663
|
|
ARRAY [0:M] BDIS0664
|
|
DELQ1 - FINAL INCREMENTAL CONDENSER DUTY, BTU - REAL BDIS0665
|
|
DELQM - FINAL INCREMENTAL REBOILER DUTY, BTU - REAL BDIS0666
|
|
DELD - FINAL INCREMENTAL DISTILLATE FLOW, MOLS -REAL BDIS0667
|
|
D - COMPONENT TOTAL MOLS WITHDRAWN AS DISTILLATE - BDIS0668
|
|
REAL ARRAY [0:N] BDIS0669
|
|
SUMD - TOTAL MOLS OF DISTILLATE WITHDRAWN - REAL BDIS0670
|
|
SUMR - TOTAL MOLS OF REFLUX RETURNED TO COLUMN - REAL BDIS0671
|
|
SBAR - AVERAGE LIQUID MOLAR VOLUME ON TRAY, CU. FT./MOL - BDIS0672
|
|
REAL ARRAY [0:M] BDIS0673
|
|
BDIS0674
|
|
THE REFERENCE PARAMETER IS BDIS0675
|
|
ERR1 - REFERENCE STATEMENT LABEL TO WHICH CONTROL IS BDIS0676
|
|
CHANGED IF THE TEMPERATURE LIMITS ARE EXCEEDED. BDIS0677
|
|
IN ADDITION, THE REAL ARRAYS HV, HL, PHLT, SBAR[0:M], BDIS0679
|
|
K, PKT, PHLX[0:M,0:N], TR1S1, TR2S2[0: IF (M>N-1 AND M>14)BDIS0680
|
|
THEN M ELSE IF 14>N-1 THEN 14 ELSE N-1], AND THE GLOBAL BDIS0681
|
|
ARRAYS OF KNGAA, HLIQ, HVPCOR, AND PHIPART ARE GLOBAL TO BDIS0682
|
|
THE TRANSIENT PROCEDURE. BDIS0683
|
|
BDIS0684
|
|
ALSO, THE OUTPUT FILE, FOUT1, MUST BE DECLARED GLOBAL TO BDIS0685
|
|
TRANSIENT. IT IS USED TO PRINT THE RESULTS. BDIS0686
|
|
BDIS0687
|
|
THE PROCEDURES PHIPART, HVPCOR, HLIQ, AND KNGAA BDIS0688
|
|
MUST BE DECLARED PRIOR TO TRANSIENT. PHIPART MUST BE BDIS0689
|
|
DECLARED PRIOR TO HVPCOR ; BDIS0690
|
|
BDIS0691
|
|
VALUE M, N, KEY, P, TC, PC, S, LIMIT, STOP, QM, POIR1, POIR2, R;BDIS0692
|
|
REAL P, STOP, QM, R, DELQ1, DELQM, DELD, SUMD, SUMR, POIR1 ; BDIS0693
|
|
INTEGER M, N, KEY ; BDIS0694
|
|
INTEGER POIR2 ; BDIS0695
|
|
REAL ARRAY TC, PC, S, LIMIT, HUM, T, D, DELL, SBAR, DELV[0], X, BDIS0696
|
|
Y[0,0] ; BDIS0697
|
|
LABEL ERR1 ; BDIS0698
|
|
BDIS0699
|
|
BEGIN BDIS0700
|
|
REAL DELT, DELHUM, TRS1, SUM, SUM1, SUM2, SUM3, SKEY, KKEY, DL,BDIS0701
|
|
DV, MHUMJ, ANI, XJI, KJI, HLJ, PRNT, MAXXIJ ; BDIS0702
|
|
INTEGER I, J, L, NM1, JP1, JM1, MM1, NP1 ; BDIS0703
|
|
BOOLEAN CALCPDC ; BDIS0704
|
|
LABEL TR1, TR2 ; BDIS0705
|
|
FORMAT OUT FIR1 (/ "PRINT-OUT OF INTERMEDIATE RESULTS IN THE ", BDIS0706
|
|
"TRANSIENT PROCEDURE" /), BDIS0707
|
|
FIR3 ("COLUMN IS RUN AT TOTAL REFLUX" // "MOLS OF REFLUX",BDIS0708
|
|
" TO BE RETURNED ", F15.2 / ), BDIS0709
|
|
FIR4 ("COLUMN IS RUN AT CONSTANT REFLUX" // "REFLUX ", BDIS0710
|
|
"RATIO, L1/D ", F26.2 // "MOLS OF DISTILLATE TO BE ",BDIS0711
|
|
"WITHDRAWN ", F10.2 / ), BDIS0712
|
|
FIR6 ("REBOILER HEAT DUTY, BTU/HOUR ", F16.2 /), BDIS0713
|
|
FIR7 ("X[J,I]:"), BDIS0714
|
|
FIR8 (8E15.5), BDIS0715
|
|
FIR9 ("HUM[J]:"), BDIS0716
|
|
FIR10 ("T[J]:"), BDIS0717
|
|
FIR11 ("DELL[J]:"), BDIS0718
|
|
FIR12 ("L[J]:"), BDIS0719
|
|
FIR13 ("DELV[J]:"), BDIS0720
|
|
FIR14 ("V[J]:"), BDIS0721
|
|
FIR15 ("DELQ1 = ", E15.5, " DELQM = ", E15.5), BDIS0722
|
|
FIR16 ("Q1 = ", E15.5, " QM = ", E15.5, X6), BDIS0723
|
|
FIR17 (X49, " SUMD = ", E12.5, " SUMR = ", E12.5, BDIS0724
|
|
" R = ", E12.5) ; BDIS0725
|
|
BDIS0726
|
|
COMMENT PRINT OUT PROBLEM SPECIFICATIONS IF POIR1 ! 0 ; BDIS0727
|
|
IF POIR1 ! 0 THEN BDIS0728
|
|
BEGIN BDIS0729
|
|
WRITE (FOUT1 [PAGE]) ; BDIS0730
|
|
WRITE (FOUT1, FIR1) ; BDIS0731
|
|
IF R > 1.0@10 THEN WRITE (FOUT1, FIR3, STOP) BDIS0732
|
|
ELSE WRITE (FOUT1, FIR4, R, STOP) ; BDIS0733
|
|
IF QM ! 0 THEN WRITE (FOUT1, FIR6, QM) BDIS0734
|
|
END OF PROBLEM SPECIFICATIONS PRINT OUT ; BDIS0735
|
|
BDIS0736
|
|
COMMENT CALCULATE K-RATIOS, ENTHALPIES, AVERAGE TRAY SPECIFIC BDIS0737
|
|
VOLUMES, AND VAPOR MOL FRACTIONS ; BDIS0738
|
|
SUMD ~ SUMR ~ PRNT ~ 0 ; BDIS0739
|
|
FOR I ~ 1 STEP 1 UNTIL N DO D[I] ~ 0 ; BDIS0740
|
|
MAXXIJ ~ 0.01 ; DELD ~ DELL[1] ~ 0.1 ; BDIS0741
|
|
CALCPDC ~ TRUE ; NM1 ~ N - 1 ; BDIS0742
|
|
NP1 ~ N + 1 ; MM1 ~ M - 1 ; SKEY ~ S[KEY] ; BDIS0743
|
|
TR1: FOR J ~ 1 STEP 1 UNTIL M DO BDIS0744
|
|
BEGIN BDIS0745
|
|
IF J = 2 THEN CALCPDC ~ FALSE ; BDIS0746
|
|
KNGAA (T[J], P, N, CALCPDC, TRUE, FALSE, K[J,*], PKT[J,*],BDIS0747
|
|
C) ; BDIS0748
|
|
HLIQ (N, T[J], X[J,*], HL[J], PHLX[J,*], PHLT[J]) ; BDIS0749
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0750
|
|
PHLX[J,I] ~ PHLX[J,I] - PHLX[J,KEY] ; BDIS0751
|
|
IF J ! M THEN BDIS0752
|
|
BEGIN BDIS0753
|
|
SUM ~ 0 ; FOR I ~ 1 STEP 1 UNTIL N DO BDIS0754
|
|
SUM ~ X[J,I] | S[I] + SUM ; BDIS0755
|
|
SBAR[J] ~ SUM BDIS0756
|
|
END OF SBAR CALCULATION ; BDIS0757
|
|
IF J ! 1 THEN BDIS0758
|
|
BEGIN BDIS0759
|
|
SUM ~ 0 ; FOR I ~ 1 STEP 1 UNTIL N DO BDIS0760
|
|
SUM ~ SUM + Y[J,I] ~ (K[J,I] | X[J,I]) ; BDIS0761
|
|
CALCDHV[1] ~ CALCDHV[2] ~ CALCDHV[3] ~ FALSE ; BDIS0762
|
|
HVPCOR (N, T[J], P, Y[J,*], CALCDHV, HV[J], TRS1, TRS1, BDIS0763
|
|
TR1S1) BDIS0764
|
|
END BDIS0765
|
|
END OF DATA CALCULATIONS ; BDIS0766
|
|
BDIS0767
|
|
COMMENT CONDENSER CALCULATIONS ; BDIS0768
|
|
TRS1 ~ HUM[2] / (900.0 | (1.0 + R) | MAXXIJ) ; BDIS0769
|
|
IF R { 1.0@10 THEN BDIS0770
|
|
BEGIN BDIS0771
|
|
IF TRS1 > 1.1 | DELD THEN DELD ~ 1.1 | DELD BDIS0772
|
|
ELSE DELD ~ TRS1 ; BDIS0773
|
|
SUMD ~ SUMD + DELD ; DELL[1] ~ R | DELD ; BDIS0774
|
|
FOR I ~ 1 STEP 1 UNTIL N DO D[I] ~ D[I] + X[1,I] | DELD BDIS0775
|
|
END BDIS0776
|
|
ELSE BDIS0777
|
|
BEGIN BDIS0778
|
|
IF TRS1 > 1.1 | DELL[1] THEN DELL [1] ~ 1.1 | DELL[1] BDIS0779
|
|
ELSE DELL[1] ~ TRS1 ; DELD ~ 0 BDIS0780
|
|
END ; BDIS0781
|
|
MAXXIJ ~ 0 ; BDIS0782
|
|
SUM ~ 0 ; SUMR ~ DELL[1] + SUMR ; BDIS0783
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0784
|
|
SUM ~ (Y[2,I] - X[1,I]) | (S[I] - SKEY) + SUM ; BDIS0785
|
|
DELHUM ~ - (DELD + DELL[1]) | SUM / (SBAR[1] + SUM) ; BDIS0786
|
|
DELV[2] ~ DELD + DELL[1] + DELHUM ; BDIS0787
|
|
SUM ~ SUM1 ~ SUM2 ~ SUM3 ~ 0 ; BDIS0788
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0789
|
|
BEGIN BDIS0790
|
|
IF I ! KEY THEN BDIS0791
|
|
BEGIN BDIS0792
|
|
SUM ~ SUM + TR1S1[I] ~ ((Y[2,I] - X[1,I]) | DELV[2] / BDIS0793
|
|
HUM[1]) ; BDIS0794
|
|
SUM1 ~ TR1S1[I] | (K[1,KEY] - K[1,I]) + SUM1 ; BDIS0795
|
|
SUM3 ~ PHLX[1,I] | TR1S1[I] + SUM3 BDIS0796
|
|
END ; BDIS0797
|
|
SUM2 ~ PKT[1,I] | X[1,I] + SUM2 BDIS0798
|
|
END ; BDIS0799
|
|
TR1S1[KEY] ~ - SUM ; DELT ~ SUM1 / SUM2 ; BDIS0800
|
|
DELQ1 ~ DELV[2] | (HV[2] - HL[1]) - HUM[1] | PHLT[1] | BDIS0801
|
|
DELT - HUM[1] | SUM3 ; BDIS0802
|
|
HUM[1] ~ HUM[1] + DELHUM ; T[1] ~ T[1] + DELT ; BDIS0803
|
|
FOR I ~ 1 STEP 1 UNTIL N DO X[1,I] ~ X[1,I] + TR1S1[I] ;BDIS0804
|
|
BDIS0805
|
|
COMMENT CALCULATIONS FOR TRAYS 2, 3, - - -, M-1 ; BDIS0806
|
|
FOR J ~ 2 STEP 1 UNTIL MM1 DO BDIS0807
|
|
BEGIN BDIS0808
|
|
KKEY ~ K[J,KEY] ; DV ~ DELV[J] ; MHUMJ ~ - HUM[J];BDIS0809
|
|
JP1 ~ J + 1 ; JM1 ~ J - 1 ; DL ~ DELL[JM1] ; BDIS0810
|
|
SUM3 ~ 0 ; FOR I ~ 1 STEP 1 UNTIL N DO BDIS0811
|
|
SUM3 ~ X[J,I] | PKT[J,I] + SUM3 ; BDIS0812
|
|
TRS1 ~ PHLT[J] / SUM3 ; BDIS0813
|
|
SUM ~ SUM1 ~ 0 ; HLJ ~ HL[J] ; BDIS0814
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0815
|
|
BEGIN BDIS0816
|
|
XJI ~ X[J,I] ; KJI ~ K[J,I] ; BDIS0817
|
|
ANI ~ (PHLX[J,I] + (KKEY - KJI) | TRS1) | MHUMJ ; BDIS0818
|
|
SUM ~ (TR1S1[I] ~ ((XJI - X[JM1,I] + TR1S1[I]) | DL + BDIS0819
|
|
(KJI - 1.0) | DV | XJI)) | ANI + SUM ; BDIS0820
|
|
SUM1 ~ (TR1S2[I] ~ (Y[JP1,I] - XJI)) | ANI + SUM1 BDIS0821
|
|
END ; BDIS0822
|
|
DELV[JP1] ~ ((HV[J] - HLJ) | DV + (HLJ - HL[JM1]) | DL - BDIS0823
|
|
SUM / MHUMJ) / ((HV[JP1] - HLJ) - SUM1 / MHUMJ) ; BDIS0824
|
|
SUM ~ 0 ; BDIS0825
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0826
|
|
BEGIN BDIS0827
|
|
SUM ~ SUM + TR1S1[I] ~ ((TR1S1[I] - TR1S2[I] | DELV[JP1]) BDIS0828
|
|
/ MHUMJ) ; BDIS0829
|
|
X[J,I] ~ X[J,I] + TR1S1[I] BDIS0830
|
|
END ; BDIS0831
|
|
X[J,KEY] ~ X[J,KEY] + TR1S1[KEY] ~ (-SUM) ; BDIS0832
|
|
SUM ~ SUM1 ~ 0 ; BDIS0833
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0834
|
|
BEGIN BDIS0835
|
|
IF TR1S1[I] > MAXXIJ THEN MAXXIJ ~ TR1S1[I] ; BDIS0836
|
|
IF I ! KEY THEN BDIS0837
|
|
BEGIN BDIS0838
|
|
SUM ~ TR1S1[I] | (S[I] - SKEY) + SUM ; BDIS0839
|
|
SUM1 ~ TR1S1[I] | (KKEY - K[J,I]) + SUM1 BDIS0840
|
|
END BDIS0841
|
|
END ; BDIS0842
|
|
DELL[J] ~ HUM[J] | SUM / SBAR[J] + DELV[JP1] + DL - DV ; BDIS0843
|
|
HUM[J] ~ HUM[J] + DELV[JP1] - DELL[J] - DV + DL ; BDIS0844
|
|
T[J] ~ T[J] + SUM1 / SUM3 BDIS0845
|
|
END OF TRAY CALCULATIONS ; BDIS0846
|
|
BDIS0847
|
|
COMMENT REBOILER CALCULATIONS ; BDIS0848
|
|
DELHUM ~ DELL[MM1] - DELV[M] ; BDIS0849
|
|
SUM ~ SUM3 ~ 0 ; BDIS0850
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS0851
|
|
BEGIN BDIS0852
|
|
SUM3 ~ X[M,I] | PKT[M,I] + SUM3 ; BDIS0853
|
|
IF I ! KEY THEN BDIS0854
|
|
BEGIN BDIS0855
|
|
SUM ~ SUM + TR1S1[I] ~ (((X[MM1,I] - TR1S1[I] - X[M,I]) | BDIS0856
|
|
DELL[MM1] + (1.0 - K[M,I]) | X[M,I] | DELV[M]) / HUM[M]) ;BDIS0857
|
|
X[M,I] ~ X[M,I] + TR1S1[I] BDIS0858
|
|
END BDIS0859
|
|
END ; BDIS0860
|
|
X[M,KEY] ~ X[M,KEY] - SUM ; BDIS0861
|
|
SUM ~ SUM1 ~ 0 ; BDIS0862
|
|
FOR I ~ 1 STEP 1 UNTIL N DO IF I ! KEY THEN BDIS0863
|
|
BEGIN BDIS0864
|
|
SUM ~ (K[M,KEY] - K[M,I]) | TR1S1[I] + SUM ; BDIS0865
|
|
SUM1 ~ PHLX[M,I] | TR1S1[I] + SUM1 BDIS0866
|
|
END ; BDIS0867
|
|
T[J] ~ T[J] + DELT ~ (SUM / SUM3) ; BDIS0868
|
|
DELQM ~ (PHLT[M] | DELT + SUM1) | HUM[M] + HV[M] | DELV[M]BDIS0869
|
|
+ HL[M] | DELHUM - HL[MM1] | DELL[MM1] ; BDIS0870
|
|
HUM[M] ~ HUM[M] + DELHUM ; BDIS0871
|
|
BDIS0872
|
|
COMMENT PRINT OUT INTERMEDIATE RESULTS IF POIR1 ! 0 ; BDIS0873
|
|
IF POIR1 ! 0 THEN BDIS0874
|
|
IF (PRNT ~ (PRNT + (IF R{1.0@10 THEN DELD ELSE DELL[1]))) BDIS0875
|
|
} POIR1 THEN BDIS0876
|
|
BEGIN BDIS0877
|
|
WRITE (FOUT1 [DBL]) ; BDIS0878
|
|
PRNT ~ 0 ; BDIS0879
|
|
IF POIR2 = 1 THEN BDIS0880
|
|
BEGIN BDIS0881
|
|
WRITE (FOUT1, FIR7) ; FOR J ~ 1 STEP 1 UNTIL M DO BDIS0882
|
|
WRITE (FOUT1, FIR8, FOR I ~ 1 STEP 1 UNTIL N DO X[J,I]) BDIS0883
|
|
END ; BDIS0884
|
|
TRS1 ~ DELQ1 | QM / DELQM ; BDIS0885
|
|
IF QM ! 0 THEN WRITE (FOUT1[NO], FIR16, TRS1, QM) BDIS0886
|
|
ELSE WRITE (FOUT1[NO], FIR15, DELQ1, DELQM) ; BDIS0887
|
|
WRITE (FOUT1, FIR17, SUMD, SUMR, R) ; BDIS0888
|
|
WRITE (FOUT1, FIR9) ; BDIS0889
|
|
WRITE (FOUT1, FIR8, FOR J ~ 1 STEP 1 UNTIL M DO HUM[J]) ;BDIS0890
|
|
WRITE (FOUT1, FIR10) ; BDIS0891
|
|
WRITE (FOUT1, FIR8, FOR J ~ 1 STEP 1 UNTIL M DO T[J]) ; BDIS0892
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS0893
|
|
IF QM ! 0 THEN BDIS0894
|
|
BEGIN BDIS0895
|
|
TR1S1[J] ~ DELL[J] | QM / DELQM ; BDIS0896
|
|
TR1S2[J] ~ DELV[J] | QM / DELQM BDIS0897
|
|
END BDIS0898
|
|
ELSE BDIS0899
|
|
BEGIN BDIS0900
|
|
TR1S1[J] ~ DELL[J] ; BDIS0901
|
|
TR1S2[J] ~ DELV[J] BDIS0902
|
|
END ; BDIS0903
|
|
IF QM ! 0 THEN WRITE (FOUT1, FIR12) BDIS0904
|
|
ELSE WRITE (FOUT1, FIR11) ; BDIS0905
|
|
WRITE (FOUT1, FIR8, FOR J ~ 1 STEP 1 UNTIL M DO TR1S1[J]);BDIS0906
|
|
IF QM ! 0 THEN WRITE (FOUT1, FIR14) BDIS0907
|
|
ELSE WRITE (FOUT1, FIR13) ; BDIS0908
|
|
WRITE (FOUT1, FIR8, FOR J ~ 1 STEP 1 UNTIL M DO TR1S2[J]) BDIS0909
|
|
END OF INTERMEDIATE PRINT OUT ; BDIS0910
|
|
BDIS0911
|
|
COMMENT TEST FOR EXIT FROM THE PROCEDURE ; BDIS0912
|
|
IF R { 1.0@10 THEN SUM ~ SUMD ELSE SUM ~ SUMR ; BDIS0913
|
|
IF SUM } STOP THEN GO TO TR2 BDIS0914
|
|
ELSE GO TO TR1 ; BDIS0915
|
|
BDIS0916
|
|
TR2: END OF TRANSIENT PROCECURE ; BDIS0917
|
|
BDIS0918
|
|
COMMENT READ IN COMPONENT FEED MOLS ; BDIS0919
|
|
READ (FIN1, /, READF) ; BDIS0920
|
|
IF READF = 1 THEN BDIS0921
|
|
READ (FIN1, /, FOR I ~ 1 STEP 1 UNTIL N DO [F[I]] ) ; BDIS0922
|
|
BDIS0923
|
|
COMMENT READ IN TRAY HOLDUP VOLUMES ; BDIS0924
|
|
READ (FIN1, /, READH) ; BDIS0925
|
|
IF READH = 1 THEN BDIS0926
|
|
READ (FIN1, /, FOR J ~ 1 STEP 1 UNTIL M - 1 DO [HUV[J]]); BDIS0927
|
|
BDIS0928
|
|
COMMENT READ IN INITIAL ESTIMATES ; BDIS0929
|
|
READ (FIN1, /, READIE) ; BDIS0930
|
|
IF READIE = 1 THEN BDIS0931
|
|
READ (FIN1, /, HUM[M], FOR I ~ 1 STEP 1 UNTIL N DO BDIS0932
|
|
[X[M,I]], T[1], T[M] ) ; BDIS0933
|
|
BDIS0934
|
|
COMMENT ASSIGN VALUES TO DATA WHICH ARE NOT SPECIFIED ; BDIS0935
|
|
IF MAXIT = 0 THEN MAXIT ~ 10 ; BDIS0936
|
|
IF TOL[1] = 0 THEN TOL[1] ~ 0.2 ; BDIS0937
|
|
IF TOL[2] = 0 THEN TOL[2] ~ 0.1 ; BDIS0938
|
|
IF TOL[3] = 0 THEN TOL[3] ~ 0.1 ; BDIS0939
|
|
IF LIMIT[1] = 0 AND LIMIT[2] = 0 THEN BDIS0940
|
|
BEGIN BDIS0941
|
|
LIMIT[1] ~ -100.0 ; LIMIT[2] ~ 500.0 BDIS0942
|
|
END ; BDIS0943
|
|
F[0] ~ 0 ; FOR I ~ 1 STEP 1 UNTIL N DO BDIS0944
|
|
F[0] ~ F[I] + F[0] ; BDIS0945
|
|
TDIFF ~ (T[M] - T[1]) / (M - 1) ; BDIS0946
|
|
FOR J ~ M - 1 STEP - 1 UNTIL 1 DO T[J] ~ T[J+1] - TDIFF;BDIS0947
|
|
BDIS0948
|
|
COMMENT PRINT OUT PROBLEM DATA IF POPD = 1 ; BDIS0949
|
|
IF POPD = 1 THEN BDIS0950
|
|
BEGIN BDIS0951
|
|
WRITE (FOUT1[PAGE]); BDIS0952
|
|
WRITE (FOUT1,FID1, IDNO, FOR I ~ 1 STEP 1 UNTIL 12 DO BDIS0953
|
|
ID[I], M, P, N, TOL[1], KEY, TOL[2], MAXIT, TOL[3], BDIS0954
|
|
LIMIT[1], LIMIT[2], SPEC[1], SPEC[2]) ; BDIS0955
|
|
WRITE (FOUT1, FID5, HUM[M], T[1], T[M] ) ; BDIS0956
|
|
I ~ 1 ; BDIS0957
|
|
BD2: IF I { N AND I { M THEN BDIS0958
|
|
WRITE (FOUT1, FID6, I, F[I], X[M,I], I, HUV[I] ) BDIS0959
|
|
ELSE IF I { N AND I > M THEN BDIS0960
|
|
WRITE (FOUT1, FID7, I, F[I], X[M,I] ) BDIS0961
|
|
ELSE WRITE (FOUT1, FID8, I, HUV[I] ) ; BDIS0962
|
|
IF I ~ I + 1 { N OR I { M-1 THEN GO TO BD2 BDIS0963
|
|
END ; BDIS0964
|
|
BDIS0965
|
|
COMMENT READ IN COMPONENT PHYSICAL PROPERTY DATA ; BDIS0966
|
|
READ (FIN1, /, READCD) ; BDIS0967
|
|
IF READCD = 1 THEN BDIS0968
|
|
BEGIN BDIS0969
|
|
READ (FIN1, FNAME, FOR I ~ 1 STEP 1 UNTIL N DO BDIS0970
|
|
[NAME1[I], NAME2[I], TC[I], PC[I], S[I] ] ) ; BDIS0971
|
|
READ (FIN1, FKH, FOR I ~ 1 STEP 1 UNTIL N DO BDIS0972
|
|
FOR J ~ 1,2,3,4,5,6,7 DO [KC1[I,4|J-3], KC1[I,4|J-2], BDIS0973
|
|
KC1[I,4|J-1], KC1[I,4|J], AK[I,J,1], AK[I,J,2],AK[I,J,3]],BDIS0974
|
|
FOR I ~ 1 STEP 1 UNTIL N DO [FOR J~1,2,3,4 DO HVC1[I,J], BDIS0975
|
|
AHV[I,1], AHV[I,2], AHV[I,3] ], BDIS0976
|
|
FOR I ~ 1 STEP 1 UNTIL N DO [FOR J~1,2,3,4 DO HLC5[I,J], BDIS0977
|
|
AHL[I,1], AHL[I,2], AHL[I,3] ]) BDIS0978
|
|
END ; BDIS0979
|
|
BDIS0980
|
|
COMMENT PRINT OUT COMPONENT DATA IF POCD = 1 ; BDIS0981
|
|
IF POCD = 1 THEN BDIS0982
|
|
BEGIN BDIS0983
|
|
WRITE (FOUT1, FID9, FOR I ~ 1 STEP 1 UNTIL N DO BDIS0984
|
|
[NAME1[I], NAME2[I], TC[I], PC[I], S[I], BDIS0985
|
|
FOR J ~ 1,2,3,4,5,6,7 DO [KC1[I,4|J-3], KC1[I,4|J-2], BDIS0986
|
|
KC1[I,4|J-1], KC1[I,4|J], AK[I,J,1], AK[I,J,2],AK[I,J,3]],BDIS0987
|
|
FOR J ~ 1,2,3,4 DO HVC1[I,J], AHV[I,1], AHV[I,2],AHV[I,3],BDIS0988
|
|
FOR J ~ 1,2,3,4 DO HLC5[I,J], AHL[I,1],AHL[I,2],AHL[I,3]])BDIS0989
|
|
END ; BDIS0990
|
|
BDIS0991
|
|
COMMENT ENTER THE STARTUP PROCEDURE TO CALCULATE THE STEADY-STATE BDIS0992
|
|
CONDITIONS AT TOTAL REFLUX ; BDIS0993
|
|
STARTUP (M, N, KEY, P, F, S, HUV, TOL, LIMIT, MAXIT, POIR,BDIS0994
|
|
T, HUM, X, ERR1, ERR2) ; BDIS0995
|
|
BDIS0996
|
|
COMMENT PRINT THE STEADY-STATE CONDITIONS AT TOTAL REFLUX ; BDIS0997
|
|
WRITE (FOUT1 [PAGE] ) ; BDIS0998
|
|
WRITE (FOUT1, FSS1, IDNO, FOR I ~ 1 STEP 1 UNTIL 12 DO BDIS0999
|
|
ID[I], FOR J ~ 1 STEP 1 UNTIL M DO T[J] ) ; BDIS1000
|
|
WRITE (FOUT1, FSS2, FOR J ~ 1 STEP 1 UNTIL M DO HUM[J] ) ;BDIS1001
|
|
WRITE (FOUT1, FSS3) ; FOR J ~ 1 STEP 1 UNTIL M DO BDIS1002
|
|
WRITE (FOUT1, FSS4, FOR I ~ 1 STEP 1 UNTIL N DO X[J,I]); BDIS1003
|
|
BDIS1004
|
|
COMMENT PRELIMINARY CALCULATIONS FOR THE TRANSIENT CONDITIONS ; BDIS1005
|
|
STOP ~ SPEC[1] | F[0] | 0.01 ; BDIS1006
|
|
R ~ SPEC[2] ; BDIS1007
|
|
POIR1 ~ STOP / (IPOIR1 + 0.99) ; BDIS1008
|
|
BDIS1009
|
|
COMMENT ENTER THE TRANSIENT PROCEDURE TO CALCULATE THE TRANSIENT BDIS1010
|
|
CONDITIONS ; BDIS1011
|
|
TRANSIENT (M, N, KEY, P, TC, PC, S, LIMIT, STOP, QM, BDIS1012
|
|
POIR1, POIR2, R, HUM, T, X, Y, DELL, DELV, DELQ1, DELQM, BDIS1013
|
|
DELD, D, SUMD, SUMR, SBAR, ERR3) ; BDIS1014
|
|
BDIS1015
|
|
COMMENT PRINT THE FINAL RESULTS ; BDIS1016
|
|
WRITE (FOUT1 [PAGE] ) ; BDIS1017
|
|
DATE (MONTH, DAY, YEAR) ; BDIS1018
|
|
ELMIN ~ (ELSEC ~ (TIME(1) - STIME1)) DIV 3600 ; BDIS1019
|
|
ELSEC ~ (ELSEC DIV 60) MOD 60 ; BDIS1020
|
|
PRMIN ~ (PRSEC ~ (TIME(2) - STIME2)) DIV 3600 ; BDIS1021
|
|
PRSEC ~ (PRSEC DIV 60) MOD 60 ; BDIS1022
|
|
IOMIN ~ (IOSEC ~ (TIME(3) - STIME3)) DIV 3600 ; BDIS1023
|
|
IOSEC ~ (IOSEC DIV 60) MOD 60 ; BDIS1024
|
|
WRITE (FOUT1, FFP1, IDNO, FOR I ~ 1 STEP 1 UNTIL 12 DO BDIS1025
|
|
ID[I], MONTH, DAY, YEAR, ELMIN, ELSEC, PRMIN, PRSEC, BDIS1026
|
|
IOMIN, IOSEC) ; BDIS1027
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS1028
|
|
BEGIN BDIS1029
|
|
TR1S1[1] ~ TR1S1[2] ~ 0 ; BDIS1030
|
|
TR1S2[J] ~ HUM[J] | SBAR[J] ; BDIS1031
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS1032
|
|
BEGIN BDIS1033
|
|
TR1S1[1] ~ TR1S1[1] + X[J,I] ; BDIS1034
|
|
TR1S1[2] ~ TR1S1[2] + Y[J,I] BDIS1035
|
|
END ; BDIS1036
|
|
WRITE ( FOUT1, FFP2, J, T[J], HUM[J], TR1S2[J], TR1S1[1], BDIS1037
|
|
TR1S1[2]) BDIS1038
|
|
END ; BDIS1039
|
|
TR1S1[0] ~ 0 ; FOR I ~ 1 STEP 1 UNTIL N DO BDIS1040
|
|
TR1S1[0] ~ TR1S1[0] + D[I] ; BDIS1041
|
|
FOR I ~ 1 STEP 1 UNTIL N DO BDIS1042
|
|
TR1S1[I] ~ D[I] / TR1S1[0] ; BDIS1043
|
|
WRITE (FOUT1, FFP3, SUMD, FOR I ~ 1 STEP 1 UNTIL N DO BDIS1044
|
|
TR1S1[I]) ; BDIS1045
|
|
WRITE (FOUT1, FFP4, FOR I ~ 1 STEP 1 UNTIL N DO D[I] ) ; BDIS1046
|
|
WRITE (FOUT1, FFP5) ; BDIS1047
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS1048
|
|
WRITE (FOUT1, FFP6, FOR I ~ 1 STEP 1 UNTIL N DO X[J,I] ); BDIS1049
|
|
WRITE (FOUT1, FFP7) ; BDIS1050
|
|
FOR J ~ 1 STEP 1 UNTIL M DO BDIS1051
|
|
WRITE (FOUT1, FFP6, FOR I ~ 1 STEP 1 UNTIL N DO Y[J,I]); BDIS1052
|
|
BDIS1053
|
|
COMMENT RECYCLE TO READ IN NEXT PROBLEM ; BDIS1054
|
|
GO TO BD1 ; BDIS1055
|
|
BDIS1056
|
|
COMMENT PRINT OUT ERROR MESSAGES; BDIS1057
|
|
ERR1: WRITE (FOUT1, FERR) ; WRITE (FOUT1, FERR1) ; BDIS1058
|
|
GO TO BD1 ; BDIS1059
|
|
ERR2: WRITE (FOUT1, FERR) ; WRITE (FOUT1, FERR2) ; BDIS1060
|
|
GO TO BD1 ; BDIS1061
|
|
ERR3: WRITE (FOUT1, FERR) ; WRITE (FOUT1, FERR3) ; BDIS1062
|
|
GO BD1 BDIS1063
|
|
BDIS1064
|
|
END OF BLOCK 2 OF PROGRAM ; BDIS1065
|
|
BDIS1066
|
|
COMMENT THIS IS THE END OF THE BATCH DISTILLATION PROGRAM ; BDIS1067
|
|
EOFCARD: END. BDIS1068
|
|
"PROBLEM USED IN MEADOWS PAPER "ID1, / DATA SET 1, PROBLEM DATA
|
|
"7 TRAYS, 4 COMPONENTS " ID2,
|
|
1 PRONO, 7 M, 4 N, 2 KEY,20 MAXIT, 100.0 P, 0 TOLT, 0 TOLX, 0 TOLH,
|
|
0 LLIMIT, 0 ULIMIT, 1 POPD, 1 POCD, 1 POIR, 3 POIR1, 1 POIR2, 0 QM,
|
|
80.43 SPEC1: % WITHDRAWN, 5.0 SPEC2: L1/D,
|
|
1 READF, / DATA SET 2, FEED DATA
|
|
50.0, 50.0, 50.0, 50.0, / COMPONENT FEED MOLS
|
|
1 READH, / DATA SET 3, TRAY DATA
|
|
10.5, 10.5, 10.5, 10.5, 10.5, 10.5 , TRAY HOLDUP VOLUME, CU. FT.
|
|
1 READIE, / DATA SET 4, INITIAL ESTIMATES
|
|
160.0 HUM[M],
|
|
0.1, 0.2, 0.3, 0.4, / X[M,I]
|
|
100.0 T[1], 200.0 T[M],
|
|
1 READCD, / DATA SET5, COMPONENT DATA
|
|
NC4 765.22 550.7 1.6
|
|
NC5 845.52 489.5 1.84
|
|
IC5 829.6 483.0 1.86
|
|
C6 914.1 439.7 2.08
|
|
-0.14609524@ 03 0.17442830@ 04 -0.88504047@ 04 0.23172909@ 05*CP# 5000NC4 1
|
|
-0.32904241@ 05 0.24047149@ 05 -0.70717229@ 04 0.51791307@ 03*CP# 5000NC4 2
|
|
-0.60967471@ 04 0.30280354@ 05 -0.77393885@ 05 0.10670547@ 06*CP# 5000NC4 3
|
|
-0.75224715@ 05 0.21217935@ 05 -0.63796025@ 03 0.75662458@ 04*CP# 5000NC4 4
|
|
-0.36863956@ 05 0.92089775@ 05 -0.12320518@ 06 0.83414815@ 05*CP# 5000NC4 5
|
|
-0.22305445@ 05 0.28216774@ 03 -0.33359564@ 04 0.16069058@ 05*CP# 5000NC4 6
|
|
-0.39576618@ 05 0.51906262@ 05 -0.34121151@ 05 0.87318732@ 04*CP# 5000NC4 7
|
|
-0.10371977@ 03 0.10966453@ 04 -0.50722388@ 04 0.11754639@ 05*CP# 5000NC5 1
|
|
-0.14127402@ 05 0.81845946@ 04 -0.16956204@ 04 0.24380242@ 03*CP# 5000NC5 2
|
|
-0.21492877@ 04 0.78892828@ 04 -0.11607237@ 05 0.14031742@ 04*CP# 5000NC5 3
|
|
0.11581226@ 05 -0.75607267@ 04 -0.10736680@ 03 0.10561029@ 03*CP# 5000NC5 4
|
|
0.47752449@ 04 -0.28152337@ 05 0.65978843@ 05 -0.70069589@ 05*CP# 5000NC5 5
|
|
0.27856453@ 05 -0.24754430@ 02 0.93370388@ 03 -0.75623480@ 04*CP# 5000NC5 6
|
|
0.28002344@ 05 -0.53335958@ 05 0.50426510@ 05 -0.18653917@ 05*CP# 5000NC5 7
|
|
-0.18305484@ 03 0.21777317@ 04 -0.10945974@ 05 0.28287761@ 05*CP# 5000IC5 1
|
|
-0.39608830@ 05 0.28559400@ 05 -0.82940554@ 04 0.56296145@ 03*CP# 5000IC5 2
|
|
-0.65170005@ 04 0.31723596@ 05 -0.78882897@ 05 0.10528309@ 06*CP# 5000IC5 3
|
|
-0.71581396@ 05 0.19388801@ 05 -0.52509215@ 03 0.58763885@ 04*CP# 5000IC5 4
|
|
-0.26930887@ 05 0.61721460@ 05 -0.73163112@ 05 0.41517839@ 05*CP# 5000IC5 5
|
|
-0.83467070@ 04 0.15132424@ 03 -0.15333466@ 04 0.61208267@ 04*CP# 5000IC5 6
|
|
-0.11000576@ 05 0.72440636@ 04 0.17474641@ 04 -0.28406992@ 04*CP# 5000IC5 7
|
|
-0.38164575@ 03 0.46951509@ 04 -0.23870067@ 05 0.62677434@ 05*CP# 5000NC6 1
|
|
-0.89570741@ 05 0.66094338@ 05 -0.19686499@ 05 0.14660147@ 04*CP# 5000NC6 2
|
|
-0.18043894@ 05 0.90946557@ 05 -0.23662909@ 06 0.33485551@ 06*CP# 5000NC6 3
|
|
-0.24446629@ 06 0.72025953@ 05 -0.18285795@ 04 0.22547523@ 05*CP# 5000NC6 4
|
|
-0.11260287@ 06 0.29003841@ 06 -0.40580315@ 06 0.29239302@ 06*CP# 5000NC6 5
|
|
-0.84860607@ 05 0.76121690@ 03 -0.93390473@ 04 0.46228269@ 05*CP# 5000NC6 6
|
|
-0.11790527@ 06 0.16309981@ 06 -0.11591202@ 06 0.33082319@ 05*CP# 5000NC6 7
|
|
0.15675143@ 05 0.21864464@ 02 0.16089416@-01 -0.17931083@-05 HVC1 - N-C4H10
|
|
0.19066847@ 05 0.26819218@ 02 0.20174027@-01 -0.24417899@-05 HVC1 - N-C5H12
|
|
0.18635740@ 05 0.26220114@ 02 0.21312870@-01 -0.28625929@-05 HVC1 ISO-C5H12
|
|
0.21965245@ 05 0.31947241@ 02 0.24589594@-01 -0.34057931@-05 HVC1 - C6H14
|
|
0.56381802@ 04 0.32156941@ 02 0.18464268@-01 -0.66078112@-05 HLC5 - N-C4H10
|
|
0.66969614@ 04 0.38053567@ 02 0.22532208@-01 -0.66454438@-05
|
|
0.66009918@ 04 0.37564035@ 02 0.21591715@-01 -0.56235172@-05 HLC5 ISO-C5H12
|
|
0.76972475@ 04 0.44516063@ 02 0.27030713@-01 -0.75881413@-05 HLC5 - C6H14
|