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

Annotation of /trunk/models/solar/solar_field.a4l

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2626 - (hide annotations) (download) (as text)
Wed May 16 16:26:14 2012 UTC (8 years, 4 months ago) by jpye
File MIME type: text/x-ascend
File size: 6226 byte(s)
Solver options ensure good solution of trough model.
1 jpye 2575 (*
2     Model of a parabolic trough solar thermal collector field, of the type
3 jpye 2623 of SEGS VI plant, closely following the approach of Angela Patnode (2006).
4 jpye 2575 https://www.nrel.gov/analysis/sam/pdfs/thesis_patnode06.pdf
5    
6 jpye 2619 First version by Vikram Kaadam (2011) as part of GSOC2011.
7     Second version by John Pye (2012).
8 jpye 2575 *)
9 jpye 2621 REQUIRE "ivpsystem.a4l";
10 jpye 2575 REQUIRE "atoms.a4l";
11     REQUIRE "johnpye/thermo_types.a4c";
12 jpye 2621 REQUIRE "solar/tracker.a4l"; (* sun position *)
13     REQUIRE "solar/therminol.a4c"; (* oil properties *)
14     REQUIRE "johnpye/datareader/testtmy3.a4c"; (* weather data reader *)
15 jpye 2624 REQUIRE "solar/trough_receiver.a4c";
16 jpye 2575
17     (*
18 jpye 2621 Model of a parabolic trough field, based on the approach of Patnode, but
19     modified to allow for arbitrary (horizontal) orientation of the collector
20     axis.
21 jpye 2575 *)
22     MODEL parabolic_trough;
23 jpye 2576 (* field geometry *)
24 jpye 2619 W_apert "collector aperture width" IS_A distance;
25     L_spacing "'length of spacing' between troughs" IS_A distance; (* clarification required, assume centre-to-centre? *)
26 jpye 2576 L_SCA "length of a single solar collector assembly (SCA)" IS_A distance;
27     N_SCA "total number of solar collector assemblies" IS_A factor;
28     f "focal length of collector" IS_A distance;
29 jpye 2621
30 jpye 2619 A_field IS_A area;
31 jpye 2576 A_field = N_SCA * L_SCA * W_apert;
32 jpye 2575
33 jpye 2621 (* field performance *)
34 jpye 2576 Qdd_abs "solar radiation absorbed by receiver tubes per aperture area" IS_A power_per_area;
35 jpye 2621 DNI "direct normal irradiance" IS_A power_per_area;
36 jpye 2575 IAM "incidence angle modifier" IS_A factor;
37 jpye 2619 eta_shading IS_A fraction;
38 jpye 2620 eta_endloss IS_A fraction;
39 jpye 2575 eta_field "averaged field efficiency" IS_A fraction;
40     eta_HCE "averaged heat collection element efficiency" IS_A fraction;
41     avail_SF "solar field availability - on-sun portion" IS_A fraction;
42 jpye 2621
43     (* tracker and sun position *)
44 jpye 2622 sun IS_A solar_tracker_single_horiz;
45 jpye 2621 t "local time (standard, not DST correction)" ALIASES sun.t;
46 jpye 2575
47 jpye 2619 (* constants that define the location -- can we do this better?? *)
48     (* Kramer Junction *)
49     sun.loc.latitude :== 37.21 {deg};
50     sun.loc.longitude :== -117.022 {deg};
51     sun.loc.elevation :== 755 {ft};
52 jpye 2621 (* TODO the location should be extracted from the weather data *)
53 jpye 2619
54 jpye 2621 (* weather data (download your TMY3, see http://ascend4.org/Data_reader) *)
55     dr IS_A tmy3;
56     dr.tmydata.filename :== 'johnpye/datareader/723815TY.csv';
57     t, dr.t ARE_THE_SAME;
58     T_amb ALIASES dr.T;
59     T_amb, sun.T ARE_THE_SAME;
60     p_amb ALIASES dr.p;
61     p_amb, sun.p ARE_THE_SAME;
62     DNI, dr.DNI ARE_THE_SAME;
63    
64 jpye 2576 (* OPTICAL PERFORMANCE *)
65    
66 jpye 2575 (* absorbed solar radiation, Patnode eq 2.1. factored the cos(theta) into IAM. *)
67 jpye 2620 absheat_eq: Qdd_abs = DNI * IAM * eta_shading * eta_endloss * eta_field * eta_HCE * avail_SF;
68 jpye 2577 (* NOTE that eta_field and eta_HCE are given fixed values here, though their
69     components factors are shown in Patnode sect 2.2.5 *)
70 jpye 2575
71     (* TODO where is Patnode eq 2.8 ? looks like an error? *)
72    
73     (* incidence angle modifier, Patnode eq 2.9 *)
74 jpye 2577 (* TODO check... do these values assume angles in degrees? *)
75 jpye 2575 IAM * cos(sun.theta) = cos(sun.theta) + 8.84e-4 * sun.theta - 5.369e-5 * sun.theta^2;
76    
77 jpye 2621 (* row shading (Stuetzle), Patnode eq 2.12, limited to range [0,1] *)
78 jpye 2619 eta_shading_1, eta_shading_2 IS_A factor; (* before being normalised to [0,1] *)
79 jpye 2620 shading_1: eta_shading_1 = (L_spacing/W_apert) * (cos(sun.zenith)/cos(sun.theta));
80     shading_2: eta_shading_2 = 1. + 0.5*((eta_shading_1 - 1) - abs(eta_shading_1 - 1));
81     shading_3: eta_shading = (eta_shading_2 + abs(eta_shading_2))/2;
82 jpye 2619
83 jpye 2621 (* end loss (Lippke), Patnode eq 2.13, limited to range [0,1] *)
84 jpye 2620 eta_endloss_1, eta_endloss_2 IS_A factor;
85     endloss_1: eta_endloss_1 = 1 - f * tan(sun.theta) / L_SCA;
86     endloss_2: eta_endloss_2 = 1. + 0.5*((eta_endloss_1 - 1) - abs(eta_endloss_1 - 1));
87     endloss_3: eta_endloss = (eta_endloss_2 + abs(eta_endloss_2))/2;
88    
89 jpye 2576 (* LOSSES FROM HCE *)
90 jpye 2575
91 jpye 2576 T_i, T_o IS_A temperature;
92     hce_types IS_A set OF symbol_constant;
93     hce_types :== ['air','vacuum','hydrogen'];
94 jpye 2575
95 jpye 2624 recv[hce_types] IS_A receiver_loss_base;
96 jpye 2576 hce_frac[hce_types] IS_A fraction;
97     FOR i IN hce_types CREATE
98 jpye 2624 recv[i] IS_REFINED_TO receiver_loss_integ(i, T_i, T_o, DNI);
99 jpye 2576 END FOR;
100 jpye 2575
101 jpye 2576 Qdd_loss_recv "HCE losses per aperture area" IS_A power_per_area;
102 jpye 2577 (* receiver heat loss, Patnode eq 2.19 *)
103 jpye 2624 Qdd_loss_recv * W_apert = SUM[recv[i].Qd_loss * hce_frac[i] | i IN hce_types];
104 jpye 2575
105 jpye 2576 (* LOSSES FROM FIELD PIPING *)
106     DT "temperature difference ambient to field piping" IS_A delta_temperature;
107 jpye 2577 (* average external temp difference, Patnode eq 2.21 *)
108 jpye 2576 T_amb + DT = 0.5 * (T_i + T_o);
109 jpye 2575
110 jpye 2576 Qdd_loss_pipe "losses from pipework, per solar field aperture area" IS_A power_per_area;
111 jpye 2575
112 jpye 2577 (* solar field piping loses, Patnode eq 2.20 *)
113 jpye 2576 Qdd_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);
114     (* typically 10 W/m2 or less, apparently *)
115 jpye 2575
116 jpye 2576 (* NET ENERGY GAIN IN HTF *)
117 jpye 2575
118 jpye 2576 Vdot_i IS_A volume_rate;
119     Qdd_fluid IS_A power_per_area;
120 jpye 2577 (* net absorbed energy, Patnode eq 2.22 *)
121 jpye 2576 Qdd_fluid = Qdd_abs - Qdd_loss_pipe - Qdd_loss_recv;
122 jpye 2575
123 jpye 2576 inlet, outlet IS_A therminol;
124     inlet.T, T_i ARE_THE_SAME;
125     outlet.T, T_o ARE_THE_SAME;
126 jpye 2575
127 jpye 2577 Q_net IS_A energy_rate;
128     Q_net = Qdd_fluid * A_field;
129    
130     (* first-law energy balance, Patnode eq 2.23 *)
131     (outlet.h - inlet.h) * inlet.rho * Vdot_i = Q_net;
132 jpye 2575
133     METHODS
134     METHOD specify;
135 jpye 2576 RUN sun.specify;
136 jpye 2621 FIX L_spacing;
137 jpye 2576 FIX W_apert, f, L_SCA, eta_field, eta_HCE, avail_SF;
138    
139     FIX inlet.T;
140     FIX N_SCA;
141     FIX Vdot_i;
142 jpye 2621 FIX hce_frac[hce_types];
143     FIX t;
144     FREE sun.p, sun.T;
145 jpye 2575 END specify;
146    
147 jpye 2576 METHOD values;
148 jpye 2619 L_spacing := 13 {m};
149     W_apert := 4.83 {m};
150 jpye 2576 f := 5 {m};
151 jpye 2575 L_SCA := 50 {m};
152 jpye 2576 N_SCA := 256;
153 jpye 2575
154 jpye 2619 (* tracker, including sun position and geographical location *)
155     RUN sun.values;
156     sun.offset.tz := -8{h};
157     sun.offset.h := 0;
158     t := 43.5 {d};
159 jpye 2575
160 jpye 2576 (* fixed field efficiency based on values in Patnode Table 2.1 *)
161 jpye 2621 eta_field := 0.857;
162 jpye 2576 eta_HCE := 0.832;
163     avail_SF := 1;
164 jpye 2575
165 jpye 2576 inlet.T := 60{K} + 273.15 {K};
166     T_amb := 30{K} + 273.15 {K};
167     Vdot_i := 400{m^3/hour};
168 jpye 2575
169 jpye 2624 hce_frac['air'] := 0.0;
170     hce_frac['vacuum'] := 1.0;
171 jpye 2576 hce_frac['hydrogen'] := 0.0;
172    
173 jpye 2577 (* initial guess, needed for solving OK *)
174 jpye 2625 T_o := 420 {K} + 273.15{K};
175 jpye 2575 END values;
176    
177     METHOD on_load;
178     RUN specify;
179     RUN values;
180 jpye 2626 SOLVER QRSlv;
181     OPTION convopt 'RELNOM_SCALE';
182 jpye 2576 END on_load;
183     END parabolic_trough;
184 jpye 2623

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