1 |
REQUIRE "johnpye/ideal_steam.a4c"; |
2 |
REQUIRE "johnpye/iapws_sat_curves.a4c"; |
3 |
REQUIRE "johnpye/iapws95.a4c"; |
4 |
|
5 |
MODEL condenser_lmtd( |
6 |
S_in WILL_BE thermo_state; |
7 |
S_out WILL_BE thermo_state; |
8 |
); |
9 |
T_h1 ALIASES S_in.T; |
10 |
T_h2 ALIASES S_out.T; |
11 |
h_h1 ALIASES S_in.h; |
12 |
h_h2 ALIASES S_out.h; |
13 |
|
14 |
mdot_in IS_A mass_rate; |
15 |
|
16 |
T_c1 IS_A temperature; |
17 |
T_c2 IS_A temperature; |
18 |
|
19 |
T_c_in ALIASES T_c2; |
20 |
T_c_out ALIASES T_c1; |
21 |
|
22 |
|
23 |
LMTD IS_A delta_temperature; |
24 |
|
25 |
DT_1, DT_2 IS_A delta_temperature; |
26 |
|
27 |
DT_1 = T_h1 - T_c1; |
28 |
DT_2 = T_h2 - T_c2; |
29 |
|
30 |
lmtd: LMTD = (DT_2 - DT_1) / ln(DT_2/DT_1); |
31 |
|
32 |
UA IS_A ua_value; |
33 |
q IS_A energy_rate; |
34 |
|
35 |
q = UA * LMTD; |
36 |
|
37 |
q = mdot_in * (h_h1 - h_h2); |
38 |
|
39 |
S_out.p = S_in.p; |
40 |
|
41 |
METHODS |
42 |
METHOD specify; |
43 |
FIX UA; |
44 |
FIX T_c_in; |
45 |
FIX mdot_in; |
46 |
END specify; |
47 |
METHOD values; |
48 |
UA := 1000 {W/m^2/K} * 4 {m} * 900 * 2*3.1415926* (0.01 {m})/2; |
49 |
T_c_in := 273.15{K} + 20 {K}; |
50 |
mdot_in := 1 {kg/s}; |
51 |
(* free values *) |
52 |
T_h2 := T_h1 - 20{K}; |
53 |
h_h2 := h_h1 - 4.2{kJ/kg/K}*20{K}; |
54 |
END values; |
55 |
METHOD bound_self; |
56 |
DT_1.lower_bound := 0{K}; |
57 |
DT_2.lower_bound := 0{K}; |
58 |
q.lower_bound := 0{W}; |
59 |
T_h2.upper_bound := T_h1; |
60 |
T_h2.lower_bound := T_c_out; |
61 |
h_h2.upper_bound := h_h1; |
62 |
END bound_self; |
63 |
END condenser_lmtd; |
64 |
|
65 |
(*--------------------------*) |
66 |
|
67 |
(* test model for the above *) |
68 |
MODEL condenser_lmtd_test; |
69 |
S1 IS_A iapws95_1phase; |
70 |
S2 IS_A iapws95_1phase; |
71 |
|
72 |
T_in ALIASES S1.T; |
73 |
p_in ALIASES S1.p; |
74 |
|
75 |
C IS_A condenser_lmtd(S1,S2); |
76 |
|
77 |
q ALIASES C.q; |
78 |
|
79 |
METHODS |
80 |
METHOD default_self; |
81 |
RUN reset; RUN values; RUN bound_self; |
82 |
END default_self; |
83 |
METHOD specify; |
84 |
RUN C.specify; |
85 |
FIX T_in; |
86 |
FIX p_in; |
87 |
FIX C.T_c_out; |
88 |
END specify; |
89 |
METHOD values; |
90 |
RUN C.values; |
91 |
T_in := 273.15{K} + 280 {K}; |
92 |
p_in := 1{bar}; |
93 |
q := 4.2{kJ/s}; |
94 |
C.T_c_out := 273.15{K} + 25 {K}; |
95 |
END values; |
96 |
METHOD bound_self; |
97 |
RUN C.bound_self; |
98 |
END bound_self; |
99 |
END condenser_lmtd_test; |
100 |
|
101 |
|
102 |
(*--------------------------*) |
103 |
MODEL condenser_lmtd_sat( |
104 |
S_in WILL_BE thermo_state; |
105 |
S_out WILL_BE thermo_state; |
106 |
); |
107 |
T_in ALIASES S_in.T; |
108 |
|
109 |
mdot_in IS_A mass_rate; |
110 |
mdot_out ALIASES mdot_in; |
111 |
|
112 |
T_c1 IS_A temperature; (* cold inlet *) |
113 |
T_c2 IS_A temperature; (* cold outlet *) |
114 |
|
115 |
LMTD_fg IS_A delta_temperature; |
116 |
|
117 |
DT_c_fg, DT_1, DT_2 IS_A delta_temperature; |
118 |
|
119 |
DT_c_fg = T_c2 - T_c1; |
120 |
DT_1 = T_in - T_c1; |
121 |
DT_2 = T_in - T_c2; |
122 |
|
123 |
lmtd: LMTD_fg = (DT_c_fg) / ln(DT_1/DT_2); |
124 |
(* lmtd: LMTD_fg * -ln((T_in - T_c1)/(T_in - T_c2)) = (T_c2 - T_c1); *) |
125 |
|
126 |
UA_fg IS_A ua_value; |
127 |
q_fg IS_A energy_rate; |
128 |
|
129 |
q_fg = UA_fg * LMTD_fg; |
130 |
|
131 |
(* condensation point *) |
132 |
Sf ALIASES S_out; |
133 |
|
134 |
sat IS_A iapws_sat_density; |
135 |
sat.rhof = Sf.rho; |
136 |
sat.T = Sf.T; |
137 |
|
138 |
S_in.T = Sf.T; |
139 |
|
140 |
q_fg = mdot_in * (S_in.h - Sf.h); |
141 |
METHODS |
142 |
METHOD specify; |
143 |
FIX UA_fg; |
144 |
FIX T_c1; |
145 |
FIX mdot_in; |
146 |
END specify; |
147 |
METHOD values; |
148 |
UA_fg := 4000 {W/m^2/K} * 4 {m} * 900 * 2*3.1415926* (0.01 {m})/2; |
149 |
T_c1 := 273.15{K} + 200 {K}; |
150 |
mdot_in := 10 {kg/s}; |
151 |
(* free values *) |
152 |
T_c2 := 273.15{K} + 240 {K}; |
153 |
END values; |
154 |
METHOD bound_self; |
155 |
Sf.tau.lower_bound := 1; |
156 |
DT_c_fg.lower_bound := 0{K}; |
157 |
DT_1.lower_bound := 0{K}; |
158 |
DT_2.lower_bound := 0{K}; |
159 |
Sf.rho.lower_bound := Sf.rhoc; |
160 |
END bound_self; |
161 |
END condenser_lmtd_sat; |
162 |
|
163 |
(*------------------------------*) |
164 |
|
165 |
MODEL condenser_lmtd_sat_test; |
166 |
Sg IS_A iapws95_1phase; |
167 |
Sf IS_A iapws95_1phase; |
168 |
|
169 |
sat IS_A iapws_sat_density; |
170 |
sat.rhog, Sg.rho ARE_THE_SAME; |
171 |
sat.T, Sg.T ARE_THE_SAME; |
172 |
T_in ALIASES Sg.T; |
173 |
|
174 |
C IS_A condenser_lmtd_sat(Sg,Sf); |
175 |
|
176 |
METHODS |
177 |
METHOD default_self; |
178 |
RUN reset; RUN values; RUN bound_self; |
179 |
END default_self; |
180 |
METHOD specify; |
181 |
RUN C.specify; |
182 |
FIX T_in; |
183 |
END specify; |
184 |
METHOD values; |
185 |
RUN C.values; |
186 |
T_in := 273.15{K} + 280 {K}; |
187 |
END values; |
188 |
METHOD bound_self; |
189 |
RUN C.bound_self; |
190 |
END bound_self; |
191 |
METHOD self_test; |
192 |
ASSERT (C.q_fg - 15430{kW}) < 1{kW}; |
193 |
END self_test; |
194 |
END condenser_lmtd_sat_test; |
195 |
|
196 |
(*-----------------------------*) |
197 |
|
198 |
MODEL condenser; |
199 |
(* assumptions: |
200 |
inlet is ideal-gas steam at specified temperature and pressure. |
201 |
output is water of fixed enthalpy. |
202 |
whatever energy is required to be taken away to acheive that is what will be taken away. |
203 |
|
204 |
we don't need to enforce saturation inlet conditions. we will just query the enthalpy for the ideal-gas steam |
205 |
and that's it. |
206 |
*) |
207 |
S_in IS_A ideal_steam; |
208 |
|
209 |
mdot_gas_in IS_A mass_rate; |
210 |
mdot_water_out IS_A mass_rate; |
211 |
Q IS_A energy_rate; (* heat taken away by condenser *) |
212 |
|
213 |
h_in ALIASES S_in.h; |
214 |
p_in ALIASES S_in.p; |
215 |
T_in ALIASES S_in.T; |
216 |
|
217 |
(* |
218 |
h2 will be the enthalpy of the condensed water. because we are |
219 |
ignoring pressure effects, we have to assume a constant fixed |
220 |
value for the enthalpy of water at x=0. |
221 |
*) |
222 |
h_out IS_A specific_enthalpy; |
223 |
|
224 |
Q = mdot_gas_in * h_in - mdot_water_out * h_out; |
225 |
mdot_water_out = mdot_gas_in; |
226 |
|
227 |
(* |
228 |
we will assume there is NO water in the condenser for now; the |
229 |
surge tank will play the role of the mass holdup in this case. |
230 |
*) |
231 |
METHODS |
232 |
METHOD default_self; |
233 |
RUN reset; |
234 |
RUN values; |
235 |
END default_self; |
236 |
METHOD specify; |
237 |
FIX mdot_gas_in; |
238 |
FIX S_in.p, S_in.T; |
239 |
FIX h_out; |
240 |
END specify; |
241 |
METHOD values; |
242 |
mdot_gas_in := 1 {kg/s}; |
243 |
S_in.p := 5 {bar}; |
244 |
S_in.T := 473.15 {K}; |
245 |
h_out := 400{kJ/kg}; |
246 |
END values; |
247 |
END condenser; |