Two examples will be shown in this section of the notes and compared with results from Aspen and results reported in Thermodynamics texts:
The Aspen simulations for many of the examples may be found in:
The summary comparison among the three procedures may be found at:
In this example, we will look at "the effect of temperature, pressure and reactant ratio on the production of methanol" by using Matlab programs written for CENG 301 and 403. We will then compare our results with those found with Aspen and those reported in the reference:
Kyle, Chemical Equilibrium, Example 12-3.
The gas phase reaction is:
CO + 2H2 -> CH3OH
We will need a data file for these compounds. Here is the session
used to create that file:
>> start403a
Copyright 1996 Rice University All rights reserved Give the name to be used for your data file. No more than 16 characters. METH1 The output file is called:METH1 Give the number of compounds: 3 If you want to see names, formulae or headings used in the 301 data base, execute the FORTRAN program: shownoh. Give the name for compound # 1 CO Give the name for compound # 2 H2 Give the name for compound # 3 CH3OH Give the number of reactions to set or 0 to skip. 1 Enter the coefficient for each compound in the same order the compounds are listed. Coefficients of reactants should be negative and coefficients of products should be positive. Enter the coefficients for reaction 1 CO H2 CH3OH -1 -2 1 the equation is balanced If you want to redo the equation, reply: y If you want to set plug flow reactor parms, reply: y
Now we move to Matlab to load the data file: METH1:
>>start403b Copyright 1996 Rice University All rights reserved If you have not run the FORTRAN program start403a to produce a data file, do so now. <-- The file METH1 is chosen from the popup menu How many streams will there be?2 Here are your compounds' names: carbon monoxide hydrogen methanol Here are your reactions: CO + 2 H2 --> CH3OH
The function kequil gives the equilibrium constant for the
reaction. Kyle finds the value 0.006 at the temperature 500K. Here is
what Matlab finds:
>>Tdeg <-- making sure our temperature unit is K Tdeg = K >>kequil(500) ans = 0.0060 <-- Agrees with Kyle.
Kyle also finds at 600K, K=1.13e-04 and at 700K, K=6.17e-06. Here is
what Matlab gives:
>>kequil(600) ans = 1.1266e-04 <-- Excellent agreement >>kequil(700) ans = 6.1437e-06 <-- Still pretty good
For a feed of 1 mol CO and two mols H2, Kyle gives the extent of the reaction at these same temperatures and 1 atm pressure. We can use reactee (together with ssec2) to check the results shown:
>>setne('v',1,500,[1 2],[1 2]) <-- Setting the feed >>help reactee reactee: energy-balance equilibrium reactor module function er = reactee(s,tmp,in,out,rsx,jv,P) Argument List: Argument Gives s the state of the exit stream: 'v' tmp the temperature of the exit stream in Tdeg. in the index(ices) of the inlet streams. out the index of the exit stream. rsx guess for reaction rates jv indices of reactions that will be at equilibrium P pressure of the exit stream reactee returns the error between the kequil(thermo) and the product of partial pressures from kvalp.m Ex. cs = ssec2([0 .95],'reactee(''v'',1393,1,2,x,1,1)') would give the equilibrium extent of reaction in vapor stream 2 with temperature 1393Tdeg and 1(unit pressure) for reaction 1 and inlet stream 1 LDM >>reactee('v',500,1,2,0,1,1) <-- Assuming no reaction ans = 0.0060 >>reactee('v',500,1,2,.1,1,1) <-- Assuming the reaction = 0.1 ans = -0.2628 >>ssec2([0 .1],'reactee(''v'',500,1,2,x,1,1)') ans = 0.0027 >>format long <-- Giving more significant digits >>ans ans = 0.00266806826816 <-- Compares with 0.00267 from Kyle >>displaye(1,2,12,4) <-- Looking at conditions in the reactor at 1 atm Inlet | Outlet Stream 1 | 2 Tmp K 500.00 | 500.00 State vapor | vapor Enthalpy -92.77 | -93.03 Compound Stream Flows carbon monoxide 1.0000 | 0.9974 hydrogen 2.0000 | 1.9948 methanol 0.0000 | 0.0026 <-- not much! Total 3.0000 | 2.9948 >>ssec2([0 .1],'reactee(''v'',600,1,2,x,1,1)') ans = 4.87341572520e-05 <-- Kyle gives 5.02e-05 >>ssec2([0 .1],'reactee(''v'',700,1,2,x,1,1)') ans = 2.657844830468893e-06 <-- Kyle gives 2.74e-06
Much lower temperatures or higher pressures must be used to get
reasonable amounts of methanol. Kyle gives results for 100 atm.
pressure that are easy to check in Matlab. Convergence of the
function ssec2 is a little tricky, but it just needs to be
told a reasonable interval to examine.
>>reactee('v',500,1,2,0,1,100) ans = 0.0060 >>reactee('v',500,1,2,0.5,1,100) ans = 0.0056 <-- There is not likely to be a root in (0.0, 0.5) >>reactee('v',500,1,2,0.95,1,100) ans = -0.2239 <-- There must be a root in (0.5, 0.95) >>ssec2([.5 .95],'reactee(''v'',500,1,2,x,1,100)') The flow rate in that stream is too small The flow rate in that stream is too small The flow rate in that stream is too small The flow rate in that stream is too small The flow rate in that stream is too small ******************************************************* * ssec2 did not converge, xl: 2.0214 xr: 0.57146 * ******************************************************* ans = 0.5715 <-- ssec2 did not find that root. >>reactee('v',500,1,2,0.75,1,100) ans = 0.0033 <-- Try another interval >>reactee('v',500,1,2,0.85,1,100) ans = -0.0046 <-- (0.75, 0.85) has a root! >>ssec2([.75 .85],'reactee(''v'',500,1,2,x,1,100)') ans = 0.8149 <-- Here it is. Kyle found 0.815
Here are the flows out of the reactor at 100 atm:
>>displaye(1,2,12,4) Inlet | Outlet Stream 1 | 2 Tmp K 500.00 | 500.00 State vapor | vapor Enthalpy -92.77 | -172.62 Compound Stream Flows carbon monoxide 1.0000 | 0.1851 hydrogen 2.0000 | 0.3702 methanol 0.0000 | 0.8149 <-- A lot more! Total 3.0000 | 1.3702
The mol fraction methanol found by Matlab was :
>>0.8149/1.3702 ans = 0.5947 <-- Kyle found 0.595
Kyle goes on to show that the assumption of ideal fluids used in the Matlab programs is not justified at 100 atm. That is not something that is easily corrected however. We will leave non-ideal fluids to Aspen and the other commercial simulators.
In this example, we will look at a different reaction, and ask different questions. The example is from: Smith, Van Ness & Abbott, Introduction to Chemical Engineering Thermodynamics. It is Example 15.5 in that text.
Using data in WGS1 file with start403b:
How many streams will there be?2 Here are your compounds' formulae and names: No. Formula Name 1 CO carbon monoxide 2 H2O water 3 CO2 carbon dioxide 4 H2 hydrogen Here are your reactions: CO + H2O --> CO2 + H2
a) The equilibrium constant at 1100K is:
>> kequil(1100) ans = 0.9525 <- compared to 1 in text >> setne('v',1,1100,[1 1 0 0]) <-- Setting the feed
From convu:
1.000000 bar = 0.9869230 atm
Returning to Matlab:
>> T=1100; >> P=0.986923; >> reactee('v',T,1,2,.5,1,P) ans = -0.0475 <-- a conversion of .5 is too high >> reactee('v',T,1,2,.4,1,P) ans = 0.5081 <-- a conversion of .4 is too low >> ssec2([.4 .5],'reactee(''v'',1100,1,2,x,1,0.986923)') ans = 0.4939 <-- the equilibrium conversion >> showe(1,2,10,4) Inlet | Outlet Stream 1 | 2 Tmp K 1100.00 | 1100.00 State vapor | vapor Entlpy -297.42 | -313.97 Compound Stream Flows carbon monoxide 1.0000 | 0.5061 water 1.0000 | 0.5061 <-- The text found 50% converted carbon dioxide 0.0000 | 0.4939 hydrogen 0.0000 | 0.4939 Total 2.0000 | 2.0000
b) and c) no change in conversion
d) changing the flow of H2O to 2 mols:
>> setne('v',1,1100,[1 2 0 0]) >> reactee('v',T,1,2,.5,1,P) ans = 0.6192 >> reactee('v',T,1,2,.7,1,P) ans = -0.3039 >> ssec2([.5 .7],'reactee(''v'',1100,1,2,x,1,0.986923)') ans = 0.6594 >> showe(1,2,10,4) Inlet | Outlet Stream 1 | 2 Tmp K 1100.00 | 1100.00 State vapor | vapor Entlpy -509.08 | -531.18 Compound Stream Flows carbon monoxide 1.0000 | 0.3406 water 2.0000 | 1.3406 carbon dioxide 0.0000 | 0.6594 <-- Text found .667 hydrogen 0.0000 | 0.6594 Total 3.0000 | 3.0000
e) We could reason as in the text to find the answer but:
>> setne('v',1,1100,[2 1 0 0]) >> reactee('v',T,1,2,.5,1,P) ans = 0.6192 >> reactee('v',T,1,2,.7,1,P) ans = -0.3039 >> ssec2([.5 .7],'reactee(''v'',1100,1,2,x,1,0.986923)') ans = 0.6594 <-- a conversion of .667 was found in the text >> showe(1,2,10,4) Inlet | Outlet Stream 1 | 2 Tmp K 1100.00 | 1100.00 State vapor | vapor Entlpy -383.19 | -405.29 Compound Stream Flows carbon monoxide 2.0000 | 1.3406 water 1.0000 | 0.3406 carbon dioxide 0.0000 | 0.6594 hydrogen 0.0000 | 0.6594 Total 3.0000 | 3.0000
f) changing the flows again:
>> setne('v',1,1100,[1 1 1 0]) >> reactee('v',T,1,2,.5,1,P) ans = -2.0475 >> reactee('v',T,1,2,.3,1,P) ans = 0.1566 >> ssec2([.3 .5],'reactee(''v'',1100,1,2,x,1,0.986923)') ans = 0.3261 <-- a conversion of ..333 was found in the text >> showe(1,2,10,4) Inlet | Outlet Stream 1 | 2 Tmp K 1100.00 | 1100.00 State vapor | vapor Entlpy -652.07 | -663.00 Compound Stream Flows carbon monoxide 1.0000 | 0.6739 water 1.0000 | 0.6739 carbon dioxide 1.0000 | 1.3261 hydrogen 0.0000 | 0.3261 <- text found .333 Total 3.0000 | 3.0000
g) The equilibrium constant at 1650K is found as:
>> kequil(1650) ans = 0.3349 <- A little higher than the .316 found in the text >> setne('v',1,1650,[1 1 0 0]) >> T=1650; >> reactee('v',T,1,2,.5,1,P) ans = -0.6651 >> reactee('v',T,1,2,.3,1,P) ans = 0.1512 >> ssec2([.3 .5],'reactee(''v'',1650,1,2,x,1,0.986923)') ans = 0.3666 >> showe(1,2,10,4) Inlet | Outlet Stream 1 | 2 Tmp K 1650.00 | 1650.00 State vapor | vapor Entlpy -263.95 | -270.60 Compound Stream Flows carbon monoxide 1.0000 | 0.6334 water 1.0000 | 0.6334 carbon dioxide 0.0000 | 0.3666 <- the text found .36 hydrogen 0.0000 | 0.3666 Total 2.0000 | 2.0000
The water gas shift reaction is a popular one in chemical engineering texts. Example 7.6 in the text: Biegler, L. T., Grossman, I. E., and Westerberg, A. W. Systematic Methods of Chemical Process Design shwos results for a reactor that is fed equal amounts of CO and H2O at 600K and 5 atm. Our Matlab programs find that the equilibrium constant should be:
>> kequil(600) ans = 27.0390
Unfortunately, this is in sharp contrast with the value reported in the text example: 606.9 It also leads to quite different conversions as seen in the display from Matlab:
Inlet | Outlet Stream 1 | 2 Tmp K 600.00 | 600.00 State vapor | vapor Entlpy -332.94 | -365.47 Compound Stream Flows carbon monoxide 1.0000 | 0.1613 <-- molar flows water 1.0000 | 0.1613 carbon dioxide 0.0000 | 0.8387 <-- Beigler reported: .946 hydrogen 0.0000 | 0.8387 Total 2.0000 | 2.0000