***************************************************************** *** Chapter 14 *** Section: Locating All Homogeneous Azeotropes *** Test Problem 2 *** *** Wilson equation *** Methanol -- Benzene -- i-Propanol -- n-Propanol ***************************************************************** SET i variables /1*5/ alias(i,j) alias(i,k); SCALARS n number of components /4/ ******************************************************************** * P = pressure (mmHg) * Rg = gas constant * t0 = reference temperature * aa(i), bb(i), cc(i) = Antoine parameters * v(i) = liquid densities * a0(i,j), ll(i,j) = binary interaction parameters * zlbd(i), zubd(i), templow, temphigh = bounds on variables PARAMETERS aa(i), bb(i), cc(i), a0(i,j), ll(i,j), v(i), P, t0, Rg, zlbd(i), zubd(i), templow, temphigh, sel(i); * * Select which components participate * sel('1') =1; sel('2') =1; sel('3') =0; sel('4') =0; *sel('5') corresponds to temperature, should always be 0 sel('5') =0; * * P Pressure * P = 1*760; t0 = 71.05+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; * * Wilson parameters * a0(i,i) = 1.0; a0('1','2') = 1734.4181; a0('2','1') = 183.0383; a0('1','3') = -38.4124; a0('3','1') = 176.3185; a0('1','4') = 150.2057; a0('4','1') = -33.8819; a0('2','3') = 392.7020; a0('3','2') = 813.9198; a0('2','4') = 312.1615; a0('4','2') = 996.2753; a0('3','4') = 818.3291; a0('4','3') = -481.0590; * * v('1') = 38.8196; v('2') = 94.0952; v('3') = 79.6109; v('4') = 77.8926; * * ll(i,i) = 1; LOOP((i,j)$((ord(i) le n) and (ord(j) le n) and (ord(i) ne ord(j))), ll(i,j) = v(j)/v(i)*EXP(-a0(i,j)/(Rg*t0)); ); 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).. LOG(SUM(j$sel(j), z(j)*ll(i,j))) +SUM(j$sel(j), z(j)*ll(j,i) / SUM(k$sel(k), z(k)*ll(j,k))) +bb(i)/(SUM(j$(ord(j) eq n+1), z(j)) + cc(i)) -aa(i) - 1.0 + LOG(P) - a =l= 0; eq2(i)$sel(i).. -LOG(SUM(j$sel(j), z(j)*ll(i,j))) -SUM(j$sel(j), z(j)*ll(j,i) / SUM(k$sel(k), z(k)*ll(j,k))) -bb(i)/(SUM(j$(ord(j) eq n+1), z(j)) + cc(i)) +aa(i) + 1.0 - LOG(P) - a =l= 0; sumi.. SUM(i$sel(i), z(i)) =e= 1; *----------------------------------------------------------------------- MODEL wilson / all /; a.lo = 0.0; z.l('1') = 0.624; z.lo('1') = 0.000001; z.up('1') = 1.0; z.l('2') = 0.376; 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') = 58.129; z.lo('5') = 20.0; z.up('5') = 80.0; SOLVE wilson USING nlp MINIMIZING ub;