***************************************************************** *** Chapter 14 *** Section: Locating All Homogeneous Azeotropes *** Test Problem 5 *** *** NRTL equation *** Methanol -- Benzene -- i-Propanol -- n-Propanol ***************************************************************** SET i variables /1*5/ alias(i,j) alias(i,l); SCALARS n number of components /4/ PARAMETERS aa(i), bb(i), cc(i), ll(i,j), v(i), P, t0, Rg, zi(i), templow, temphigh, sel(i), dummy, alpha(i,j), a0(i,j), tt(i,j), g(i,j), zlbd(i), zubd(i), zc(i), sorty(i,j), sortw(i,j); * * Select which components participate * sel('1') =0; sel('2') =1; sel('3') =0; sel('4') =1; * * P Pressure * P = 1*760; *t0 = 89.91+273.15; t0 = 80+273.15; Rg = 1.98721; * * Antoine equation parameters * aa('1') = 8.08097*LOG(10); bb('1') = 1582.271*LOG(10); cc('1') = 239.726; aa('2') = 6.87987*LOG(10); bb('2') = 1196.760*LOG(10); cc('2') = 219.161; aa('3') = 8.87829*LOG(10); bb('3') = 2010.330*LOG(10); cc('3') = 252.636; aa('4') = 8.37895*LOG(10); bb('4') = 1788.020*LOG(10); cc('4') = 227.438; * * NRTL parameters * a0('1','2') = 28.8819; a0('2','1') = -484.3856; a0('1','3') = -137.8776; a0('3','1') = 66.8301; a0('1','4') = 24.9003; a0('4','1') = 9.5349; a0('2','3') = 728.6353; a0('3','2') = 366.6632; a0('2','4') = 874.2419; a0('4','2') = 285.7774; a0('3','4') = -673.7647; a0('4','3') = 991.7833; alpha(i,i) = 0; alpha('1','2') = 0.3; alpha('2','1') = 0.3; alpha('1','3') = 0.3028; alpha('3','1') = 0.3028; alpha('1','4') = 0.3011; alpha('4','1') = 0.3011; alpha('2','4') = 0.2899; alpha('4','2') = 0.2899; alpha('2','3') = 0.291; alpha('3','2') = 0.291; alpha('3','4') = 0.2978; alpha('4','3') = 0.2978; tt(i,i) = 0; LOOP((i,j)$((ord(i) le n) and (ord(j) le n) and (ord(i) ne ord(j))), tt(i,j) = a0(i,j)/(Rg*t0); ); * * g(i,i) = 1; LOOP((i,j)$((ord(i) le n) and (ord(j) le n) and (ord(i) ne ord(j))), g(i,j) = EXP(-alpha(i,j)*tt(i,j)); ); templow = 0; temphigh = 100; * * set variable bounds LOOP(i$sel(i), zlbd(i) = 0; zubd(i) = 1; ); LOOP(i$(ord(i) gt n), zlbd(i) = templow; zubd(i) = temphigh ); ************************************************************** * z(i) = mole fractions and temperature * ub = objective value * a = slack variable VARIABLES z(i), ub, a; POSITIVE VARIABLE a; ************************************************************** * obj = objective (minimize maximum equality constraint violation * eq1(i) = equilibrium constraint 1 * eq2(i) = equilibrium constraint 2 * sumi = mole fractions sum to 1 EQUATIONS obj eq1(i) Equilibrium eq2(i) Equilibrium sumi; obj.. ub =e= a; eq1(i)$sel(i).. SUM(j$sel(j), tt(j,i)*g(j,i)*z(j))/SUM(j$sel(j), g(j,i)*z(j)) +SUM(j$sel(j), tt(i,j)*g(i,j)*z(j)/SUM(l$sel(l), g(l,j)*z(l))) -SUM(j$sel(j), g(i,j)*z(j)*SUM(l$sel(l), tt(l,j)*g(l,j)*z(l)) /SQR(SUM(l$sel(l), g(l,j)*z(l)))) -bb(i)/(SUM(j$(ord(j) gt n), z(j)) + cc(i)) +(aa(i) - LOG(P)) - a =l= 0; eq2(i)$sel(i).. -SUM(j$sel(j), tt(j,i)*g(j,i)*z(j))/SUM(j$sel(j),g(j,i)*z(j)) -SUM(j$sel(j), tt(i,j)*g(i,j)*z(j)/SUM(l$sel(l), g(l,j)*z(l))) +SUM(j$sel(j), g(i,j)*z(j)*SUM(l$sel(l), tt(l,j)*g(l,j)*z(l)) /SQR(SUM(l$sel(l), g(l,j)*z(l)))) +bb(i)/(SUM(j$(ord(j) gt n), z(j)) + cc(i)) -(aa(i) - LOG(P)) - a =l= 0; sumi.. SUM(i$sel(i), z(i)) =e= 1; *----------------------------------------------------------------------- MODEL nrtl / obj, eq1, eq2, sumi /; a.lo = 0.0; z.l('1') = 0.063; z.lo('1') = 0.000001; z.up('1') = 1.0; z.l('2') = 0.937; z.lo('2') = 0.000001; z.up('2') = 1.0; z.l('3') = 0.000001; z.lo('3') = 0.000001; z.up('3') = 1.0; z.l('4') = 0.000001; z.lo('4') = 0.000001; z.up('4') = 1.0; z.l('5') = 80.166; z.lo('5') = 60.0; z.up('5') = 100.0; SOLVE nrtl USING nlp MINIMIZING ub;