$title Optimum Feed Plate Location (FEEDTRAY,SEQ=122) $onText This model determines the optimum location of feed plates in a distillation column with 7 ideal stages, a total condenser and a kettle-type reboiler. The feed consists of a mixture of benzene and toluene entering at bubble point. Morari, M, and Grossmann, I E, Eds, Chemical Engineering Optimization Models with GAMS. Computer Aids for Chemical Engineering Corporation, 1991. Vishwanathan, J, and Grossmann, I E, A Combined Penalty Function and Outer Approximation Method for Mixed Integer Nonlinear Programming. Computers and Chemical Engineering 14, 7 (1990), 769-782. Section 1 Basic Data ___________ Basic Thermodynamic Data have been taken from R.C. Reid, J.M. Prausnitz and B.E. Poling : "The Properties of gases and liquids" 4th Edition, McGraw-Hill (1987) Units: Pressure : in bars i.e. 0.1 Mpa Temperature : in kelvins Heat capacity : kJ/kmol K Abbreviations: mm Molar mass Tb Normal boiling point Tc Critical temperature Pc Critical Pressure Keywords: mixed integer nonlinear programming, feed plate location, chemical engineering $offText $sTitle System --- Benzene - Toluene at about 1 bar Set j 'components' / benzene, toluene /; Table prcon (j,*) 'basic physical properties' mm tb tc pc omega liq-den tden benzene 78.114 353.2 562.2 48.9 0.212 0.885 289 toluene 92.141 383.8 591.8 41.0 0.263 0.867 293; Table vpcon(j,*) 'constants in the weird equation for vap.pressure' a b c d tmin benzene -6.98273 1.33213 -2.62863 -3.33399 288 toluene -7.28607 1.38091 -2.83433 -2.79168 309; Table cpcon(j,*) 'constants for the isobaric heat capacity equation' a b c d benzene -3.392e+1 4.739e-1 -3.017e-4 7.130e-8 toluene -2.435e+1 5.125e-1 -2.765e-4 4.911e-8; Scalar treb 'guess temperature for reboiler' tbot 'guess temperature for bottom-most tray' ttop 'guess temperature for top-most tray' tcon 'guess temperature for condenser'; treb = 380; tbot = 375; ttop = 360; tcon = 355; Scalar rg 'universal gas constant' / 8.314 /; Parameter h0(j) 'integration constant for enthalpy'; h0(j) = tcon*(cpcon(j,'a') + tcon*(cpcon(j,'b')/2 + tcon*(cpcon(j,'c')/3 + tcon* cpcon(j,'d')/4))); $onText section 2 _________ thermal condition of the feed stream $offText Scalar f 'total no. of moles of feed' tf 'temperature of the feed (in kelvins)' pf 'pressure of the feed stream' vf 'vapour fraction in feed(before expansion)' shf 'specific enthalpy of feed' preb 'pressure in the reboiler' pbot 'pressure in the bottom-most tray' ptop 'pressure in the top-most tray' pcon 'pressure in the condenser'; f = 100; preb = 1.2; pbot = 1.12; ptop = 1.08; pcon = 1.05; pf = 1.12; vf = 0.0; Parameter xf(j) 'molefractions in feed-stream' / benzene 0.70, toluene 0.30 /; $onText Assume that feed enters at bubble point determination of bubble temperature use nlp to solve equation commented out for convenience. Variable tbub, z1; Equation bubble, obj1; bubble.. sum(j, xf(j)*prcon(j,'pc')*exp(prcon(j,'tc')/tbub * (vpcon(j,'a')*(1 - tbub/prcon(j,'tc')) + vpcon(j,'b')*(1 - tbub/prcon(j,'tc'))**1.5 + vpcon(j,'c')*(1 - tbub/prcon(j,'tc'))**3 + vpcon(j,'d')*(1 - tbub/prcon(j,'tc'))**6))/pf) =e= 1; obj1.. z1 =e= 1; tbub.lo = prcon('benzene','tb'); tbub.up = prcon('toluene','tb'); tbub.l = 0.5*(tbub.lo +tbub.up); Model bubt / all /; solve bubt minimizing z1 using nlp; $offText * Note: Solution of the above step indicates tbub = 363.368 tf = 363.368; shf = sum(j, xf(j)*(tf*(cpcon(j,'a') + tf*(cpcon(j,'b')/2 + tf*(cpcon(j,'c')/3 + tf*cpcon(j,'d')/4))) - h0(j) + rg* prcon(j,'tc')*(vpcon(j,'a')*(1 - tf/prcon(j,'tc')) + vpcon(j,'b')*(1 - tf/prcon(j,'tc'))**1.5 + vpcon(j,'c')*(1 - tf/prcon(j,'tc'))**3 + vpcon(j,'d')*(1 - tf/prcon(j,'tc'))**6) + rg*tf*(vpcon(j,'a') + 1.5*vpcon(j,'b')*(1 - tf/prcon(j,'tc'))**0.5 + 3*vpcon(j,'c')*(1 - tf/prcon(j,'tc'))**2 + 6*vpcon(j,'d')*(1 - tf/prcon(j,'tc'))**5))); display shf; $onText section 3 _________ modeling equations description of the column Note: the stages are numbered bottom upwards (like the floors of a building). Reboiler is stage (tray) no. 1 and the condenser is the last tray. $offText Set i 'stages' / 1*9 / reb(i) 'reboiler' con(i) 'condenser' col(i) 'stages in the col' floc(i) 'possible locations of feed stage' / 2*8 / abovef(i) 'stages above the feed stage' belowf(i) 'feed stage and those below it'; reb(i) = yes$(ord(i) = 1); con(i) = yes$(ord(i) = card(i)); col(i) = yes - (reb(i) + con(i)); Parameter p(i) 'pressure prevailing in tray i'; p(i)$reb(i) = preb; p(i)$con(i) = pcon; p(i)$col(i) = pbot - ((pbot - ptop)/(card(i) - 1 - 2))*(ord(i) - 2); Scalar hllo 'limit on enthalpies and scaling' hlhi 'limit on enthalpies and scaling' hvlo 'limit on enthalpies and scaling' hvhi 'limit on enthalpies and scaling' hscale 'limit on enthalpies and scaling'; hllo = tcon*(cpcon('benzene','a') + tcon*(cpcon('benzene','b')/2 + tcon*( cpcon('benzene','c')/3 + tcon* cpcon('benzene','d')/4))) - h0('benzene') + rg*prcon('benzene','tc') * (vpcon('benzene','a')*(1 - tcon/prcon('benzene','tc')) + vpcon('benzene','b')*(1 - tcon/prcon('benzene','tc'))**1.5 + vpcon('benzene','c')*(1 - tcon/prcon('benzene','tc'))**3 + vpcon('benzene','d')*(1 - tcon/prcon('benzene','tc'))**6) + rg*tcon*(vpcon('benzene','a') + 1.5*vpcon('benzene','b')*(1 - tcon/prcon('benzene','tc'))**0.5 + 3*vpcon('benzene','c')*(1 - tcon/prcon('benzene','tc'))**2 + 6*vpcon('benzene','d')*(1 - tcon/prcon('benzene','tc'))**5); hlhi = treb*(cpcon('toluene','a') + treb*(cpcon('toluene','b')/2 + treb*(cpcon('toluene','c')/3 + treb*cpcon('toluene','d')/4))) - h0('toluene') + rg*prcon('toluene','tc') * (vpcon('toluene','a')*(1 - treb/prcon('toluene','tc')) + vpcon('toluene','b')*(1 - treb/prcon('toluene','tc'))**1.5 + vpcon('toluene','c')*(1 - treb/prcon('toluene','tc'))**3 + vpcon('toluene','d')*(1 - treb/prcon('toluene','tc'))**6) + rg*treb*(vpcon('toluene','a') + 1.5*vpcon('toluene','b')*(1 - treb/prcon('toluene','tc'))**0.5 + 3*vpcon('toluene','c')*(1 - treb/prcon('toluene','tc'))**2 + 6*vpcon('toluene','d')*(1 - treb/prcon('toluene','tc'))**5); hvlo = tcon*(cpcon('benzene','a') + tcon*(cpcon('benzene','b')/2 + tcon*(cpcon('benzene','c')/3 + tcon*cpcon('benzene','d')/4))) - h0('benzene'); hvhi = treb*(cpcon('toluene','a') + treb*(cpcon('toluene','b')/2 + treb*(cpcon('toluene','c')/3 + treb*cpcon('toluene','d')/4))) - h0('toluene'); hscale = max(abs(hllo), abs(hlhi), abs(hvlo), abs(hvhi)); Positive Variable x(i,j) 'mole-fraction of j-th component in liquid on i-th tray' y(i,j) 'mole-fraction of j-th component in vapour on i-th tray' l(i) 'molar flow rate of liquid leaving tray i' v(i) 'molar flow rate of vapour leaving tray i' t(i) 'temperature of tray i' feed(i) 'feed stream entering tray i' r 'reflux ratio' p1 'top product rate' p2 'bottom product rate'; Variable hl(i) 'molar sp.enthalpy of liquid in tray i' hv(i) 'molar sp.enthalpy of vapour in tray i'; Equation phe(i,j) 'phase equilibrium relation' errk(i) 'phase equilibrium error function' cmb(i,j) 'component material balance(1