/[ascend]/trunk/models/rachford.a4c
ViewVC logotype

Contents of /trunk/models/rachford.a4c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 576 - (show annotations) (download) (as text)
Tue May 9 03:42:08 2006 UTC (13 years, 10 months ago) by johnpye
File MIME type: text/x-ascend
File size: 5493 byte(s)
Changed all cases of *.fixed := {TRUE,FALSE} to 'FIX' and 'FREE' statements.
1 REQUIRE "atoms.a4l";
2 (* => atoms.a4l, measures.a4l, system.a4l, basemodel.a4l *)
3 PROVIDE "rachford.a4c";
4 (*
5 * This file is part of the ASCEND Modeling Library and is released
6 * under the GNU Public License as described at the end of this file.
7 *
8 * Use of this module is demonstrated by the associated script file
9 * rachford.a4s.
10 *)
11
12 (*
13 Ascend model of the Rachford-Rice equation described by King.
14 -- Separation Process. Chemical Engineering series. 2nd. Edition, McGraw-
15 Hill, 77-79, 1980 --. The problem consists in a simple flash calculation
16 performed by solving the Rachford-Rice equation. There is a disjunctive
17 statement which extends the use of that equation for cases in which the
18 system has only one phase (liquid or vapor). That is, this model not only
19 copes with the liquid-vapor equilibrium case. The resulting system of
20 equations can be solved with the ascend conditional solver CMSlv.
21
22 This model requires:
23 "system.a4l"
24 "atoms.a4l"
25 *)
26
27 (* ************************************************* *)
28
29 (* Components *)
30
31 MODEL component_constants;
32 Tc IS_A critical_temperature;
33 Pc IS_A critical_pressure;
34 vpa, vpb, vpc, vpd IS_A vapor_pressure_constant;
35 END component_constants;
36
37 MODEL n_butane REFINES component_constants;
38 (*Constants *)
39 Tc :== 425.2 {K};
40 Pc :== 38.0 {bar};
41 vpa :== -6.88709;
42 vpb :== 1.15157;
43 vpc :== -1.99873;
44 vpd :== -3.13003;
45 END n_butane;
46
47 MODEL n_pentane REFINES component_constants;
48 (*Constants *)
49 Tc :== 469.7 {K};
50 Pc :== 33.7 {bar};
51 vpa :== -7.28936;
52 vpb :== 1.53679;
53 vpc :== -3.08367;
54 vpd :== -1.02456;
55 END n_pentane;
56
57 MODEL n_hexane REFINES component_constants;
58 (*Constants *)
59 Tc :== 507.5 {K};
60 Pc :== 30.1 {bar};
61 vpa :== -7.46765;
62 vpb :== 1.44211;
63 vpc :== -3.28222;
64 vpd :== -2.50941;
65 END n_hexane;
66
67 (* ************************************************* *)
68
69 (* Flash calculation *)
70 (* Rachford Rice calculation when P and T are specified *)
71
72 MODEL simple_flash;
73 components IS_A set OF integer_constant;
74 comp[components] IS_A component_constants;
75 VP[components] IS_A pressure;
76 K[components] IS_A factor;
77 z[components],
78 x[components],
79 y[components] IS_A fraction;
80 V,F IS_A molar_rate;
81 V_F IS_A factor;
82 T IS_A temperature;
83 P IS_A pressure;
84 G IS_A factor;
85 bol1,bol2 IS_A boolean_var;
86
87
88 (* Component Data *)
89
90 components :== [1..3];
91 comp[1] IS_REFINED_TO n_butane;
92 comp[2] IS_REFINED_TO n_pentane;
93 comp[3] IS_REFINED_TO n_hexane;
94
95
96 (* Boundaries *)
97 CONDITIONAL
98 cond1: G <= 0.0;
99 cond2: G <= 1.0;
100 END CONDITIONAL;
101
102 bol1 == SATISFIED(cond1,1e-08);
103 bol2 == SATISFIED(cond2,1e-08);
104
105 (* Variant Equations*)
106 eq1: V_F = 0.0;
107 eq2: V_F = G;
108 eq3: V_F = 1.0;
109
110 (* Disjunctive Statement*)
111 WHEN (bol1,bol2)
112 CASE TRUE,TRUE:
113 USE eq1;
114 CASE FALSE,TRUE:
115 USE eq2;
116 CASE FALSE,FALSE:
117 USE eq3;
118 OTHERWISE:
119 END WHEN;
120
121 (* Invariant Equations *)
122
123 FOR i IN components CREATE
124
125 (* Vapor pressure *)
126 ln(VP[i]/comp[i].Pc)*T/comp[i].Tc*abs(comp[i].Tc - T) =
127 (comp[i].vpa*abs(1.0 - T/comp[i].Tc) +
128 (comp[i].vpb*abs(1.0 - T/comp[i].Tc)^1.5) +
129 (comp[i].vpc*abs(1.0 - T/comp[i].Tc)^3.0) +
130 (comp[i].vpd*abs(1.0 - T/comp[i].Tc)^6.0))*(comp[i].Tc - T);
131
132 (* Equilibrium constant *)
133 K[i] = VP[i] / P;
134
135 END FOR;
136
137 (* Rachford-Rice *)
138
139 SUM[ ( z[i] * ( K[i] - 1 ) ) / ( ((K[i]-1)* V_F) + 1 )
140 | i IN components ] = G - V_F;
141
142 FOR i IN components CREATE
143 (* Liquid compositions *)
144 x[i] = z[i] / ( ((K[i]-1)* V_F) + 1 );
145
146 (* Vapor compositions *)
147 y[i] = ( K[i] * z[i] ) / ( ((K[i]-1)* V_F) + 1 );
148 END FOR;
149
150 (* V/F *)
151 V_F = V/F;
152
153
154 METHODS
155
156 METHOD default_self;
157 END default_self;
158
159 METHOD specify;
160 FOR i IN components DO
161 FIX z[i];
162 END FOR;
163 FIX F;
164 FIX P;
165 FIX T;
166 END specify;
167
168 METHOD values;
169
170 (* fixed values *)
171 z[1] := 0.2;
172 z[2] := 0.5;
173 z[3] := 0.3;
174 P := 10 {atm};
175 T := 405 {K}; (* It obtains results in the complete range 150 - 830 *)
176 F:= 200 {lb_mole/hour};
177 (* initial guesses *)
178 K[1] := 2;
179 K[2] := 1;
180 K[3] := 0.5;
181 V := 100 {lb_mole/hour};
182 V_F:= 0.5;
183 G := 0.5;
184
185 END values;
186
187 END simple_flash;
188
189
190 (*
191 * rachford.a4c
192 * by Vicente Rico-Ramirez
193 * April 10, 1998
194 * Part of the ASCEND Library
195 * $Date: 1998/06/17 19:15:05 $
196 * $Revision: 1.3 $
197 * $Author: mthomas $
198 * $Source: /afs/cs.cmu.edu/project/ascend/Repository/models/rachford.a4c,v $
199 *
200 * This file is part of the ASCEND Modeling Library.
201 *
202 * Copyright (C) 1998 Carnegie Mellon Univesity
203 *
204 * The ASCEND Modeling Library is free software; you can redistribute
205 * it and/or modify it under the terms of the GNU General Public
206 * License as published by the Free Software Foundation; either
207 * version 2 of the License, or (at your option) any later version.
208 *
209 * The ASCEND Modeling Library is distributed in hope that it will be
210 * useful, but WITHOUT ANY WARRANTY; without even the implied
211 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
212 * See the GNU General Public License for more details.
213 *
214 * You should have received a copy of the GNU General Public License
215 * along with the program; if not, write to the Free Software
216 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check
217 * the file named COPYING.
218 *)

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22