***************************************************************** *** Chapter 14 *** Section: Locating All Homogeneous Azeotropes *** Test Problem 8 *** *** UNIFAC equation *** Acetone -- Methyl Ethyl Ketone -- Cyclohexane ***************************************************************** SET i variables /1*4/ g groups /1*3/ alias(i,j) alias(i,k) alias(g,l) alias(g,m); SCALARS n number of components /3/ PARAMETERS sel(i), dummy, xc(i), aa(i), bb(i), cc(i), P, zz, q(i), rr(i), ll(i), br(g), bq(g), a(g,l), v(i,g), qv(g,i), phi(g,m), alph(g,i), beta(g,i,j), delt(i), zi(i), templow, temphigh, t0, zlbd(i), zubd(i), zc(i), sortr(i), sortq(i), sortl(i), sorta(g,i); * * Select components that participate sel('1') = 1; sel('2') = 0; sel('3') = 1; * sel('4') corresponds to temperature and should always be 0 sel('4') = 0; * * * P Pressure * P = 760; t0 = 70+273.15; * * Antoine equation parameters * aa('1') = 7.11714*LOG(10); bb('1') = 1210.595*LOG(10); cc('1') = 229.664; aa('2') = 7.06356*LOG(10); bb('2') = 1261.340*LOG(10); cc('2') = 221.969; aa('3') = 15.7527; bb('3') = 2766.63; cc('3') = -50.5+273.15; * * Uniquac parameters * zz = 10; * bq('1') = 0.848; bq('2') = 0.540; bq('3') = 0.640; * br('1') = 0.9011; br('2') = 0.6744; br('3') = 0.7713; * v(i,g)=0; v('1','1')=2; v('1','3')=1; v('2','1')=2; v('2','2')=1; v('2','3')=1; v('3','2')=6; * a('1','1')=0; a('1','2')=0; a('1','3')=1565; a('2','1')=0; a('2','2')=0; a('2','3')=1565; a('3','1')=3000; a('3','2')=3000; a('3','3')=0; * q(i)=SUM(g, v(i,g)*bq(g)); rr(i)=SUM(g, v(i,g)*br(g)); * LOOP(i$(ord(i) le n), ll(i) = zz/2*(rr(i)-q(i))-(rr(i)-1); ); qv(g,i)=0; LOOP(i$(ord(i) le n), qv(g,i)=bq(g)*v(i,g); ); LOOP((g,m), phi(g,m)=EXP(-a(g,m)/t0); ); LOOP(g,LOOP(i$(ord(i) le n), alph(g,i)=SUM(m, phi(m,g)*qv(m,i)); );); LOOP(g,LOOP(i$(ord(i) le n),LOOP(j$(ord(j) le n), beta(g,i,j)=SUM(m, qv(m,i)*phi(m,g)*qv(g,j)) ););); LOOP(i$(ord(i) le n), delt(i)=aa(i) -LOG(P) +LOG(rr(i)) +zz/2*q(i)*LOG(q(i)/rr(i)) +ll(i) +SUM(g, qv(g,i)*( LOG(SUM(m, phi(m,g)*qv(m,i))) -LOG(q(i)) +SUM(m, phi(g,m)*qv(m,i) /SUM(l, phi(l,m)*qv(l,i))) ) ); ); * templow = 20; temphigh = 100; * * set variable bounds zi(i) = 1; LOOP(i$(ord(i) eq n), zi(i) = 0; ); LOOP(i$(ord(i) le n), 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, s; POSITIVE VARIABLE s; ************************************************************** * 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= s; eq1(i)$sel(i).. (zz/2*q(i)-1)*LOG(SUM(j$sel(j), rr(j)*z(j))) -(zz/2-1)*q(i)*LOG(SUM(j$sel(j), q(j)*z(j))) -rr(i)*SUM(j$sel(j), ll(j)*z(j)) /SUM(k$sel(k), rr(k)*z(k)) -SUM(l, qv(l,i)*LOG( SUM(j$sel(j), alph(l,j)*z(j)) ) ) -SUM(l, SUM(j$sel(j), beta(l,i,j)*z(j)) /SUM(k$sel(k), alph(l,k)*z(k)) ) - bb(i)/(SUM(j$(ord(j) eq n+1), z(j)) + cc(i)) + delt(i) - s =l= 0; eq2(i)$sel(i).. -(zz/2*q(i)-1)*LOG(SUM(j$sel(j), rr(j)*z(j))) +(zz/2-1)*q(i)*LOG(SUM(j$sel(j), q(j)*z(j))) +rr(i)*SUM(j$sel(j), ll(j)*z(j)) /SUM(k$sel(k), rr(k)*z(k)) +SUM(l, qv(l,i)*LOG( SUM(j$sel(j), alph(l,j)*z(j)) ) ) +SUM(l, SUM(j$sel(j), beta(l,i,j)*z(j)) /SUM(k$sel(k), alph(l,k)*z(k)) ) + bb(i)/(SUM(j$(ord(j) eq n+1), z(j)) + cc(i)) - delt(i) - s =l= 0; sumi.. SUM(i$sel(i), z(i)) =e= 1; *----------------------------------------------------------------------- MODEL unifac / obj, eq1, eq2, sumi /; s.lo = 0.0; z.l('1') = 0.878; z.lo('1') = 0.000001; z.up('1') = 1.0; z.l('2') = 0.000001; z.lo('2') = 0.000001; z.up('2') = 1.0; z.l('3') = 0.122; z.lo('3') = 0.000001; z.up('3') = 1.0; z.l('4') = 55.726; z.lo('4') = 40.0; z.up('4') = 90.0; SOLVE unifac USING nlp MINIMIZING ub;