15
15
% If a FileName is not provided, the user will be prompted to browse to
16
16
% an appropriate TMY3 file.
17
17
%
18
+ % TMY3 format was changed slightly on January 19, 2015 ([2]) to include
19
+ % Present weather variables along with changes to other variables.
20
+ %
18
21
% Input
19
22
% FileName - an optional argument which allows the user to select which
20
23
% TMY3 format file should be read. A file path may also be necessary if
106
109
% TMYData.Lprecipquantity - The period of accumulation for the liquid precipitation depth field, hour
107
110
% TMYData.LprecipSource - See [1], Table 1-5, 8760x1 cell array of strings
108
111
% TMYData.LprecipUncertainty - See [1], Table 1-6
112
+ % TMYData.PresWth - Present weather code, see [2]. Only available in
113
+ % TMY3 files created after the January 2015 TMY3 update.
114
+ % TMYData.PresWthSource - Present weather code source, see [2]. Only
115
+ % available in TMY3 files created after the Jan. 2015 TMY3 update.
116
+ % TMYData.PresWthUncertainty - Present weather code uncertainty, see
117
+ % [2]. Only available in TMY3 files after the Jan. 2015 update.
109
118
%
110
119
% Reference
111
120
% [1] Wilcox, S and Marion, W., 2008. Users Manual for TMY3 Data Sets,
112
121
% NREL/TP-581-43156, National Renewable Energy Laboratory. Available at
113
122
% <http://www.nrel.gov/docs/fy08osti/43156.pdf>.
114
123
%
124
+ % [2] National Solar Radiation Data Base, 1991-2005 Update: Typical
125
+ % Meteorological Year 3.
126
+ % http://rredc.nrel.gov/solar/old_data/nsrdb/1991-2005/tmy3/ retrieved June
127
+ % 6, 2016.
128
+ %
115
129
%
116
130
% See also
117
131
% DATEVEC PVL_MAKELOCATIONSTRUCT PVL_MAKETIMESTRUCT PVL_READTMY2
136
150
Header2 = textscan(FileID , ' %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s ' ,1 ,' Delimiter' ,' ,' );
137
151
DataLines = textscan(FileID , ' %s%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%f%s%f ' ,8760 ,' Delimiter' ,' ,' );
138
152
ST = fclose(FileID );
139
- %% Read in the data from the struct created from the textscan
153
+
154
+ % Parse out the header information since it is common to both formats
140
155
TMYData.SiteID = Header1{1 };
141
156
TMYData.StationName = Header1{2 };
142
157
TMYData.StationState = Header1{3 };
143
158
TMYData.SiteTimeZone = Header1{4 };
144
159
TMYData.SiteLatitude = Header1{5 };
145
160
TMYData.SiteLongitude = Header1{6 };
146
161
TMYData.SiteElevation = Header1{7 };
162
+ %% Determine if the file is from pre-January 19, 2015 or post-20150119
163
+ if isempty(strfind(char(DataLines{1 ,1 }{1 ,1 }), ' PresWth' ))
164
+ % The string 'PresWth' was not found in DataLines{1,1}{1,1}, so we have a
165
+ % pre-2015 TMY3 file
166
+ TMYData = ParsePre2015TMY(DataLines );
167
+ else
168
+ % The string 'PresWth' was found in DataLines{1,1}{1,1}, so we have a
169
+ % post-2015 TMY3 file. We'll need to re-import the file to accomodate
170
+ % the additional columns.
171
+ FileID = fopen(FilePathAndNameAndExt );
172
+ Header1 = textscan(FileID , ' %f %q%q%f%f%f%f ' , 1 ,' Delimiter' ,' ,' );
173
+ Header2 = textscan(FileID , ' %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s ' ,1 ,' Delimiter' ,' ,' );
174
+ DataLines = textscan(FileID , ' %s%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%s%f%f%f%s%f%f%s%f ' ,8760 ,' Delimiter' ,' ,' );
175
+ ST = fclose(FileID );
176
+
177
+ TMYData = ParsePost2015TMY(DataLines );
178
+ end
179
+ end
147
180
181
+ function TMYData = ParsePre2015TMY(DataLines )
182
+
183
+ %% Read in the data from the struct created from the textscan for TMY3
184
+ % This fuction will read pre-2015 TMY3 files and sort them into column
185
+ % vectors. A different format is used for TMY3 files after the January 2015
186
+ % update, and thus requires a different function.
187
+
188
+ TMYData.DateString = DataLines{1 };
189
+ TMYData.TimeString = DataLines{2 };
190
+ TMYData.ETR = DataLines{3 };
191
+ TMYData.ETRN = DataLines{4 };
192
+ TMYData.GHI = DataLines{5 };
193
+ TMYData.GHISource = DataLines{6 };
194
+ TMYData.GHIUncertainty = DataLines{7 };
195
+ TMYData.DNI = DataLines{8 };
196
+ TMYData.DNISource = DataLines{9 };
197
+ TMYData.DNIUncertainty = DataLines{10 };
198
+ TMYData.DHI = DataLines{11 };
199
+ TMYData.DHISource = DataLines{12 };
200
+ TMYData.DHIUncertainty = DataLines{13 };
201
+ TMYData.GHillum = DataLines{14 };
202
+ TMYData.GHillumSource = DataLines{15 };
203
+ TMYData.GHillumUncertainty = DataLines{16 };
204
+ TMYData.DNillum = DataLines{17 };
205
+ TMYData.DNillumSource = DataLines{18 };
206
+ TMYData.DNillumUncertainty = DataLines{19 };
207
+ TMYData.DHillum = DataLines{20 };
208
+ TMYData.DHillumSource = DataLines{21 };
209
+ TMYData.DHillumUncertainty = DataLines{22 };
210
+ TMYData.Zenithlum = DataLines{23 };
211
+ TMYData.ZenithlumSource = DataLines{24 };
212
+ TMYData.ZenithlumUncertainty = DataLines{25 };
213
+ TMYData.TotCld = DataLines{26 };
214
+ TMYData.TotCldSource = DataLines{27 };
215
+ TMYData.TotCldUnertainty = DataLines{28 };
216
+ TMYData.OpqCld = DataLines{29 };
217
+ TMYData.OpqCldSource = DataLines{30 };
218
+ TMYData.OpqCldUncertainty = DataLines{31 };
219
+ TMYData.DryBulb = DataLines{32 };
220
+ TMYData.DryBulbSource = DataLines{33 };
221
+ TMYData.DryBulbUncertainty = DataLines{34 };
222
+ TMYData.DewPoint = DataLines{35 };
223
+ TMYData.DewPointSource = DataLines{36 };
224
+ TMYData.DewPointUncertainty = DataLines{37 };
225
+ TMYData.RHum = DataLines{38 };
226
+ TMYData.RHumSource = DataLines{39 };
227
+ TMYData.RHumUncertainty = DataLines{40 };
228
+ TMYData.Pressure = DataLines{41 };
229
+ TMYData.PressureSource = DataLines{42 };
230
+ TMYData.PressureUncertainty = DataLines{43 };
231
+ TMYData.Wdir = DataLines{44 };
232
+ TMYData.WdirSource = DataLines{45 };
233
+ TMYData.WdirUncertainty = DataLines{46 };
234
+ TMYData.Wspd = DataLines{47 };
235
+ TMYData.WspdSource = DataLines{48 };
236
+ TMYData.WspdUncertainty = DataLines{49 };
237
+ TMYData.Hvis = DataLines{50 };
238
+ TMYData.HvisSource = DataLines{51 };
239
+ TMYData.HvisUncertainty = DataLines{52 };
240
+ TMYData.CeilHgt = DataLines{53 };
241
+ TMYData.CeilHgtSource = DataLines{54 };
242
+ TMYData.CeilHgtUncertainty = DataLines{55 };
243
+ TMYData.Pwat = DataLines{56 };
244
+ TMYData.PwatSource = DataLines{57 };
245
+ TMYData.PwatUncertainty = DataLines{58 };
246
+ TMYData.AOD = DataLines{59 };
247
+ TMYData.AODSource = DataLines{60 };
248
+ TMYData.AODUncertainty = DataLines{61 };
249
+ TMYData.Alb = DataLines{62 };
250
+ TMYData.AlbSource = DataLines{63 };
251
+ TMYData.AlbUncertainty = DataLines{64 };
252
+ TMYData.Lprecipdepth = DataLines{65 };
253
+ TMYData.Lprecipquantity = DataLines{66 };
254
+ TMYData.LprecipSource = DataLines{67 };
255
+ TMYData.LprecipUncertainty = DataLines{68 };
256
+ %% Create a MATLAB datenum from the string date and time
257
+ TMYData.DateNumber = datenum(strcat(TMYData .DateString ,' -' ,TMYData .TimeString ),' mm/dd/yyyy-HH:MM' ); % MATLAB datenum format
258
+ end
259
+
260
+
261
+
262
+ function TMYData = ParsePost2015TMY(DataLines )
263
+
264
+ %% Read in the data from the struct created from the textscan
148
265
TMYData.DateString = DataLines{1 };
149
266
TMYData.TimeString = DataLines{2 };
150
267
TMYData.ETR = DataLines{3 };
213
330
TMYData.Lprecipquantity = DataLines{66 };
214
331
TMYData.LprecipSource = DataLines{67 };
215
332
TMYData.LprecipUncertainty = DataLines{68 };
333
+ TMYData.PresWth = DataLines{69 };
334
+ TMYData.PresWthSource = DataLines{70 };
335
+ TMYData.PresWthUncertainty = DataLines{71 };
216
336
%% Create a MATLAB datenum from the string date and time
217
- TMYData.DateNumber = datenum(strcat(TMYData .DateString ,' -' ,TMYData .TimeString ),' mm/dd/yyyy-HH:MM' ); % MATLAB datenum format
337
+ TMYData.DateNumber = datenum(strcat(TMYData .DateString ,' -' ,TMYData .TimeString ),' mm/dd/yyyy-HH:MM' ); % MATLAB datenum format
338
+ end
0 commit comments