1 | ;+ |
---|
2 | ; |
---|
3 | ; @file_comments |
---|
4 | ; GLAMBOUNDARY 2 elements vector, [lon1,lon2], the longitude |
---|
5 | ; boundaries that should be used to visualize the data. |
---|
6 | ; lon2 > lon1 |
---|
7 | ; lon2 - lon1 le 360 |
---|
8 | ; key_shift will be defined according to GLAMBOUNDARY. |
---|
9 | ; |
---|
10 | ; @param filename |
---|
11 | ; |
---|
12 | ; @param filesname |
---|
13 | ; |
---|
14 | ; @param jpt1file |
---|
15 | ; |
---|
16 | ; @param varsname |
---|
17 | ; |
---|
18 | ; @param varslev |
---|
19 | ; |
---|
20 | ; @param swapbytes |
---|
21 | ; |
---|
22 | ; @param bigendian |
---|
23 | ; |
---|
24 | ; @param littleendian |
---|
25 | ; |
---|
26 | ; @param f77sequential |
---|
27 | ; |
---|
28 | ; @param fileheader |
---|
29 | ; |
---|
30 | ; @param theader |
---|
31 | ; |
---|
32 | ; @param xyheader |
---|
33 | ; |
---|
34 | ; @keyword VARFMT |
---|
35 | ; |
---|
36 | ; @keyword _EXTRA |
---|
37 | ; |
---|
38 | ; @version |
---|
39 | ; $Id$ |
---|
40 | ; |
---|
41 | ;- |
---|
42 | PRO scanctl, filename, filesname, jpt1file, varsname, varslev, swapbytes, bigendian, littleendian, f77sequential, fileheader, theader, xyheader, VARFMT=varfmt, _EXTRA=ex |
---|
43 | ; |
---|
44 | compile_opt idl2, strictarrsubs |
---|
45 | ; |
---|
46 | @common |
---|
47 | |
---|
48 | time1 = systime(1) ; for key_performance |
---|
49 | |
---|
50 | ;------------------------ |
---|
51 | ; DTYPE |
---|
52 | ;------------------------ |
---|
53 | spawn, '\grep -i "^DTYPE" '+filename, notgood |
---|
54 | if keyword_set(notgood) then begin |
---|
55 | ras = report( 'This program is not adapted to data type station or grib. Sorry...') |
---|
56 | stop |
---|
57 | endif |
---|
58 | ;------------------------ |
---|
59 | ; UNDEF, define valmask |
---|
60 | ;------------------------ |
---|
61 | spawn, '\grep -i "^UNDEF" '+filename, valmask |
---|
62 | valmask = strtrim(valmask, 2) |
---|
63 | valmask = strsplit(valmask[0],/extract) |
---|
64 | valmask = float(valmask[1]) |
---|
65 | ;------------------------ |
---|
66 | ; Headers |
---|
67 | ;------------------------ |
---|
68 | spawn, '\grep -i "^FILEHEADER" '+filename, fileheader |
---|
69 | fileheader = strtrim(fileheader, 2) |
---|
70 | if keyword_set(fileheader) then BEGIN |
---|
71 | fileheader = strsplit(fileheader[0],/extract) |
---|
72 | fileheader = long(fileheader[1]) |
---|
73 | ENDIF ELSE fileheader = 0L |
---|
74 | spawn, '\grep -i "^THEADER" '+filename, theader |
---|
75 | theader = strtrim(theader, 2) |
---|
76 | if keyword_set(theader) then BEGIN |
---|
77 | theader = strsplit(theader[0],/extract) |
---|
78 | theader = long(theader[1]) |
---|
79 | ENDIF ELSE theader = 0L |
---|
80 | spawn, '\grep -i "^XYHEADER" '+filename, xyheader |
---|
81 | xyheader = strtrim(xyheader, 2) |
---|
82 | if keyword_set(xyheader) then BEGIN |
---|
83 | xyheader = strsplit(xyheader[0],/extract) |
---|
84 | xyheader = long(xyheader[1]) |
---|
85 | ENDIF ELSE xyheader = 0L |
---|
86 | ;------------------------ |
---|
87 | ;------------------------ |
---|
88 | ; find the x axis |
---|
89 | ;------------------------ |
---|
90 | ;------------------------ |
---|
91 | spawn, '\sed -n -e ''/^#/d'' -e ''/^[Xx][Dd][Ee][Ff]/,/^[Yy][Dd][Ee][Ff]/p'' '+filename, xdef |
---|
92 | if xdef[0] EQ '' then BEGIN |
---|
93 | ras = report('Bad definition of xdef or ydef') |
---|
94 | stop |
---|
95 | ENDIF |
---|
96 | xdef = xdef[0:n_elements(xdef)-2] |
---|
97 | if n_elements(xdef) NE 1 then begin |
---|
98 | xdef = [byte(xdef), replicate(byte(' '),1,n_elements(xdef))] |
---|
99 | xdef = xdef[where(xdef NE 0)] |
---|
100 | xdef = string(xdef) |
---|
101 | endif |
---|
102 | xdef = strtrim(xdef[0], 2) |
---|
103 | xdef = strsplit(xdef,/extract) |
---|
104 | jpi = long(xdef[1]) |
---|
105 | case strupcase(xdef[2]) of |
---|
106 | 'LINEAR':xaxis = float(xdef[3])+findgen(jpi)*float(xdef[4]) |
---|
107 | 'LEVELS':xaxis = float(xdef[3:n_elements(xdef)-1]) |
---|
108 | ENDCASE |
---|
109 | ;------------------------ |
---|
110 | ;------------------------ |
---|
111 | ; find the y axis |
---|
112 | ;------------------------ |
---|
113 | ;------------------------ |
---|
114 | spawn, '\sed -n -e ''/^#/d'' -e ''/^[Yy][Dd][Ee][Ff]/,/^[Zz][Dd][Ee][Ff]/p'' '+filename, ydef |
---|
115 | if ydef[0] EQ '' then BEGIN |
---|
116 | ras = report('Bad definition of ydef or zdef') |
---|
117 | stop |
---|
118 | ENDIF |
---|
119 | ydef = ydef[0:n_elements(ydef)-2] |
---|
120 | if n_elements(ydef) NE 1 then begin |
---|
121 | ydef = [byte(ydef), replicate(byte(' '),1,n_elements(ydef))] |
---|
122 | ydef = ydef[where(ydef NE 0)] |
---|
123 | ydef = string(ydef) |
---|
124 | endif |
---|
125 | ydef = strtrim(ydef[0], 2) |
---|
126 | ydef = strsplit(ydef,/extract) |
---|
127 | jpj = long(ydef[1]) |
---|
128 | case strupcase(ydef[2]) of |
---|
129 | 'LINEAR':yaxis = float(ydef[3])+findgen(jpj)*float(ydef[4]) |
---|
130 | 'LEVELS':yaxis = float(ydef[3:n_elements(ydef)-1]) |
---|
131 | 'GAUST62':BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
132 | 'GAUSR15':BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
133 | 'GAUSR20':BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
134 | 'GAUSR30':BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
135 | 'GAUSR40':BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
136 | ELSE:BEGIN & ras = report( 'Not yet coded...') & stop & END |
---|
137 | endcase |
---|
138 | ;------------------------ |
---|
139 | ;------------------------ |
---|
140 | ; find the z axis |
---|
141 | ;------------------------ |
---|
142 | ;------------------------ |
---|
143 | spawn, '\sed -n -e ''/^#/d'' -e ''/^[Zz][Dd][Ee][Ff]/,/^[Tt][Dd][Ee][Ff]/p'' '+filename, zdef |
---|
144 | if zdef[0] EQ '' then BEGIN |
---|
145 | ras = report( 'Bad definition of zdef or tdef') |
---|
146 | stop |
---|
147 | ENDIF |
---|
148 | zdef = zdef[0:n_elements(zdef)-2] |
---|
149 | if n_elements(zdef) NE 1 then begin |
---|
150 | zdef = [byte(zdef), replicate(byte(' '),1,n_elements(zdef))] |
---|
151 | zdef = zdef[where(zdef NE 0)] |
---|
152 | zdef = string(zdef) |
---|
153 | endif |
---|
154 | zdef = strtrim(zdef[0], 2) |
---|
155 | zdef = strsplit(zdef,/extract) |
---|
156 | jpk = long(zdef[1]) |
---|
157 | case strupcase(zdef[2]) of |
---|
158 | 'LINEAR':zaxis = float(zdef[3])+findgen(jpk)*float(zdef[4]) |
---|
159 | 'LEVELS':zaxis = float(zdef[3:n_elements(zdef)-1]) |
---|
160 | ENDCASE |
---|
161 | ;------------------------ |
---|
162 | ;------------------------ |
---|
163 | ; compute the grid |
---|
164 | ;------------------------ |
---|
165 | ;------------------------ |
---|
166 | computegrid, xaxis = xaxis, yaxis = yaxis, zaxis = zaxis, _EXTRA = ex |
---|
167 | domdef |
---|
168 | ;------------------------ |
---|
169 | ;------------------------ |
---|
170 | ; find the time axis |
---|
171 | ;------------------------ |
---|
172 | ;------------------------ |
---|
173 | spawn, '\grep -i "^TDEF" '+filename, timedef |
---|
174 | timedef = strupcase(strtrim(timedef, 2)) |
---|
175 | timedef = strsplit(timedef[0],/extract) |
---|
176 | jpt = long(timedef[1]) |
---|
177 | ;------------------------ |
---|
178 | ; initial date: y0, m0, d0, h0, mn0 |
---|
179 | ; -> Julian day of IDL: julday(m0, d0, y0, h0, mn0, 00) |
---|
180 | ;------------------------ |
---|
181 | t0 = timedef[3] |
---|
182 | monthsname = string(format='(C(CMOA))',31*(indgen(12))) |
---|
183 | case 1 OF |
---|
184 | ; h[h]:mmZd[d]mmmyy[yy] |
---|
185 | strpos(t0, ':') NE -1:BEGIN |
---|
186 | pp = strpos(t0, ':') |
---|
187 | h0 = long(strmid(t0, 0, pp)) |
---|
188 | mn0 = long(strmid(t0, pp+1, 2)) |
---|
189 | pp = strpos(t0, 'Z') |
---|
190 | dd = byte(strmid(t0, pp+2, 1)) LT byte('A') |
---|
191 | d0 = long(strmid(t0, pp+1, 1+dd)) |
---|
192 | m0 = (where(monthsname EQ strmid(t0, pp+2+dd, 3)))[0]+1 |
---|
193 | y0 = long(strmid(t0, pp+5+dd)) |
---|
194 | END |
---|
195 | ; m[m]Zd[d]mmmyy[yy] |
---|
196 | strpos(t0, 'Z') NE -1:BEGIN |
---|
197 | h0 = 0+12 |
---|
198 | pp = strpos(t0, 'Z') |
---|
199 | mn0 = long(strmid(t0, 0, pp)) |
---|
200 | dd = byte(strmid(t0, pp+2, 1)) LT byte('A') |
---|
201 | d0 = long(strmid(t0, pp+1, 1+dd)) |
---|
202 | m0 = (where(monthsname EQ strmid(t0, pp+2+dd, 3)))[0]+1 |
---|
203 | y0 = long(strmid(t0, pp+5+dd)) |
---|
204 | END |
---|
205 | ; d[d]mmmyy[yy] |
---|
206 | (byte(strmid(t0, 0, 1)) LT byte('A'))[0]:BEGIN |
---|
207 | h0 = 0+12 |
---|
208 | mn0 = 0 |
---|
209 | dd = byte(strmid(t0, 1, 1)) LT byte('A') |
---|
210 | d0 = long(strmid(t0, 0, 1+dd)) |
---|
211 | m0 = (where(monthsname EQ strmid(t0, 1+dd, 3)))[0]+1 |
---|
212 | y0 = long(strmid(t0, 4+dd)) |
---|
213 | END |
---|
214 | ; mmmyy[yy] |
---|
215 | ELSE:BEGIN |
---|
216 | h0 = 0+12 |
---|
217 | mn0 = 0 |
---|
218 | d0 = 1 |
---|
219 | m0 = (where(monthsname EQ strmid(t0, 0, 3)))[0]+1 |
---|
220 | y0 = long(strmid(t0, 3)) |
---|
221 | END |
---|
222 | ENDCASE |
---|
223 | ; if y0 is a two digit integer -> between 1950 and 2049 |
---|
224 | case 1 of |
---|
225 | y0 LE 49:y0 = 2000+y0 |
---|
226 | y0 LE 99:y0 = 1900+y0 |
---|
227 | ELSE: |
---|
228 | ENDCASE |
---|
229 | ;------------------------ |
---|
230 | ; increment date and definition of the calendar with IDL Julian days |
---|
231 | ;------------------------ |
---|
232 | tstep = timedef[4] |
---|
233 | tsval = long(strmid(tstep,0, strlen(tstep)-2)) |
---|
234 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
235 | 'mn':time = julday(m0, d0, y0, h0, mn0+lindgen(jpt)*tsval, 0) |
---|
236 | 'hr':time = julday(m0, d0, y0, h0+lindgen(jpt)*tsval, mn0, 0) |
---|
237 | 'dy':time = julday(m0, d0+lindgen(jpt)*tsval, y0, h0, mn0, 0) |
---|
238 | 'mo':time = julday(m0+lindgen(jpt)*tsval, d0, y0, h0, mn0, 0) |
---|
239 | 'yr':time = julday(m0, d0, y0+lindgen(jpt)*tsval, h0, mn0, 0) |
---|
240 | ENDCASE ; |
---|
241 | ; shit the calendar to correspond to the time step. |
---|
242 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
243 | 'dy':time = long(time) |
---|
244 | 'mo':time = long(time)+14L |
---|
245 | 'yr':time = long(time)+365L/2 |
---|
246 | ELSE: |
---|
247 | endcase |
---|
248 | ;------------------------ |
---|
249 | ; OPTIONS |
---|
250 | ;------------------------ |
---|
251 | spawn, '\grep -i "^OPTIONS" '+filename, options |
---|
252 | options = strtrim(options, 2) |
---|
253 | options = strlowcase(options[0]) |
---|
254 | key_yreverse = strpos(options, 'yrev') NE -1 |
---|
255 | key_zreverse = strpos(options, 'zrev') EQ -1 |
---|
256 | multifiles = strpos(options, 'template') NE -1 |
---|
257 | f77sequential = strpos(options, 'sequential') NE -1 |
---|
258 | swapbytes = strpos(options, 'byteswapped') NE -1 |
---|
259 | bigendian = strpos(options, 'big_endian') NE -1 |
---|
260 | littleendian = strpos(options, 'little_endian') NE -1 |
---|
261 | cray = strpos(options, 'cray_32bit_ieee') NE -1 |
---|
262 | IF cray THEN BEGIN & ras = report( 'cray_32bit_ieee; Not yet coded...') & stop & ENDIF |
---|
263 | cal365 = strpos(options, '365_day_calendar') NE -1 |
---|
264 | IF cal365 THEN BEGIN & ras = report( '365_day_calenda; Not yet coded...') & stop & ENDIF |
---|
265 | ;------------------------ |
---|
266 | ;------------------------ |
---|
267 | ; building the filesname |
---|
268 | ;------------------------ |
---|
269 | ;------------------------ |
---|
270 | spawn, '\grep -i "^DSET" '+filename, files |
---|
271 | files = strtrim(files[0], 2) |
---|
272 | files = strsplit(files,/extract) |
---|
273 | if n_elements(files) NE 2 then begin |
---|
274 | ras = report(['Bad definition of the filename. There should be 2 elements:', $ |
---|
275 | 'DEST and 1 filename that may define many files']) |
---|
276 | stop |
---|
277 | endif |
---|
278 | files = files[1] |
---|
279 | ; files = strmid(files[0], strpos(files[0],' ', /reverse_search)+1) |
---|
280 | filesname = files |
---|
281 | if keyword_set(multifiles) then begin |
---|
282 | ; minutes |
---|
283 | if (stregex(files,'%i?n2'))[0] NE -1 then begin |
---|
284 | filetsep = 'mn' |
---|
285 | mnend = long(mn0+jpt-1) |
---|
286 | tmp = strarr(hend-h0+1) |
---|
287 | for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?n2',/extract,/regex), string(mn0+i, format = '(i2.2)')) |
---|
288 | filesname = strjoin(tmp, '!@#$') |
---|
289 | endif |
---|
290 | ; hours |
---|
291 | if (stregex(files,'%i?[hf][123]'))[0] NE -1 then begin |
---|
292 | filetsep = 'hr' |
---|
293 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
294 | 'mn':hend = long(h0+(jpt+mn0-1-1)/60.) |
---|
295 | 'hr':hend = long(h0+jpt-1) |
---|
296 | endcase |
---|
297 | tmp = strarr(hend-h0+1) |
---|
298 | case 1 of |
---|
299 | stregex(files,'%i?h1') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?h1',/extract,/regex), strtrim(h0+i, 1)) |
---|
300 | stregex(files,'%i?h2') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?h2',/extract,/regex), string(h0+i, format = '(i2.2)')) |
---|
301 | stregex(files,'%f2') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%f2',/extract,/regex), string(h0+i, format = '(i3.2)')) |
---|
302 | stregex(files,'%i?[hf]3') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?[hf]3',/extract,/regex), string(h0+i, format = '(i3.3)')) |
---|
303 | endcase |
---|
304 | filesname = strjoin(tmp, '!@#$') |
---|
305 | endif |
---|
306 | ; days |
---|
307 | if (stregex(files,'%i?d[12]'))[0] NE -1 then begin |
---|
308 | filetsep = 'dy' |
---|
309 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
310 | 'mn':dend = long(d0+(jpt+mn0-1-1)/1440.) |
---|
311 | 'hr':dend = long(d0+(jpt+h0-1-1)/24.) |
---|
312 | 'dy':dend = long(d0+jpt-1) |
---|
313 | endcase |
---|
314 | tmp = strarr(dend-d0+1) |
---|
315 | case 1 of |
---|
316 | stregex(files,'%i?d1') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?d1',/extract,/regex), strtrim(d0+i, 1)) |
---|
317 | stregex(files,'%i?d2') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?d2',/extract,/regex), string(d0+i, format = '(i2.2)')) |
---|
318 | endcase |
---|
319 | filesname = strjoin(tmp, '!@#$') |
---|
320 | endif |
---|
321 | ; months |
---|
322 | if (stregex(files,'%i?m[12c]'))[0] NE -1 then begin |
---|
323 | filetsep = 'mo' |
---|
324 | tmp = strarr(12) |
---|
325 | case 1 of |
---|
326 | stregex(files,'%i?m1') NE -1:for i = 1, 12 do tmp[i-1] = strjoin(strsplit(filesname,'%i?m1',/extract,/regex), strtrim(i, 1)) |
---|
327 | stregex(files,'%i?m2') NE -1:for i = 1, 12 do tmp[i-1] = strjoin(strsplit(filesname,'%i?m2',/extract,/regex), string(i, format = '(i2.2)')) |
---|
328 | stregex(files,'%i?mc') NE -1:for i = 1, 12 do tmp[i-1] = strjoin(strsplit(filesname,'%i?mc',/extract,/regex), monthsname[i-1]) |
---|
329 | endcase |
---|
330 | filesname = strjoin(tmp, '!@#$') |
---|
331 | endif |
---|
332 | ; years |
---|
333 | if (stregex(files,'%i?y[24]'))[0] NE -1 then begin |
---|
334 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
335 | 'dy':yend = long(y0+(jpt+d0-1-1)/365.) |
---|
336 | 'mo':yend = long(y0+(jpt+m0-1-1)/12.) |
---|
337 | 'yr':yend = long(y0+jpt-1) |
---|
338 | ELSE:yend = y0 |
---|
339 | endcase |
---|
340 | tmp = strarr(yend-y0+1) |
---|
341 | case 1 of |
---|
342 | stregex(files,'%i?y2') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?y2',/extract,/regex), string((y0+i)-100*((y0+i)/100), format = '(i2.2)')) |
---|
343 | stregex(files,'%i?y4') NE -1:for i = 0, n_elements(tmp)-1 do tmp[i] = strjoin(strsplit(filesname,'%i?y]4',/extract,/regex), string(y0+i, format = '(i4.4)')) |
---|
344 | endcase |
---|
345 | filesname = strjoin(tmp, '!@#$') |
---|
346 | endif |
---|
347 | filesname = strsplit(filesname, '!@#$', /extract) |
---|
348 | ; |
---|
349 | ; time step unit of each file: |
---|
350 | ; |
---|
351 | case 1 of |
---|
352 | (stregex(files,'%i?n2'))[0] NE -1:filetsep = 'mn' |
---|
353 | (stregex(files,'%i?[hf][123]'))[0] NE -1:filetsep = 'hr' |
---|
354 | (stregex(files,'%i?d[12]'))[0] NE -1:filetsep = 'dy' |
---|
355 | (stregex(files,'%i?m[12c]'))[0] NE -1: filetsep = 'mo' |
---|
356 | (stregex(files,'%i?y[24]'))[0] NE -1:filetsep = 'yr' |
---|
357 | ENDCASE |
---|
358 | ; |
---|
359 | ; number of time steps for each files |
---|
360 | ; |
---|
361 | case strlowcase(strmid(tstep, 1, /reverse)) of |
---|
362 | 'mn':BEGIN |
---|
363 | case filetsep of |
---|
364 | 'yr':jpt1file = 60L*24L*365L |
---|
365 | 'mo':jpt1file = 60L*24L*30L |
---|
366 | 'dy':jpt1file = 60L*24L |
---|
367 | 'hr':jpt1file = 60L |
---|
368 | 'mn':jpt1file = 1L |
---|
369 | endcase |
---|
370 | END |
---|
371 | 'hr':BEGIN |
---|
372 | case filetsep of |
---|
373 | 'yr':jpt1file = 24L*365L |
---|
374 | 'mo':jpt1file = 24L*30L |
---|
375 | 'dy':jpt1file = 24L |
---|
376 | 'hr':jpt1file = 1L |
---|
377 | endcase |
---|
378 | END |
---|
379 | 'dy':BEGIN |
---|
380 | case filetsep of |
---|
381 | 'yr':jpt1file = 365L |
---|
382 | 'mo':jpt1file = 30L |
---|
383 | 'dy':jpt1file = 1L |
---|
384 | endcase |
---|
385 | END |
---|
386 | 'mo':BEGIN |
---|
387 | case filetsep of |
---|
388 | 'yr':jpt1file = 12L |
---|
389 | 'mo':jpt1file = 1L |
---|
390 | endcase |
---|
391 | END |
---|
392 | 'yr':jpt1file = 1L |
---|
393 | endcase |
---|
394 | ; |
---|
395 | ; number of files |
---|
396 | ; |
---|
397 | nof = ceil(jpt/(1.*jpt1file)) |
---|
398 | filesname = filesname[0:nof-1] |
---|
399 | ENDIF ELSE BEGIN |
---|
400 | nof = 1 |
---|
401 | jpt1file = jpt |
---|
402 | ENDELSE |
---|
403 | ; first character ^ |
---|
404 | if stregex(files,'^\^') GE 0 THEN BEGIN |
---|
405 | iodir = strmid(filename,0,strpos(filename,'/',/reverse_search)+1) |
---|
406 | for i = 0, nof-1 do filesname[i] = iodir+strmid(filesname[i], 1) |
---|
407 | ENDIF |
---|
408 | ;------------------------ |
---|
409 | ;------------------------ |
---|
410 | ; extracting the variables |
---|
411 | ;------------------------ |
---|
412 | ;------------------------ |
---|
413 | spawn, '\grep -i "^VARS" '+filename, nvars |
---|
414 | nvars = strtrim(nvars, 2) |
---|
415 | nvars = strsplit(nvars[0],/extract) |
---|
416 | nvars = long(nvars[1]) |
---|
417 | spawn, '\sed -n -e ''/^#/d'' -e ''/^[Vv][Aa][Rr][Ss]/,/^[Ee][Nn][Dd][Vv][Aa][Rr][Ss]/p'' '+filename, varlist |
---|
418 | if n_elements(varlist) LE 2 then begin |
---|
419 | ras = report( 'No lines between vars and endvars???') |
---|
420 | stop |
---|
421 | endif |
---|
422 | varlist = varlist[1:n_elements(varlist)-2] |
---|
423 | if n_elements(varlist) NE nvars then begin |
---|
424 | ras = report( 'Number of variables indicated by VARS ('+strtrim(nvars, 1)+') differs from number of lines (without ''#'' at the beginning) located between VARS and ENDVARS: '+strtrim(n_elements(varlist), 1)) |
---|
425 | stop |
---|
426 | ENDIF |
---|
427 | varsname = strarr(nvars) |
---|
428 | varsdes = strarr(nvars) |
---|
429 | varslev = lonarr(nvars) |
---|
430 | for i = 0, nvars-1 do BEGIN |
---|
431 | varlist[i] = strtrim(varlist[i], 2) |
---|
432 | tmp = strsplit(varlist[i],/extract) |
---|
433 | if strmid(tmp[2], 0, 2) EQ '-1' then BEGIN |
---|
434 | case long(strmid(tmp[2], 3, 2)) of |
---|
435 | 10:BEGIN |
---|
436 | ras = report( 'Special data formats, units = -1,10... Not yet coded...') |
---|
437 | stop |
---|
438 | END |
---|
439 | 20:BEGIN |
---|
440 | ras = report( 'Special data formats, units = -1,20... Not yet coded...') |
---|
441 | stop |
---|
442 | END |
---|
443 | 30:BEGIN |
---|
444 | ras = report( 'Special data formats, units = -1,30... Not yet coded...') |
---|
445 | stop |
---|
446 | END |
---|
447 | 40:BEGIN |
---|
448 | case long(strmid(tmp[2], 6)) of |
---|
449 | 1:varfmt = 'byte' |
---|
450 | 2:varfmt = 'uint' |
---|
451 | -2:varfmt = 'int' |
---|
452 | 4:varfmt = 'long' |
---|
453 | ELSE:BEGIN |
---|
454 | ras = report( 'Bad definition of the special data formats: ') |
---|
455 | ras = report(long(strmid(tmp[2],6))+' should be equal to 1, 2, -2 or 4') |
---|
456 | stop |
---|
457 | END |
---|
458 | endcase |
---|
459 | END |
---|
460 | ELSE:BEGIN |
---|
461 | ras = report( 'Special data formats, units = -1, ... Not yet coded...') |
---|
462 | stop |
---|
463 | END |
---|
464 | endcase |
---|
465 | endif |
---|
466 | varsname[i] = tmp[0] |
---|
467 | varsdes[i] = strjoin(tmp[3:n_elements(tmp)-1], ' ') |
---|
468 | varslev[i] = long(tmp[1]) |
---|
469 | ENDFOR |
---|
470 | varslev = 1 > varslev |
---|
471 | |
---|
472 | ; |
---|
473 | ccmeshparameters.filename = filename |
---|
474 | ccmeshparameters.filename = 'Grads' |
---|
475 | ; |
---|
476 | IF keyword_set(key_performance) EQ 1 THEN print, 'time scanctl', systime(1)-time1 |
---|
477 | |
---|
478 | return |
---|
479 | end |
---|