/[ascend]/trunk/models/solar/solar_field_model_using_sunpos.a4l
ViewVC logotype

Contents of /trunk/models/solar/solar_field_model_using_sunpos.a4l

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2574 - (show annotations) (download) (as text)
Tue Feb 21 00:16:32 2012 UTC (5 years, 9 months ago) by jpye
File MIME type: text/x-ascend
File size: 7738 byte(s)
Changing nomenclature...
1 (*
2 Model of a parabolic trough solar thermal collector field, of the type
3 of SEGS VI plant, closely following the approach of Patnode (2006).
4 https://www.nrel.gov/analysis/sam/pdfs/thesis_patnode06.pdf
5
6 First ASCEND version by Vikram Kaadam (2011), with revisions by
7 John Pye (2012).
8 *)
9
10 REQUIRE "atoms.a4l";
11 REQUIRE "solar/solar_types.a4l";
12
13 REQUIRE "johnpye/thermo_types.a4c";
14 REQUIRE "johnpye/sunpos.a4c";
15
16 MODEL sunpos_wrapper REFINES sunpos;
17
18 beta = 1.0 * theta_z;
19
20 METHODS
21 METHOD specify;
22 FIX L_st, L_loc, phi; (* time and location *)
23 FIX gamma; (* surface orientation *)
24 FIX t;
25 END specify;
26
27 METHOD values;
28 (* there should be something here?? *)
29 END values;
30
31 METHOD self_test;
32 ASSERT abs(theta-35.0{deg}) < 0.15{deg};
33 ASSERT abs(delta-(-13.80{deg})) < 0.02{deg};
34 END self_test;
35 END sunpos_wrapper;
36
37
38 (*
39 Heat absorbed by the solar receiver of cylindrical shape
40 *)
41 MODEL Qabsorbed;
42
43 (* Variables *)
44
45 value IS_A intensity; (* Solar radiation absorbed by the receiver tubes *)
46 DNI IS_A intensity; (* Direct normal insolation *)
47 DST IS_A time; (* Daylight savings time adjustment (1 hr during daylight savings time, else 0) *)
48 IAM IS_A factor; (* Incidence angle modifier *)
49 row_shadow IS_A factor; (* Row shadow factor *)
50 (* Weff IS_A distance; Effective unshaded width of mirror aperture *)
51 W IS_A distance; (* Collector aperture width *)
52 L_spacing IS_A distance; (* Length of spacing between troughs *)
53 end_loss IS_A factor; (* End loss for the heat collecting elements- HCE *)
54 F IS_A distance; (* Focal length of the collectors *)
55
56 L_sca IS_A distance; (* Length of single solar collector assembly *)
57 eta_field IS_A fraction; (* Field efficiency *)
58 eta_HCE IS_A fraction; (* Number of HCE types in the field *)
59 avail_SF IS_A fraction; (* Fraction of solar field which is operable and tracking the sun *)
60
61 sun IS_A sunpos_wrapper; (* Sun position calculation *)
62
63 (* interconnections *)
64 t_std ALIASES sun.t;
65
66 value = DNI * cos(sun.theta) * IAM * row_shadow * end_loss * eta_field * eta_HCE * avail_SF;
67 IAM = 1 + 8.84e-4 * (sun.theta/cos(sun.theta)) - 5.369e-5 * (sun.theta^2)/cos(sun.theta);
68 (* row_shadow = Weff / W; *)
69 row_shadow = (L_spacing/W) * (cos(sun.theta_z)/cos(sun.theta));
70 end_loss = 1 - F * tan(sun.theta) / L_sca;
71
72 METHODS
73 METHOD specify;
74 FIX DNI, sun.L_st, sun.L_loc, DST, t_std, L_spacing;
75 FIX W, F, L_sca, eta_field, eta_HCE, avail_SF;
76 RUN sun.specify;
77 END specify;
78
79 METHOD values;
80 IF (t_std > 12{hour}) THEN
81 sun.gamma := 90{deg};
82 END IF;
83 IF (t_std <= 12{hour}) THEN
84 sun.gamma := -90{deg};
85 END IF;
86
87 DNI := 60 {W/m^2};
88 sun.L_st := -105 {deg};
89 sun.L_loc := -110 {deg};
90 DST := 0 {hour};
91 t_std := 15 {hour};
92 L_spacing := 15 {m};
93 W := 5 {m};
94 F := 5 {m};
95 L_sca := 50 {m};
96 eta_field := 0.857;
97 eta_HCE := 0.832;
98 avail_SF := 1;
99 sun.phi := 37.21 {deg};
100
101 (* initial guesses *)
102 value := 100 {W/m^2};
103 END values;
104
105 METHOD on_load;
106 RUN specify;
107 RUN values;
108 END on_load;
109 END Qabsorbed;
110
111
112 (*
113 Heat loss per metre for the field
114 *)
115 MODEL HeatLossField;
116
117 (* Variables *)
118
119 DNI IS_A intensity; (* Direct normal insolation *)
120 Ti IS_A temperature; (* Input temperature to the field, degC *)
121 T_o IS_A temperature; (* Output temperature from the field, degC *)
122
123 type IS_A variable;
124 HCEfra IS_A fraction; (* The fraction of HCE type in the field *)
125
126 a0 IS_A solver_var;
127 a1 IS_A solver_var;
128 a2 IS_A solver_var;
129 a3 IS_A solver_var;
130 b0 IS_A solver_var;
131 b1 IS_A solver_var;
132
133 Q_loss_field IS_A energy_per_length;
134
135 (* Equation *)
136
137 Q_loss_field * (T_o-Ti) = HCEfra * (a0*(T_o-Ti) + (a1/2)*(T_o^2 - Ti^2) + (a2/3)*(T_o^3 - Ti^3) + (a3/4)*(T_o^4 - Ti^4) * DNI*(b0*(T_o-Ti) + (b1/3)*(T_o^3 - Ti^3)));
138
139 METHODS
140 METHOD specify;
141 FIX a0;
142 FIX a1;
143 FIX a2;
144 FIX a3;
145 FIX b0;
146 FIX b1;
147
148 FIX DNI;
149 FIX Ti;
150 END specify;
151
152 METHOD values;
153 DNI := 60 {W/m^2};
154 Ti := 30 {K};
155
156 IF (type == 1) THEN
157 (* air *)
158 a0 := -2.247372E+01 {W/m^2};
159 a1 := 8.374490E-01 {W/m^2/K};
160 a2 := 0.00 {W/m^2/K^2};
161 a3 := 4.620143E-06 {W/m^2/K^3};
162 b0 := 6.983190E-02 {m};
163 b1 := 9.312703E-08 {m/K^2};
164 END IF;
165
166 IF (type == 2) THEN
167 (* vacuum *)
168 a0 := -2.247372E+01 {W/m^2};
169 a1 := 8.374490E-01 {W/m^2/K};
170 a2 := 0.00 {W/m^2/K^2};
171 a3 := 4.620143E-06 {W/m^2/K^3};
172 b0 := 6.983190E-02 {m};
173 b1 := 9.312703E-08 {m/K^2};
174 END IF;
175
176 IF (type == 3) THEN
177 (* hydrogen *)
178 a0 := -2.247372E+01 {W/m^2};
179 a1 := 8.374490E-01 {W/m^2/K};
180 a2 := 0.00 {W/m^2/K^2};
181 a3 := 4.620143E-06 {W/m^2/K^3};
182 b0 := 6.983190E-02 {m};
183 b1 := 9.312703E-08 {m/K^2};
184 END IF;
185 END values;
186 END HeatLossField;
187
188 (*
189 T_o calculate Q collected by the solar field in W/m2
190 *)
191 MODEL Qcollected;
192
193 (* variables *)
194 field_types IS_A set OF symbol_constant;
195 field_types :== ['air','vacuum','hydrogen'];
196
197 DNI IS_A intensity;
198
199 Ti IS_A temperature; (* Input temperature to the field, degC *)
200 T_o IS_A temperature; (* Output temperature from the field, degC *)
201 T_amb IS_A temperature; (* Ambient temperature, degC *)
202
203 width IS_A distance; (* Width of mirror aperure, m *)
204
205 Q_loss_recv IS_A intensity; (* Receiver heat loss, W/m2 *)
206 Q_loss_pipe IS_A intensity; (* Solar field piping heat loss, W/m2 *)
207
208 value IS_A intensity;
209 DT IS_A delta_temperature;
210
211 rho_i IS_A mass_density;
212 h_i IS_A specific_enthalpy;
213 h_o IS_A specific_enthalpy;
214
215 dh_field IS_A specific_enthalpy;
216
217 L_sca IS_A distance; (* Length of single solar collector assembly, m *)
218 eta_SCA IS_A factor; (* Number of solar collector assemblies in the field *)
219 Vdot_HTF IS_A volume_rate;
220
221 (* parts *)
222 Qabs IS_A Qabsorbed;
223 hlfield[field_types] IS_A HeatLossField;
224
225 (* interconnecting *) (* Annulus types- air, vacuum, hydrogen *)
226 T_o, hlfield[field_types].T_o ARE_THE_SAME;
227 DNI, Qabs.DNI ARE_THE_SAME;
228 L_sca, Qabs.L_sca ARE_THE_SAME;
229
230 (* equations *)
231 Q_loss_recv * width = SUM[hlfield[field_types].Q_loss_field];
232 T_amb + DT = 0.5 * (T_o + Ti);
233 Q_loss_pipe = 0.01693{W/m^2/K}*DT - 0.0001683{W/m^2/K^2}*(DT^2) + 0.78e-7{W/m^2/K^3}*(DT^3);
234 value = Qabs.value - (Q_loss_recv + Q_loss_pipe);
235 rho_i = 1074.0{kg/m^3} - 0.6367{kg/m^3/K}*Ti - 0.0007762{kg/m^3/K^2}*Ti^2;
236 dh_field * (Vdot_HTF * rho_i) = value * width * L_sca * eta_SCA;
237 h_i = 1000{m^2/s^2} * (-18.34 + 1.498{1/K}*Ti + 0.001377{1/K^2}*Ti^2);
238 h_o = 1000{m^2/s^2} * (-18.34 + 1.498{1/K}*T_o + 0.001377{1/K^2}*T_o^2);
239 dh_field = abs(h_i - h_o);
240
241
242 METHODS
243 METHOD specify;
244 FIX DNI;
245 FIX Ti;
246 FIX T_amb;
247 FIX width;
248 FIX L_sca;
249 FIX eta_SCA;
250 FIX Vdot_HTF;
251 FIX hlfield[field_types].HCEfra;
252 FIX hlfield[field_types].type;
253
254 RUN hlfield[field_types].specify;
255 RUN Qabs.specify;
256 END specify;
257
258 METHOD values;
259 DNI := 60 {W/m^2};
260 Ti := 60{K};
261 T_amb := 30{K};
262
263 width := 5{m};
264 L_sca := 50 {m};
265 eta_SCA := 256;
266 Vdot_HTF := 400{m^3/hour};
267
268 hlfield['air'].type := 1;
269 hlfield['vacuum'].type := 2;
270 hlfield['hydrogen'].type := 3;
271
272 hlfield['air'].HCEfra := 1.0;
273 hlfield['vacuum'].HCEfra := 0.0;
274 hlfield['hydrogen'].HCEfra := 0.0;
275
276 Qabs.sun.L_st := -105 {deg};
277 Qabs.sun.L_loc := -110 {deg};
278 Qabs.DST := 0 {hour};
279 Qabs.sun.phi := 37.21 {deg};
280 Qabs.t_std := 15 {hour};
281 Qabs.L_spacing := 15 {m};
282 Qabs.W := 5 {m};
283 Qabs.F := 5 {m};
284 Qabs.eta_field := 0.857;
285 Qabs.eta_HCE := 0.832;
286 Qabs.avail_SF := 1;
287
288 RUN hlfield[field_types].values;
289 RUN Qabs.values;
290
291 (* guesses *)
292 T_o := 100{K};
293 END values;
294
295 METHOD on_load;
296 RUN specify;
297 RUN values;
298 END on_load;
299 END Qcollected;

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