1
2 /*
3 * Include ./configure's header file
4 */
5 #ifdef HAVE_CONFIG_H
6 #include <config.h>
7 #endif
8
9 #include <sys/types.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include <stddef.h>
14 #include <math.h>
15 #include <float.h>
16 /* version 1.2.1 of grib headers w. ebisuzaki */
17
18 #ifndef INT2
19 #define INT2(a,b) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 0x7f) << 8) + b))
20 #endif
21
22 #define BDS_LEN(bds) ((int) ((bds[0]<<16)+(bds[1]<<8)+bds[2]))
23 #define BDS_Flag(bds) (bds[3])
24
25 #define BDS_Grid(bds) ((bds[3] & 128) == 0)
26 #define BDS_Harmonic(bds) (bds[3] & 128)
27
28 #define BDS_Packing(bds) ((bds[3] & 64) != 0)
29 #define BDS_SimplePacking(bds) ((bds[3] & 64) == 0)
30 #define BDS_ComplexPacking(bds) ((bds[3] & 64) != 0)
31
32 #define BDS_OriginalType(bds) ((bds[3] & 32) != 0)
33 #define BDS_OriginalFloat(bds) ((bds[3] & 32) == 0)
34 #define BDS_OriginalInt(bds) ((bds[3] & 32) != 0)
35
36 #define BDS_MoreFlags(bds) ((bds[3] & 16) != 0)
37 #define BDS_UnusedBits(bds) ((int) (bds[3] & 15))
38
39 #define BDS_BinScale(bds) INT2(bds[4],bds[5])
40
41 #define BDS_RefValue(bds) (ibm2flt(bds+6))
42 #define BDS_NumBits(bds) ((int) bds[10])
43
44 #define BDS_DataStart(bds) ((int) (11 + BDS_MoreFlags(bds)*3))
45
46 /* breaks if BDS_NumBits(bds) == 0 */
47 #define BDS_NValues(bds) (((BDS_LEN(bds) - BDS_DataStart(bds))*8 - \
48 BDS_UnusedBits(bds)) / BDS_NumBits(bds))
49 /*
50 #define BDS_NValues(bds) ((BDS_NumBits(bds) == 0) ? 0 : \
51 (((BDS_LEN(bds) - BDS_DataStart(bds))*8 - \
52 BDS_UnusedBits(bds)) / BDS_NumBits(bds)))
53 */
54
55 /* undefined value -- if bitmap */
56 #define UNDEFINED 9.999e20
57
58 /* version 1.2 of grib headers w. ebisuzaki */
59
60 #define BMS_LEN(bms) ((bms) == NULL ? 0 : (bms[0]<<16)+(bms[1]<<8)+bms[2])
61 #define BMS_UnusedBits(bms) ((bms) == NULL ? 0 : bms[3])
62 #define BMS_StdMap(bms) ((bms) == NULL ? 0 : ((bms[4]<<8) + bms[5]))
63 #define BMS_bitmap(bms) ((bms) == NULL ? NULL : (bms)+6)
64 #define BMS_nxny(bms) ((((bms) == NULL) || BMS_StdMap(bms)) \
65 ? 0 : (BMS_LEN(bms)*8 - 48 - BMS_UnusedBits(bms)))
66 /* cnames_file.c */
67
68 /* search order for parameter names
69 *
70 * #define P_TABLE_FIRST
71 * look at external parameter table first
72 *
73 * otherwise use builtin NCEP-2 or ECMWF-160 first
74 */
75 /* #define P_TABLE_FIRST */
76
77 /* search order for external parameter table
78 * 1) environment variable GRIBTAB
79 * 2) environment variable gribtab
80 * 3) the file 'gribtab' in current directory
81 */
82
83
84 /* cnames.c */
85 /* then default values */
86 char *k5toa(unsigned char *pds);
87 char *k5_comments(unsigned char *pds);
88 int setup_user_table(int center, int subcenter, int ptable);
89
90
91 struct ParmTable {
92 char *name, *comment;
93 };
94
95 /* version 1.4.1 of grib headers w. ebisuzaki */
96 /* this version is incomplete */
97
98 #ifndef INT3
99 #define INT3(a,b,c) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 127) << 16)+(b<<8)+c))
100 #endif
101 #ifndef INT2
102 #define INT2(a,b) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 127) << 8) + b))
103 #endif
104
105 #ifndef UINT3
106 #define UINT3(a,b,c) ((int) ((a << 16) + (b << 8) + (c)))
107 #endif
108
109 #ifndef UINT2
110 #define UINT2(a,b) ((int) ((a << 8) + (b)))
111 #endif
112
113
114 #define GDS_Len1(gds) (gds[0])
115 #define GDS_Len2(gds) (gds[1])
116 #define GDS_Len3(gds) (gds[2])
117 #define GDS_LEN(gds) ((int) ((gds[0]<<16)+(gds[1]<<8)+gds[2]))
118
119 #define GDS_NV(gds) (gds[3])
120 #define GDS_DataType(gds) (gds[5])
121
122 #define GDS_LatLon(gds) (gds[5] == 0)
123 #define GDS_Mercator(gds) (gds[5] == 1)
124 #define GDS_Gnomonic(gds) (gds[5] == 2)
125 #define GDS_Lambert(gds) (gds[5] == 3)
126 #define GDS_Gaussian(gds) (gds[5] == 4)
127 #define GDS_Polar(gds) (gds[5] == 5)
128 #define GDS_RotLL(gds) (gds[5] == 10)
129 #define GDS_Harmonic(gds) (gds[5] == 50)
130 #define GDS_ssEgrid(gds) (gds[5] == 201) /* semi-staggered E grid */
131 #define GDS_fEgrid(gds) (gds[5] == 202) /* filled E grid */
132
133 #define GDS_LatLon_nx(gds) ((int) ((gds[6] << 8) + gds[7]))
134 #define GDS_LatLon_ny(gds) ((int) ((gds[8] << 8) + gds[9]))
135 #define GDS_LatLon_La1(gds) INT3(gds[10],gds[11],gds[12])
136 #define GDS_LatLon_Lo1(gds) INT3(gds[13],gds[14],gds[15])
137 #define GDS_LatLon_mode(gds) (gds[16])
138 #define GDS_LatLon_La2(gds) INT3(gds[17],gds[18],gds[19])
139 #define GDS_LatLon_Lo2(gds) INT3(gds[20],gds[21],gds[22])
140
141 #define GDS_LatLon_dx(gds) INT2(gds[23],gds[24])
142 #define GDS_LatLon_dy(gds) INT2(gds[25],gds[26])
143 #define GDS_Gaussian_nlat(gds) ((gds[25]<<8)+gds[26])
144
145 #define GDS_LatLon_scan(gds) (gds[27])
146
147 #define GDS_Polar_nx(gds) ((gds[6] << 8) + gds[7])
148 #define GDS_Polar_ny(gds) ((gds[8] << 8) + gds[9])
149 #define GDS_Polar_La1(gds) (INT3(gds[10],gds[11],gds[12]))
150 #define GDS_Polar_Lo1(gds) (INT3(gds[13],gds[14],gds[15]))
151 #define GDS_Polar_Lov(gds) (INT3(gds[17],gds[18],gds[19]))
152 #define GDS_Polar_scan(gds) (gds[27])
153 #define GDS_Polar_Dx(gds) (INT3(gds[20], gds[21], gds[22]))
154 #define GDS_Polar_Dy(gds) (INT3(gds[23], gds[24], gds[25]))
155 #define GDS_Polar_pole(gds) ((gds[26] & 128) == 128)
156
157 #define GDS_Lambert_nx(gds) ((gds[6] << 8) + gds[7])
158 #define GDS_Lambert_ny(gds) ((gds[8] << 8) + gds[9])
159 #define GDS_Lambert_La1(gds) INT3(gds[10],gds[11],gds[12])
160 #define GDS_Lambert_Lo1(gds) INT3(gds[13],gds[14],gds[15])
161 #define GDS_Lambert_mode(gds) (gds[16])
162 #define GDS_Lambert_Lov(gds) INT3(gds[17],gds[18],gds[19])
163 #define GDS_Lambert_dx(gds) INT3(gds[20],gds[21],gds[22])
164 #define GDS_Lambert_dy(gds) INT3(gds[23],gds[24],gds[25])
165 #define GDS_Lambert_NP(gds) ((gds[26] & 128) == 0)
166 #define GDS_Lambert_scan(gds) (gds[27])
167 #define GDS_Lambert_Latin1(gds) INT3(gds[28],gds[29],gds[30])
168 #define GDS_Lambert_Latin2(gds) INT3(gds[31],gds[32],gds[33])
169 #define GDS_Lambert_LatSP(gds) INT3(gds[34],gds[35],gds[36])
170 #define GDS_Lambert_LonSP(gds) INT3(gds[37],gds[37],gds[37])
171
172 #define GDS_ssEgrid_n(gds) UINT2(gds[6],gds[7])
173 #define GDS_ssEgrid_n_dum(gds) UINT2(gds[8],gds[9])
174 #define GDS_ssEgrid_La1(gds) INT3(gds[10],gds[11],gds[12])
175 #define GDS_ssEgrid_Lo1(gds) INT3(gds[13],gds[14],gds[15])
176 #define GDS_ssEgrid_mode(gds) (gds[16])
177 #define GDS_ssEgrid_La2(gds) UINT3(gds[17],gds[18],gds[19])
178 #define GDS_ssEgrid_Lo2(gds) UINT3(gds[20],gds[21],gds[22])
179 #define GDS_ssEgrid_di(gds) INT2(gds[23],gds[24])
180 #define GDS_ssEgrid_dj(gds) INT2(gds[25],gds[26])
181 #define GDS_ssEgrid_scan(gds) (gds[27])
182
183 #define GDS_fEgrid_n(gds) UINT2(gds[6],gds[7])
184 #define GDS_fEgrid_n_dum(gds) UINT2(gds[8],gds[9])
185 #define GDS_fEgrid_La1(gds) INT3(gds[10],gds[11],gds[12])
186 #define GDS_fEgrid_Lo1(gds) INT3(gds[13],gds[14],gds[15])
187 #define GDS_fEgrid_mode(gds) (gds[16])
188 #define GDS_fEgrid_La2(gds) UINT3(gds[17],gds[18],gds[19])
189 #define GDS_fEgrid_Lo2(gds) UINT3(gds[20],gds[21],gds[22])
190 #define GDS_fEgrid_di(gds) INT2(gds[23],gds[24])
191 #define GDS_fEgrid_dj(gds) INT2(gds[25],gds[26])
192 #define GDS_fEgrid_scan(gds) (gds[27])
193
194
195 #define GDS_Merc_nx(gds) UINT2(gds[6],gds[7])
196 #define GDS_Merc_ny(gds) UINT2(gds[8],gds[9])
197 #define GDS_Merc_La1(gds) INT3(gds[10],gds[11],gds[12])
198 #define GDS_Merc_Lo1(gds) INT3(gds[13],gds[14],gds[15])
199 #define GDS_Merc_mode(gds) (gds[16])
200 #define GDS_Merc_La2(gds) INT3(gds[17],gds[18],gds[19])
201 #define GDS_Merc_Lo2(gds) INT3(gds[20],gds[21],gds[22])
202 #define GDS_Merc_Latin(gds) INT3(gds[23],gds[24],gds[25])
203 #define GDS_Merc_scan(gds) (gds[27])
204 #define GDS_Merc_dx(gds) INT3(gds[28],gds[29],gds[30])
205 #define GDS_Merc_dy(gds) INT3(gds[31],gds[32],gds[33])
206
207 /* rotated Lat-lon grid */
208
209 #define GDS_RotLL_nx(gds) UINT2(gds[6],gds[7])
210 #define GDS_RotLL_ny(gds) UINT2(gds[8],gds[9])
211 #define GDS_RotLL_La1(gds) INT3(gds[10],gds[11],gds[12])
212 #define GDS_RotLL_Lo1(gds) INT3(gds[13],gds[14],gds[15])
213 #define GDS_RotLL_mode(gds) (gds[16])
214 #define GDS_RotLL_La2(gds) INT3(gds[17],gds[18],gds[19])
215 #define GDS_RotLL_Lo2(gds) INT3(gds[20],gds[21],gds[22])
216 #define GDS_RotLL_dx(gds) INT2(gds[23],gds[24])
217 #define GDS_RotLL_dy(gds) INT2(gds[25],gds[26])
218 #define GDS_RotLL_scan(gds) (gds[27])
219 #define GDS_RotLL_LaSP(gds) INT3(gds[32],gds[33],gds[34])
220 #define GDS_RotLL_LoSP(gds) INT3(gds[35],gds[36],gds[37])
221 #define GDS_RotLL_RotAng(gds) ibm2flt(&(gds[38]))
222
223 /* index of NV and PV */
224 #define GDS_PV(gds) ((gds[3] == 0) ? -1 : (int) gds[4] - 1)
225 #define GDS_PL(gds) ((gds[4] == 255) ? -1 : (int) gds[3] * 4 + (int) gds[4] - 1)
226
227 enum Def_NCEP_Table {rean, opn, rean_nowarn, opn_nowarn};
228
229 unsigned char *seek_grib(FILE *file, off_t *pos, off_t *len_grib,
230 unsigned char *buffer, unsigned int buf_len);
231
232 int read_grib(FILE *file, off_t pos, off_t len_grib, unsigned char *buffer);
233
234 double ibm2flt(unsigned char *ibm);
235
236 void BDS_unpack(float *flt, unsigned char *bits, unsigned char *bitmap,
237 int n_bits, int n, double ref, double scale);
238
239 double int_power(double x, int y);
240
241 int flt2ieee(float x, unsigned char *ieee);
242
243 int wrtieee(float *array, int n, int header, FILE *output);
244 int wrtieee_header(unsigned int n, FILE *output);
245
246 void levels(int, int);
247
248 void PDStimes(int time_range, int p1, int p2, int time_unit);
249
250 int missing_points(unsigned char *bitmap, int n);
251
252 void EC_ext(unsigned char *pds, char *prefix, char *suffix);
253
254 int GDS_grid(unsigned char *gds, int *nx, int *ny, long int *nxny);
255 void GDS_prt_thin_lon(unsigned char *gds);
256
257 int PDS_date(unsigned char *pds, int option, int verf_time);
258
259 int add_time(int *year, int *month, int *day, int *hour, int dtime, int unit);
260
261 int verf_time(unsigned char *pds, int *year, int *month, int *day, int *hour);
262
263 void print_pds(unsigned char *pds, int print_PDS, int print_PDS10, int verbose);
264 void print_gds(unsigned char *gds, int print_GDS, int print_GDS10, int verbose);
265
266 void ensemble(unsigned char *pds, int mode);
267 /* version 3.4 of grib headers w. ebisuzaki */
268 /* this version is incomplete */
269
270 #ifndef INT2
271 #define INT2(a,b) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 0x7f) << 8) + b))
272 #endif
273
274 #define PDS_Len1(pds) (pds[0])
275 #define PDS_Len2(pds) (pds[1])
276 #define PDS_Len3(pds) (pds[2])
277 #define PDS_LEN(pds) ((int) ((pds[0]<<16)+(pds[1]<<8)+pds[2]))
278 #define PDS_Vsn(pds) (pds[3])
279 #define PDS_Center(pds) (pds[4])
280 #define PDS_Model(pds) (pds[5])
281 #define PDS_Grid(pds) (pds[6])
282 #define PDS_HAS_GDS(pds) ((pds[7] & 128) != 0)
283 #define PDS_HAS_BMS(pds) ((pds[7] & 64) != 0)
284 #define PDS_PARAM(pds) (pds[8])
285 #define PDS_L_TYPE(pds) (pds[9])
286 #define PDS_LEVEL1(pds) (pds[10])
287 #define PDS_LEVEL2(pds) (pds[11])
288
289 #define PDS_KPDS5(pds) (pds[8])
290 #define PDS_KPDS6(pds) (pds[9])
291 #define PDS_KPDS7(pds) ((int) ((pds[10]<<8) + pds[11]))
292
293 /* this requires a 32-bit default integer machine */
294 #define PDS_Field(pds) ((pds[8]<<24)+(pds[9]<<16)+(pds[10]<<8)+pds[11])
295
296 #define PDS_Year(pds) (pds[12])
297 #define PDS_Month(pds) (pds[13])
298 #define PDS_Day(pds) (pds[14])
299 #define PDS_Hour(pds) (pds[15])
300 #define PDS_Minute(pds) (pds[16])
301 #define PDS_ForecastTimeUnit(pds) (pds[17])
302 #define PDS_P1(pds) (pds[18])
303 #define PDS_P2(pds) (pds[19])
304 #define PDS_TimeRange(pds) (pds[20])
305 #define PDS_NumAve(pds) ((int) ((pds[21]<<8)+pds[22]))
306 #define PDS_NumMissing(pds) (pds[23])
307 #define PDS_Century(pds) (pds[24])
308 #define PDS_Subcenter(pds) (pds[25])
309 #define PDS_DecimalScale(pds) INT2(pds[26],pds[27])
310 /* old #define PDS_Year4(pds) (pds[12] + 100*(pds[24] - (pds[12] != 0))) */
311 #define PDS_Year4(pds) (pds[12] + 100*(pds[24] - 1))
312
313 /* various centers */
314 #define NMC 7
315 #define ECMWF 98
316
317 /* ECMWF Extensions */
318
319 #define PDS_EcLocalId(pds) (PDS_LEN(pds) >= 41 ? (pds[40]) : 0)
320 #define PDS_EcClass(pds) (PDS_LEN(pds) >= 42 ? (pds[41]) : 0)
321 #define PDS_EcType(pds) (PDS_LEN(pds) >= 43 ? (pds[42]) : 0)
322 #define PDS_EcStream(pds) (PDS_LEN(pds) >= 45 ? (INT2(pds[43], pds[44])) : 0)
323
324 #define PDS_EcENS(pds) (PDS_LEN(pds) >= 52 && pds[40] == 1 && \
325 pds[43] * 256 + pds[44] == 1035 && pds[50] != 0)
326 #define PDS_EcFcstNo(pds) (pds[50])
327 #define PDS_EcNoFcst(pds) (pds[51])
328
329
330 /* NCEP Extensions */
331
332 #define PDS_NcepENS(pds) (PDS_LEN(pds) >= 44 && pds[25] == 2 && pds[40] == 1)
333 #define PDS_NcepFcstType(pds) (pds[41])
334 #define PDS_NcepFcstNo(pds) (pds[42])
335 #define PDS_NcepFcstProd(pds) (pds[43])
336
337 /* time units */
338
339 #define MINUTE 0
340 #define HOUR 1
341 #define DAY 2
342 #define MONTH 3
343 #define YEAR 4
344 #define DECADE 5
345 #define NORMAL 6
346 #define CENTURY 7
347 #define HOURS3 10
348 #define HOURS6 11
349 #define HOURS12 12
350 #define SECOND 254
351
352
353
354 #define VERSION "v1.7.3.1 (8-5-99) Wesley Ebisuzaki"
355
356 #define CHECK_GRIB
357
358 /*
359 * wgrib.c extract/inventory grib records
360 *
361 * Wesley Ebisuzaki
362 *
363 * 11/94 - v1.0
364 * 11/94 - v1.1: arbitary size grids, -i option
365 * 11/94 - v1.2: bug fixes, ieee option, more info
366 * 1/95 - v1.2.4: fix headers for SUN acc
367 * 2/95 - v1.2.5: add num_ave in -s listing
368 * 2/95 - v1.2.6: change %d to %ld
369 * 2/95 - v1.2.7: more output, added some polar stereographic support
370 * 2/95 - v1.2.8: max min format changed %f to %g, tidying up more info
371 * 3/95 - v1.3.0: fix bug with bitmap, allow numbers > UNDEFINED
372 * 3/95 - v1.3.1: print number of missing points (verbose)
373 * 3/95 - v1.3.2: -append option added
374 * 4/95 - v1.3.2a,b: more output, polar stereo support (-V option)
375 * 4/95 - v1.3.3: added ECMWF parameter table (prelim)
376 * 6/95 - v1.3.4: nxny from BDS rather than gds?
377 * 9/95 - v1.3.4d: speedup in grib write
378 * 11/95 - v1.3.4f: new ECMWF parameter table (from Mike Fiorino), EC logic
379 * 2/96 - v1.3.4g-h: prelim fix for GDS-less grib files
380 * 2/96 - v1.3.4i: faster missing(), -V: "pos n" -> "n" (field 2)
381 * 3/96 - v1.4: fix return code (!inventory), and short records near EOF
382 * 6/96 - v1.4.1a: faster grib->binary decode, updated ncep parameter table, mod. in clim. desc
383 * 7/96 - v1.5.0: parameter-table aware, -v option changed, added "comments"
384 * increased NTRY to 100 in seek_grib
385 * 11/96 - v1.5.0b: added ECMWF parameter table 128
386 * 1/97 - v1.5.0b2: if nxny != nx*ny { nx = nxny; ny = 1 }
387 * 3/97 - v1.5.0b5: added: -PDS -GDS, Lambert Conformal
388 * 3/97 - v1.5.0b6: added: -verf
389 * 4/97 - v1.5.0b7: added -PDS10, -GDS10 and enhanced -PDS -GDS
390 * 4/97 - v1.5.0b8: "bitmap missing x" -> "bitmap: x undef"
391 * 5/97 - v1.5.0b9: thinned grids meta data
392 * 5/97 - v1.5.0b10: changed 0hr fcst to anal for TR=10 and P1=P2=0
393 * 5/97 - v1.5.0b10: added -H option
394 * 6/97 - v1.5.0b12: thinned lat-long grids -V option
395 * 6/97 - v1.5.0b13: -4yr
396 * 6/97 - v1.5.0b14: fix century mark Y=100 not 0
397 * 7/97 - v1.5.0b15: add ncep opn grib table
398 * 12/97 - v1.6.1.a: made ncep_opn the default table
399 * 12/97 - v1.6.1.b: changed 03TOT to O3TOT in operational ncep table
400 * 1/98 - v1.6.2: added Arakawa E grid meta-data
401 * 1/98 - v1.6.2.1: added some mode data, Scan -> scan
402 * 4/98 - v1.6.2.4: reanalysis id code: subcenter==0 && process==180
403 * 5/98 - v1.6.2.5: fix -H code to write all of GDS
404 * 7/98 - v1.7: fix decoding bug for bitmap and no. bits > 24 (theoretical bug)
405 * 7/98 - v1.7.0.b1: add km to Mercator meta-data
406 * 5/99 - v1.7.2: bug with thinned grids & bitmaps (nxny != nx*ny)
407 * 5/99 - v1.7.3: updated NCEP opn grib table
408 * 8/99 - v1.7.3.1: updated level information
409 *
410 */
411
412 /*
413 * MSEEK = I/O buffer size for seek_grib
414 */
415
416 #define MSEEK 1024
417 #define BUFF_ALLOC0 40000
418
419
420 #ifndef min
421 #define min(a,b) ((a) < (b) ? (a) : (b))
422 #define max(a,b) ((a) < (b) ? (b) : (a))
423 #endif
424
425 #ifndef DEF_T62_NCEP_TABLE
426 #define DEF_T62_NCEP_TABLE rean
427 #endif
428 enum Def_NCEP_Table def_ncep_table = DEF_T62_NCEP_TABLE;
429
main(int argc,char ** argv)430 int main(int argc, char **argv) {
431
432 unsigned char *buffer;
433 float *array;
434 double temp, rmin, rmax;
435 int i, nx, ny, file_arg;
436 off_t len_grib, pos = 0;
437 long nxny, buffer_size, n_dump, count = 1;
438 unsigned char *msg, *pds, *gds, *bms, *bds, *pointer;
439 FILE *input, *dump_file = NULL;
440 char line[200];
441 enum {BINARY, TEXT, IEEE, GRIB, NONE} output_type = NONE;
442 enum {DUMP_ALL, DUMP_RECORD, DUMP_POSITION, DUMP_LIST, INVENTORY}
443 mode = INVENTORY;
444 long int dump = -1;
445 int verbose = 0, append = 0, v_time = 0, year_4 = 0, output_PDS_GDS = 0;
446 int print_GDS = 0, print_GDS10 = 0, print_PDS = 0, print_PDS10 = 0;
447 char *dump_file_name = "dump", open_parm[3];
448 int header = 1, return_code = 0;
449
450 if (argc == 1) {
451 fprintf(stderr, "\nPortable Grib decoder for %s etc.\n",
452 (def_ncep_table == opn_nowarn || def_ncep_table == opn) ?
453 "NCEP Operations" : "NCEP/NCAR Reanalysis");
454 fprintf(stderr, " it slices, dices %s\n", VERSION);
455 fprintf(stderr, " usage: %s [grib file] [options]\n\n", argv[0]);
456
457 fprintf(stderr, "Inventory/diagnostic-output selections\n");
458 fprintf(stderr, " -s/-v short/verbose inventory\n");
459 fprintf(stderr, " -V diagnostic output (not inventory)\n");
460 fprintf(stderr, " (none) regular inventory\n");
461
462 fprintf(stderr, " Options\n");
463 fprintf(stderr, " -PDS/-PDS10 print PDS in hex/decimal\n");
464 fprintf(stderr, " -GDS/-GDS10 print GDS in hex/decimal\n");
465 fprintf(stderr, " -verf print forecast verification time\n");
466 fprintf(stderr, " -ncep_opn/-ncep_rean default T62 NCEP grib table\n");
467 fprintf(stderr, " -4yr print year using 4 digits\n");
468
469 fprintf(stderr, "Decoding GRIB selection\n");
470 fprintf(stderr, " -d [record number|all] decode record number\n");
471 fprintf(stderr, " -p [byte position] decode record at byte position\n");
472 fprintf(stderr, " -i decode controlled by stdin (inventory list)\n");
473 fprintf(stderr, " (none) no decoding\n");
474
475 fprintf(stderr, " Options\n");
476 fprintf(stderr, " -text/-ieee/-grib/-bin convert to text/ieee/grib/bin (default)\n");
477 fprintf(stderr, " -nh/-h output will have no headers/headers (default)\n");
478 fprintf(stderr, " -H output will include PDS and GDS (-bin/-ieee only)\n");
479 fprintf(stderr, " -append append to output file\n");
480 fprintf(stderr, " -o [file] output file name, 'dump' is default\n");
481 exit(8);
482 }
483 file_arg = 0;
484 for (i = 1; i < argc; i++) {
485 if (strcmp(argv[i],"-PDS") == 0) {
486 print_PDS = 1;
487 continue;
488 }
489 if (strcmp(argv[i],"-PDS10") == 0) {
490 print_PDS10 = 1;
491 continue;
492 }
493 if (strcmp(argv[i],"-GDS") == 0) {
494 print_GDS = 1;
495 continue;
496 }
497 if (strcmp(argv[i],"-GDS10") == 0) {
498 print_GDS10 = 1;
499 continue;
500 }
501 if (strcmp(argv[i],"-v") == 0) {
502 verbose = 1;
503 continue;
504 }
505 if (strcmp(argv[i],"-V") == 0) {
506 verbose = 2;
507 continue;
508 }
509 if (strcmp(argv[i],"-s") == 0) {
510 verbose = -1;
511 continue;
512 }
513 if (strcmp(argv[i],"-text") == 0) {
514 output_type = TEXT;
515 continue;
516 }
517 if (strcmp(argv[i],"-bin") == 0) {
518 output_type = BINARY;
519 continue;
520 }
521 if (strcmp(argv[i],"-ieee") == 0) {
522 output_type = IEEE;
523 continue;
524 }
525 if (strcmp(argv[i],"-grib") == 0) {
526 output_type = GRIB;
527 continue;
528 }
529 if (strcmp(argv[i],"-nh") == 0) {
530 header = 0;
531 continue;
532 }
533 if (strcmp(argv[i],"-h") == 0) {
534 header = 1;
535 continue;
536 }
537 if (strcmp(argv[i],"-append") == 0) {
538 append = 1;
539 continue;
540 }
541 if (strcmp(argv[i],"-verf") == 0) {
542 v_time = 1;
543 continue;
544 }
545 if (strcmp(argv[i],"-d") == 0) {
546 if (strcmp(argv[i+1],"all") == 0) {
547 mode = DUMP_ALL;
548 }
549 else {
550 dump = atol(argv[i+1]);
551 mode = DUMP_RECORD;
552 }
553 i++;
554 if (output_type == NONE) output_type = BINARY;
555 continue;
556 }
557 if (strcmp(argv[i],"-p") == 0) {
558 pos = atol(argv[i+1]);
559 i++;
560 dump = 1;
561 if (output_type == NONE) output_type = BINARY;
562 mode = DUMP_POSITION;
563 continue;
564 }
565 if (strcmp(argv[i],"-i") == 0) {
566 if (output_type == NONE) output_type = BINARY;
567 mode = DUMP_LIST;
568 continue;
569 }
570 if (strcmp(argv[i],"-H") == 0) {
571 output_PDS_GDS = 1;
572 continue;
573 }
574 if (strcmp(argv[i],"-NH") == 0) {
575 output_PDS_GDS = 0;
576 continue;
577 }
578 if (strcmp(argv[i],"-4yr") == 0) {
579 year_4 = 1;
580 continue;
581 }
582 if (strcmp(argv[i],"-ncep_opn") == 0) {
583 def_ncep_table = opn_nowarn;
584 continue;
585 }
586 if (strcmp(argv[i],"-ncep_rean") == 0) {
587 def_ncep_table = rean_nowarn;
588 continue;
589 }
590 if (strcmp(argv[i],"-o") == 0) {
591 dump_file_name = argv[i+1];
592 i++;
593 continue;
594 }
595 if (strcmp(argv[i],"--v") == 0) {
596 printf("wgrib: %s\n", VERSION);
597 exit(0);
598 }
599 if (file_arg == 0) {
600 file_arg = i;
601 }
602 else {
603 fprintf(stderr,"argument: %s ????\n", argv[i]);
604 }
605 }
606
607
608 if ((input = fopen(argv[file_arg],"rb")) == NULL) {
609 fprintf(stderr,"could not open file: %s\n", argv[file_arg]);
610 exit(7);
611 }
612
613 if ((buffer = (unsigned char *) malloc(BUFF_ALLOC0)) == NULL) {
614 fprintf(stderr,"not enough memory\n");
615 }
616 buffer_size = BUFF_ALLOC0;
617
618 /* open output file */
619 if (mode != INVENTORY) {
620 open_parm[0] = append ? 'a' : 'w'; open_parm[1] = 'b'; open_parm[2] = '\0';
621 if (output_type == TEXT) open_parm[1] = '\0';
622
623 if ((dump_file = fopen(dump_file_name,open_parm)) == NULL) {
624 fprintf(stderr,"could not open dump file\n");
625 exit(8);
626 }
627 }
628
629 /* skip dump - 1 records */
630 for (i = 1; i < dump; i++) {
631 msg = seek_grib(input, &pos, &len_grib, buffer, MSEEK);
632 if (msg == NULL) {
633 fprintf(stderr, "ran out of data or bad file\n");
634 exit(8);
635 }
636 pos += len_grib;
637 }
638 if (dump > 0) count += dump - 1;
639 n_dump = 0;
640
641 for (;;) {
642 if (n_dump == 1 && (mode == DUMP_RECORD || mode == DUMP_POSITION)) break;
643 if (mode == DUMP_LIST) {
644 if (fgets(line,sizeof(line), stdin) == NULL) break;
645 line[sizeof(line) - 1] = 0;
646 if (sscanf(line,"%ld:%ld:", &count, &pos) != 2) {
647 fprintf(stderr,"bad input from stdin\n");
648 exit(8);
649 }
650 }
651
652 msg = seek_grib(input, &pos, &len_grib, buffer, MSEEK);
653 if (msg == NULL) {
654 if (mode == INVENTORY || mode == DUMP_ALL) break;
655 fprintf(stderr,"missing GRIB record(s)\n");
656 exit(8);
657 }
658
659 /* read all whole grib record */
660 if (len_grib + msg - buffer > buffer_size) {
661 buffer_size = len_grib + msg - buffer + 1000;
662 buffer = (unsigned char *) realloc((void *) buffer, buffer_size);
663 if (buffer == NULL) {
664 fprintf(stderr,"ran out of memory\n");
665 exit(8);
666 }
667 }
668 read_grib(input, pos, len_grib, buffer);
669
670 /* parse grib message */
671
672 msg = buffer;
673 pds = (msg + 8);
674 pointer = pds + PDS_LEN(pds);
675 #ifdef DEBUG
676 printf("LEN_GRIB= 0x%x\n", len_grib);
677 printf("PDS_LEN= 0x%x: at 0x%x\n", PDS_LEN(pds),pds-msg);
678 #endif
679 if (PDS_HAS_GDS(pds)) {
680 gds = pointer;
681 pointer += GDS_LEN(gds);
682 #ifdef DEBUG
683 printf("GDS_LEN= 0x%x: at 0x%x\n", GDS_LEN(gds), gds-msg);
684 #endif
685 }
686 else {
687 gds = NULL;
688 }
689
690 if (PDS_HAS_BMS(pds)) {
691 bms = pointer;
692 pointer += BMS_LEN(bms);
693 #ifdef DEBUG
694 printf("BMS_LEN= 0x%x: at 0x%x\n", BMS_LEN(bms),bms-msg);
695 #endif
696 }
697 else {
698 bms = NULL;
699 }
700
701 bds = pointer;
702 pointer += BDS_LEN(bds);
703 #ifdef DEBUG
704 printf("BDS_LEN= 0x%x: at 0x%x\n", BDS_LEN(bds),bds-msg);
705 #endif
706
707 #ifdef DEBUG
708 printf("END_LEN= 0x%x: at 0x%x\n", 4,pointer-msg);
709 if (pointer-msg+4 != len_grib) {
710 fprintf(stderr,"Len of grib message is inconsistent.\n");
711 }
712 #endif
713
714 /* end section - "7777" in ascii */
715 if (pointer[0] != 0x37 || pointer[1] != 0x37 ||
716 pointer[2] != 0x37 || pointer[3] != 0x37) {
717 fprintf(stderr,"\n\n missing end section\n");
718 fprintf(stderr, "%2x %2x %2x %2x\n", pointer[0], pointer[1],
719 pointer[2], pointer[3]);
720 #ifdef DEBUG
721 printf("ignoring missing end section\n");
722 #else
723 exit(8);
724 #endif
725 }
726
727 /* figure out size of array */
728 if (gds != NULL) {
729 /* this doesn't work for spherical harmonics */
730 GDS_grid(gds, &nx, &ny, &nxny);
731 }
732 else if (bms != NULL) {
733 nxny = nx = BMS_nxny(bms);
734 ny = 1;
735 }
736 else {
737 if (BDS_NumBits(bds) == 0) {
738 nxny = nx = 1;
739 fprintf(stderr,"Missing GDS, constant record .. cannot "
740 "determine number of data points\n");
741 }
742 else {
743 nxny = nx = BDS_NValues(bds);
744 }
745 ny = 1;
746 }
747
748 #ifdef CHECK_GRIB
749 if (BDS_NumBits(bds) != 0) {
750 i = BDS_NValues(bds);
751 if (bms != NULL) {
752 i += missing_points(BMS_bitmap(bms),nxny);
753 }
754 if (i != nxny) {
755 fprintf(stderr,"grib header at record %ld: two values of nxny %ld %d\n",
756 count,nxny,i);
757 fprintf(stderr," LEN %d DataStart %d UnusedBits %d #Bits %d nxny %ld\n",
758 BDS_LEN(bds), BDS_DataStart(bds),BDS_UnusedBits(bds),
759 BDS_NumBits(bds), nxny);
760 return_code = 15;
761 nxny = nx = i;
762 ny = 1;
763 }
764 }
765 #endif
766
767 if (verbose <= 0) {
768 printf("%ld:%ld:d=", count, pos);
769 PDS_date(pds,year_4,v_time);
770 printf(":%s:", k5toa(pds));
771
772 if (verbose == 0) printf("kpds5=%d:kpds6=%d:kpds7=%d:TR=%d:P1=%d:P2=%d:TimeU=%d:",
773 PDS_PARAM(pds),PDS_KPDS6(pds),PDS_KPDS7(pds),
774 PDS_TimeRange(pds),PDS_P1(pds),PDS_P2(pds),
775 PDS_ForecastTimeUnit(pds));
776 levels(PDS_KPDS6(pds), PDS_KPDS7(pds)); printf(":");
777 PDStimes(PDS_TimeRange(pds),PDS_P1(pds),PDS_P2(pds),
778 PDS_ForecastTimeUnit(pds));
779 if (PDS_Center(pds) == ECMWF) EC_ext(pds,"",":");
780 ensemble(pds, verbose);
781 printf("NAve=%d",PDS_NumAve(pds));
782 if (print_PDS || print_PDS10) print_pds(pds, print_PDS, print_PDS10, verbose);
783 if (gds && (print_GDS || print_GDS10)) print_gds(gds, print_GDS, print_GDS10, verbose);
784 printf("\n");
785 }
786 else if (verbose == 1) {
787 printf("%ld:%ld:D=", count, pos);
788 PDS_date(pds, 1, v_time);
789 printf(":%s:", k5toa(pds));
790
791 levels(PDS_KPDS6(pds), PDS_KPDS7(pds)); printf(":");
792 printf("kpds=%d,%d,%d:",
793 PDS_PARAM(pds),PDS_KPDS6(pds),PDS_KPDS7(pds));
794 PDStimes(PDS_TimeRange(pds),PDS_P1(pds),PDS_P2(pds),
795 PDS_ForecastTimeUnit(pds));
796 if (PDS_Center(pds) == ECMWF) EC_ext(pds,"",":");
797 ensemble(pds, verbose);
798 printf("\"%s", k5_comments(pds));
799 if (print_PDS || print_PDS10) print_pds(pds, print_PDS, print_PDS10, verbose);
800 if (gds && (print_GDS || print_GDS10)) print_gds(gds, print_GDS, print_GDS10, verbose);
801 printf("\n");
802 }
803 else if (verbose == 2) {
804 printf("rec %ld:%ld:date ", count, pos);
805 PDS_date(pds, 1, v_time);
806 printf(" %s kpds5=%d kpds6=%d kpds7=%d levels=(%d,%d) grid=%d ",
807 k5toa(pds), PDS_PARAM(pds), PDS_KPDS6(pds), PDS_KPDS7(pds),
808 PDS_LEVEL1(pds), PDS_LEVEL2(pds), PDS_Grid(pds));
809 levels(PDS_KPDS6(pds),PDS_KPDS7(pds));
810
811 printf(" ");
812 if (PDS_Center(pds) == ECMWF) EC_ext(pds,""," ");
813 ensemble(pds, verbose);
814 PDStimes(PDS_TimeRange(pds),PDS_P1(pds),PDS_P2(pds),
815 PDS_ForecastTimeUnit(pds));
816 if (bms != NULL)
817 printf(" bitmap: %d undef", missing_points(BMS_bitmap(bms),nxny));
818 printf("\n %s=%s\n", k5toa(pds), k5_comments(pds));
819
820 printf(" timerange %d P1 %d P2 %d TimeU %d nx %d ny %d GDS grid %d "
821 "num_in_ave %d missing %d\n",
822 PDS_TimeRange(pds),PDS_P1(pds),PDS_P2(pds),
823 PDS_ForecastTimeUnit(pds), nx, ny,
824 gds == NULL ? -1 : GDS_DataType(gds),
825 PDS_NumAve(pds), PDS_NumMissing(pds));
826
827 printf(" center %d subcenter %d process %d Table %d\n",
828 PDS_Center(pds),PDS_Subcenter(pds),PDS_Model(pds),
829 PDS_Vsn(pds));
830
831 if (gds && GDS_LatLon(gds) && nx != -1)
832 printf(" latlon: lat %f to %f by %f nxny %ld\n"
833 " long %f to %f by %f, (%d x %d) scan %d "
834 "mode %d bdsgrid %d\n",
835 0.001*GDS_LatLon_La1(gds), 0.001*GDS_LatLon_La2(gds),
836 0.001*GDS_LatLon_dy(gds), nxny, 0.001*GDS_LatLon_Lo1(gds),
837 0.001*GDS_LatLon_Lo2(gds), 0.001*GDS_LatLon_dx(gds),
838 nx, ny, GDS_LatLon_scan(gds), GDS_LatLon_mode(gds),
839 BDS_Grid(bds));
840 else if (gds && GDS_LatLon(gds) && nx == -1) {
841 printf(" thinned latlon: lat %f to %f by %f nxny %ld\n"
842 " long %f to %f, %ld grid pts (%d x %d) scan %d"
843 " mode %d bdsgrid %d\n",
844 0.001*GDS_LatLon_La1(gds), 0.001*GDS_LatLon_La2(gds),
845 0.001*GDS_LatLon_dy(gds), nxny, 0.001*GDS_LatLon_Lo1(gds),
846 0.001*GDS_LatLon_Lo2(gds),
847 nxny, nx, ny, GDS_LatLon_scan(gds), GDS_LatLon_mode(gds),
848 BDS_Grid(bds));
849 GDS_prt_thin_lon(gds);
850 }
851 else if (gds && GDS_Gaussian(gds) && nx != -1)
852 printf(" gaussian: lat %f to %f\n"
853 " long %f to %f by %f, (%d x %d) scan %d"
854 " mode %d bdsgrid %d\n",
855 0.001*GDS_LatLon_La1(gds), 0.001*GDS_LatLon_La2(gds),
856 0.001*GDS_LatLon_Lo1(gds), 0.001*GDS_LatLon_Lo2(gds),
857 0.001*GDS_LatLon_dx(gds),
858 nx, ny, GDS_LatLon_scan(gds), GDS_LatLon_mode(gds),
859 BDS_Grid(bds));
860 else if (gds && GDS_Gaussian(gds) && nx == -1) {
861 printf(" thinned gaussian: lat %f to %f\n"
862 " lon %f %ld grid pts (%d x %d) scan %d"
863 " mode %d bdsgrid %d nlat:\n",
864 0.001*GDS_LatLon_La1(gds), 0.001*GDS_LatLon_La2(gds),
865 0.001*GDS_LatLon_Lo1(gds),
866 nxny, nx, ny, GDS_LatLon_scan(gds), GDS_LatLon_mode(gds),
867 BDS_Grid(bds));
868 GDS_prt_thin_lon(gds);
869 }
870 else if (gds && GDS_Polar(gds))
871 printf(" polar stereo: Lat1 %f Long1 %f Orient %f\n"
872 " %s pole (%d x %d) Dx %d Dy %d scan %d\n",
873 0.001*GDS_Polar_La1(gds),0.001*GDS_Polar_Lo1(gds),
874 0.001*GDS_Polar_Lov(gds),
875 GDS_Polar_pole(gds) == 0 ? "north" : "south", nx,ny,
876 GDS_Polar_Dx(gds),GDS_Polar_Dy(gds),
877 GDS_Polar_scan(gds));
878 else if (gds && GDS_Lambert(gds))
879 printf(" Lambert Conf: Lat1 %f Lon1 %f Lov %f\n"
880 " Latin1 %f Latin2 %f LatSP %f LonSP %f\n"
881 " %s (%d x %d) Dx %f Dy %f scan %d mode %d\n",
882 0.001*GDS_Lambert_La1(gds),0.001*GDS_Lambert_Lo1(gds),
883 0.001*GDS_Lambert_Lov(gds),
884 0.001*GDS_Lambert_Latin1(gds), 0.001*GDS_Lambert_Latin2(gds),
885 0.001*GDS_Lambert_LatSP(gds), 0.001*GDS_Lambert_LonSP(gds),
886 GDS_Lambert_NP(gds) ? "North Pole": "South Pole",
887 GDS_Lambert_nx(gds), GDS_Lambert_ny(gds),
888 0.001*GDS_Lambert_dx(gds), 0.001*GDS_Lambert_dy(gds),
889 GDS_Lambert_scan(gds), GDS_Lambert_mode(gds));
890 else if (gds && GDS_Mercator(gds))
891 printf(" Mercator: lat %f to %f by %f km nxny %ld\n"
892 " long %f to %f by %f km, (%d x %d) scan %d"
893 " mode %d Latin %f bdsgrid %d\n",
894 0.001*GDS_Merc_La1(gds), 0.001*GDS_Merc_La2(gds),
895 0.001*GDS_Merc_dy(gds), nxny, 0.001*GDS_Merc_Lo1(gds),
896 0.001*GDS_Merc_Lo2(gds), 0.001*GDS_Merc_dx(gds),
897 nx, ny, GDS_Merc_scan(gds), GDS_Merc_mode(gds),
898 0.001*GDS_Merc_Latin(gds), BDS_Grid(bds));
899 else if (gds && GDS_ssEgrid(gds))
900 printf(" Semi-staggered Arakawa E-Grid: lat0 %f lon0 %f nxny %d\n"
901 " dLat %f dLon %f (%d x %d) scan %d mode %d\n",
902 0.001*GDS_ssEgrid_La1(gds), 0.001*GDS_ssEgrid_Lo1(gds),
903 GDS_ssEgrid_n(gds)*GDS_ssEgrid_n_dum(gds),
904 0.001*GDS_ssEgrid_dj(gds), 0.001*GDS_ssEgrid_di(gds),
905 GDS_ssEgrid_Lo2(gds), GDS_ssEgrid_La2(gds),
906 GDS_ssEgrid_scan(gds), GDS_ssEgrid_mode(gds));
907 else if (gds && GDS_fEgrid(gds))
908 printf(" filled Arakawa E-Grid: lat0 %f lon0 %f nxny %d\n"
909 " dLat %f dLon %f (%d x %d) scan %d mode %d\n",
910 0.001*GDS_fEgrid_La1(gds), 0.001*GDS_fEgrid_Lo1(gds),
911 GDS_fEgrid_n(gds)*GDS_fEgrid_n_dum(gds),
912 0.001*GDS_fEgrid_dj(gds), 0.001*GDS_fEgrid_di(gds),
913 GDS_fEgrid_Lo2(gds), GDS_fEgrid_La2(gds),
914 GDS_fEgrid_scan(gds), GDS_fEgrid_mode(gds));
915 else if (gds && GDS_RotLL(gds))
916 printf(" rotated LatLon grid lat %f to %f lon %f to %f\n"
917 " nxny %ld (%d x %d) dx %d dy %d scan %d mode %d\n"
918 " transform: south pole lat %f lon %f rot angle %f\n",
919 0.001*GDS_RotLL_La1(gds), 0.001*GDS_RotLL_La2(gds),
920 0.001*GDS_RotLL_Lo1(gds), 0.001*GDS_RotLL_Lo2(gds),
921 nxny, GDS_RotLL_nx(gds), GDS_RotLL_ny(gds),
922 GDS_RotLL_dx(gds), GDS_RotLL_dy(gds),
923 GDS_RotLL_scan(gds), GDS_RotLL_mode(gds),
924 0.001*GDS_RotLL_LaSP(gds), 0.001*GDS_RotLL_LoSP(gds),
925 GDS_RotLL_RotAng(gds) );
926 else if (gds && GDS_Gnomonic(gds))
927 printf(" Gnomonic grid\n");
928 else if (gds && GDS_Harmonic(gds))
929 printf(" Harmonic (spectral)\n");
930
931 if (print_PDS || print_PDS10)
932 print_pds(pds, print_PDS, print_PDS10, verbose);
933 if (gds && (print_GDS || print_GDS10))
934 print_gds(gds, print_GDS, print_GDS10, verbose);
935 }
936
937 if (mode != INVENTORY && output_type == GRIB) {
938 fwrite((void *) msg, sizeof(char), len_grib, dump_file);
939 n_dump++;
940 }
941
942 if ((mode != INVENTORY && output_type != GRIB) || verbose > 1) {
943 /* decode numeric data */
944
945 if ((array = (float *) malloc(sizeof(float) * nxny)) == NULL) {
946 fprintf(stderr,"memory problems\n");
947 exit(8);
948 }
949
950 temp = int_power(10.0, - PDS_DecimalScale(pds));
951
952 BDS_unpack(array, bds + 11, BMS_bitmap(bms), BDS_NumBits(bds), nxny,
953 temp*BDS_RefValue(bds),temp*int_power(2.0, BDS_BinScale(bds)));
954
955 if (verbose > 1) {
956 rmin = FLT_MAX;
957 rmax = -FLT_MAX;
958 for (i = 0; i < nxny; i++) {
959 if (fabs(array[i]-UNDEFINED) > 0.0001*UNDEFINED) {
960 rmin = min(rmin,array[i]);
961 rmax = max(rmax,array[i]);
962 }
963 }
964 printf(" min/max data %g %g num bits %d "
965 " BDS_Ref %g DecScale %d BinScale %d\n",
966 rmin, rmax, BDS_NumBits(bds), BDS_RefValue(bds),
967 PDS_DecimalScale(pds), BDS_BinScale(bds));
968 }
969
970 if (mode != INVENTORY && output_type != GRIB) {
971 /* dump code */
972 if (output_PDS_GDS == 1) {
973 /* insert code here */
974 if (output_type == BINARY || output_type == IEEE) {
975 /* write PDS */
976 i = PDS_LEN(pds) + 4;
977 if (header && output_type == BINARY)
978 fwrite((void *) &i, sizeof(int), 1, dump_file);
979 if (header && output_type == IEEE) wrtieee_header(i, dump_file);
980 fwrite((void *) "PDS ", 1, 4, dump_file);
981 fwrite((void *) pds, 1, i - 4, dump_file);
982 if (header && output_type == BINARY)
983 fwrite((void *) &i, sizeof(int), 1, dump_file);
984 if (header && output_type == IEEE) wrtieee_header(i, dump_file);
985
986 /* write GDS */
987 i = (gds) ? GDS_LEN(gds) + 4 : 4;
988 if (header && output_type == BINARY)
989 fwrite((void *) &i, sizeof(int), 1, dump_file);
990 if (header && output_type == IEEE) wrtieee_header(i, dump_file);
991 fwrite((void *) "GDS ", 1, 4, dump_file);
992 if (gds) fwrite((void *) gds, 1, i - 4, dump_file);
993 if (header && output_type == BINARY)
994 fwrite((void *) &i, sizeof(int), 1, dump_file);
995 if (header && output_type == IEEE) wrtieee_header(i, dump_file);
996 }
997 }
998
999 if (output_type == BINARY) {
1000 i = nxny * sizeof(float);
1001 if (header) fwrite((void *) &i, sizeof(int), 1, dump_file);
1002 fwrite((void *) array, sizeof(float), nxny, dump_file);
1003 if (header) fwrite((void *) &i, sizeof(int), 1, dump_file);
1004 }
1005 else if (output_type == IEEE) {
1006 wrtieee(array, nxny, header, dump_file);
1007 }
1008 else if (output_type == TEXT) {
1009 /* number of points in grid */
1010 if (header) {
1011 if (nx <= 0 || ny <= 0 || nxny != nx*ny) {
1012 fprintf(dump_file, "%ld %d\n", nxny, 1);
1013 }
1014 else {
1015 fprintf(dump_file, "%d %d\n", nx, ny);
1016 }
1017 }
1018 for (i = 0; i < nxny; i++) {
1019 fprintf(dump_file,"%g\n", array[i]);
1020 }
1021 }
1022 n_dump++;
1023 }
1024 free(array);
1025 if (verbose > 0) printf("\n");
1026 }
1027
1028 pos += len_grib;
1029 count++;
1030 }
1031
1032 if (mode != INVENTORY) {
1033 if (ferror(dump_file)) {
1034 fprintf(stderr,"error writing %s\n",dump_file_name);
1035 exit(8);
1036 }
1037 }
1038 fclose(input);
1039 return (return_code);
1040 }
1041
print_pds(unsigned char * pds,int print_PDS,int print_PDS10,int verbose)1042 void print_pds(unsigned char *pds, int print_PDS, int print_PDS10, int verbose) {
1043 int i, j;
1044
1045 j = PDS_LEN(pds);
1046 if (verbose < 2) {
1047 if (print_PDS && verbose < 2) {
1048 printf(":PDS=");
1049 for (i = 0; i < j; i++) {
1050 printf("%2.2x", (int) pds[i]);
1051 }
1052 }
1053 if (print_PDS10 && verbose < 2) {
1054 printf(":PDS10=");
1055 for (i = 0; i < j; i++) {
1056 printf(" %d", (int) pds[i]);
1057 }
1058 }
1059 }
1060 else {
1061 if (print_PDS) {
1062 printf(" PDS(1..%d)=",j);
1063 for (i = 0; i < j; i++) {
1064 if (i % 20 == 0) printf("\n %4d:",i+1);
1065 printf(" %3.2x", (int) pds[i]);
1066 }
1067 printf("\n");
1068 }
1069 if (print_PDS10) {
1070 printf(" PDS10(1..%d)=",j);
1071 for (i = 0; i < j; i++) {
1072 if (i % 20 == 0) printf("\n %4d:",i+1);
1073 printf(" %3d", (int) pds[i]);
1074 }
1075 printf("\n");
1076 }
1077 }
1078 }
1079
print_gds(unsigned char * gds,int print_GDS,int print_GDS10,int verbose)1080 void print_gds(unsigned char *gds, int print_GDS, int print_GDS10, int verbose) {
1081 int i, j;
1082
1083 j = GDS_LEN(gds);
1084 if (verbose < 2) {
1085 if (print_GDS && verbose < 2) {
1086 printf(":GDS=");
1087 for (i = 0; i < j; i++) {
1088 printf("%2.2x", (int) gds[i]);
1089 }
1090 }
1091 if (print_GDS10 && verbose < 2) {
1092 printf(":GDS10=");
1093 for (i = 0; i < j; i++) {
1094 printf(" %d", (int) gds[i]);
1095 }
1096 }
1097 }
1098 else {
1099 if (print_GDS) {
1100 printf(" GDS(1..%d)=",j);
1101 for (i = 0; i < j; i++) {
1102 if (i % 20 == 0) printf("\n %4d:",i+1);
1103 printf(" %3.2x", (int) gds[i]);
1104 }
1105 printf("\n");
1106 }
1107 if (print_GDS10) {
1108 printf(" GDS10(1..%d)=",j);
1109 for (i = 0; i < j; i++) {
1110 if (i % 20 == 0) printf("\n %4d:",i+1);
1111 printf(" %3d", (int) gds[i]);
1112 }
1113 printf("\n");
1114 }
1115 }
1116 }
1117 /*
1118 * find next grib header
1119 *
1120 * file = what do you think?
1121 * pos = initial position to start looking at ( = 0 for 1st call)
1122 * returns with position of next grib header (units=bytes)
1123 * len_grib = length of the grib record (bytes)
1124 * buffer[buf_len] = buffer for reading/writing
1125 *
1126 * returns (char *) to start of GRIB header+PDS
1127 * NULL if not found
1128 *
1129 * adapted from SKGB (Mark Iredell)
1130 *
1131 * v1.1 9/94 Wesley Ebisuzaki
1132 * v1.2 3/96 Wesley Ebisuzaki handles short records at end of file
1133 * v1.3 8/96 Wesley Ebisuzaki increase NTRY from 3 to 100 for the folks
1134 * at Automation decided a 21 byte WMO bulletin header wasn't long
1135 * enough and decided to go to an 8K header.
1136 *
1137 */
1138
1139 #ifndef min
1140 #define min(a,b) ((a) < (b) ? (a) : (b))
1141 #endif
1142
1143 #define NTRY 100
1144 /* #define LEN_HEADER_PDS (28+42+100) */
1145 #define LEN_HEADER_PDS (28+8)
1146
seek_grib(FILE * file,off_t * pos,off_t * len_grib,unsigned char * buffer,unsigned int buf_len)1147 unsigned char *seek_grib(FILE *file, off_t *pos, off_t *len_grib,
1148 unsigned char *buffer, unsigned int buf_len) {
1149
1150 int i, j, len;
1151
1152 for (j = 0; j < NTRY; j++) {
1153
1154 if (fseeko(file, *pos, SEEK_SET) == -1) {
1155 *len_grib = 0;
1156 return (unsigned char *) NULL;
1157 }
1158
1159 i = fread(buffer, sizeof (unsigned char), buf_len, file);
1160
1161 len = i - LEN_HEADER_PDS;
1162
1163 for (i = 0; i < len; i++) {
1164 if (buffer[i] == 'G' && buffer[i+1] == 'R' && buffer[i+2] == 'I'
1165 && buffer[i+3] == 'B' && buffer[i+7] == 1) {
1166 *pos = i + *pos;
1167 *len_grib = (buffer[i+4] << 16) + (buffer[i+5] << 8) +
1168 buffer[i+6];
1169 return (buffer+i);
1170 }
1171 }
1172 *pos = *pos + (buf_len - LEN_HEADER_PDS);
1173 }
1174
1175 *len_grib = 0;
1176 return (unsigned char *) NULL;
1177 }
1178
1179 /* ibm2flt wesley ebisuzaki
1180 *
1181 * v1.1 .. faster
1182 * v1.1 .. if mant == 0 -> quick return
1183 *
1184 */
1185
1186
ibm2flt(unsigned char * ibm)1187 double ibm2flt(unsigned char *ibm) {
1188
1189 int positive, power;
1190 unsigned int abspower;
1191 long int mant;
1192 double value, exp;
1193
1194 mant = (ibm[1] << 16) + (ibm[2] << 8) + ibm[3];
1195 if (mant == 0) return 0.0;
1196
1197 positive = (ibm[0] & 0x80) == 0;
1198 power = (int) (ibm[0] & 0x7f) - 64;
1199 abspower = power > 0 ? power : -power;
1200
1201
1202 /* calc exp */
1203 exp = 16.0;
1204 value = 1.0;
1205 while (abspower) {
1206 if (abspower & 1) {
1207 value *= exp;
1208 }
1209 exp = exp * exp;
1210 abspower >>= 1;
1211 }
1212
1213 if (power < 0) value = 1.0 / value;
1214 value = value * mant / 16777216.0;
1215 if (positive == 0) value = -value;
1216 return value;
1217 }
1218
1219 /*
1220 * read_grib.c
1221 *
1222 * reads grib message
1223 *
1224 * input: pos, byte position of grib message
1225 * len_grib, length of grib message
1226 * output: *buffer, grib message
1227 *
1228 * note: call seek_grib first
1229 *
1230 * v1.0 9/94 Wesley Ebisuzaki
1231 *
1232 */
1233
read_grib(FILE * file,off_t pos,off_t len_grib,unsigned char * buffer)1234 int read_grib(FILE *file, off_t pos, off_t len_grib, unsigned char *buffer) {
1235
1236 int i;
1237
1238
1239 if (fseeko(file, pos, SEEK_SET) == -1) {
1240 return 0;
1241 }
1242
1243 i = fread(buffer, sizeof (unsigned char), len_grib, file);
1244 return (i == len_grib);
1245 }
1246
1247 /*
1248 * w. ebisuzaki
1249 *
1250 * return x**y
1251 *
1252 *
1253 * input: double x
1254 * int y
1255 */
int_power(double x,int y)1256 double int_power(double x, int y) {
1257
1258 double value;
1259
1260 if (y < 0) {
1261 y = -y;
1262 x = 1.0 / x;
1263 }
1264 value = 1.0;
1265
1266 while (y) {
1267 if (y & 1) {
1268 value *= x;
1269 }
1270 x = x * x;
1271 y >>= 1;
1272 }
1273 return value;
1274 }
1275
1276 /* cnames.c Wesley Ebisuzaki
1277 *
1278 * returns strings with either variable name or comment field
1279 * v1.4 4/98
1280 * reanalysis can use process 180 and subcenter 0
1281 */
1282
1283
1284 extern struct ParmTable parm_table_ncep_opn[256];
1285 extern struct ParmTable parm_table_ncep_reanal[256];
1286 extern struct ParmTable parm_table_omb[256];
1287 extern struct ParmTable parm_table_ecmwf_128[256];
1288 extern struct ParmTable parm_table_ecmwf_129[256];
1289 extern struct ParmTable parm_table_ecmwf_130[256];
1290 extern struct ParmTable parm_table_ecmwf_131[256];
1291 extern struct ParmTable parm_table_ecmwf_140[256];
1292 extern struct ParmTable parm_table_ecmwf_150[256];
1293 extern struct ParmTable parm_table_ecmwf_160[256];
1294 extern struct ParmTable parm_table_ecmwf_170[256];
1295 extern struct ParmTable parm_table_ecmwf_180[256];
1296 extern struct ParmTable parm_table_user[256];
1297
1298 extern enum Def_NCEP_Table def_ncep_table;
1299
1300 /*
1301 * returns pointer to the parameter table
1302 */
1303
1304
1305
Parm_Table(unsigned char * pds)1306 static struct ParmTable *Parm_Table(unsigned char *pds) {
1307
1308 int i, center, subcenter, ptable, process;
1309 static int missing_count = 0, reanal_opn_count = 0;
1310
1311 center = PDS_Center(pds);
1312 subcenter = PDS_Subcenter(pds);
1313 ptable = PDS_Vsn(pds);
1314
1315 #ifdef P_TABLE_FIRST
1316 i = setup_user_table(center, subcenter, ptable);
1317 if (i == 1) return &parm_table_user[0];
1318 #endif
1319 /* NCEP opn and reanal */
1320 if (center == NMC && ptable <= 3) {
1321 if (subcenter == 1) return &parm_table_ncep_reanal[0];
1322 process = PDS_Model(pds);
1323 if (subcenter != 0 || (process != 80 && process != 180) ||
1324 (ptable != 1 && ptable != 2))
1325 return &parm_table_ncep_opn[0];
1326
1327 /* at this point could be either the opn or reanalysis table */
1328 if (def_ncep_table == opn_nowarn) return &parm_table_ncep_opn[0];
1329 if (def_ncep_table == rean_nowarn) return &parm_table_ncep_reanal[0];
1330 if (reanal_opn_count++ == 0) {
1331 fprintf(stderr, "Using NCEP %s table, see -ncep_opn, -ncep_rean options\n",
1332 (def_ncep_table == opn) ? "opn" : "reanalysis");
1333 }
1334 return (def_ncep_table == opn) ? &parm_table_ncep_opn[0]
1335 : &parm_table_ncep_reanal[0];
1336 }
1337 if (center == NMC && ptable == 128) return &parm_table_omb[0];
1338 if (center == ECMWF) {
1339 if (ptable == 128) return &parm_table_ecmwf_128[0];
1340 if (ptable == 129) return &parm_table_ecmwf_129[0];
1341 if (ptable == 130) return &parm_table_ecmwf_130[0];
1342 if (ptable == 131) return &parm_table_ecmwf_131[0];
1343 if (ptable == 140) return &parm_table_ecmwf_140[0];
1344 if (ptable == 150) return &parm_table_ecmwf_150[0];
1345 if (ptable == 160) return &parm_table_ecmwf_160[0];
1346 if (ptable == 170) return &parm_table_ecmwf_170[0];
1347 if (ptable == 180) return &parm_table_ecmwf_180[0];
1348 }
1349
1350
1351 #ifndef P_TABLE_FIRST
1352 i = setup_user_table(center, subcenter, ptable);
1353 if (i == 1) return &parm_table_user[0];
1354 #endif
1355
1356 if ((ptable > 3 || (PDS_PARAM(pds)) > 127) && missing_count++ == 0) {
1357 fprintf(stderr,
1358 "\nUndefined parameter table (center %d-%d table %d), using NCEP-opn\n",
1359 center, subcenter, ptable);
1360 }
1361 return &parm_table_ncep_opn[0];
1362 }
1363
1364 /*
1365 * return name field of PDS_PARAM(pds)
1366 */
1367
k5toa(unsigned char * pds)1368 char *k5toa(unsigned char *pds) {
1369
1370 return (Parm_Table(pds) + PDS_PARAM(pds))->name;
1371 }
1372
1373 /*
1374 * return comment field of the PDS_PARAM(pds)
1375 */
1376
k5_comments(unsigned char * pds)1377 char *k5_comments(unsigned char *pds) {
1378
1379 return (Parm_Table(pds) + PDS_PARAM(pds))->comment;
1380 }
1381
1382 /* 1996 wesley ebisuzaki
1383 *
1384 * Unpack BDS section
1385 *
1386 * input: *bits, pointer to packed integer data
1387 * *bitmap, pointer to bitmap (undefined data), NULL if none
1388 * n_bits, number of bits per packed integer
1389 * n, number of data points (includes undefined data)
1390 * ref, scale: flt[] = ref + scale*packed_int
1391 * output: *flt, pointer to output array
1392 * undefined values filled with UNDEFINED
1393 *
1394 * note: code assumes an integer > 32 bits
1395 *
1396 * 7/98 v1.2.1 fix bug for bitmaps and nbit >= 25 found by Larry Brasfield
1397 */
1398
1399 static unsigned int mask[] = {0,1,3,7,15,31,63,127,255};
1400 static unsigned int map_masks[8] = {128, 64, 32, 16, 8, 4, 2, 1};
1401
BDS_unpack(float * flt,unsigned char * bits,unsigned char * bitmap,int n_bits,int n,double ref,double scale)1402 void BDS_unpack(float *flt, unsigned char *bits, unsigned char *bitmap,
1403 int n_bits, int n, double ref, double scale) {
1404
1405 int i, mask_idx, t_bits, c_bits, j_bits;
1406 unsigned int j, map_mask, tbits, jmask, bbits;
1407 long int jj;
1408
1409 tbits = bbits = 0;
1410
1411 /* assume integer has 32+ bits */
1412 if (n_bits <= 25) {
1413 jmask = (1 << n_bits) - 1;
1414 t_bits = 0;
1415
1416 if (bitmap) {
1417 for (i = 0; i < n; i++) {
1418 /* check bitmap */
1419 mask_idx = i & 7;
1420 if (mask_idx == 0) bbits = *bitmap++;
1421 if ((bbits & map_masks[mask_idx]) == 0) {
1422 *flt++ = UNDEFINED;
1423 continue;
1424 }
1425
1426 while (t_bits < n_bits) {
1427 tbits = (tbits * 256) + *bits++;
1428 t_bits += 8;
1429 }
1430 t_bits -= n_bits;
1431 j = (tbits >> t_bits) & jmask;
1432 *flt++ = ref + scale*j;
1433 }
1434 }
1435 else {
1436 for (i = 0; i < n; i++) {
1437 while (t_bits < n_bits) {
1438 tbits = (tbits * 256) + *bits++;
1439 t_bits += 8;
1440 }
1441 t_bits -= n_bits;
1442 flt[i] = (tbits >> t_bits) & jmask;
1443 }
1444 /* at least this vectorizes :) */
1445 for (i = 0; i < n; i++) {
1446 flt[i] = ref + scale*flt[i];
1447 }
1448 }
1449 }
1450 else {
1451 /* older unoptimized code, not often used */
1452 c_bits = 8;
1453 map_mask = 128;
1454 while (n-- > 0) {
1455 if (bitmap) {
1456 j = (*bitmap & map_mask);
1457 if ((map_mask >>= 1) == 0) {
1458 map_mask = 128;
1459 bitmap++;
1460 }
1461 if (j == 0) {
1462 *flt++ = UNDEFINED;
1463 continue;
1464 }
1465 }
1466
1467 jj = 0;
1468 j_bits = n_bits;
1469 while (c_bits <= j_bits) {
1470 if (c_bits == 8) {
1471 jj = (jj << 8) + *bits++;
1472 j_bits -= 8;
1473 }
1474 else {
1475 jj = (jj << c_bits) + (*bits & mask[c_bits]);
1476 bits++;
1477 j_bits -= c_bits;
1478 c_bits = 8;
1479 }
1480 }
1481 if (j_bits) {
1482 c_bits -= j_bits;
1483 jj = (jj << j_bits) + ((*bits >> c_bits) & mask[j_bits]);
1484 }
1485 *flt++ = ref + scale*jj;
1486 }
1487 }
1488 return;
1489 }
1490
1491 /*
1492 * convert a float to an ieee single precision number v1.1
1493 * (big endian)
1494 * Wesley Ebisuzaki
1495 *
1496 * bugs: doesn't handle subnormal numbers
1497 * bugs: assumes length of integer >= 25 bits
1498 */
1499
flt2ieee(float x,unsigned char * ieee)1500 int flt2ieee(float x, unsigned char *ieee) {
1501
1502 int sign, exp;
1503 unsigned int umant;
1504 double mant;
1505
1506 if (x == 0.0) {
1507 ieee[0] = ieee[1] = ieee[2] = ieee[3] = 0;
1508 return 0;
1509 }
1510
1511 /* sign bit */
1512 if (x < 0.0) {
1513 sign = 128;
1514 x = -x;
1515 }
1516 else sign = 0;
1517 mant = frexp((double) x, &exp);
1518
1519 /* 2^24 = 16777216 */
1520
1521 umant = mant * 16777216 + 0.5;
1522 if (umant >= 16777216) {
1523 umant = umant / 2;
1524 exp++;
1525 }
1526 /* bit 24 should be a 1 .. not used in ieee format */
1527
1528 exp = exp - 1 + 127;
1529
1530 if (exp < 0) {
1531 /* signed zero */
1532 ieee[0] = sign;
1533 ieee[1] = ieee[2] = ieee[3] = 0;
1534 return 0;
1535 }
1536 if (exp > 255) {
1537 /* signed infinity */
1538 ieee[0] = sign + 127;
1539 ieee[1] = 128;
1540 ieee[2] = ieee[3] = 0;
1541 return 0;
1542 }
1543 /* normal number */
1544
1545 ieee[0] = sign + (exp >> 1);
1546
1547 ieee[3] = umant & 255;
1548 ieee[2] = (umant >> 8) & 255;
1549 ieee[1] = ((exp & 1) << 7) + ((umant >> 16) & 127);
1550 return 0;
1551 }
1552
1553
1554 /* wesley ebisuzaki v1.3
1555 *
1556 * write ieee file -- big endian format
1557 *
1558 * input float *array data to be written
1559 * int n size of array
1560 * int header 1 for f77 style header 0 for none
1561 * (header is 4 byte header
1562 * FILE *output output file
1563 *
1564 * v1.2 7/97 buffered, faster
1565 * v1.3 2/99 fixed (typo) error in wrtieee_header found by
1566 * Bob Farquhar
1567 */
1568
1569 #define BSIZ 1024*4
1570
wrtieee(float * array,int n,int header,FILE * output)1571 int wrtieee(float *array, int n, int header, FILE *output) {
1572
1573 unsigned long int l;
1574 int i, nbuf;
1575 unsigned char buff[BSIZ];
1576 unsigned char h4[4];
1577
1578 nbuf = 0;
1579 if (header) {
1580 l = n * 4;
1581 for (i = 0; i < 4; i++) {
1582 h4[i] = l & 255;
1583 l >>= 8;
1584 }
1585 buff[nbuf++] = h4[3];
1586 buff[nbuf++] = h4[2];
1587 buff[nbuf++] = h4[1];
1588 buff[nbuf++] = h4[0];
1589 }
1590 for (i = 0; i < n; i++) {
1591 if (nbuf >= BSIZ) {
1592 fwrite(buff, 1, BSIZ, output);
1593 nbuf = 0;
1594 }
1595 flt2ieee(array[i], buff + nbuf);
1596 nbuf += 4;
1597 }
1598 if (header) {
1599 if (nbuf == BSIZ) {
1600 fwrite(buff, 1, BSIZ, output);
1601 nbuf = 0;
1602 }
1603 buff[nbuf++] = h4[3];
1604 buff[nbuf++] = h4[2];
1605 buff[nbuf++] = h4[1];
1606 buff[nbuf++] = h4[0];
1607 }
1608 if (nbuf) fwrite(buff, 1, nbuf, output);
1609 return 0;
1610 }
1611
1612 /* write a big-endian 4 byte integer .. f77 IEEE header */
1613
wrtieee_header(unsigned int n,FILE * output)1614 int wrtieee_header(unsigned int n, FILE *output) {
1615 unsigned h4[4];
1616
1617 h4[0] = n & 255;
1618 h4[1] = (n >> 8) & 255;
1619 h4[2] = (n >> 16) & 255;
1620 h4[3] = (n >> 24) & 255;
1621
1622 putc(h4[3],output);
1623 putc(h4[2],output);
1624 putc(h4[1],output);
1625 putc(h4[0],output);
1626
1627 return 0;
1628 }
1629
1630
1631 /* wesley ebisuzaki v1.0
1632 *
1633 * levels.c
1634 *
1635 * prints out a simple description of kpds6, kpds7
1636 * (level/layer data)
1637 * kpds6 = octet 10 of the PDS
1638 * kpds7 = octet 11 and 12 of the PDS
1639 * (kpds values are from NMC's grib routines)
1640 *
1641 * the description of the levels is
1642 * (1) incomplete
1643 * (2) include some NMC-only values (>= 200?)
1644 *
1645 * v1.1 wgrib v1.7.3.1 updated with new levels
1646 */
1647
levels(int kpds6,int kpds7)1648 void levels(int kpds6, int kpds7) {
1649
1650 int o11, o12;
1651
1652 /* octets 11 and 12 */
1653 o11 = kpds7 / 256;
1654 o12 = kpds7 % 256;
1655
1656
1657 switch (kpds6) {
1658
1659 case 1: printf("sfc");
1660 break;
1661 case 2: printf("cld base");
1662 break;
1663 case 3: printf("cld top");
1664 break;
1665 case 4: printf("0C isotherm");
1666 break;
1667 case 5: printf("cond lev");
1668 break;
1669 case 6: printf("max wind lev");
1670 break;
1671 case 7: printf("tropopause");
1672 break;
1673 case 8: printf("nom. top");
1674 break;
1675 case 9: printf("sea bottom");
1676 break;
1677 case 200:
1678 case 10: printf("atmos col");
1679 break;
1680
1681 case 12:
1682 case 212: printf("low cld bot");
1683 break;
1684 case 13:
1685 case 213: printf("low cld top");
1686 break;
1687 case 14:
1688 case 214: printf("low cld lay");
1689 break;
1690 case 22:
1691 case 222: printf("mid cld bot");
1692 break;
1693 case 23:
1694 case 223: printf("mid cld top");
1695 break;
1696 case 24:
1697 case 224: printf("mid cld lay");
1698 break;
1699 case 32:
1700 case 232: printf("high cld bot");
1701 break;
1702 case 33:
1703 case 233: printf("high cld top");
1704 break;
1705 case 34:
1706 case 234: printf("high cld lay");
1707 break;
1708
1709 case 201: printf("ocean column");
1710 break;
1711 case 209: printf("bndary-layer cld bot");
1712 break;
1713 case 210: printf("bndary-layer cld top");
1714 break;
1715 case 211: printf("bndary-layer cld layer");
1716 break;
1717 case 242: printf("convect-cld bot");
1718 break;
1719 case 243: printf("convect-cld top");
1720 break;
1721 case 244: printf("convect-cld layer");
1722 break;
1723
1724 case 100: printf("%d mb",kpds7);
1725 break;
1726 case 101: printf("%d-%d mb",o11*10,o12*10);
1727 break;
1728 case 102: printf("MSL");
1729 break;
1730 case 103: printf("%d m above MSL",kpds7);
1731 break;
1732 case 104: printf("%d-%d m above msl",o11*100,o12*100);
1733 break;
1734 case 105: printf("%d m above gnd",kpds7);
1735 break;
1736 case 106: printf("%d-%d m above gnd",o11*100,o12*100);
1737 break;
1738 case 107: printf("sigma=%.4f",kpds7/10000.0);
1739 break;
1740 case 108: printf("sigma %.2f-%.2f",o11/100.0,o12/100.0);
1741 break;
1742 case 109: printf("hybrid lev %d",kpds7);
1743 break;
1744 case 110: printf("hybrid %d-%d",o11,o12);
1745 break;
1746 case 111: printf("%d cm down",kpds7);
1747 break;
1748 case 112: printf("%d-%d cm down",o11,o12);
1749 break;
1750 case 113: printf("%dK",kpds7);
1751 break;
1752 case 114: printf("%d-%dK",475-o11,475-o12);
1753 break;
1754 case 115: printf("%d mb above gnd",kpds7);
1755 break;
1756 case 116: printf("%d-%d mb above gnd",o11,o12);
1757 break;
1758 case 117: printf("%d (pv units)",kpds7); /* units are suspect */
1759 break;
1760 case 119: printf("%.5f (ETA level)",kpds7/10000.0);
1761 break;
1762 case 120: printf("%.2f-%.2f (ETA levels)",o11/100.0,o12/100.0);
1763 break;
1764 case 121: printf("%d-%d mb",1100-o11,1100-o12);
1765 break;
1766 case 125: printf("%d cm above gnd",kpds7);
1767 break;
1768 case 128: printf("%.3f-%.3f (sigma)",1.1-o11/1000.0, 1.1-o12/1000.0);
1769 break;
1770 case 141: printf("%d-%d mb",o11,1100-o12);
1771 break;
1772 case 160: printf("%d m below sea level",kpds7);
1773 break;
1774 default:
1775 break;
1776 }
1777 }
1778
1779 /*
1780 * PDStimes.c v1.2 wesley ebisuzaki
1781 *
1782 * prints something readable for time code in grib file
1783 *
1784 * not all cases decoded
1785 * for NCEP/NCAR Reanalysis
1786 *
1787 * v1.2.1 1/99 fixed forecast time unit table
1788 */
1789
1790 static char *units[] = {
1791 "min", "hr", "d", "mon", "yr",
1792 "decade", "normal", "century", "??", "??", " x3 hours", " x6 hours",
1793 " x12 hours",
1794 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1795 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1796 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1797 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1798 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1799 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1800 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1801 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1802 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1803 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1804 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1805 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1806 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1807 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1808 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1809 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1810 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1811 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1812 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1813 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1814 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1815 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1816 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1817 "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
1818 "??", " sec"};
1819
PDStimes(int time_range,int p1,int p2,int time_unit)1820 void PDStimes(int time_range, int p1, int p2, int time_unit) {
1821
1822 char *unit;
1823 enum {anal, fcst, unknown} type;
1824 int fcst_len = 0;
1825
1826 if (time_unit >= 0 && time_unit <= sizeof(units)/sizeof(char *))
1827 unit = units[time_unit];
1828 else unit = "";
1829
1830
1831 /* change x3/x6/x12 to hours */
1832
1833 if (time_unit == HOURS3) {
1834 p1 *= 3; p2 *= 3;
1835 time_unit = HOUR;
1836 }
1837 else if (time_unit == HOURS6) {
1838 p1 *= 6; p2 *= 6;
1839 time_unit = HOUR;
1840 }
1841 else if (time_unit == HOURS12) {
1842 p1 *= 12; p2 *= 12;
1843 time_unit = HOUR;
1844 }
1845
1846 if (time_unit >= 0 && time_unit <= sizeof(units)/sizeof(char *))
1847 unit = units[time_unit];
1848 else unit = "";
1849
1850 /* figure out if analysis or forecast */
1851 /* in GRIB, there is a difference between init and uninit analyses */
1852 /* not case at NMC .. no longer run initialization */
1853 /* ignore diff between init an uninit analyses */
1854
1855 switch (time_range) {
1856
1857 case 0:
1858 case 1:
1859 case 113:
1860 case 114:
1861 case 118:
1862 if (p1 == 0) type = anal;
1863 else {
1864 type = fcst;
1865 fcst_len = p1;
1866 }
1867 break;
1868 case 10: /* way NMC uses it, should be unknown? */
1869 type = fcst;
1870 fcst_len = p1*256 + p2;
1871 if (fcst_len == 0) type = anal;
1872 break;
1873
1874 case 51:
1875 case 123:
1876 case 124:
1877 type = anal;
1878 break;
1879
1880 default: type = unknown;
1881 break;
1882 }
1883
1884 /* ----------------------------------------------- */
1885
1886 if (type == anal) printf("anl:");
1887 else if (type == fcst) printf("%d%s fcst:",fcst_len,unit);
1888
1889
1890 if (time_range == 123 || time_range == 124) {
1891 if (p1 != 0) printf("start@%d%s:",p1,unit);
1892 }
1893
1894
1895 /* print time range */
1896
1897
1898 switch (time_range) {
1899
1900 case 0:
1901 case 1:
1902 case 10:
1903 break;
1904 case 2: printf("valid %d-%d%s:",p1,p2,unit);
1905 break;
1906 case 3: printf("%d-%d%s ave:",p1,p2,unit);
1907 break;
1908 case 4: printf("%d-%d%s acc:",p1,p2,unit);
1909 break;
1910 case 5: printf("%d-%d%s diff:",p1,p2,unit);
1911 break;
1912 case 51: if (p1 == 0) {
1913 printf("clim %d%s:",p2,unit);
1914 }
1915 else if (p1 == 1) {
1916 printf("clim (diurnal) %d%s:",p2,unit);
1917 }
1918 else {
1919 printf("clim? p1=%d? %d%s?:",p1,p2,unit);
1920 }
1921 break;
1922 case 113:
1923 case 123:
1924 printf("ave@%d%s:",p2,unit);
1925 break;
1926 case 114:
1927 case 124:
1928 printf("acc@%d%s:",p2,unit);
1929 break;
1930 case 115:
1931 printf("ave of fcst:%d to %d%s:",p1,p2,unit);
1932 break;
1933 case 116:
1934 printf("acc of fcst:%d to %d%s:",p1,p2,unit);
1935 break;
1936 case 118:
1937 printf("var@%d%s:",p2,unit);
1938 break;
1939 default: printf("time?:");
1940 }
1941 }
1942
1943 /*
1944 * number of missing data points w. ebisuzaki
1945 *
1946 * v1.1: just faster my dear
1947 * v1.2: just faster my dear
1948 *
1949 */
1950
1951 static int bitsum[256] = {
1952 8, 7, 7, 6, 7, 6, 6, 5, 7, 6, 6, 5, 6, 5, 5, 4,
1953 7, 6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3,
1954 7, 6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3,
1955 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1956 7, 6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3,
1957 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1958 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1959 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, 2, 2, 1,
1960 7, 6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3,
1961 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1962 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1963 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, 2, 2, 1,
1964 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2,
1965 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, 2, 2, 1,
1966 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, 2, 2, 1,
1967 4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0};
1968
1969
missing_points(unsigned char * bitmap,int n)1970 int missing_points(unsigned char *bitmap, int n) {
1971
1972 int count;
1973 unsigned int tmp;
1974 if (bitmap == NULL) return 0;
1975
1976 count = 0;
1977 while (n >= 8) {
1978 tmp = *bitmap++;
1979 n -= 8;
1980 count += bitsum[tmp];
1981 }
1982 tmp = *bitmap | ((1 << (8 - n)) - 1);
1983 count += bitsum[tmp];
1984
1985 return count;
1986 }
1987
1988 /*
1989 * parameter table for NCEP (operations)
1990 * center = 7, subcenter != 2 parameter table = 1, 2, 3 etc
1991 * note: see reanalysis parameter table for problems
1992 * updated 5/11/99
1993 */
1994
1995 struct ParmTable parm_table_ncep_opn[256] = {
1996 /* 0 */ {"var0", "undefined"},
1997 /* 1 */ {"PRES", "Pressure [Pa]"},
1998 /* 2 */ {"PRMSL", "Pressure reduced to MSL [Pa]"},
1999 /* 3 */ {"PTEND", "Pressure tendency [Pa/s]"},
2000 /* 4 */ {"PVORT", "Pot. vorticity [km^2/kg/s]"},
2001 /* 5 */ {"ICAHT", "ICAO Standard Atmosphere Reference Height [M]"},
2002 /* 6 */ {"GP", "Geopotential [m^2/s^2]"},
2003 /* 7 */ {"HGT", "Geopotential height [gpm]"},
2004 /* 8 */ {"DIST", "Geometric height [m]"},
2005 /* 9 */ {"HSTDV", "Std dev of height [m]"},
2006 /* 10 */ {"TOZNE", "Total ozone [Dobson]"},
2007 /* 11 */ {"TMP", "Temp. [K]"},
2008 /* 12 */ {"VTMP", "Virtual temp. [K]"},
2009 /* 13 */ {"POT", "Potential temp. [K]"},
2010 /* 14 */ {"EPOT", "Pseudo-adiabatic pot. temp. [K]"},
2011 /* 15 */ {"TMAX", "Max. temp. [K]"},
2012 /* 16 */ {"TMIN", "Min. temp. [K]"},
2013 /* 17 */ {"DPT", "Dew point temp. [K]"},
2014 /* 18 */ {"DEPR", "Dew point depression [K]"},
2015 /* 19 */ {"LAPR", "Lapse rate [K/m]"},
2016 /* 20 */ {"VIS", "Visibility [m]"},
2017 /* 21 */ {"RDSP1", "Radar spectra (1) [non-dim]"},
2018 /* 22 */ {"RDSP2", "Radar spectra (2) [non-dim]"},
2019 /* 23 */ {"RDSP3", "Radar spectra (3) [non-dim]"},
2020 /* 24 */ {"PLI", "Parcel lifted index (to 500 hPa) [K]"},
2021 /* 25 */ {"TMPA", "Temp. anomaly [K]"},
2022 /* 26 */ {"PRESA", "Pressure anomaly [Pa]"},
2023 /* 27 */ {"GPA", "Geopotential height anomaly [gpm]"},
2024 /* 28 */ {"WVSP1", "Wave spectra (1) [non-dim]"},
2025 /* 29 */ {"WVSP2", "Wave spectra (2) [non-dim]"},
2026 /* 30 */ {"WVSP3", "Wave spectra (3) [non-dim]"},
2027 /* 31 */ {"WDIR", "Wind direction [deg]"},
2028 /* 32 */ {"WIND", "Wind speed [m/s]"},
2029 /* 33 */ {"UGRD", "u wind [m/s]"},
2030 /* 34 */ {"VGRD", "v wind [m/s]"},
2031 /* 35 */ {"STRM", "Stream function [m^2/s]"},
2032 /* 36 */ {"VPOT", "Velocity potential [m^2/s]"},
2033 /* 37 */ {"MNTSF", "Montgomery stream function [m^2/s^2]"},
2034 /* 38 */ {"SGCVV", "Sigma coord. vertical velocity [/s]"},
2035 /* 39 */ {"VVEL", "Pressure vertical velocity [Pa/s]"},
2036 /* 40 */ {"DZDT", "Geometric vertical velocity [m/s]"},
2037 /* 41 */ {"ABSV", "Absolute vorticity [/s]"},
2038 /* 42 */ {"ABSD", "Absolute divergence [/s]"},
2039 /* 43 */ {"RELV", "Relative vorticity [/s]"},
2040 /* 44 */ {"RELD", "Relative divergence [/s]"},
2041 /* 45 */ {"VUCSH", "Vertical u shear [/s]"},
2042 /* 46 */ {"VVCSH", "Vertical v shear [/s]"},
2043 /* 47 */ {"DIRC", "Direction of current [deg]"},
2044 /* 48 */ {"SPC", "Speed of current [m/s]"},
2045 /* 49 */ {"UOGRD", "u of current [m/s]"},
2046 /* 50 */ {"VOGRD", "v of current [m/s]"},
2047 /* 51 */ {"SPFH", "Specific humidity [kg/kg]"},
2048 /* 52 */ {"RH", "Relative humidity [%]"},
2049 /* 53 */ {"MIXR", "Humidity mixing ratio [kg/kg]"},
2050 /* 54 */ {"PWAT", "Precipitable water [kg/m^2]"},
2051 /* 55 */ {"VAPP", "Vapor pressure [Pa]"},
2052 /* 56 */ {"SATD", "Saturation deficit [Pa]"},
2053 /* 57 */ {"EVP", "Evaporation [kg/m^2]"},
2054 /* 58 */ {"CICE", "Cloud Ice [kg/m^2]"},
2055 /* 59 */ {"PRATE", "Precipitation rate [kg/m^2/s]"},
2056 /* 60 */ {"TSTM", "Thunderstorm probability [%]"},
2057 /* 61 */ {"APCP", "Total precipitation [kg/m^2]"},
2058 /* 62 */ {"NCPCP", "Large scale precipitation [kg/m^2]"},
2059 /* 63 */ {"ACPCP", "Convective precipitation [kg/m^2]"},
2060 /* 64 */ {"SRWEQ", "Snowfall rate water equiv. [kg/m^2/s]"},
2061 /* 65 */ {"WEASD", "Accum. snow [kg/m^2]"},
2062 /* 66 */ {"SNOD", "Snow depth [m]"},
2063 /* 67 */ {"MIXHT", "Mixed layer depth [m]"},
2064 /* 68 */ {"TTHDP", "Transient thermocline depth [m]"},
2065 /* 69 */ {"MTHD", "Main thermocline depth [m]"},
2066 /* 70 */ {"MTHA", "Main thermocline anomaly [m]"},
2067 /* 71 */ {"TCDC", "Total cloud cover [%]"},
2068 /* 72 */ {"CDCON", "Convective cloud cover [%]"},
2069 /* 73 */ {"LCDC", "Low level cloud cover [%]"},
2070 /* 74 */ {"MCDC", "Mid level cloud cover [%]"},
2071 /* 75 */ {"HCDC", "High level cloud cover [%]"},
2072 /* 76 */ {"CWAT", "Cloud water [kg/m^2]"},
2073 /* 77 */ {"BLI", "Best lifted index (to 500 hPa) [K]"},
2074 /* 78 */ {"SNOC", "Convective snow [kg/m^2]"},
2075 /* 79 */ {"SNOL", "Large scale snow [kg/m^2]"},
2076 /* 80 */ {"WTMP", "Water temp. [K]"},
2077 /* 81 */ {"LAND", "Land cover (land=1;sea=0) [fraction]"},
2078 /* 82 */ {"DSLM", "Deviation of sea level from mean [m]"},
2079 /* 83 */ {"SFCR", "Surface roughness [m]"},
2080 /* 84 */ {"ALBDO", "Albedo [%]"},
2081 /* 85 */ {"TSOIL", "Soil temp. [K]"},
2082 /* 86 */ {"SOILM", "Soil moisture content [kg/m^2]"},
2083 /* 87 */ {"VEG", "Vegetation [%]"},
2084 /* 88 */ {"SALTY", "Salinity [kg/kg]"},
2085 /* 89 */ {"DEN", "Density [kg/m^3]"},
2086 /* 90 */ {"WATR", "Water runoff [kg/m^2]"},
2087 /* 91 */ {"ICEC", "Ice concentration (ice=1;no ice=0) [fraction]"},
2088 /* 92 */ {"ICETK", "Ice thickness [m]"},
2089 /* 93 */ {"DICED", "Direction of ice drift [deg]"},
2090 /* 94 */ {"SICED", "Speed of ice drift [m/s]"},
2091 /* 95 */ {"UICE", "u of ice drift [m/s]"},
2092 /* 96 */ {"VICE", "v of ice drift [m/s]"},
2093 /* 97 */ {"ICEG", "Ice growth rate [m/s]"},
2094 /* 98 */ {"ICED", "Ice divergence [/s]"},
2095 /* 99 */ {"SNOM", "Snow melt [kg/m^2]"},
2096 /* 100 */ {"HTSGW", "Sig height of wind waves and swell [m]"},
2097 /* 101 */ {"WVDIR", "Direction of wind waves [deg]"},
2098 /* 102 */ {"WVHGT", "Sig height of wind waves [m]"},
2099 /* 103 */ {"WVPER", "Mean period of wind waves [s]"},
2100 /* 104 */ {"SWDIR", "Direction of swell waves [deg]"},
2101 /* 105 */ {"SWELL", "Sig height of swell waves [m]"},
2102 /* 106 */ {"SWPER", "Mean period of swell waves [s]"},
2103 /* 107 */ {"DIRPW", "Primary wave direction [deg]"},
2104 /* 108 */ {"PERPW", "Primary wave mean period [s]"},
2105 /* 109 */ {"DIRSW", "Secondary wave direction [deg]"},
2106 /* 110 */ {"PERSW", "Secondary wave mean period [s]"},
2107 /* 111 */ {"NSWRS", "Net short wave (surface) [W/m^2]"},
2108 /* 112 */ {"NLWRS", "Net long wave (surface) [W/m^2]"},
2109 /* 113 */ {"NSWRT", "Net short wave (top) [W/m^2]"},
2110 /* 114 */ {"NLWRT", "Net long wave (top) [W/m^2]"},
2111 /* 115 */ {"LWAVR", "Long wave [W/m^2]"},
2112 /* 116 */ {"SWAVR", "Short wave [W/m^2]"},
2113 /* 117 */ {"GRAD", "Global radiation [W/m^2]"},
2114 /* 118 */ {"BRTMP", "Brightness temperature [K]"},
2115 /* 119 */ {"LWRAD", "Radiance with respect to wave no. [W/m/sr]"},
2116 /* 120 */ {"SWRAD", "Radiance with respect ot wave len. [W/m^3/sr]"},
2117 /* 121 */ {"LHTFL", "Latent heat flux [W/m^2]"},
2118 /* 122 */ {"SHTFL", "Sensible heat flux [W/m^2]"},
2119 /* 123 */ {"BLYDP", "Boundary layer dissipation [W/m^2]"},
2120 /* 124 */ {"UFLX", "Zonal momentum flux [N/m^2]"},
2121 /* 125 */ {"VFLX", "Meridional momentum flux [N/m^2]"},
2122 /* 126 */ {"WMIXE", "Wind mixing energy [J]"},
2123 /* 127 */ {"IMGD", "Image data []"},
2124 /* 128 */ {"MSLSA", "Mean sea level pressure (Std Atm) [Pa]"},
2125 /* 129 */ {"MSLMA", "Mean sea level pressure (MAPS) [Pa]"},
2126 /* 130 */ {"MSLET", "Mean sea level pressure (ETA model) [Pa]"},
2127 /* 131 */ {"LFTX", "Surface lifted index [K]"},
2128 /* 132 */ {"4LFTX", "Best (4-layer) lifted index [K]"},
2129 /* 133 */ {"KX", "K index [K]"},
2130 /* 134 */ {"SX", "Sweat index [K]"},
2131 /* 135 */ {"MCONV", "Horizontal moisture divergence [kg/kg/s]"},
2132 /* 136 */ {"VWSH", "Vertical speed shear [1/s]"},
2133 /* 137 */ {"TSLSA", "3-hr pressure tendency (Std Atmos Red) [Pa/s]"},
2134 /* 138 */ {"BVF2", "Brunt-Vaisala frequency^2 [1/s^2]"},
2135 /* 139 */ {"PVMW", "Potential vorticity (mass-weighted) [1/s/m]"},
2136 /* 140 */ {"CRAIN", "Categorical rain [yes=1;no=0]"},
2137 /* 141 */ {"CFRZR", "Categorical freezing rain [yes=1;no=0]"},
2138 /* 142 */ {"CICEP", "Categorical ice pellets [yes=1;no=0]"},
2139 /* 143 */ {"CSNOW", "Categorical snow [yes=1;no=0]"},
2140 /* 144 */ {"SOILW", "Volumetric soil moisture [fraction]"},
2141 /* 145 */ {"PEVPR", "Potential evaporation rate [W/m^2]"},
2142 /* 146 */ {"CWORK", "Cloud work function [J/kg]"},
2143 /* 147 */ {"U-GWD", "Zonal gravity wave stress [N/m^2]"},
2144 /* 148 */ {"V-GWD", "Meridional gravity wave stress [N/m^2]"},
2145 /* 149 */ {"PV", "Potential vorticity [m^2/s/kg]"},
2146 /* 150 */ {"COVMZ", "Covariance between u and v [m^2/s^2]"},
2147 /* 151 */ {"COVTZ", "Covariance between u and T [K*m/s]"},
2148 /* 152 */ {"COVTM", "Covariance between v and T [K*m/s]"},
2149 /* 153 */ {"CLWMR", "Cloud water [kg/kg]"},
2150 /* 154 */ {"O3MR", "Ozone mixing ratio [kg/kg]"},
2151 /* 155 */ {"GFLUX", "Ground heat flux [W/m^2]"},
2152 /* 156 */ {"CIN", "Convective inhibition [J/kg]"},
2153 /* 157 */ {"CAPE", "Convective Avail. Pot. Energy [J/kg]"},
2154 /* 158 */ {"TKE", "Turbulent kinetic energy [J/kg]"},
2155 /* 159 */ {"CONDP", "Lifted parcel condensation pressure [Pa]"},
2156 /* 160 */ {"CSUSF", "Clear sky upward solar flux [W/m^2]"},
2157 /* 161 */ {"CSDSF", "Clear sky downward solar flux [W/m^2]"},
2158 /* 162 */ {"CSULF", "Clear sky upward long wave flux [W/m^2]"},
2159 /* 163 */ {"CSDLF", "Clear sky downward long wave flux [W/m^2]"},
2160 /* 164 */ {"CFNSF", "Cloud forcing net solar flux [W/m^2]"},
2161 /* 165 */ {"CFNLF", "Cloud forcing net long wave flux [W/m^2]"},
2162 /* 166 */ {"VBDSF", "Visible beam downward solar flux [W/m^2]"},
2163 /* 167 */ {"VDDSF", "Visible diffuse downward solar flux [W/m^2]"},
2164 /* 168 */ {"NBDSF", "Near IR beam downward solar flux [W/m^2]"},
2165 /* 169 */ {"NDDSF", "Near IR diffuse downward solar flux [W/m^2]"},
2166 /* 170 */ {"RWMR", "Rain water mixing ratio [kg/kg]"},
2167 /* 171 */ {"SNMR", "Snow mixing ratio [kg/kg]"},
2168 /* 172 */ {"MFLX", "Momentum flux [N/m^2]"},
2169 /* 173 */ {"LMH", "Mass point model surface [non-dim]"},
2170 /* 174 */ {"LMV", "Velocity point model surface [non-dim]"},
2171 /* 175 */ {"MLYNO", "Model layer number (from bottom up) [non-dim]"},
2172 /* 176 */ {"NLAT", "Latitude (-90 to +90) [deg]"},
2173 /* 177 */ {"ELON", "East longitude (0-360) [deg]"},
2174 /* 178 */ {"ICMR", "Ice mixing ratio [kg/kg]"},
2175 /* 179 */ {"GRMR", "Graupel mixing ratio"},
2176 /* 180 */ {"var180", "undefined"},
2177 /* 181 */ {"LPSX", "x-gradient of log pressure [1/m]"},
2178 /* 182 */ {"LPSY", "y-gradient of log pressure [1/m]"},
2179 /* 183 */ {"HGTX", "x-gradient of height [m/m]"},
2180 /* 184 */ {"HGTY", "y-gradient of height [m/m]"},
2181 /* 185 */ {"TURB", "Turbulence SIGMET/AIRMET [non-dim]"},
2182 /* 186 */ {"ICNG", "Icing SIGMET/AIRMET [non-dim]"},
2183 /* 187 */ {"LTNG", "Lightning [non-dim]"},
2184 /* 188 */ {"var188", "undefined"},
2185 /* 189 */ {"VPTMP", "Virtual pot. temp. [K]"},
2186 /* 190 */ {"HLCY", "Storm relative helicity [m^2/s^2]"},
2187 /* 191 */ {"PROB", "Prob. from ensemble [non-dim]"},
2188 /* 192 */ {"PROBN", "Prob. from ensemble norm. to clim. expect. [non-dim]"},
2189 /* 193 */ {"POP", "Prob. of precipitation [%]"},
2190 /* 194 */ {"CPOFP", "Prob. of frozen precipitation [%]"},
2191 /* 195 */ {"CPOZP", "Prob. of freezing precipitation [%]"},
2192 /* 196 */ {"USTM", "u-component of storm motion [m/s]"},
2193 /* 197 */ {"VSTM", "v-component of storm motion [m/s]"},
2194 /* 198 */ {"NCIP", "No. concen. ice particles"},
2195 /* 199 */ {"EVBS", "Direct evaporation from bare soil [W/m^2]"},
2196 /* 200 */ {"EVCW", "Canopy water evaporation [W/m^2]"},
2197 /* 201 */ {"ICWAT", "Ice-free water surface [%]"},
2198 /* 202 */ {"var202", "undefined"},
2199 /* 203 */ {"var203", "undefined"},
2200 /* 204 */ {"DSWRF", "Downward short wave flux [W/m^2]"},
2201 /* 205 */ {"DLWRF", "Downward long wave flux [W/m^2]"},
2202 /* 206 */ {"UVI", "Ultra violet index (1 hour centered at solar noon) [J/m^2]"},
2203 /* 207 */ {"MSTAV", "Moisture availability [%]"},
2204 /* 208 */ {"SFEXC", "Exchange coefficient [(kg/m^3)(m/s)]"},
2205 /* 209 */ {"MIXLY", "No. of mixed layers next to surface [integer]"},
2206 /* 210 */ {"TRANS", "Transpiration [W/m^2]"},
2207 /* 211 */ {"USWRF", "Upward short wave flux [W/m^2]"},
2208 /* 212 */ {"ULWRF", "Upward long wave flux [W/m^2]"},
2209 /* 213 */ {"CDLYR", "Non-convective cloud [%]"},
2210 /* 214 */ {"CPRAT", "Convective precip. rate [kg/m^2/s]"},
2211 /* 215 */ {"TTDIA", "Temp. tendency by all physics [K/s]"},
2212 /* 216 */ {"TTRAD", "Temp. tendency by all radiation [K/s]"},
2213 /* 217 */ {"TTPHY", "Temp. tendency by non-radiation physics [K/s]"},
2214 /* 218 */ {"PREIX", "Precip index (0.0-1.00) [fraction]"},
2215 /* 219 */ {"TSD1D", "Std. dev. of IR T over 1x1 deg area [K]"},
2216 /* 220 */ {"NLGSP", "Natural log of surface pressure [ln(kPa)]"},
2217 /* 221 */ {"HPBL", "Planetary boundary layer height [m]"},
2218 /* 222 */ {"5WAVH", "5-wave geopotential height [gpm]"},
2219 /* 223 */ {"CNWAT", "Plant canopy surface water [kg/m^2]"},
2220 /* 224 */ {"SOTYP", "Soil type (Zobler) [0..9]"},
2221 /* 225 */ {"VGTYP", "Vegetation type (as in SiB) [0..13]"},
2222 /* 226 */ {"BMIXL", "Blackadar's mixing length scale [m]"},
2223 /* 227 */ {"AMIXL", "Asymptotic mixing length scale [m]"},
2224 /* 228 */ {"PEVAP", "Pot. evaporation [kg/m^2]"},
2225 /* 229 */ {"SNOHF", "Snow phase-change heat flux [W/m^2]"},
2226 /* 230 */ {"5WAVA", "5-wave geopot. height anomaly [gpm]"},
2227 /* 231 */ {"MFLUX", "Convective cloud mass flux [Pa/s]"},
2228 /* 232 */ {"DTRF", "Downward total radiation flux [W/m^2]"},
2229 /* 233 */ {"UTRF", "Upward total radiation flux [W/m^2]"},
2230 /* 234 */ {"BGRUN", "Baseflow-groundwater runoff [kg/m^2]"},
2231 /* 235 */ {"SSRUN", "Storm surface runoff [kg/m^2]"},
2232 /* 236 */ {"var236", "undefined"},
2233 /* 237 */ {"O3TOT", "Total ozone [kg/m^2]"},
2234 /* 238 */ {"SNOWC", "Snow cover [%]"},
2235 /* 239 */ {"SNOT", "Snow temp. [K]"},
2236 /* 240 */ {"var240", "undefined"},
2237 /* 241 */ {"LRGHR", "Large scale condensation heating [K/s]"},
2238 /* 242 */ {"CNVHR", "Deep convective heating [K/s]"},
2239 /* 243 */ {"CNVMR", "Deep convective moistening [kg/kg/s]"},
2240 /* 244 */ {"SHAHR", "Shallow convective heating [K/s]"},
2241 /* 245 */ {"SHAMR", "Shallow convective moistening [kg/kg/s]"},
2242 /* 246 */ {"VDFHR", "Vertical diffusion heating [K/s]"},
2243 /* 247 */ {"VDFUA", "Vertical diffusion zonal accel [m/s^2]"},
2244 /* 248 */ {"VDFVA", "Vertical diffusion meridional accel [m/s^2]"},
2245 /* 249 */ {"VDFMR", "Vertical diffusion moistening [kg/kg/s]"},
2246 /* 250 */ {"SWHR", "Solar radiative heating [K/s]"},
2247 /* 251 */ {"LWHR", "Longwave radiative heating [K/s]"},
2248 /* 252 */ {"CD", "Drag coefficient [non-dim]"},
2249 /* 253 */ {"FRICV", "Friction velocity [m/s]"},
2250 /* 254 */ {"RI", "Richardson number [non-dim]"},
2251 /* 255 */ {"var255", "undefined"},
2252 };
2253
2254 /*
2255 * parameter table for the NCEP/NCAR Reanalysis Project
2256 * center = 7, subcenter = 0/2, parameter table = 1/2
2257 * in a SNAFU the operational and reanalysis tables diverged
2258 * and both retained the same parameter table numbers (1,2)
2259 *
2260 * some of the Reanalysis files have subcenter=2 while others
2261 * use subcenter=0 (subcenter field is not standard (7/97))
2262 *
2263 * Some ways to tell Reanalysis files from OPN files
2264 * Reanalysis: always generated by process 80 - T62 28 level model
2265 * Original subcenter=0 Reanalysis files had
2266 * 2.5x2.5 (144x73) lat-long grid or 192x94 Gaussian grid (PDS grid=255?)
2267 */
2268
2269 struct ParmTable parm_table_ncep_reanal[256] = {
2270 /* 0 */ {"var0", "undefined"},
2271 /* 1 */ {"PRES", "Pressure [Pa]"},
2272 /* 2 */ {"PRMSL", "Pressure reduced to MSL [Pa]"},
2273 /* 3 */ {"PTEND", "Pressure tendency [Pa/s]"},
2274 /* 4 */ {"var4", "undefined"},
2275 /* 5 */ {"var5", "undefined"},
2276 /* 6 */ {"GP", "Geopotential [m^2/s^2]"},
2277 /* 7 */ {"HGT", "Geopotential height [gpm]"},
2278 /* 8 */ {"DIST", "Geometric height [m]"},
2279 /* 9 */ {"HSTDV", "Std dev of height [m]"},
2280 /* 10 */ {"HVAR", "Variance of height [m^2]"},
2281 /* 11 */ {"TMP", "Temp. [K]"},
2282 /* 12 */ {"VTMP", "Virtual temp. [K]"},
2283 /* 13 */ {"POT", "Potential temp. [K]"},
2284 /* 14 */ {"EPOT", "Pseudo-adiabatic pot. temp. [K]"},
2285 /* 15 */ {"TMAX", "Max. temp. [K]"},
2286 /* 16 */ {"TMIN", "Min. temp. [K]"},
2287 /* 17 */ {"DPT", "Dew point temp. [K]"},
2288 /* 18 */ {"DEPR", "Dew point depression [K]"},
2289 /* 19 */ {"LAPR", "Lapse rate [K/m]"},
2290 /* 20 */ {"VISIB", "Visibility [m]"},
2291 /* 21 */ {"RDSP1", "Radar spectra (1) [non-dim]"},
2292 /* 22 */ {"RDSP2", "Radar spectra (2) [non-dim]"},
2293 /* 23 */ {"RDSP3", "Radar spectra (3) [non-dim]"},
2294 /* 24 */ {"var24", "undefined"},
2295 /* 25 */ {"TMPA", "Temp. anomaly [K]"},
2296 /* 26 */ {"PRESA", "Pressure anomaly [Pa]"},
2297 /* 27 */ {"GPA", "Geopotential height anomaly [gpm]"},
2298 /* 28 */ {"WVSP1", "Wave spectra (1) [non-dim]"},
2299 /* 29 */ {"WVSP2", "Wave spectra (2) [non-dim]"},
2300 /* 30 */ {"WVSP3", "Wave spectra (3) [non-dim]"},
2301 /* 31 */ {"WDIR", "Wind direction [deg]"},
2302 /* 32 */ {"WIND", "Wind speed [m/s]"},
2303 /* 33 */ {"UGRD", "u wind [m/s]"},
2304 /* 34 */ {"VGRD", "v wind [m/s]"},
2305 /* 35 */ {"STRM", "Stream function [m^2/s]"},
2306 /* 36 */ {"VPOT", "Velocity potential [m^2/s]"},
2307 /* 37 */ {"MNTSF", "Montgomery stream function [m^2/s^2]"},
2308 /* 38 */ {"SGCVV", "Sigma coord. vertical velocity [/s]"},
2309 /* 39 */ {"VVEL", "Pressure vertical velocity [Pa/s]"},
2310 /* 40 */ {"DZDT", "Geometric vertical velocity [m/s]"},
2311 /* 41 */ {"ABSV", "Absolute vorticity [/s]"},
2312 /* 42 */ {"ABSD", "Absolute divergence [/s]"},
2313 /* 43 */ {"RELV", "Relative vorticity [/s]"},
2314 /* 44 */ {"RELD", "Relative divergence [/s]"},
2315 /* 45 */ {"VUCSH", "Vertical u shear [/s]"},
2316 /* 46 */ {"VVCSH", "Vertical v shear [/s]"},
2317 /* 47 */ {"DIRC", "Direction of current [deg]"},
2318 /* 48 */ {"SPC", "Speed of current [m/s]"},
2319 /* 49 */ {"UOGRD", "u of current [m/s]"},
2320 /* 50 */ {"VOGRD", "v of current [m/s]"},
2321 /* 51 */ {"SPFH", "Specific humidity [kg/kg]"},
2322 /* 52 */ {"RH", "Relative humidity [%]"},
2323 /* 53 */ {"MIXR", "Humidity mixing ratio [kg/kg]"},
2324 /* 54 */ {"PWAT", "Precipitable water [kg/m^2]"},
2325 /* 55 */ {"VAPP", "Vapor pressure [Pa]"},
2326 /* 56 */ {"SATD", "Saturation deficit [Pa]"},
2327 /* 57 */ {"EVP", "Evaporation [kg/m^2]"},
2328 /* 58 */ {"CICE", "Cloud Ice [kg/m^2]"},
2329 /* 59 */ {"PRATE", "Precipitation rate [kg/m^2/s]"},
2330 /* 60 */ {"TSTM", "Thunderstorm probability [%]"},
2331 /* 61 */ {"APCP", "Total precipitation [kg/m^2]"},
2332 /* 62 */ {"NCPCP", "Large scale precipitation [kg/m^2]"},
2333 /* 63 */ {"ACPCP", "Convective precipitation [kg/m^2]"},
2334 /* 64 */ {"SRWEQ", "Snowfall rate water equiv. [kg/m^2/s]"},
2335 /* 65 */ {"WEASD", "Accum. snow [kg/m^2]"},
2336 /* 66 */ {"SNOD", "Snow depth [m]"},
2337 /* 67 */ {"MIXHT", "Mixed layer depth [m]"},
2338 /* 68 */ {"TTHDP", "Transient thermocline depth [m]"},
2339 /* 69 */ {"MTHD", "Main thermocline depth [m]"},
2340 /* 70 */ {"MTHA", "Main thermocline anomaly [m]"},
2341 /* 71 */ {"TCDC", "Total cloud cover [%]"},
2342 /* 72 */ {"CDCON", "Convective cloud cover [%]"},
2343 /* 73 */ {"LCDC", "Low level cloud cover [%]"},
2344 /* 74 */ {"MCDC", "Mid level cloud cover [%]"},
2345 /* 75 */ {"HCDC", "High level cloud cover [%]"},
2346 /* 76 */ {"CWAT", "Cloud water [kg/m^2]"},
2347 /* 77 */ {"var77", "undefined"},
2348 /* 78 */ {"SNOC", "Convective snow [kg/m^2]"},
2349 /* 79 */ {"SNOL", "Large scale snow [kg/m^2]"},
2350 /* 80 */ {"WTMP", "Water temp. [K]"},
2351 /* 81 */ {"LAND", "Land-sea mask [1=land; 0=sea]"},
2352 /* 82 */ {"DSLM", "Deviation of sea level from mean [m]"},
2353 /* 83 */ {"SFCR", "Surface roughness [m]"},
2354 /* 84 */ {"ALBDO", "Albedo [%]"},
2355 /* 85 */ {"TSOIL", "Soil temp. [K]"},
2356 /* 86 */ {"SOILM", "Soil moisture content [kg/m^2]"},
2357 /* 87 */ {"VEG", "Vegetation [%]"},
2358 /* 88 */ {"SALTY", "Salinity [kg/kg]"},
2359 /* 89 */ {"DEN", "Density [kg/m^3]"},
2360 /* 90 */ {"RUNOF", "Runoff [kg/m^2]"},
2361 /* 91 */ {"ICEC", "Ice concentration [ice=1;no ice=0]"},
2362 /* 92 */ {"ICETK", "Ice thickness [m]"},
2363 /* 93 */ {"DICED", "Direction of ice drift [deg]"},
2364 /* 94 */ {"SICED", "Speed of ice drift [m/s]"},
2365 /* 95 */ {"UICE", "u of ice drift [m/s]"},
2366 /* 96 */ {"VICE", "v of ice drift [m/s]"},
2367 /* 97 */ {"ICEG", "Ice growth rate [m/s]"},
2368 /* 98 */ {"ICED", "Ice divergence [/s]"},
2369 /* 99 */ {"SNOM", "Snow melt [kg/m^2]"},
2370 /* 100 */ {"HTSGW", "Sig height of wind waves and swell [m]"},
2371 /* 101 */ {"WVDIR", "Direction of wind waves [deg]"},
2372 /* 102 */ {"WVHGT", "Sig height of wind waves [m]"},
2373 /* 103 */ {"WVPER", "Mean period of wind waves [s]"},
2374 /* 104 */ {"SWDIR", "Direction of swell waves [deg]"},
2375 /* 105 */ {"SWELL", "Sig height of swell waves [m]"},
2376 /* 106 */ {"SWPER", "Mean period of swell waves [s]"},
2377 /* 107 */ {"DIRPW", "Primary wave direction [deg]"},
2378 /* 108 */ {"PERPW", "Primary wave mean period [s]"},
2379 /* 109 */ {"DIRSW", "Secondary wave direction [deg]"},
2380 /* 110 */ {"PERSW", "Secondary wave mean period [s]"},
2381 /* 111 */ {"NSWRS", "Net short wave (surface) [W/m^2]"},
2382 /* 112 */ {"NLWRS", "Net long wave (surface) [W/m^2]"},
2383 /* 113 */ {"NSWRT", "Net short wave (top) [W/m^2]"},
2384 /* 114 */ {"NLWRT", "Net long wave (top) [W/m^2]"},
2385 /* 115 */ {"LWAVR", "Long wave [W/m^2]"},
2386 /* 116 */ {"SWAVR", "Short wave [W/m^2]"},
2387 /* 117 */ {"GRAD", "Global radiation [W/m^2]"},
2388 /* 118 */ {"var118", "undefined"},
2389 /* 119 */ {"var119", "undefined"},
2390 /* 120 */ {"var120", "undefined"},
2391 /* 121 */ {"LHTFL", "Latent heat flux [W/m^2]"},
2392 /* 122 */ {"SHTFL", "Sensible heat flux [W/m^2]"},
2393 /* 123 */ {"BLYDP", "Boundary layer dissipation [W/m^2]"},
2394 /* 124 */ {"UFLX", "Zonal momentum flux [N/m^2]"},
2395 /* 125 */ {"VFLX", "Meridional momentum flux [N/m^2]"},
2396 /* 126 */ {"WMIXE", "Wind mixing energy [J]"},
2397 /* 127 */ {"IMGD", "Image data [integer]"},
2398 /* 128 */ {"MSLSA", "Mean sea level pressure (Std Atm) [Pa]"},
2399 /* 129 */ {"MSLMA", "Mean sea level pressure (MAPS) [Pa]"},
2400 /* 130 */ {"MSLET", "Mean sea level pressure (ETA model) [Pa]"},
2401 /* 131 */ {"LFTX", "Surface lifted index [K]"},
2402 /* 132 */ {"4LFTX", "Best (4-layer) lifted index [K]"},
2403 /* 133 */ {"KX", "K index [K]"},
2404 /* 134 */ {"SX", "Sweat index [K]"},
2405 /* 135 */ {"MCONV", "Horizontal moisture divergence [kg/kg/s]"},
2406 /* 136 */ {"VSSH", "Vertical speed shear [1/s]"},
2407 /* 137 */ {"TSLSA", "3-hr pressure tendency [Pa/s]"},
2408 /* 138 */ {"BVF2", "Brunt-Vaisala frequency^2 [1/s^2]"},
2409 /* 139 */ {"PVMW", "Potential vorticity (mass-weighted) [1/s/m]"},
2410 /* 140 */ {"CRAIN", "Categorical rain [yes=1;no=0]"},
2411 /* 141 */ {"CFRZR", "Categorical freezing rain [yes=1;no=0]"},
2412 /* 142 */ {"CICEP", "Categorical ice pellets [yes=1;no=0]"},
2413 /* 143 */ {"CSNOW", "Categorical snow [yes=1;no=0]"},
2414 /* 144 */ {"SOILW", "Volumetric soil moisture [fraction]"},
2415 /* 145 */ {"PEVPR", "Potential evaporation rate [W/m^2]"},
2416 /* 146 */ {"CWORK", "Cloud work function [J/kg]"},
2417 /* 147 */ {"U-GWD", "Zonal gravity wave stress [N/m^2]"},
2418 /* 148 */ {"V-GWD", "Meridional gravity wave stress [N/m^2]"},
2419 /* 149 */ {"PV___", "Potential vorticity [m^2/s/kg]"},
2420 /* 150 */ {"var150", "undefined"},
2421 /* 151 */ {"var151", "undefined"},
2422 /* 152 */ {"var152", "undefined"},
2423 /* 153 */ {"MFXDV", "Moisture flux divergence [gr/gr*m/s/m]"},
2424 /* 154 */ {"var154", "undefined"},
2425 /* 155 */ {"GFLUX", "Ground heat flux [W/m^2]"},
2426 /* 156 */ {"CIN", "Convective inhibition [J/kg]"},
2427 /* 157 */ {"CAPE", "Convective Avail. Pot. Energy [J/kg]"},
2428 /* 158 */ {"TKE", "Turbulent kinetic energy [J/kg]"},
2429 /* 159 */ {"CONDP", "Lifted parcel condensation pressure [Pa]"},
2430 /* 160 */ {"CSUSF", "Clear sky upward solar flux [W/m^2]"},
2431 /* 161 */ {"CSDSF", "Clear sky downward solar flux [W/m^2]"},
2432 /* 162 */ {"CSULF", "Clear sky upward long wave flux [W/m^2]"},
2433 /* 163 */ {"CSDLF", "Clear sky downward long wave flux [W/m^2]"},
2434 /* 164 */ {"CFNSF", "Cloud forcing net solar flux [W/m^2]"},
2435 /* 165 */ {"CFNLF", "Cloud forcing net long wave flux [W/m^2]"},
2436 /* 166 */ {"VBDSF", "Visible beam downward solar flux [W/m^2]"},
2437 /* 167 */ {"VDDSF", "Visible diffuse downward solar flux [W/m^2]"},
2438 /* 168 */ {"NBDSF", "Near IR beam downward solar flux [W/m^2]"},
2439 /* 169 */ {"NDDSF", "Near IR diffuse downward solar flux [W/m^2]"},
2440 /* 170 */ {"USTR", "U wind stress [N/m^2]"},
2441 /* 171 */ {"VSTR", "V wind stress [N/m^2]"},
2442 /* 172 */ {"MFLX", "Momentum flux [N/m^2]"},
2443 /* 173 */ {"LMH", "Mass point model surface [integer]"},
2444 /* 174 */ {"LMV", "Velocity point model surface [integer]"},
2445 /* 175 */ {"SGLYR", "Nearby model level [integer]"},
2446 /* 176 */ {"NLAT", "Latitude [deg]"},
2447 /* 177 */ {"NLON", "Longitude [deg]"},
2448 /* 178 */ {"UMAS", "Mass weighted u [gm/m*K*s]"},
2449 /* 179 */ {"VMAS", "Mass weighted v [gm/m*K*s]"},
2450 /* 180 */ {"XPRATE", "corrected precip [kg/m^2/s]"},
2451 /* 181 */ {"LPSX", "x-gradient of log pressure [1/m]"},
2452 /* 182 */ {"LPSY", "y-gradient of log pressure [1/m]"},
2453 /* 183 */ {"HGTX", "x-gradient of height [m/m]"},
2454 /* 184 */ {"HGTY", "y-gradient of height [m/m]"},
2455 /* 185 */ {"STDZ", "Std dev of Geop. hgt. [m]"},
2456 /* 186 */ {"STDU", "Std dev of zonal wind [m/s]"},
2457 /* 187 */ {"STDV", "Std dev of meridional wind [m/s]"},
2458 /* 188 */ {"STDQ", "Std dev of spec. hum. [gm/gm]"},
2459 /* 189 */ {"STDT", "Std dev of temp. [K]"},
2460 /* 190 */ {"CBUW", "Covar. u and omega [m/s*Pa/s]"},
2461 /* 191 */ {"CBVW", "Covar. v and omega [m/s*Pa/s]"},
2462 /* 192 */ {"CBUQ", "Covar. u and specific hum [m/s*gm/gm]"},
2463 /* 193 */ {"CBVQ", "Covar. v and specific hum [m/s*gm/gm]"},
2464 /* 194 */ {"CBTW", "Covar. T and omega [K*Pa/s]"},
2465 /* 195 */ {"CBQW", "Covar. spec. hum and omega [gm/gm*Pa/s]"},
2466 /* 196 */ {"CBMZW", "Covar. v and u [m^2/s^2]"},
2467 /* 197 */ {"CBTZW", "Covar. u and T [K*m/s]"},
2468 /* 198 */ {"CBTMW", "Covar. v and T [K*m/s]"},
2469 /* 199 */ {"STDRH", "Std dev of Rel. Hum. [%]"},
2470 /* 200 */ {"SDTZ", "Std dev of time tend of geop. hgt [m]"},
2471 /* 201 */ {"ICWAT", "Ice-free water surface [%]"},
2472 /* 202 */ {"SDTU", "Std dev of time tend of zonal wind [m/s]"},
2473 /* 203 */ {"SDTV", "Std dev of time tend of merid wind [m/s]"},
2474 /* 204 */ {"DSWRF", "Downward solar radiation flux [W/m^2]"},
2475 /* 205 */ {"DLWRF", "Downward long wave flux [W/m^2]"},
2476 /* 206 */ {"SDTQ", "Std dev of time tend of spec. hum [gm/gm]"},
2477 /* 207 */ {"MSTAV", "Moisture availability [%]"},
2478 /* 208 */ {"SFEXC", "Exchange coefficient [kg*m/m^3/s]"},
2479 /* 209 */ {"MIXLY", "No. of mixed layers next to sfc [integer]"},
2480 /* 210 */ {"SDTT", "Std dev of time tend of temp. [K]"},
2481 /* 211 */ {"USWRF", "Upward solar radiation flux [W/m^2]"},
2482 /* 212 */ {"ULWRF", "Upward long wave flux [W/m^2]"},
2483 /* 213 */ {"CDLYR", "Non-convective cloud [%]"},
2484 /* 214 */ {"CPRAT", "Convective precip. rate [kg/m^2/s]"},
2485 /* 215 */ {"TTDIA", "Temp. tendency by all physics [K/s]"},
2486 /* 216 */ {"TTRAD", "Temp. tendency by all radiation [K/s]"},
2487 /* 217 */ {"TTPHY", "Temp. tendency by nonrad physics [K/s]"},
2488 /* 218 */ {"PREIX", "Precipitation index [fraction]"},
2489 /* 219 */ {"TSD1D", "Std dev of IR T over 1x1 deg area [K]"},
2490 /* 220 */ {"NLSGP", "Natural log of surface pressure [ln(kPa)]"},
2491 /* 221 */ {"SDTRH", "Std dev of time tend of rel hum [%]"},
2492 /* 222 */ {"5WAVH", "5-wave geopotential height [gpm]"},
2493 /* 223 */ {"CNWAT", "Plant canopy surface water [kg/m^2]"},
2494 /* 224 */ {"PLTRS", "Max. stomato plant resistance [s/m]"},
2495 /* 225 */ {"RHCLD", "RH-type cloud cover [%]"},
2496 /* 226 */ {"BMIXL", "Blackadar's mixing length scale [m]"},
2497 /* 227 */ {"AMIXL", "Asymptotic mixing length scale [m]"},
2498 /* 228 */ {"PEVAP", "Pot. evaporation [kg/m^2]"},
2499 /* 229 */ {"SNOHF", "Snow melt heat flux [W/m^2]"},
2500 /* 230 */ {"SNOEV", "Snow sublimation heat flux [W/m^2]"},
2501 /* 231 */ {"MFLUX", "Convective cloud mass flux [Pa/s]"},
2502 /* 232 */ {"DTRF", "Downward total radiation flux [W/m^2]"},
2503 /* 233 */ {"UTRF", "Upward total radiation flux [W/m^2]"},
2504 /* 234 */ {"BGRUN", "Baseflow-groundwater runoff [kg/m^2]"},
2505 /* 235 */ {"SSRUN", "Storm surface runoff [kg/m^2]"},
2506 /* 236 */ {"var236", "undefined"},
2507 /* 237 */ {"OZONE", "Total column ozone [Dobson]"},
2508 /* 238 */ {"SNOWC", "Snow cover [%]"},
2509 /* 239 */ {"SNOT", "Snow temp. [K]"},
2510 /* 240 */ {"GLCR", "Permanent snow points [mask]"},
2511 /* 241 */ {"LRGHR", "Large scale condensation heating [K/s]"},
2512 /* 242 */ {"CNVHR", "Deep convective heating [K/s]"},
2513 /* 243 */ {"CNVMR", "Deep convective moistening [kg/kg/s]"},
2514 /* 244 */ {"SHAHR", "Shallow convective heating [K/s]"},
2515 /* 245 */ {"SHAMR", "Shallow convective moistening [kg/kg/s]"},
2516 /* 246 */ {"VDFHR", "Vertical diffusion heating [K/s]"},
2517 /* 247 */ {"VDFUA", "Vertical diffusion zonal accel [m/s^2]"},
2518 /* 248 */ {"VDFVA", "Vertical diffusion meridional accel [m/s^2]"},
2519 /* 249 */ {"VDFMR", "Vertical diffusion moistening [kg/kg/s]"},
2520 /* 250 */ {"SWHR", "Solar radiative heating [K/s]"},
2521 /* 251 */ {"LWHR", "Longwave radiative heating [K/s]"},
2522 /* 252 */ {"CD", "Drag coefficient [non-dim]"},
2523 /* 253 */ {"FRICV", "Friction velocity [m/s]"},
2524 /* 254 */ {"RI", "Richardson number [non-dim]"},
2525 /* 255 */ {"var255", "undefined"},
2526 };
2527
2528
2529 struct ParmTable parm_table_ecmwf_128[256] = {
2530 /* 0 */ {"var0", "undefined"},
2531 /* 1 */ {"None", "Stream Function m**2 s**-1"},
2532 /* 2 */ {"None", "Velocity Potential m**2 s**-1"},
2533 /* 3 */ {"None", "Potential Temperature K"},
2534 /* 4 */ {"None", "Equivalent Potential Temperature K"},
2535 /* 5 */ {"None", "Saturated Equivalent Potential Temperature K"},
2536 /* 6 */ {"None", "RESERVED FOR METVIEW. -"},
2537 /* 7 */ {"None", "RESERVED FOR METVIEW. -"},
2538 /* 8 */ {"None", "RESERVED FOR METVIEW. -"},
2539 /* 9 */ {"None", "RESERVED FOR METVIEW. -"},
2540 /* 10 */ {"None", "RESERVED FOR METVIEW. -"},
2541 /* 11 */ {"None", "u-component of Divergent Wind m s**-1"},
2542 /* 12 */ {"None", "v-component of Divergent Wind m s**-1"},
2543 /* 13 */ {"None", "u-component of Rotational Wind m s**-1"},
2544 /* 14 */ {"None", "v-component of Rotational Wind m s**-1"},
2545 /* 15 */ {"None", "RESERVED FOR METVIEW. -"},
2546 /* 16 */ {"None", "RESERVED FOR METVIEW. -"},
2547 /* 17 */ {"None", "RESERVED FOR METVIEW. -"},
2548 /* 18 */ {"None", "RESERVED FOR METVIEW. -"},
2549 /* 19 */ {"None", "RESERVED FOR METVIEW. -"},
2550 /* 20 */ {"None", "RESERVED FOR METVIEW. -"},
2551 /* 21 */ {"UCTP", "Unbalanced component of temperature K"},
2552 /* 22 */ {"UCLN", "Unbalanced component of lnsp -"},
2553 /* 23 */ {"UCDV", "Unbalanced component of divergence s**-1"},
2554 /* 24 */ {"None", "Reserved for future unbalanced components -"},
2555 /* 25 */ {"None", "Reserved for future unbalanced components -"},
2556 /* 26 */ {"CL", "Lake cover (0-1)"},
2557 /* 27 */ {"CVL", "Low vegetation cover (0-1)"},
2558 /* 28 */ {"CVH", "High vegetation cover (0-1)"},
2559 /* 29 */ {"TVL", "Type of low vegetation -"},
2560 /* 30 */ {"TVH", "Type of high vegetation -"},
2561 /* 31 */ {"CI", "Sea ice cover (0-1)"},
2562 /* 32 */ {"ASN", "Snow albedo (0-1)"},
2563 /* 33 */ {"RSN", "Snow density kg**-3"},
2564 /* 34 */ {"SSTK", "Sea surface temperature (absolute) K"},
2565 /* 35 */ {"ISTL1", "Ice surface temperature layer 1 K"},
2566 /* 36 */ {"ISTL2", "Ice surface temperature layer 2 K"},
2567 /* 37 */ {"ISTL3", "Ice surface temperature layer 3 K"},
2568 /* 38 */ {"ISTL4", "Ice surface temperature layer 4 K"},
2569 /* 39 */ {"SWVL1", "Volumetric soil water layer 1 m**3 m**-3"},
2570 /* 40 */ {"SWVL2", "Volumetric soil water layer 2 m**3 m**-3"},
2571 /* 41 */ {"SWVL3", "Volumetric soil water layer 3 m**3 m**-3"},
2572 /* 42 */ {"SWVL4", "Volumetric soil water layer 4 m**3 m**-3"},
2573 /* 43 */ {"SLT", "Soil Type -"},
2574 /* 44 */ {"-", "Unused -"},
2575 /* 45 */ {"var45", "undefined"},
2576 /* 46 */ {"var46", "undefined"},
2577 /* 47 */ {"var47", "undefined"},
2578 /* 48 */ {"var48", "undefined"},
2579 /* 49 */ {"var49", "undefined"},
2580 /* 50 */ {"var50", "undefined"},
2581 /* 51 */ {"var51", "undefined"},
2582 /* 52 */ {"var52", "undefined"},
2583 /* 53 */ {"var53", "undefined"},
2584 /* 54 */ {"var54", "undefined"},
2585 /* 55 */ {"var55", "undefined"},
2586 /* 56 */ {"var56", "undefined"},
2587 /* 57 */ {"var57", "undefined"},
2588 /* 58 */ {"var58", "undefined"},
2589 /* 59 */ {"var59", "undefined"},
2590 /* 60 */ {"var60", "undefined"},
2591 /* 61 */ {"var61", "undefined"},
2592 /* 62 */ {"var62", "undefined"},
2593 /* 63 */ {"var63", "undefined"},
2594 /* 64 */ {"var64", "undefined"},
2595 /* 65 */ {"var65", "undefined"},
2596 /* 66 */ {"var66", "undefined"},
2597 /* 67 */ {"var67", "undefined"},
2598 /* 68 */ {"var68", "undefined"},
2599 /* 69 */ {"var69", "undefined"},
2600 /* 70 */ {"var70", "undefined"},
2601 /* 71 */ {"var71", "undefined"},
2602 /* 72 */ {"var72", "undefined"},
2603 /* 73 */ {"var73", "undefined"},
2604 /* 74 */ {"var74", "undefined"},
2605 /* 75 */ {"var75", "undefined"},
2606 /* 76 */ {"var76", "undefined"},
2607 /* 77 */ {"var77", "undefined"},
2608 /* 78 */ {"var78", "undefined"},
2609 /* 79 */ {"var79", "undefined"},
2610 /* 80 */ {"var80", "undefined"},
2611 /* 81 */ {"var81", "undefined"},
2612 /* 82 */ {"var82", "undefined"},
2613 /* 83 */ {"var83", "undefined"},
2614 /* 84 */ {"var84", "undefined"},
2615 /* 85 */ {"var85", "undefined"},
2616 /* 86 */ {"var86", "undefined"},
2617 /* 87 */ {"var87", "undefined"},
2618 /* 88 */ {"var88", "undefined"},
2619 /* 89 */ {"var89", "undefined"},
2620 /* 90 */ {"var90", "undefined"},
2621 /* 91 */ {"var91", "undefined"},
2622 /* 92 */ {"var92", "undefined"},
2623 /* 93 */ {"var93", "undefined"},
2624 /* 94 */ {"var94", "undefined"},
2625 /* 95 */ {"var95", "undefined"},
2626 /* 96 */ {"var96", "undefined"},
2627 /* 97 */ {"var97", "undefined"},
2628 /* 98 */ {"var98", "undefined"},
2629 /* 99 */ {"var99", "undefined"},
2630 /* 100 */ {"var100", "undefined"},
2631 /* 101 */ {"var101", "undefined"},
2632 /* 102 */ {"var102", "undefined"},
2633 /* 103 */ {"var103", "undefined"},
2634 /* 104 */ {"var104", "undefined"},
2635 /* 105 */ {"var105", "undefined"},
2636 /* 106 */ {"var106", "undefined"},
2637 /* 107 */ {"var107", "undefined"},
2638 /* 108 */ {"var108", "undefined"},
2639 /* 109 */ {"var109", "undefined"},
2640 /* 110 */ {"var110", "undefined"},
2641 /* 111 */ {"var111", "undefined"},
2642 /* 112 */ {"var112", "undefined"},
2643 /* 113 */ {"var113", "undefined"},
2644 /* 114 */ {"var114", "undefined"},
2645 /* 115 */ {"var115", "undefined"},
2646 /* 116 */ {"var116", "undefined"},
2647 /* 117 */ {"var117", "undefined"},
2648 /* 118 */ {"var118", "undefined"},
2649 /* 119 */ {"var119", "undefined"},
2650 /* 120 */ {"var120", "undefined"},
2651 /* 121 */ {"var121", "undefined"},
2652 /* 122 */ {"var122", "undefined"},
2653 /* 123 */ {"var123", "undefined"},
2654 /* 124 */ {"var124", "undefined"},
2655 /* 125 */ {"var125", "undefined"},
2656 /* 126 */ {"-", "Unused -"},
2657 /* 127 */ {"AT", "Atmospheric tide -"},
2658 /* 128 */ {"BV", "Budget values -"},
2659 /* 129 */ {"Z", "Geopotential (at the surface = orography) m**2 s**-2"},
2660 /* 130 */ {"T", "Temperature K"},
2661 /* 131 */ {"U", "U-velocity m s**-1"},
2662 /* 132 */ {"V", "V-velocity m s**-1"},
2663 /* 133 */ {"Q", "Specific humidity kg kg**-1"},
2664 /* 134 */ {"SP", "Surface pressure Pa"},
2665 /* 135 */ {"W", "Vertical velocity Pa s**-1"},
2666 /* 136 */ {"TWC", "Total column water kg m**-2"},
2667 /* 137 */ {"PWC", "Precipitable water content kg m**-2"},
2668 /* 138 */ {"VO", "Vorticity (relative) s**-1"},
2669 /* 139 */ {"ST", "Surf.temp/soil temp lev 1 (from 930804) K"},
2670 /* 140 */ {"SSW", "Surf soil wet/soil wet lev1(from 930803) m (of water)"},
2671 /* 141 */ {"SD", "Snow depth m (of water equivalent)"},
2672 /* 142 */ {"LSP", "Large scale precipitation m"},
2673 /* 143 */ {"CP", "Convective precipitation m"},
2674 /* 144 */ {"SF", "Snow fall m(of water equivalent)"},
2675 /* 145 */ {"BLD", "Boundary layer dissipation W m**-2 s"},
2676 /* 146 */ {"SSHF", "Surface sensible heat flux W m**-2 s"},
2677 /* 147 */ {"SLHF", "Surface latent heat flux W m**-2 s"},
2678 /* 148 */ {"SS/CHNK", "Surface stress/Charnock (from 980519) -"},
2679 /* 149 */ {"SNR", "Surface net radiation -"},
2680 /* 150 */ {"AIW", "Top net radiation -"},
2681 /* 151 */ {"MSL", "Mean sea level pressure Pa"},
2682 /* 152 */ {"LNSP", "Log surface pressure -"},
2683 /* 153 */ {"SWHR", "Short wave heating rate K"},
2684 /* 154 */ {"LWH", "Long wave heating rate K"},
2685 /* 155 */ {"D", "Divergence s**-1"},
2686 /* 156 */ {"GH", "Height (geopotential) m"},
2687 /* 157 */ {"R", "Relative humidity %"},
2688 /* 158 */ {"TSP", "Tendency of surface pressure Pa s**-1"},
2689 /* 159 */ {"BLH", "Boundary layer height m"},
2690 /* 160 */ {"SDOR", "Standard deviation of orography -"},
2691 /* 161 */ {"ISOR", "Anisotropy of subgrid scale orography -"},
2692 /* 162 */ {"ANOR", "Angle of subgrid scale orography -"},
2693 /* 163 */ {"SLOR", "Slope of subgrid scale orography -"},
2694 /* 164 */ {"TCC", "Total cloud cover (0 - 1)"},
2695 /* 165 */ {"10U", "10 metre u wind component m s**-1"},
2696 /* 166 */ {"10V", "10 metre v wind component m s**-1"},
2697 /* 167 */ {"2T", "2 metre temperature K"},
2698 /* 168 */ {"2D", "2 metre dewpoint temperature K"},
2699 /* 169 */ {"SSRD", "Surface solar radiation downwards W m**-2 s"},
2700 /* 170 */ {"DST", "Deep soil tmp/soil temp lev2(from 930804) K"},
2701 /* 171 */ {"DSW", "Deep soil wet/soil wet lev2(from 930803) m (of water)"},
2702 /* 172 */ {"LSM", "Land/sea mask (0"},
2703 /* 173 */ {"SR", "Surface roughness m"},
2704 /* 174 */ {"AL", "Albedo -"},
2705 /* 175 */ {"STRD", "Surface thermal radiation downwards W m**-2 s"},
2706 /* 176 */ {"SSR", "Surface solar radiation W m**-2 s"},
2707 /* 177 */ {"STR", "Surface thermal radiation W m**-2 s"},
2708 /* 178 */ {"TSR", "Top solar radiation W m**-2 s"},
2709 /* 179 */ {"TTR", "Top thermal radiation W m**-2 s"},
2710 /* 180 */ {"EWSS", "East/West surface stress N m**-2 s"},
2711 /* 181 */ {"NSSS", "North/South surface stress N m**-2 s"},
2712 /* 182 */ {"E", "Evaporation m (of water)"},
2713 /* 183 */ {"CDST", "Clim deep soil tmp/soil tmp lev3(930804) K"},
2714 /* 184 */ {"CDSW", "Clim deep soil wet/soil wet lev3(930803) m (of water)"},
2715 /* 185 */ {"CCC", "Convective cloud cover (0 - 1)"},
2716 /* 186 */ {"LCC", "Low cloud cover (0 - 1)"},
2717 /* 187 */ {"MCC", "Medium cloud cover (0 - 1)"},
2718 /* 188 */ {"HCC", "High cloud cover (0 - 1)"},
2719 /* 189 */ {"-", "Unused -"},
2720 /* 190 */ {"EWOV", "EW component subgrid orographic variance m**2"},
2721 /* 191 */ {"NSOV", "NS component subgrid orographic variance m**2"},
2722 /* 192 */ {"NWOV", "NWSE component subgrid orographic variance m**2"},
2723 /* 193 */ {"NEOV", "NESW component subgrid orographic variance m**2"},
2724 /* 194 */ {"BTMP", "Brightness temperature K"},
2725 /* 195 */ {"LGWS", "Lat. component of gravity wave stress N m**-2 s"},
2726 /* 196 */ {"MGWS", "Meridional component gravity wave stress N m**-2 s"},
2727 /* 197 */ {"GWD", "Gravity wave dissipation W m**-2 s"},
2728 /* 198 */ {"SRC", "Skin reservoir content m (of water)"},
2729 /* 199 */ {"VEG", "Percentage of vegetation %"},
2730 /* 200 */ {"VSO", "Variance of sub-grid scale orography m**2"},
2731 /* 201 */ {"MX2T", "Max 2m temp since previous post-processing K"},
2732 /* 202 */ {"MN2T", "Min 2m temp since previous post-processing K"},
2733 /* 203 */ {"O3", "Ozone mass mixing ratio kg kg**-1"},
2734 /* 204 */ {"PAW", "Precip. analysis weights -"},
2735 /* 205 */ {"RO", "Runoff* m"},
2736 /* 206 */ {"TCO3", "Total column ozone Dobson (kg m**-2)"},
2737 /* 207 */ {"10SI", "10m. Windspeed (irresp of dir.) m s**-1"},
2738 /* 208 */ {"TSRC", "Top net solar radiation clear sky W m**-2"},
2739 /* 209 */ {"TTRC", "Top upward thermal radiation clear sky W m**-2"},
2740 /* 210 */ {"SSRC", "Surface net solar radiation clear sky W m**-2"},
2741 /* 211 */ {"STRC", "Surface net thermal radiation clear sky W m**-2"},
2742 /* 212 */ {"SI", "Solar insulation W m**-2"},
2743 /* 213 */ {"-", "Unused -"},
2744 /* 214 */ {"DHR", "Diabatic heating by radiation* K"},
2745 /* 215 */ {"DHVD", "Diabatic heating by vertical diffusion K"},
2746 /* 216 */ {"DHCC", "Diabatic heating by cumulus convection K"},
2747 /* 217 */ {"DHLC", "Diabatic heating large-scale condensation K"},
2748 /* 218 */ {"VDZW", "Vertical diffusion of zonal wind m s**-1"},
2749 /* 219 */ {"VDMW", "Vertical diffusion of meridional wind m s**-1"},
2750 /* 220 */ {"EWGD", "EW gravity wave drag m s**-1"},
2751 /* 221 */ {"NSGD", "NS gravity wave drag m s**-1"},
2752 /* 222 */ {"CTZW", "Convective tendency of zonal wind m s**-1"},
2753 /* 223 */ {"CTMW", "Convective tendency of meridional wind m s**-1"},
2754 /* 224 */ {"VDH", "Vertical diffusion of humidity kg kg**-1"},
2755 /* 225 */ {"HTCC", "Humidity tendency by cumulus convection kg kg**-1"},
2756 /* 226 */ {"HTLC", "Humidity tendency large-scale condensation kg kg**-1"},
2757 /* 227 */ {"CRNH", "Change from removing negative humidity kg/kg s-1"},
2758 /* 228 */ {"TP", "Total precipitation m"},
2759 /* 229 */ {"IEWS", "Instantaneous X surface stress N m**-2"},
2760 /* 230 */ {"INSS", "Instantaneous Y surface stress N m**-2"},
2761 /* 231 */ {"ISHF", "Instantaneous surface Heat Flux W m**-2"},
2762 /* 232 */ {"IE", "Instantaneous Moisture Flux (evaporation) kg m**-2 s"},
2763 /* 233 */ {"ASQ", "Apparent Surface Humidity kg kg**-1"},
2764 /* 234 */ {"LSRH", "Log of surface roughness length for heat -"},
2765 /* 235 */ {"SKT", "Skin Temperature K"},
2766 /* 236 */ {"STL4", "Soil temperature level 4 K"},
2767 /* 237 */ {"SWL4", "Soil wetness level 4 m"},
2768 /* 238 */ {"TSN", "Temperature of snow layer K"},
2769 /* 239 */ {"CSF", "Convective snow-fall m (of water equivalent)"},
2770 /* 240 */ {"LSF", "Large scale snow-fall m (of water equivalent)"},
2771 /* 241 */ {"ACF", "Accumulated cloud fraction tendency (-1 to 1)"},
2772 /* 242 */ {"ALW", "Accumulated liquid water tendency (-1 to 1)"},
2773 /* 243 */ {"FAL", "Forecast albedo -"},
2774 /* 244 */ {"FSR", "Forecast surface roughness m"},
2775 /* 245 */ {"FLSR", "Forecast log of surface roughness for heat -"},
2776 /* 246 */ {"CLWC", "Cloud liquid water content kg kg**-1"},
2777 /* 247 */ {"CIWC", "Cloud ice water content kg kg**-1"},
2778 /* 248 */ {"CC", "Cloud cover (0 - 1)"},
2779 /* 249 */ {"AIW", "Accumulated ice water tendency (-1 to 1)"},
2780 /* 250 */ {"ICE", "Ice Age (0 first-year 1 multi-year)"},
2781 /* 251 */ {"ATTE", "Adiabatic tendency of temperature K"},
2782 /* 252 */ {"ATHE", "Adiabatic tendency of humidity kg kg**-1"},
2783 /* 253 */ {"ATZE", "Adiabatic tendency of zonal wind m s**-1"},
2784 /* 254 */ {"ATMW", "Adiabatic tendency of meridional wind m s**-1"},
2785 /* 255 */ {"-", "Indicates a missing value -"},
2786 };
2787
2788
2789 struct ParmTable parm_table_ecmwf_129[256] = {
2790 /* 0 */ {"var0", "undefined"},
2791 /* 1 */ {"var1", "undefined"},
2792 /* 2 */ {"var2", "undefined"},
2793 /* 3 */ {"var3", "undefined"},
2794 /* 4 */ {"var4", "undefined"},
2795 /* 5 */ {"var5", "undefined"},
2796 /* 6 */ {"var6", "undefined"},
2797 /* 7 */ {"var7", "undefined"},
2798 /* 8 */ {"var8", "undefined"},
2799 /* 9 */ {"var9", "undefined"},
2800 /* 10 */ {"var10", "undefined"},
2801 /* 11 */ {"var11", "undefined"},
2802 /* 12 */ {"var12", "undefined"},
2803 /* 13 */ {"var13", "undefined"},
2804 /* 14 */ {"var14", "undefined"},
2805 /* 15 */ {"var15", "undefined"},
2806 /* 16 */ {"var16", "undefined"},
2807 /* 17 */ {"var17", "undefined"},
2808 /* 18 */ {"var18", "undefined"},
2809 /* 19 */ {"var19", "undefined"},
2810 /* 20 */ {"var20", "undefined"},
2811 /* 21 */ {"var21", "undefined"},
2812 /* 22 */ {"var22", "undefined"},
2813 /* 23 */ {"var23", "undefined"},
2814 /* 24 */ {"var24", "undefined"},
2815 /* 25 */ {"var25", "undefined"},
2816 /* 26 */ {"var26", "undefined"},
2817 /* 27 */ {"var27", "undefined"},
2818 /* 28 */ {"var28", "undefined"},
2819 /* 29 */ {"var29", "undefined"},
2820 /* 30 */ {"var30", "undefined"},
2821 /* 31 */ {"var31", "undefined"},
2822 /* 32 */ {"var32", "undefined"},
2823 /* 33 */ {"var33", "undefined"},
2824 /* 34 */ {"var34", "undefined"},
2825 /* 35 */ {"var35", "undefined"},
2826 /* 36 */ {"var36", "undefined"},
2827 /* 37 */ {"var37", "undefined"},
2828 /* 38 */ {"var38", "undefined"},
2829 /* 39 */ {"var39", "undefined"},
2830 /* 40 */ {"var40", "undefined"},
2831 /* 41 */ {"var41", "undefined"},
2832 /* 42 */ {"var42", "undefined"},
2833 /* 43 */ {"var43", "undefined"},
2834 /* 44 */ {"var44", "undefined"},
2835 /* 45 */ {"var45", "undefined"},
2836 /* 46 */ {"var46", "undefined"},
2837 /* 47 */ {"var47", "undefined"},
2838 /* 48 */ {"var48", "undefined"},
2839 /* 49 */ {"var49", "undefined"},
2840 /* 50 */ {"var50", "undefined"},
2841 /* 51 */ {"var51", "undefined"},
2842 /* 52 */ {"var52", "undefined"},
2843 /* 53 */ {"var53", "undefined"},
2844 /* 54 */ {"var54", "undefined"},
2845 /* 55 */ {"var55", "undefined"},
2846 /* 56 */ {"var56", "undefined"},
2847 /* 57 */ {"var57", "undefined"},
2848 /* 58 */ {"var58", "undefined"},
2849 /* 59 */ {"var59", "undefined"},
2850 /* 60 */ {"var60", "undefined"},
2851 /* 61 */ {"var61", "undefined"},
2852 /* 62 */ {"var62", "undefined"},
2853 /* 63 */ {"var63", "undefined"},
2854 /* 64 */ {"var64", "undefined"},
2855 /* 65 */ {"var65", "undefined"},
2856 /* 66 */ {"var66", "undefined"},
2857 /* 67 */ {"var67", "undefined"},
2858 /* 68 */ {"var68", "undefined"},
2859 /* 69 */ {"var69", "undefined"},
2860 /* 70 */ {"var70", "undefined"},
2861 /* 71 */ {"var71", "undefined"},
2862 /* 72 */ {"var72", "undefined"},
2863 /* 73 */ {"var73", "undefined"},
2864 /* 74 */ {"var74", "undefined"},
2865 /* 75 */ {"var75", "undefined"},
2866 /* 76 */ {"var76", "undefined"},
2867 /* 77 */ {"var77", "undefined"},
2868 /* 78 */ {"var78", "undefined"},
2869 /* 79 */ {"var79", "undefined"},
2870 /* 80 */ {"var80", "undefined"},
2871 /* 81 */ {"var81", "undefined"},
2872 /* 82 */ {"var82", "undefined"},
2873 /* 83 */ {"var83", "undefined"},
2874 /* 84 */ {"var84", "undefined"},
2875 /* 85 */ {"var85", "undefined"},
2876 /* 86 */ {"var86", "undefined"},
2877 /* 87 */ {"var87", "undefined"},
2878 /* 88 */ {"var88", "undefined"},
2879 /* 89 */ {"var89", "undefined"},
2880 /* 90 */ {"var90", "undefined"},
2881 /* 91 */ {"var91", "undefined"},
2882 /* 92 */ {"var92", "undefined"},
2883 /* 93 */ {"var93", "undefined"},
2884 /* 94 */ {"var94", "undefined"},
2885 /* 95 */ {"var95", "undefined"},
2886 /* 96 */ {"var96", "undefined"},
2887 /* 97 */ {"var97", "undefined"},
2888 /* 98 */ {"var98", "undefined"},
2889 /* 99 */ {"var99", "undefined"},
2890 /* 100 */ {"var100", "undefined"},
2891 /* 101 */ {"var101", "undefined"},
2892 /* 102 */ {"var102", "undefined"},
2893 /* 103 */ {"var103", "undefined"},
2894 /* 104 */ {"var104", "undefined"},
2895 /* 105 */ {"var105", "undefined"},
2896 /* 106 */ {"var106", "undefined"},
2897 /* 107 */ {"var107", "undefined"},
2898 /* 108 */ {"var108", "undefined"},
2899 /* 109 */ {"var109", "undefined"},
2900 /* 110 */ {"var110", "undefined"},
2901 /* 111 */ {"var111", "undefined"},
2902 /* 112 */ {"var112", "undefined"},
2903 /* 113 */ {"var113", "undefined"},
2904 /* 114 */ {"var114", "undefined"},
2905 /* 115 */ {"var115", "undefined"},
2906 /* 116 */ {"var116", "undefined"},
2907 /* 117 */ {"var117", "undefined"},
2908 /* 118 */ {"var118", "undefined"},
2909 /* 119 */ {"var119", "undefined"},
2910 /* 120 */ {"var120", "undefined"},
2911 /* 121 */ {"var121", "undefined"},
2912 /* 122 */ {"var122", "undefined"},
2913 /* 123 */ {"var123", "undefined"},
2914 /* 124 */ {"var124", "undefined"},
2915 /* 125 */ {"var125", "undefined"},
2916 /* 126 */ {"var126", "undefined"},
2917 /* 127 */ {"AT", "Atmospheric tide+ -"},
2918 /* 128 */ {"BV", "Budget values+ -"},
2919 /* 129 */ {"Z", "Geopotential (at the surface=orography) m**2 s**-2"},
2920 /* 130 */ {"T", "Temperature K"},
2921 /* 131 */ {"U", "U-velocity m s**-1"},
2922 /* 132 */ {"V", "V-velocity m s**-1"},
2923 /* 133 */ {"Q", "Specific humidity kg kg**-1"},
2924 /* 134 */ {"SP", "Surface pressure Pa"},
2925 /* 135 */ {"W", "Vertical velocity Pa s**-1"},
2926 /* 136 */ {"var136", "undefined"},
2927 /* 137 */ {"PWC", "Precipitable water content kg m**-2"},
2928 /* 138 */ {"VO", "Vorticity (relative) s**-1"},
2929 /* 139 */ {"ST", "Surf.temp/soil temp lev 1 (from 930804) K"},
2930 /* 140 */ {"SSW", "Surf soil wet/soil wet lev1(from 930803) m (of water)"},
2931 /* 141 */ {"SD", "Snow depth m (of water equivalent)"},
2932 /* 142 */ {"LSP", "Large scale precipitation* m"},
2933 /* 143 */ {"CP", "Convective precipitation* m"},
2934 /* 144 */ {"SF", "Snow fall* m(of water equivalent)"},
2935 /* 145 */ {"BLD", "Boundary layer dissipation* W m**-2 s"},
2936 /* 146 */ {"SSHF", "Surface sensible heat flux* W m**-2 s"},
2937 /* 147 */ {"SLHF", "Surface latent heat flux* W m**-2 s"},
2938 /* 148 */ {"var148", "undefined"},
2939 /* 149 */ {"var149", "undefined"},
2940 /* 150 */ {"var150", "undefined"},
2941 /* 151 */ {"MSL", "Mean sea level pressure Pa"},
2942 /* 152 */ {"LNSP", "Log surface pressure -"},
2943 /* 153 */ {"var153", "undefined"},
2944 /* 154 */ {"var154", "undefined"},
2945 /* 155 */ {"D", "Divergence s**-1"},
2946 /* 156 */ {"GH", "Height (geopotential) m"},
2947 /* 157 */ {"R", "Relative humidity %"},
2948 /* 158 */ {"TSP", "Tendency of surface pressure Pa s**-1"},
2949 /* 159 */ {"var159", "undefined"},
2950 /* 160 */ {"SDOR", "Standard deviation of orography -"},
2951 /* 161 */ {"ISOR", "Anisotropy of subgrid scale orography -"},
2952 /* 162 */ {"ANOR", "Angle of subgrid scale orography -"},
2953 /* 163 */ {"SLOR", "Slope of subgrid scale orography -"},
2954 /* 164 */ {"TCC", "Total cloud cover (0 - 1)"},
2955 /* 165 */ {"10U", "10 metre u wind component m s**-1"},
2956 /* 166 */ {"10V", "10 metre v wind component m s**-1"},
2957 /* 167 */ {"2T", "2 metre temperature K"},
2958 /* 168 */ {"2D", "2 metre dewpoint temperature K"},
2959 /* 169 */ {"var169", "undefined"},
2960 /* 170 */ {"DST", "Deep soil tmp/soil temp lev2(frm 930804) K"},
2961 /* 171 */ {"DSW", "Deep soil wet/soil wet lev2(from 930803) m (of water)"},
2962 /* 172 */ {"LSM", "Land/sea mask (0"},
2963 /* 173 */ {"SR", "Surface roughness m"},
2964 /* 174 */ {"AL", "Albedo -"},
2965 /* 175 */ {"var175", "undefined"},
2966 /* 176 */ {"SSR", "Surface solar radiation* W m**-2 s"},
2967 /* 177 */ {"STR", "Surface thermal radiation* W m**-2 s"},
2968 /* 178 */ {"TSR", "Top solar radiation* W m**-2 s"},
2969 /* 179 */ {"TTR", "Top thermal radiation* W m**-2 s"},
2970 /* 180 */ {"EWSS", "East/West surface stress* N m**-2 s"},
2971 /* 181 */ {"NSSS", "North/South surface stress* N m**-2 s"},
2972 /* 182 */ {"E", "Evaporation* m (of water)"},
2973 /* 183 */ {"CDST", "Clim deep soil tmp/soil tmp lev3(930804) K"},
2974 /* 184 */ {"CDSW", "Clim deep soil wet/soil wet lev3(930803) m (of water)"},
2975 /* 185 */ {"CCC", "Convective cloud cover (0 - 1)"},
2976 /* 186 */ {"LCC", "Low cloud cover (0 - 1)"},
2977 /* 187 */ {"MCC", "Medium cloud cover (0 - 1)"},
2978 /* 188 */ {"HCC", "High cloud cover (0 - 1)"},
2979 /* 189 */ {"var189", "undefined"},
2980 /* 190 */ {"EWOV", "EW component subgrid scale orographic variance m**2"},
2981 /* 191 */ {"NSOV", "NS component subgrid scale orographic variance m**2"},
2982 /* 192 */ {"NWOV", "NWSE component subgrid scale orographic variance m**2"},
2983 /* 193 */ {"NEOV", "NESW component subgrid scale orographic variance m**2"},
2984 /* 194 */ {"var194", "undefined"},
2985 /* 195 */ {"LGWS", "Latitudinal component of gravity wave stress* N m**-2 s"},
2986 /* 196 */ {"MGWS", "Meridional component of gravity wave stress* N m**-2 s"},
2987 /* 197 */ {"GWD", "Gravity wave dissipation* W m**-2 s"},
2988 /* 198 */ {"SRC", "Skin reservoir content m (of water)"},
2989 /* 199 */ {"VEG", "Percentage of vegetation %"},
2990 /* 200 */ {"VSO", "Variance of sub-grid scale orography m**2"},
2991 /* 201 */ {"MX2T", "Max temp. at 2m since previous post-processing K"},
2992 /* 202 */ {"MN2T", "Min temp. at 2m since previous post-processing K"},
2993 /* 203 */ {"var203", "undefined"},
2994 /* 204 */ {"PAW", "Precip. analysis weights -"},
2995 /* 205 */ {"RO", "Runoff* m"},
2996 /* 206 */ {"var206", "undefined"},
2997 /* 207 */ {"var207", "undefined"},
2998 /* 208 */ {"var208", "undefined"},
2999 /* 209 */ {"var209", "undefined"},
3000 /* 210 */ {"var210", "undefined"},
3001 /* 211 */ {"var211", "undefined"},
3002 /* 212 */ {"var212", "undefined"},
3003 /* 213 */ {"var213", "undefined"},
3004 /* 214 */ {"var214", "undefined"},
3005 /* 215 */ {"var215", "undefined"},
3006 /* 216 */ {"var216", "undefined"},
3007 /* 217 */ {"var217", "undefined"},
3008 /* 218 */ {"var218", "undefined"},
3009 /* 219 */ {"var219", "undefined"},
3010 /* 220 */ {"var220", "undefined"},
3011 /* 221 */ {"var221", "undefined"},
3012 /* 222 */ {"var222", "undefined"},
3013 /* 223 */ {"var223", "undefined"},
3014 /* 224 */ {"var224", "undefined"},
3015 /* 225 */ {"var225", "undefined"},
3016 /* 226 */ {"var226", "undefined"},
3017 /* 227 */ {"var227", "undefined"},
3018 /* 228 */ {"TP", "Total precipitation? m"},
3019 /* 229 */ {"IEWS", "Instantaneous X surface stress N m**-2"},
3020 /* 230 */ {"INSS", "Instantaneous Y surface stress N m**-2"},
3021 /* 231 */ {"ISHF", "Instantaneous surface Heat Flux W m**-2"},
3022 /* 232 */ {"IE", "Instantaneous Moisture Flux (evaporation) kg m**-2 s"},
3023 /* 233 */ {"ASQ", "Apparent Surface Humidity kg kg**-1"},
3024 /* 234 */ {"LSRH", "Logarithm of surface roughness length for heat -"},
3025 /* 235 */ {"SKT", "Skin Temperature K"},
3026 /* 236 */ {"STL4", "Soil temperature level 4 K"},
3027 /* 237 */ {"SWL4", "Soil wetness level 4 m"},
3028 /* 238 */ {"TSN", "Temperature of snow layer K"},
3029 /* 239 */ {"CSF", "Convective snow-fall* m (of water equivalent)"},
3030 /* 240 */ {"LSF", "Large scale snow-fall* m (of water equivalent)"},
3031 /* 241 */ {"var241", "undefined"},
3032 /* 242 */ {"var242", "undefined"},
3033 /* 243 */ {"FAL", "Forecast albedo -"},
3034 /* 244 */ {"FSR", "Forecast surface roughness m"},
3035 /* 245 */ {"FLSR", "Forecast logarithm of surface roughness for heat -"},
3036 /* 246 */ {"CLWC", "Cloud liquid water content kg kg**-1"},
3037 /* 247 */ {"CIWC", "Cloud ice water content kg kg**-1"},
3038 /* 248 */ {"CC", "Cloud cover (0 - 1)"},
3039 /* 249 */ {"var249", "undefined"},
3040 /* 250 */ {"", "Ice Age (0 first-year 1 multi-year)"},
3041 /* 251 */ {"var251", "undefined"},
3042 /* 252 */ {"var252", "undefined"},
3043 /* 253 */ {"var253", "undefined"},
3044 /* 254 */ {"var254", "undefined"},
3045 /* 255 */ {"var255", "undefined"},
3046 };
3047
3048
3049 struct ParmTable parm_table_ecmwf_130[256] = {
3050 /* 0 */ {"var0", "undefined"},
3051 /* 1 */ {"var1", "undefined"},
3052 /* 2 */ {"var2", "undefined"},
3053 /* 3 */ {"var3", "undefined"},
3054 /* 4 */ {"var4", "undefined"},
3055 /* 5 */ {"var5", "undefined"},
3056 /* 6 */ {"var6", "undefined"},
3057 /* 7 */ {"var7", "undefined"},
3058 /* 8 */ {"var8", "undefined"},
3059 /* 9 */ {"var9", "undefined"},
3060 /* 10 */ {"var10", "undefined"},
3061 /* 11 */ {"var11", "undefined"},
3062 /* 12 */ {"var12", "undefined"},
3063 /* 13 */ {"var13", "undefined"},
3064 /* 14 */ {"var14", "undefined"},
3065 /* 15 */ {"var15", "undefined"},
3066 /* 16 */ {"var16", "undefined"},
3067 /* 17 */ {"var17", "undefined"},
3068 /* 18 */ {"var18", "undefined"},
3069 /* 19 */ {"var19", "undefined"},
3070 /* 20 */ {"var20", "undefined"},
3071 /* 21 */ {"var21", "undefined"},
3072 /* 22 */ {"var22", "undefined"},
3073 /* 23 */ {"var23", "undefined"},
3074 /* 24 */ {"var24", "undefined"},
3075 /* 25 */ {"var25", "undefined"},
3076 /* 26 */ {"var26", "undefined"},
3077 /* 27 */ {"var27", "undefined"},
3078 /* 28 */ {"var28", "undefined"},
3079 /* 29 */ {"var29", "undefined"},
3080 /* 30 */ {"var30", "undefined"},
3081 /* 31 */ {"var31", "undefined"},
3082 /* 32 */ {"var32", "undefined"},
3083 /* 33 */ {"var33", "undefined"},
3084 /* 34 */ {"var34", "undefined"},
3085 /* 35 */ {"var35", "undefined"},
3086 /* 36 */ {"var36", "undefined"},
3087 /* 37 */ {"var37", "undefined"},
3088 /* 38 */ {"var38", "undefined"},
3089 /* 39 */ {"var39", "undefined"},
3090 /* 40 */ {"var40", "undefined"},
3091 /* 41 */ {"var41", "undefined"},
3092 /* 42 */ {"var42", "undefined"},
3093 /* 43 */ {"var43", "undefined"},
3094 /* 44 */ {"var44", "undefined"},
3095 /* 45 */ {"var45", "undefined"},
3096 /* 46 */ {"var46", "undefined"},
3097 /* 47 */ {"var47", "undefined"},
3098 /* 48 */ {"var48", "undefined"},
3099 /* 49 */ {"var49", "undefined"},
3100 /* 50 */ {"var50", "undefined"},
3101 /* 51 */ {"var51", "undefined"},
3102 /* 52 */ {"var52", "undefined"},
3103 /* 53 */ {"var53", "undefined"},
3104 /* 54 */ {"var54", "undefined"},
3105 /* 55 */ {"var55", "undefined"},
3106 /* 56 */ {"var56", "undefined"},
3107 /* 57 */ {"var57", "undefined"},
3108 /* 58 */ {"var58", "undefined"},
3109 /* 59 */ {"var59", "undefined"},
3110 /* 60 */ {"var60", "undefined"},
3111 /* 61 */ {"var61", "undefined"},
3112 /* 62 */ {"var62", "undefined"},
3113 /* 63 */ {"var63", "undefined"},
3114 /* 64 */ {"var64", "undefined"},
3115 /* 65 */ {"var65", "undefined"},
3116 /* 66 */ {"var66", "undefined"},
3117 /* 67 */ {"var67", "undefined"},
3118 /* 68 */ {"var68", "undefined"},
3119 /* 69 */ {"var69", "undefined"},
3120 /* 70 */ {"var70", "undefined"},
3121 /* 71 */ {"var71", "undefined"},
3122 /* 72 */ {"var72", "undefined"},
3123 /* 73 */ {"var73", "undefined"},
3124 /* 74 */ {"var74", "undefined"},
3125 /* 75 */ {"var75", "undefined"},
3126 /* 76 */ {"var76", "undefined"},
3127 /* 77 */ {"var77", "undefined"},
3128 /* 78 */ {"var78", "undefined"},
3129 /* 79 */ {"var79", "undefined"},
3130 /* 80 */ {"var80", "undefined"},
3131 /* 81 */ {"var81", "undefined"},
3132 /* 82 */ {"var82", "undefined"},
3133 /* 83 */ {"var83", "undefined"},
3134 /* 84 */ {"var84", "undefined"},
3135 /* 85 */ {"var85", "undefined"},
3136 /* 86 */ {"var86", "undefined"},
3137 /* 87 */ {"var87", "undefined"},
3138 /* 88 */ {"var88", "undefined"},
3139 /* 89 */ {"var89", "undefined"},
3140 /* 90 */ {"var90", "undefined"},
3141 /* 91 */ {"var91", "undefined"},
3142 /* 92 */ {"var92", "undefined"},
3143 /* 93 */ {"var93", "undefined"},
3144 /* 94 */ {"var94", "undefined"},
3145 /* 95 */ {"var95", "undefined"},
3146 /* 96 */ {"var96", "undefined"},
3147 /* 97 */ {"var97", "undefined"},
3148 /* 98 */ {"var98", "undefined"},
3149 /* 99 */ {"var99", "undefined"},
3150 /* 100 */ {"var100", "undefined"},
3151 /* 101 */ {"var101", "undefined"},
3152 /* 102 */ {"var102", "undefined"},
3153 /* 103 */ {"var103", "undefined"},
3154 /* 104 */ {"var104", "undefined"},
3155 /* 105 */ {"var105", "undefined"},
3156 /* 106 */ {"var106", "undefined"},
3157 /* 107 */ {"var107", "undefined"},
3158 /* 108 */ {"var108", "undefined"},
3159 /* 109 */ {"var109", "undefined"},
3160 /* 110 */ {"var110", "undefined"},
3161 /* 111 */ {"var111", "undefined"},
3162 /* 112 */ {"var112", "undefined"},
3163 /* 113 */ {"var113", "undefined"},
3164 /* 114 */ {"var114", "undefined"},
3165 /* 115 */ {"var115", "undefined"},
3166 /* 116 */ {"var116", "undefined"},
3167 /* 117 */ {"var117", "undefined"},
3168 /* 118 */ {"var118", "undefined"},
3169 /* 119 */ {"var119", "undefined"},
3170 /* 120 */ {"var120", "undefined"},
3171 /* 121 */ {"var121", "undefined"},
3172 /* 122 */ {"var122", "undefined"},
3173 /* 123 */ {"var123", "undefined"},
3174 /* 124 */ {"var124", "undefined"},
3175 /* 125 */ {"var125", "undefined"},
3176 /* 126 */ {"var126", "undefined"},
3177 /* 127 */ {"var127", "undefined"},
3178 /* 128 */ {"var128", "undefined"},
3179 /* 129 */ {"var129", "undefined"},
3180 /* 130 */ {"var130", "undefined"},
3181 /* 131 */ {"var131", "undefined"},
3182 /* 132 */ {"var132", "undefined"},
3183 /* 133 */ {"var133", "undefined"},
3184 /* 134 */ {"var134", "undefined"},
3185 /* 135 */ {"var135", "undefined"},
3186 /* 136 */ {"var136", "undefined"},
3187 /* 137 */ {"var137", "undefined"},
3188 /* 138 */ {"var138", "undefined"},
3189 /* 139 */ {"var139", "undefined"},
3190 /* 140 */ {"var140", "undefined"},
3191 /* 141 */ {"var141", "undefined"},
3192 /* 142 */ {"var142", "undefined"},
3193 /* 143 */ {"var143", "undefined"},
3194 /* 144 */ {"var144", "undefined"},
3195 /* 145 */ {"var145", "undefined"},
3196 /* 146 */ {"var146", "undefined"},
3197 /* 147 */ {"var147", "undefined"},
3198 /* 148 */ {"var148", "undefined"},
3199 /* 149 */ {"var149", "undefined"},
3200 /* 150 */ {"var150", "undefined"},
3201 /* 151 */ {"var151", "undefined"},
3202 /* 152 */ {"var152", "undefined"},
3203 /* 153 */ {"var153", "undefined"},
3204 /* 154 */ {"var154", "undefined"},
3205 /* 155 */ {"var155", "undefined"},
3206 /* 156 */ {"var156", "undefined"},
3207 /* 157 */ {"var157", "undefined"},
3208 /* 158 */ {"var158", "undefined"},
3209 /* 159 */ {"var159", "undefined"},
3210 /* 160 */ {"var160", "undefined"},
3211 /* 161 */ {"var161", "undefined"},
3212 /* 162 */ {"var162", "undefined"},
3213 /* 163 */ {"var163", "undefined"},
3214 /* 164 */ {"var164", "undefined"},
3215 /* 165 */ {"var165", "undefined"},
3216 /* 166 */ {"var166", "undefined"},
3217 /* 167 */ {"var167", "undefined"},
3218 /* 168 */ {"var168", "undefined"},
3219 /* 169 */ {"var169", "undefined"},
3220 /* 170 */ {"var170", "undefined"},
3221 /* 171 */ {"var171", "undefined"},
3222 /* 172 */ {"var172", "undefined"},
3223 /* 173 */ {"var173", "undefined"},
3224 /* 174 */ {"var174", "undefined"},
3225 /* 175 */ {"var175", "undefined"},
3226 /* 176 */ {"var176", "undefined"},
3227 /* 177 */ {"var177", "undefined"},
3228 /* 178 */ {"var178", "undefined"},
3229 /* 179 */ {"var179", "undefined"},
3230 /* 180 */ {"var180", "undefined"},
3231 /* 181 */ {"var181", "undefined"},
3232 /* 182 */ {"var182", "undefined"},
3233 /* 183 */ {"var183", "undefined"},
3234 /* 184 */ {"var184", "undefined"},
3235 /* 185 */ {"var185", "undefined"},
3236 /* 186 */ {"var186", "undefined"},
3237 /* 187 */ {"var187", "undefined"},
3238 /* 188 */ {"var188", "undefined"},
3239 /* 189 */ {"var189", "undefined"},
3240 /* 190 */ {"var190", "undefined"},
3241 /* 191 */ {"var191", "undefined"},
3242 /* 192 */ {"var192", "undefined"},
3243 /* 193 */ {"var193", "undefined"},
3244 /* 194 */ {"var194", "undefined"},
3245 /* 195 */ {"var195", "undefined"},
3246 /* 196 */ {"var196", "undefined"},
3247 /* 197 */ {"var197", "undefined"},
3248 /* 198 */ {"var198", "undefined"},
3249 /* 199 */ {"var199", "undefined"},
3250 /* 200 */ {"var200", "undefined"},
3251 /* 201 */ {"var201", "undefined"},
3252 /* 202 */ {"var202", "undefined"},
3253 /* 203 */ {"var203", "undefined"},
3254 /* 204 */ {"var204", "undefined"},
3255 /* 205 */ {"var205", "undefined"},
3256 /* 206 */ {"var206", "undefined"},
3257 /* 207 */ {"var207", "undefined"},
3258 /* 208 */ {"TSRU", "Top solar radiation upward W m**-2"},
3259 /* 209 */ {"TTRU", "Top thermal radiation upward W m**-2"},
3260 /* 210 */ {"TSUC", "Top solar radiation upward clear sky W m**-2"},
3261 /* 211 */ {"TTUC", "Top thermal radiation upward clear sky W m**-2"},
3262 /* 212 */ {"CLW", "Cloud liquid water kg kg**-1"},
3263 /* 213 */ {"CF", "Cloud fraction 0-1"},
3264 /* 214 */ {"DHR", "Diabatic heating by radiation K s**-1"},
3265 /* 215 */ {"DHVD", "Diabatic heating by vertical diffusion K s**-1"},
3266 /* 216 */ {"DHCC", "Diabatic heating by cumulus convection K s**-1"},
3267 /* 217 */ {"DHLC", "Diabatic heating by large-scale condensation K s**-1"},
3268 /* 218 */ {"VDZW", "Vertical diffusion of zonal wind m**2 s**-3"},
3269 /* 219 */ {"VDMW", "Vertical diffusion of meridional wind m**2 s**-3"},
3270 /* 220 */ {"EWGD", "EW gravity wave drag m**2 s**-3"},
3271 /* 221 */ {"NSGD", "NS gravity wave drag m**2 s**-3"},
3272 /* 222 */ {"CTZW", "Convective tendency of zonal wind m**2 s**-3"},
3273 /* 223 */ {"CTMW", "Convective tendency of meridional wind m**2 s**-3"},
3274 /* 224 */ {"VDH", "Vertical diffusion of humidity kg kg**-1 s**-1"},
3275 /* 225 */ {"HTCC", "Humidity tendency by cumulus convection kg kg**-1 s**-1"},
3276 /* 226 */ {"HTLC", "Humidity tendency by large-scale condensation kg kg**-1 s**-1"},
3277 /* 227 */ {"CRNH", "Change from removing negative humidity kg kg**-1 s**-1"},
3278 /* 228 */ {"ATT", "Adiabatic tendency of temperature K s**-1"},
3279 /* 229 */ {"ATH", "Adiabatic tendency of humidity kg kg**-1 s**-1"},
3280 /* 230 */ {"ATZW", "Adiabatic tendency of zonal wind m**2 s**-3"},
3281 /* 231 */ {"ATMW", "Adiabatic tendency of meridional wind m**2 s**-3"},
3282 /* 232 */ {"MVV", "Mean vertical velocity Pa s**-1"},
3283 /* 233 */ {"var233", "undefined"},
3284 /* 234 */ {"var234", "undefined"},
3285 /* 235 */ {"var235", "undefined"},
3286 /* 236 */ {"var236", "undefined"},
3287 /* 237 */ {"var237", "undefined"},
3288 /* 238 */ {"var238", "undefined"},
3289 /* 239 */ {"var239", "undefined"},
3290 /* 240 */ {"var240", "undefined"},
3291 /* 241 */ {"var241", "undefined"},
3292 /* 242 */ {"var242", "undefined"},
3293 /* 243 */ {"var243", "undefined"},
3294 /* 244 */ {"var244", "undefined"},
3295 /* 245 */ {"var245", "undefined"},
3296 /* 246 */ {"var246", "undefined"},
3297 /* 247 */ {"var247", "undefined"},
3298 /* 248 */ {"var248", "undefined"},
3299 /* 249 */ {"var249", "undefined"},
3300 /* 250 */ {"var250", "undefined"},
3301 /* 251 */ {"var251", "undefined"},
3302 /* 252 */ {"var252", "undefined"},
3303 /* 253 */ {"var253", "undefined"},
3304 /* 254 */ {"var254", "undefined"},
3305 /* 255 */ {"var255", "undefined"},
3306 };
3307
3308
3309 struct ParmTable parm_table_ecmwf_131[256] = {
3310 /* 0 */ {"var0", "undefined"},
3311 /* 1 */ {"var1", "undefined"},
3312 /* 2 */ {"var2", "undefined"},
3313 /* 3 */ {"var3", "undefined"},
3314 /* 4 */ {"var4", "undefined"},
3315 /* 5 */ {"var5", "undefined"},
3316 /* 6 */ {"var6", "undefined"},
3317 /* 7 */ {"var7", "undefined"},
3318 /* 8 */ {"var8", "undefined"},
3319 /* 9 */ {"var9", "undefined"},
3320 /* 10 */ {"var10", "undefined"},
3321 /* 11 */ {"var11", "undefined"},
3322 /* 12 */ {"var12", "undefined"},
3323 /* 13 */ {"var13", "undefined"},
3324 /* 14 */ {"var14", "undefined"},
3325 /* 15 */ {"var15", "undefined"},
3326 /* 16 */ {"var16", "undefined"},
3327 /* 17 */ {"var17", "undefined"},
3328 /* 18 */ {"var18", "undefined"},
3329 /* 19 */ {"var19", "undefined"},
3330 /* 20 */ {"var20", "undefined"},
3331 /* 21 */ {"var21", "undefined"},
3332 /* 22 */ {"var22", "undefined"},
3333 /* 23 */ {"var23", "undefined"},
3334 /* 24 */ {"var24", "undefined"},
3335 /* 25 */ {"var25", "undefined"},
3336 /* 26 */ {"var26", "undefined"},
3337 /* 27 */ {"var27", "undefined"},
3338 /* 28 */ {"var28", "undefined"},
3339 /* 29 */ {"var29", "undefined"},
3340 /* 30 */ {"var30", "undefined"},
3341 /* 31 */ {"var31", "undefined"},
3342 /* 32 */ {"var32", "undefined"},
3343 /* 33 */ {"var33", "undefined"},
3344 /* 34 */ {"var34", "undefined"},
3345 /* 35 */ {"var35", "undefined"},
3346 /* 36 */ {"var36", "undefined"},
3347 /* 37 */ {"var37", "undefined"},
3348 /* 38 */ {"var38", "undefined"},
3349 /* 39 */ {"var39", "undefined"},
3350 /* 40 */ {"var40", "undefined"},
3351 /* 41 */ {"var41", "undefined"},
3352 /* 42 */ {"var42", "undefined"},
3353 /* 43 */ {"var43", "undefined"},
3354 /* 44 */ {"var44", "undefined"},
3355 /* 45 */ {"var45", "undefined"},
3356 /* 46 */ {"var46", "undefined"},
3357 /* 47 */ {"var47", "undefined"},
3358 /* 48 */ {"var48", "undefined"},
3359 /* 49 */ {"var49", "undefined"},
3360 /* 50 */ {"var50", "undefined"},
3361 /* 51 */ {"var51", "undefined"},
3362 /* 52 */ {"var52", "undefined"},
3363 /* 53 */ {"var53", "undefined"},
3364 /* 54 */ {"var54", "undefined"},
3365 /* 55 */ {"var55", "undefined"},
3366 /* 56 */ {"var56", "undefined"},
3367 /* 57 */ {"var57", "undefined"},
3368 /* 58 */ {"var58", "undefined"},
3369 /* 59 */ {"var59", "undefined"},
3370 /* 60 */ {"var60", "undefined"},
3371 /* 61 */ {"var61", "undefined"},
3372 /* 62 */ {"var62", "undefined"},
3373 /* 63 */ {"var63", "undefined"},
3374 /* 64 */ {"var64", "undefined"},
3375 /* 65 */ {"var65", "undefined"},
3376 /* 66 */ {"var66", "undefined"},
3377 /* 67 */ {"var67", "undefined"},
3378 /* 68 */ {"var68", "undefined"},
3379 /* 69 */ {"var69", "undefined"},
3380 /* 70 */ {"var70", "undefined"},
3381 /* 71 */ {"var71", "undefined"},
3382 /* 72 */ {"var72", "undefined"},
3383 /* 73 */ {"var73", "undefined"},
3384 /* 74 */ {"var74", "undefined"},
3385 /* 75 */ {"var75", "undefined"},
3386 /* 76 */ {"var76", "undefined"},
3387 /* 77 */ {"var77", "undefined"},
3388 /* 78 */ {"var78", "undefined"},
3389 /* 79 */ {"var79", "undefined"},
3390 /* 80 */ {"var80", "undefined"},
3391 /* 81 */ {"var81", "undefined"},
3392 /* 82 */ {"var82", "undefined"},
3393 /* 83 */ {"var83", "undefined"},
3394 /* 84 */ {"var84", "undefined"},
3395 /* 85 */ {"var85", "undefined"},
3396 /* 86 */ {"var86", "undefined"},
3397 /* 87 */ {"var87", "undefined"},
3398 /* 88 */ {"var88", "undefined"},
3399 /* 89 */ {"var89", "undefined"},
3400 /* 90 */ {"var90", "undefined"},
3401 /* 91 */ {"var91", "undefined"},
3402 /* 92 */ {"var92", "undefined"},
3403 /* 93 */ {"var93", "undefined"},
3404 /* 94 */ {"var94", "undefined"},
3405 /* 95 */ {"var95", "undefined"},
3406 /* 96 */ {"var96", "undefined"},
3407 /* 97 */ {"var97", "undefined"},
3408 /* 98 */ {"var98", "undefined"},
3409 /* 99 */ {"var99", "undefined"},
3410 /* 100 */ {"var100", "undefined"},
3411 /* 101 */ {"var101", "undefined"},
3412 /* 102 */ {"var102", "undefined"},
3413 /* 103 */ {"var103", "undefined"},
3414 /* 104 */ {"var104", "undefined"},
3415 /* 105 */ {"var105", "undefined"},
3416 /* 106 */ {"var106", "undefined"},
3417 /* 107 */ {"var107", "undefined"},
3418 /* 108 */ {"var108", "undefined"},
3419 /* 109 */ {"var109", "undefined"},
3420 /* 110 */ {"var110", "undefined"},
3421 /* 111 */ {"var111", "undefined"},
3422 /* 112 */ {"var112", "undefined"},
3423 /* 113 */ {"var113", "undefined"},
3424 /* 114 */ {"var114", "undefined"},
3425 /* 115 */ {"var115", "undefined"},
3426 /* 116 */ {"var116", "undefined"},
3427 /* 117 */ {"var117", "undefined"},
3428 /* 118 */ {"var118", "undefined"},
3429 /* 119 */ {"var119", "undefined"},
3430 /* 120 */ {"var120", "undefined"},
3431 /* 121 */ {"var121", "undefined"},
3432 /* 122 */ {"var122", "undefined"},
3433 /* 123 */ {"var123", "undefined"},
3434 /* 124 */ {"var124", "undefined"},
3435 /* 125 */ {"var125", "undefined"},
3436 /* 126 */ {"var126", "undefined"},
3437 /* 127 */ {"var127", "undefined"},
3438 /* 128 */ {"var128", "undefined"},
3439 /* 129 */ {"var129", "undefined"},
3440 /* 130 */ {"TAP", "Temperature anomaly probability % K"},
3441 /* 131 */ {"var131", "undefined"},
3442 /* 132 */ {"var132", "undefined"},
3443 /* 133 */ {"var133", "undefined"},
3444 /* 134 */ {"var134", "undefined"},
3445 /* 135 */ {"var135", "undefined"},
3446 /* 136 */ {"var136", "undefined"},
3447 /* 137 */ {"var137", "undefined"},
3448 /* 138 */ {"var138", "undefined"},
3449 /* 139 */ {"var139", "undefined"},
3450 /* 140 */ {"var140", "undefined"},
3451 /* 141 */ {"var141", "undefined"},
3452 /* 142 */ {"var142", "undefined"},
3453 /* 143 */ {"var143", "undefined"},
3454 /* 144 */ {"var144", "undefined"},
3455 /* 145 */ {"var145", "undefined"},
3456 /* 146 */ {"var146", "undefined"},
3457 /* 147 */ {"var147", "undefined"},
3458 /* 148 */ {"var148", "undefined"},
3459 /* 149 */ {"var149", "undefined"},
3460 /* 150 */ {"var150", "undefined"},
3461 /* 151 */ {"var151", "undefined"},
3462 /* 152 */ {"var152", "undefined"},
3463 /* 153 */ {"var153", "undefined"},
3464 /* 154 */ {"var154", "undefined"},
3465 /* 155 */ {"var155", "undefined"},
3466 /* 156 */ {"var156", "undefined"},
3467 /* 157 */ {"var157", "undefined"},
3468 /* 158 */ {"var158", "undefined"},
3469 /* 159 */ {"var159", "undefined"},
3470 /* 160 */ {"var160", "undefined"},
3471 /* 161 */ {"var161", "undefined"},
3472 /* 162 */ {"var162", "undefined"},
3473 /* 163 */ {"var163", "undefined"},
3474 /* 164 */ {"var164", "undefined"},
3475 /* 165 */ {"10SP", "10 metre speed probability % m s**-1"},
3476 /* 166 */ {"var166", "undefined"},
3477 /* 167 */ {"2TP", "2 metre temperature probability %"},
3478 /* 168 */ {"var168", "undefined"},
3479 /* 169 */ {"var169", "undefined"},
3480 /* 170 */ {"var170", "undefined"},
3481 /* 171 */ {"var171", "undefined"},
3482 /* 172 */ {"var172", "undefined"},
3483 /* 173 */ {"var173", "undefined"},
3484 /* 174 */ {"var174", "undefined"},
3485 /* 175 */ {"var175", "undefined"},
3486 /* 176 */ {"var176", "undefined"},
3487 /* 177 */ {"var177", "undefined"},
3488 /* 178 */ {"var178", "undefined"},
3489 /* 179 */ {"var179", "undefined"},
3490 /* 180 */ {"var180", "undefined"},
3491 /* 181 */ {"var181", "undefined"},
3492 /* 182 */ {"var182", "undefined"},
3493 /* 183 */ {"var183", "undefined"},
3494 /* 184 */ {"var184", "undefined"},
3495 /* 185 */ {"var185", "undefined"},
3496 /* 186 */ {"var186", "undefined"},
3497 /* 187 */ {"var187", "undefined"},
3498 /* 188 */ {"var188", "undefined"},
3499 /* 189 */ {"var189", "undefined"},
3500 /* 190 */ {"var190", "undefined"},
3501 /* 191 */ {"var191", "undefined"},
3502 /* 192 */ {"var192", "undefined"},
3503 /* 193 */ {"var193", "undefined"},
3504 /* 194 */ {"var194", "undefined"},
3505 /* 195 */ {"var195", "undefined"},
3506 /* 196 */ {"var196", "undefined"},
3507 /* 197 */ {"var197", "undefined"},
3508 /* 198 */ {"var198", "undefined"},
3509 /* 199 */ {"var199", "undefined"},
3510 /* 200 */ {"var200", "undefined"},
3511 /* 201 */ {"var201", "undefined"},
3512 /* 202 */ {"var202", "undefined"},
3513 /* 203 */ {"var203", "undefined"},
3514 /* 204 */ {"var204", "undefined"},
3515 /* 205 */ {"var205", "undefined"},
3516 /* 206 */ {"var206", "undefined"},
3517 /* 207 */ {"var207", "undefined"},
3518 /* 208 */ {"var208", "undefined"},
3519 /* 209 */ {"var209", "undefined"},
3520 /* 210 */ {"var210", "undefined"},
3521 /* 211 */ {"var211", "undefined"},
3522 /* 212 */ {"var212", "undefined"},
3523 /* 213 */ {"var213", "undefined"},
3524 /* 214 */ {"var214", "undefined"},
3525 /* 215 */ {"var215", "undefined"},
3526 /* 216 */ {"var216", "undefined"},
3527 /* 217 */ {"var217", "undefined"},
3528 /* 218 */ {"var218", "undefined"},
3529 /* 219 */ {"var219", "undefined"},
3530 /* 220 */ {"var220", "undefined"},
3531 /* 221 */ {"var221", "undefined"},
3532 /* 222 */ {"var222", "undefined"},
3533 /* 223 */ {"var223", "undefined"},
3534 /* 224 */ {"var224", "undefined"},
3535 /* 225 */ {"var225", "undefined"},
3536 /* 226 */ {"var226", "undefined"},
3537 /* 227 */ {"var227", "undefined"},
3538 /* 228 */ {"TTP", "Total precipitation probability % m"},
3539 /* 229 */ {"var229", "undefined"},
3540 /* 230 */ {"var230", "undefined"},
3541 /* 231 */ {"var231", "undefined"},
3542 /* 232 */ {"var232", "undefined"},
3543 /* 233 */ {"var233", "undefined"},
3544 /* 234 */ {"var234", "undefined"},
3545 /* 235 */ {"var235", "undefined"},
3546 /* 236 */ {"var236", "undefined"},
3547 /* 237 */ {"var237", "undefined"},
3548 /* 238 */ {"var238", "undefined"},
3549 /* 239 */ {"var239", "undefined"},
3550 /* 240 */ {"var240", "undefined"},
3551 /* 241 */ {"var241", "undefined"},
3552 /* 242 */ {"var242", "undefined"},
3553 /* 243 */ {"var243", "undefined"},
3554 /* 244 */ {"var244", "undefined"},
3555 /* 245 */ {"var245", "undefined"},
3556 /* 246 */ {"var246", "undefined"},
3557 /* 247 */ {"var247", "undefined"},
3558 /* 248 */ {"var248", "undefined"},
3559 /* 249 */ {"var249", "undefined"},
3560 /* 250 */ {"var250", "undefined"},
3561 /* 251 */ {"var251", "undefined"},
3562 /* 252 */ {"var252", "undefined"},
3563 /* 253 */ {"var253", "undefined"},
3564 /* 254 */ {"var254", "undefined"},
3565 /* 255 */ {"var255", "undefined"},
3566 };
3567
3568
3569 struct ParmTable parm_table_ecmwf_140[256] = {
3570 /* 0 */ {"var0", "undefined"},
3571 /* 1 */ {"var1", "undefined"},
3572 /* 2 */ {"var2", "undefined"},
3573 /* 3 */ {"var3", "undefined"},
3574 /* 4 */ {"var4", "undefined"},
3575 /* 5 */ {"var5", "undefined"},
3576 /* 6 */ {"var6", "undefined"},
3577 /* 7 */ {"var7", "undefined"},
3578 /* 8 */ {"var8", "undefined"},
3579 /* 9 */ {"var9", "undefined"},
3580 /* 10 */ {"var10", "undefined"},
3581 /* 11 */ {"var11", "undefined"},
3582 /* 12 */ {"var12", "undefined"},
3583 /* 13 */ {"var13", "undefined"},
3584 /* 14 */ {"var14", "undefined"},
3585 /* 15 */ {"var15", "undefined"},
3586 /* 16 */ {"var16", "undefined"},
3587 /* 17 */ {"var17", "undefined"},
3588 /* 18 */ {"var18", "undefined"},
3589 /* 19 */ {"var19", "undefined"},
3590 /* 20 */ {"var20", "undefined"},
3591 /* 21 */ {"var21", "undefined"},
3592 /* 22 */ {"var22", "undefined"},
3593 /* 23 */ {"var23", "undefined"},
3594 /* 24 */ {"var24", "undefined"},
3595 /* 25 */ {"var25", "undefined"},
3596 /* 26 */ {"var26", "undefined"},
3597 /* 27 */ {"var27", "undefined"},
3598 /* 28 */ {"var28", "undefined"},
3599 /* 29 */ {"var29", "undefined"},
3600 /* 30 */ {"var30", "undefined"},
3601 /* 31 */ {"var31", "undefined"},
3602 /* 32 */ {"var32", "undefined"},
3603 /* 33 */ {"var33", "undefined"},
3604 /* 34 */ {"var34", "undefined"},
3605 /* 35 */ {"var35", "undefined"},
3606 /* 36 */ {"var36", "undefined"},
3607 /* 37 */ {"var37", "undefined"},
3608 /* 38 */ {"var38", "undefined"},
3609 /* 39 */ {"var39", "undefined"},
3610 /* 40 */ {"var40", "undefined"},
3611 /* 41 */ {"var41", "undefined"},
3612 /* 42 */ {"var42", "undefined"},
3613 /* 43 */ {"var43", "undefined"},
3614 /* 44 */ {"var44", "undefined"},
3615 /* 45 */ {"var45", "undefined"},
3616 /* 46 */ {"var46", "undefined"},
3617 /* 47 */ {"var47", "undefined"},
3618 /* 48 */ {"var48", "undefined"},
3619 /* 49 */ {"var49", "undefined"},
3620 /* 50 */ {"var50", "undefined"},
3621 /* 51 */ {"var51", "undefined"},
3622 /* 52 */ {"var52", "undefined"},
3623 /* 53 */ {"var53", "undefined"},
3624 /* 54 */ {"var54", "undefined"},
3625 /* 55 */ {"var55", "undefined"},
3626 /* 56 */ {"var56", "undefined"},
3627 /* 57 */ {"var57", "undefined"},
3628 /* 58 */ {"var58", "undefined"},
3629 /* 59 */ {"var59", "undefined"},
3630 /* 60 */ {"var60", "undefined"},
3631 /* 61 */ {"var61", "undefined"},
3632 /* 62 */ {"var62", "undefined"},
3633 /* 63 */ {"var63", "undefined"},
3634 /* 64 */ {"var64", "undefined"},
3635 /* 65 */ {"var65", "undefined"},
3636 /* 66 */ {"var66", "undefined"},
3637 /* 67 */ {"var67", "undefined"},
3638 /* 68 */ {"var68", "undefined"},
3639 /* 69 */ {"var69", "undefined"},
3640 /* 70 */ {"var70", "undefined"},
3641 /* 71 */ {"var71", "undefined"},
3642 /* 72 */ {"var72", "undefined"},
3643 /* 73 */ {"var73", "undefined"},
3644 /* 74 */ {"var74", "undefined"},
3645 /* 75 */ {"var75", "undefined"},
3646 /* 76 */ {"var76", "undefined"},
3647 /* 77 */ {"var77", "undefined"},
3648 /* 78 */ {"var78", "undefined"},
3649 /* 79 */ {"var79", "undefined"},
3650 /* 80 */ {"var80", "undefined"},
3651 /* 81 */ {"var81", "undefined"},
3652 /* 82 */ {"var82", "undefined"},
3653 /* 83 */ {"var83", "undefined"},
3654 /* 84 */ {"var84", "undefined"},
3655 /* 85 */ {"var85", "undefined"},
3656 /* 86 */ {"var86", "undefined"},
3657 /* 87 */ {"var87", "undefined"},
3658 /* 88 */ {"var88", "undefined"},
3659 /* 89 */ {"var89", "undefined"},
3660 /* 90 */ {"var90", "undefined"},
3661 /* 91 */ {"var91", "undefined"},
3662 /* 92 */ {"var92", "undefined"},
3663 /* 93 */ {"var93", "undefined"},
3664 /* 94 */ {"var94", "undefined"},
3665 /* 95 */ {"var95", "undefined"},
3666 /* 96 */ {"var96", "undefined"},
3667 /* 97 */ {"var97", "undefined"},
3668 /* 98 */ {"var98", "undefined"},
3669 /* 99 */ {"var99", "undefined"},
3670 /* 100 */ {"var100", "undefined"},
3671 /* 101 */ {"var101", "undefined"},
3672 /* 102 */ {"var102", "undefined"},
3673 /* 103 */ {"var103", "undefined"},
3674 /* 104 */ {"var104", "undefined"},
3675 /* 105 */ {"var105", "undefined"},
3676 /* 106 */ {"var106", "undefined"},
3677 /* 107 */ {"var107", "undefined"},
3678 /* 108 */ {"var108", "undefined"},
3679 /* 109 */ {"var109", "undefined"},
3680 /* 110 */ {"var110", "undefined"},
3681 /* 111 */ {"var111", "undefined"},
3682 /* 112 */ {"var112", "undefined"},
3683 /* 113 */ {"var113", "undefined"},
3684 /* 114 */ {"var114", "undefined"},
3685 /* 115 */ {"var115", "undefined"},
3686 /* 116 */ {"var116", "undefined"},
3687 /* 117 */ {"var117", "undefined"},
3688 /* 118 */ {"var118", "undefined"},
3689 /* 119 */ {"var119", "undefined"},
3690 /* 120 */ {"var120", "undefined"},
3691 /* 121 */ {"var121", "undefined"},
3692 /* 122 */ {"var122", "undefined"},
3693 /* 123 */ {"var123", "undefined"},
3694 /* 124 */ {"var124", "undefined"},
3695 /* 125 */ {"var125", "undefined"},
3696 /* 126 */ {"var126", "undefined"},
3697 /* 127 */ {"var127", "undefined"},
3698 /* 128 */ {"var128", "undefined"},
3699 /* 129 */ {"var129", "undefined"},
3700 /* 130 */ {"var130", "undefined"},
3701 /* 131 */ {"var131", "undefined"},
3702 /* 132 */ {"var132", "undefined"},
3703 /* 133 */ {"var133", "undefined"},
3704 /* 134 */ {"var134", "undefined"},
3705 /* 135 */ {"var135", "undefined"},
3706 /* 136 */ {"var136", "undefined"},
3707 /* 137 */ {"var137", "undefined"},
3708 /* 138 */ {"var138", "undefined"},
3709 /* 139 */ {"var139", "undefined"},
3710 /* 140 */ {"var140", "undefined"},
3711 /* 141 */ {"var141", "undefined"},
3712 /* 142 */ {"var142", "undefined"},
3713 /* 143 */ {"var143", "undefined"},
3714 /* 144 */ {"var144", "undefined"},
3715 /* 145 */ {"var145", "undefined"},
3716 /* 146 */ {"var146", "undefined"},
3717 /* 147 */ {"var147", "undefined"},
3718 /* 148 */ {"var148", "undefined"},
3719 /* 149 */ {"var149", "undefined"},
3720 /* 150 */ {"var150", "undefined"},
3721 /* 151 */ {"var151", "undefined"},
3722 /* 152 */ {"var152", "undefined"},
3723 /* 153 */ {"var153", "undefined"},
3724 /* 154 */ {"var154", "undefined"},
3725 /* 155 */ {"var155", "undefined"},
3726 /* 156 */ {"var156", "undefined"},
3727 /* 157 */ {"var157", "undefined"},
3728 /* 158 */ {"var158", "undefined"},
3729 /* 159 */ {"var159", "undefined"},
3730 /* 160 */ {"var160", "undefined"},
3731 /* 161 */ {"var161", "undefined"},
3732 /* 162 */ {"var162", "undefined"},
3733 /* 163 */ {"var163", "undefined"},
3734 /* 164 */ {"var164", "undefined"},
3735 /* 165 */ {"var165", "undefined"},
3736 /* 166 */ {"var166", "undefined"},
3737 /* 167 */ {"var167", "undefined"},
3738 /* 168 */ {"var168", "undefined"},
3739 /* 169 */ {"var169", "undefined"},
3740 /* 170 */ {"var170", "undefined"},
3741 /* 171 */ {"var171", "undefined"},
3742 /* 172 */ {"var172", "undefined"},
3743 /* 173 */ {"var173", "undefined"},
3744 /* 174 */ {"var174", "undefined"},
3745 /* 175 */ {"var175", "undefined"},
3746 /* 176 */ {"var176", "undefined"},
3747 /* 177 */ {"var177", "undefined"},
3748 /* 178 */ {"var178", "undefined"},
3749 /* 179 */ {"var179", "undefined"},
3750 /* 180 */ {"var180", "undefined"},
3751 /* 181 */ {"var181", "undefined"},
3752 /* 182 */ {"var182", "undefined"},
3753 /* 183 */ {"var183", "undefined"},
3754 /* 184 */ {"var184", "undefined"},
3755 /* 185 */ {"var185", "undefined"},
3756 /* 186 */ {"var186", "undefined"},
3757 /* 187 */ {"var187", "undefined"},
3758 /* 188 */ {"var188", "undefined"},
3759 /* 189 */ {"var189", "undefined"},
3760 /* 190 */ {"var190", "undefined"},
3761 /* 191 */ {"var191", "undefined"},
3762 /* 192 */ {"var192", "undefined"},
3763 /* 193 */ {"var193", "undefined"},
3764 /* 194 */ {"var194", "undefined"},
3765 /* 195 */ {"var195", "undefined"},
3766 /* 196 */ {"var196", "undefined"},
3767 /* 197 */ {"var197", "undefined"},
3768 /* 198 */ {"var198", "undefined"},
3769 /* 199 */ {"var199", "undefined"},
3770 /* 200 */ {"var200", "undefined"},
3771 /* 201 */ {"var201", "undefined"},
3772 /* 202 */ {"var202", "undefined"},
3773 /* 203 */ {"var203", "undefined"},
3774 /* 204 */ {"var204", "undefined"},
3775 /* 205 */ {"var205", "undefined"},
3776 /* 206 */ {"var206", "undefined"},
3777 /* 207 */ {"var207", "undefined"},
3778 /* 208 */ {"var208", "undefined"},
3779 /* 209 */ {"var209", "undefined"},
3780 /* 210 */ {"var210", "undefined"},
3781 /* 211 */ {"var211", "undefined"},
3782 /* 212 */ {"var212", "undefined"},
3783 /* 213 */ {"var213", "undefined"},
3784 /* 214 */ {"var214", "undefined"},
3785 /* 215 */ {"var215", "undefined"},
3786 /* 216 */ {"var216", "undefined"},
3787 /* 217 */ {"var217", "undefined"},
3788 /* 218 */ {"var218", "undefined"},
3789 /* 219 */ {"var219", "undefined"},
3790 /* 220 */ {"var220", "undefined"},
3791 /* 221 */ {"var221", "undefined"},
3792 /* 222 */ {"var222", "undefined"},
3793 /* 223 */ {"var223", "undefined"},
3794 /* 224 */ {"var224", "undefined"},
3795 /* 225 */ {"var225", "undefined"},
3796 /* 226 */ {"var226", "undefined"},
3797 /* 227 */ {"var227", "undefined"},
3798 /* 228 */ {"var228", "undefined"},
3799 /* 229 */ {"SWH", "Significant wave height m"},
3800 /* 230 */ {"MWD", "Mean wave direction degrees"},
3801 /* 231 */ {"PP1D", "Peak period of 1d spectra s"},
3802 /* 232 */ {"MWP", "Mean wave period s"},
3803 /* 233 */ {"CDWW", "Coefficient of drag with waves -"},
3804 /* 234 */ {"SHWW", "Significant height of wind waves m"},
3805 /* 235 */ {"MDWW", "Mean direction of wind waves degrees"},
3806 /* 236 */ {"MPWW", "Mean period of wind waves s"},
3807 /* 237 */ {"SHPS", "Significant height of primary swell m"},
3808 /* 238 */ {"MDPS", "Mean direction of primary swell degrees"},
3809 /* 239 */ {"MPPS", "Mean period of primary swell s"},
3810 /* 240 */ {"SDHS", "Standard deviation wave height m"},
3811 /* 241 */ {"MU10", "Mean of 10m windspeed m s**-1"},
3812 /* 242 */ {"MDWI", "Mean wind direction degrees"},
3813 /* 243 */ {"SDU", "Standard deviation 10m wind speed m s**-1"},
3814 /* 244 */ {"MSQS", "Mean square slope of waves dimensionless"},
3815 /* 245 */ {"10MS", "Ten metre windspeed m s**-1"},
3816 /* 246 */ {"var246", "undefined"},
3817 /* 247 */ {"var247", "undefined"},
3818 /* 248 */ {"var248", "undefined"},
3819 /* 249 */ {"var249", "undefined"},
3820 /* 250 */ {"2DSP", "2D wave spectra m**2 s radiance**-1"},
3821 /* 251 */ {"None", "2D wave spectra(single direction/single frequency) m**2 s radiance**-1"},
3822 /* 252 */ {"var252", "undefined"},
3823 /* 253 */ {"var253", "undefined"},
3824 /* 254 */ {"var254", "undefined"},
3825 /* 255 */ {"var255", "undefined"},
3826 };
3827
3828
3829 struct ParmTable parm_table_ecmwf_150[256] = {
3830 /* 0 */ {"var0", "undefined"},
3831 /* 1 */ {"var1", "undefined"},
3832 /* 2 */ {"var2", "undefined"},
3833 /* 3 */ {"var3", "undefined"},
3834 /* 4 */ {"var4", "undefined"},
3835 /* 5 */ {"var5", "undefined"},
3836 /* 6 */ {"var6", "undefined"},
3837 /* 7 */ {"var7", "undefined"},
3838 /* 8 */ {"var8", "undefined"},
3839 /* 9 */ {"var9", "undefined"},
3840 /* 10 */ {"var10", "undefined"},
3841 /* 11 */ {"var11", "undefined"},
3842 /* 12 */ {"var12", "undefined"},
3843 /* 13 */ {"var13", "undefined"},
3844 /* 14 */ {"var14", "undefined"},
3845 /* 15 */ {"var15", "undefined"},
3846 /* 16 */ {"var16", "undefined"},
3847 /* 17 */ {"var17", "undefined"},
3848 /* 18 */ {"var18", "undefined"},
3849 /* 19 */ {"var19", "undefined"},
3850 /* 20 */ {"var20", "undefined"},
3851 /* 21 */ {"var21", "undefined"},
3852 /* 22 */ {"var22", "undefined"},
3853 /* 23 */ {"var23", "undefined"},
3854 /* 24 */ {"var24", "undefined"},
3855 /* 25 */ {"var25", "undefined"},
3856 /* 26 */ {"var26", "undefined"},
3857 /* 27 */ {"var27", "undefined"},
3858 /* 28 */ {"var28", "undefined"},
3859 /* 29 */ {"var29", "undefined"},
3860 /* 30 */ {"var30", "undefined"},
3861 /* 31 */ {"var31", "undefined"},
3862 /* 32 */ {"var32", "undefined"},
3863 /* 33 */ {"var33", "undefined"},
3864 /* 34 */ {"var34", "undefined"},
3865 /* 35 */ {"var35", "undefined"},
3866 /* 36 */ {"var36", "undefined"},
3867 /* 37 */ {"var37", "undefined"},
3868 /* 38 */ {"var38", "undefined"},
3869 /* 39 */ {"var39", "undefined"},
3870 /* 40 */ {"var40", "undefined"},
3871 /* 41 */ {"var41", "undefined"},
3872 /* 42 */ {"var42", "undefined"},
3873 /* 43 */ {"var43", "undefined"},
3874 /* 44 */ {"var44", "undefined"},
3875 /* 45 */ {"var45", "undefined"},
3876 /* 46 */ {"var46", "undefined"},
3877 /* 47 */ {"var47", "undefined"},
3878 /* 48 */ {"var48", "undefined"},
3879 /* 49 */ {"var49", "undefined"},
3880 /* 50 */ {"var50", "undefined"},
3881 /* 51 */ {"var51", "undefined"},
3882 /* 52 */ {"var52", "undefined"},
3883 /* 53 */ {"var53", "undefined"},
3884 /* 54 */ {"var54", "undefined"},
3885 /* 55 */ {"var55", "undefined"},
3886 /* 56 */ {"var56", "undefined"},
3887 /* 57 */ {"var57", "undefined"},
3888 /* 58 */ {"var58", "undefined"},
3889 /* 59 */ {"var59", "undefined"},
3890 /* 60 */ {"var60", "undefined"},
3891 /* 61 */ {"var61", "undefined"},
3892 /* 62 */ {"var62", "undefined"},
3893 /* 63 */ {"var63", "undefined"},
3894 /* 64 */ {"var64", "undefined"},
3895 /* 65 */ {"var65", "undefined"},
3896 /* 66 */ {"var66", "undefined"},
3897 /* 67 */ {"var67", "undefined"},
3898 /* 68 */ {"var68", "undefined"},
3899 /* 69 */ {"var69", "undefined"},
3900 /* 70 */ {"var70", "undefined"},
3901 /* 71 */ {"var71", "undefined"},
3902 /* 72 */ {"var72", "undefined"},
3903 /* 73 */ {"var73", "undefined"},
3904 /* 74 */ {"var74", "undefined"},
3905 /* 75 */ {"var75", "undefined"},
3906 /* 76 */ {"var76", "undefined"},
3907 /* 77 */ {"var77", "undefined"},
3908 /* 78 */ {"var78", "undefined"},
3909 /* 79 */ {"var79", "undefined"},
3910 /* 80 */ {"var80", "undefined"},
3911 /* 81 */ {"var81", "undefined"},
3912 /* 82 */ {"var82", "undefined"},
3913 /* 83 */ {"var83", "undefined"},
3914 /* 84 */ {"var84", "undefined"},
3915 /* 85 */ {"var85", "undefined"},
3916 /* 86 */ {"var86", "undefined"},
3917 /* 87 */ {"var87", "undefined"},
3918 /* 88 */ {"var88", "undefined"},
3919 /* 89 */ {"var89", "undefined"},
3920 /* 90 */ {"var90", "undefined"},
3921 /* 91 */ {"var91", "undefined"},
3922 /* 92 */ {"var92", "undefined"},
3923 /* 93 */ {"var93", "undefined"},
3924 /* 94 */ {"var94", "undefined"},
3925 /* 95 */ {"var95", "undefined"},
3926 /* 96 */ {"var96", "undefined"},
3927 /* 97 */ {"var97", "undefined"},
3928 /* 98 */ {"var98", "undefined"},
3929 /* 99 */ {"var99", "undefined"},
3930 /* 100 */ {"var100", "undefined"},
3931 /* 101 */ {"var101", "undefined"},
3932 /* 102 */ {"var102", "undefined"},
3933 /* 103 */ {"var103", "undefined"},
3934 /* 104 */ {"var104", "undefined"},
3935 /* 105 */ {"var105", "undefined"},
3936 /* 106 */ {"var106", "undefined"},
3937 /* 107 */ {"var107", "undefined"},
3938 /* 108 */ {"var108", "undefined"},
3939 /* 109 */ {"var109", "undefined"},
3940 /* 110 */ {"var110", "undefined"},
3941 /* 111 */ {"var111", "undefined"},
3942 /* 112 */ {"var112", "undefined"},
3943 /* 113 */ {"var113", "undefined"},
3944 /* 114 */ {"var114", "undefined"},
3945 /* 115 */ {"var115", "undefined"},
3946 /* 116 */ {"var116", "undefined"},
3947 /* 117 */ {"var117", "undefined"},
3948 /* 118 */ {"var118", "undefined"},
3949 /* 119 */ {"var119", "undefined"},
3950 /* 120 */ {"var120", "undefined"},
3951 /* 121 */ {"var121", "undefined"},
3952 /* 122 */ {"var122", "undefined"},
3953 /* 123 */ {"var123", "undefined"},
3954 /* 124 */ {"var124", "undefined"},
3955 /* 125 */ {"var125", "undefined"},
3956 /* 126 */ {"var126", "undefined"},
3957 /* 127 */ {"var127", "undefined"},
3958 /* 128 */ {"var128", "undefined"},
3959 /* 129 */ {"NONE", "Ocean potential temperature deg C"},
3960 /* 130 */ {"NONE", "Ocean salinity psu"},
3961 /* 131 */ {"NONE", "Ocean potential density(reference = surface) kg m**-3 -1000"},
3962 /* 132 */ {"var132", "undefined"},
3963 /* 133 */ {"NONE", "Ocean u velocity m s**-1"},
3964 /* 134 */ {"NONE", "Ocean v velocity m s**-1"},
3965 /* 135 */ {"NONE", "Ocean w velocity m s**-1"},
3966 /* 136 */ {"var136", "undefined"},
3967 /* 137 */ {"NONE", "Richardson number -"},
3968 /* 138 */ {"var138", "undefined"},
3969 /* 139 */ {"NONE", "u*v product m s**-2"},
3970 /* 140 */ {"NONE", "u*T product m s**-1 deg C"},
3971 /* 141 */ {"NONE", "v*T product m s**-1 deg C"},
3972 /* 142 */ {"NONE", "u*u product m s**-2"},
3973 /* 143 */ {"NONE", "v*v product m s**-2"},
3974 /* 144 */ {"NONE", "uv - u~v~ (u~ is time-mean of u) m s**-2"},
3975 /* 145 */ {"NONE", "uT - u~T~ m s**-1 deg C"},
3976 /* 146 */ {"NONE", "vT - v~T~ m s**-1 deg C"},
3977 /* 147 */ {"NONE", "uu - u~u~ m s**-2"},
3978 /* 148 */ {"NONE", "vv - v~v~ m s**-2"},
3979 /* 149 */ {"var149", "undefined"},
3980 /* 150 */ {"var150", "undefined"},
3981 /* 151 */ {"var151", "undefined"},
3982 /* 152 */ {"NONE", "Sea level (departure from geoid tides removed)"},
3983 /* 153 */ {"NONE", "Barotropic stream function -"},
3984 /* 154 */ {"NONE", "Mixed layer depth (Tcr=0.5 C for HOPE model) m"},
3985 /* 155 */ {"NONE", "Depth (eg of isothermal surface) m"},
3986 /* 156 */ {"var156", "undefined"},
3987 /* 157 */ {"var157", "undefined"},
3988 /* 158 */ {"var158", "undefined"},
3989 /* 159 */ {"var159", "undefined"},
3990 /* 160 */ {"var160", "undefined"},
3991 /* 161 */ {"var161", "undefined"},
3992 /* 162 */ {"var162", "undefined"},
3993 /* 163 */ {"var163", "undefined"},
3994 /* 164 */ {"var164", "undefined"},
3995 /* 165 */ {"var165", "undefined"},
3996 /* 166 */ {"var166", "undefined"},
3997 /* 167 */ {"var167", "undefined"},
3998 /* 168 */ {"NONE", "U-stress Pa"},
3999 /* 169 */ {"NONE", "V-stress Pa"},
4000 /* 170 */ {"NONE", "Turbulent Kinetic Energy input -"},
4001 /* 171 */ {"NONE", "Net surface heat flux (+ve = down) -"},
4002 /* 172 */ {"NONE", "Surface solar radiation -"},
4003 /* 173 */ {"NONE", "P-E -"},
4004 /* 174 */ {"var174", "undefined"},
4005 /* 175 */ {"var175", "undefined"},
4006 /* 176 */ {"var176", "undefined"},
4007 /* 177 */ {"var177", "undefined"},
4008 /* 178 */ {"var178", "undefined"},
4009 /* 179 */ {"var179", "undefined"},
4010 /* 180 */ {"NONE", "Diagnosed SST eror deg C"},
4011 /* 181 */ {"NONE", "Heat flux correction W m**-2"},
4012 /* 182 */ {"NONE", "Observed SST deg C"},
4013 /* 183 */ {"NONE", "Observed heat flux W m**-2"},
4014 /* 184 */ {"var184", "undefined"},
4015 /* 185 */ {"var185", "undefined"},
4016 /* 186 */ {"var186", "undefined"},
4017 /* 187 */ {"var187", "undefined"},
4018 /* 188 */ {"var188", "undefined"},
4019 /* 189 */ {"var189", "undefined"},
4020 /* 190 */ {"var190", "undefined"},
4021 /* 191 */ {"var191", "undefined"},
4022 /* 192 */ {"var192", "undefined"},
4023 /* 193 */ {"var193", "undefined"},
4024 /* 194 */ {"var194", "undefined"},
4025 /* 195 */ {"var195", "undefined"},
4026 /* 196 */ {"var196", "undefined"},
4027 /* 197 */ {"var197", "undefined"},
4028 /* 198 */ {"var198", "undefined"},
4029 /* 199 */ {"var199", "undefined"},
4030 /* 200 */ {"var200", "undefined"},
4031 /* 201 */ {"var201", "undefined"},
4032 /* 202 */ {"var202", "undefined"},
4033 /* 203 */ {"var203", "undefined"},
4034 /* 204 */ {"var204", "undefined"},
4035 /* 205 */ {"var205", "undefined"},
4036 /* 206 */ {"var206", "undefined"},
4037 /* 207 */ {"var207", "undefined"},
4038 /* 208 */ {"var208", "undefined"},
4039 /* 209 */ {"var209", "undefined"},
4040 /* 210 */ {"var210", "undefined"},
4041 /* 211 */ {"var211", "undefined"},
4042 /* 212 */ {"var212", "undefined"},
4043 /* 213 */ {"var213", "undefined"},
4044 /* 214 */ {"var214", "undefined"},
4045 /* 215 */ {"var215", "undefined"},
4046 /* 216 */ {"var216", "undefined"},
4047 /* 217 */ {"var217", "undefined"},
4048 /* 218 */ {"var218", "undefined"},
4049 /* 219 */ {"var219", "undefined"},
4050 /* 220 */ {"var220", "undefined"},
4051 /* 221 */ {"var221", "undefined"},
4052 /* 222 */ {"var222", "undefined"},
4053 /* 223 */ {"var223", "undefined"},
4054 /* 224 */ {"var224", "undefined"},
4055 /* 225 */ {"var225", "undefined"},
4056 /* 226 */ {"var226", "undefined"},
4057 /* 227 */ {"var227", "undefined"},
4058 /* 228 */ {"var228", "undefined"},
4059 /* 229 */ {"var229", "undefined"},
4060 /* 230 */ {"var230", "undefined"},
4061 /* 231 */ {"var231", "undefined"},
4062 /* 232 */ {"var232", "undefined"},
4063 /* 233 */ {"var233", "undefined"},
4064 /* 234 */ {"var234", "undefined"},
4065 /* 235 */ {"var235", "undefined"},
4066 /* 236 */ {"var236", "undefined"},
4067 /* 237 */ {"var237", "undefined"},
4068 /* 238 */ {"var238", "undefined"},
4069 /* 239 */ {"var239", "undefined"},
4070 /* 240 */ {"var240", "undefined"},
4071 /* 241 */ {"var241", "undefined"},
4072 /* 242 */ {"var242", "undefined"},
4073 /* 243 */ {"var243", "undefined"},
4074 /* 244 */ {"var244", "undefined"},
4075 /* 245 */ {"var245", "undefined"},
4076 /* 246 */ {"var246", "undefined"},
4077 /* 247 */ {"var247", "undefined"},
4078 /* 248 */ {"var248", "undefined"},
4079 /* 249 */ {"var249", "undefined"},
4080 /* 250 */ {"var250", "undefined"},
4081 /* 251 */ {"var251", "undefined"},
4082 /* 252 */ {"var252", "undefined"},
4083 /* 253 */ {"var253", "undefined"},
4084 /* 254 */ {"var254", "undefined"},
4085 /* 255 */ {"var255", "undefined"},
4086 };
4087
4088
4089 struct ParmTable parm_table_ecmwf_160[256] = {
4090 /* 0 */ {"var0", "undefined"},
4091 /* 1 */ {"var1", "undefined"},
4092 /* 2 */ {"var2", "undefined"},
4093 /* 3 */ {"var3", "undefined"},
4094 /* 4 */ {"var4", "undefined"},
4095 /* 5 */ {"var5", "undefined"},
4096 /* 6 */ {"var6", "undefined"},
4097 /* 7 */ {"var7", "undefined"},
4098 /* 8 */ {"var8", "undefined"},
4099 /* 9 */ {"var9", "undefined"},
4100 /* 10 */ {"var10", "undefined"},
4101 /* 11 */ {"var11", "undefined"},
4102 /* 12 */ {"var12", "undefined"},
4103 /* 13 */ {"var13", "undefined"},
4104 /* 14 */ {"var14", "undefined"},
4105 /* 15 */ {"var15", "undefined"},
4106 /* 16 */ {"var16", "undefined"},
4107 /* 17 */ {"var17", "undefined"},
4108 /* 18 */ {"var18", "undefined"},
4109 /* 19 */ {"var19", "undefined"},
4110 /* 20 */ {"var20", "undefined"},
4111 /* 21 */ {"var21", "undefined"},
4112 /* 22 */ {"var22", "undefined"},
4113 /* 23 */ {"var23", "undefined"},
4114 /* 24 */ {"var24", "undefined"},
4115 /* 25 */ {"var25", "undefined"},
4116 /* 26 */ {"var26", "undefined"},
4117 /* 27 */ {"var27", "undefined"},
4118 /* 28 */ {"var28", "undefined"},
4119 /* 29 */ {"var29", "undefined"},
4120 /* 30 */ {"var30", "undefined"},
4121 /* 31 */ {"var31", "undefined"},
4122 /* 32 */ {"var32", "undefined"},
4123 /* 33 */ {"var33", "undefined"},
4124 /* 34 */ {"var34", "undefined"},
4125 /* 35 */ {"var35", "undefined"},
4126 /* 36 */ {"var36", "undefined"},
4127 /* 37 */ {"var37", "undefined"},
4128 /* 38 */ {"var38", "undefined"},
4129 /* 39 */ {"var39", "undefined"},
4130 /* 40 */ {"var40", "undefined"},
4131 /* 41 */ {"var41", "undefined"},
4132 /* 42 */ {"var42", "undefined"},
4133 /* 43 */ {"var43", "undefined"},
4134 /* 44 */ {"var44", "undefined"},
4135 /* 45 */ {"var45", "undefined"},
4136 /* 46 */ {"var46", "undefined"},
4137 /* 47 */ {"var47", "undefined"},
4138 /* 48 */ {"var48", "undefined"},
4139 /* 49 */ {"var49", "undefined"},
4140 /* 50 */ {"var50", "undefined"},
4141 /* 51 */ {"var51", "undefined"},
4142 /* 52 */ {"var52", "undefined"},
4143 /* 53 */ {"var53", "undefined"},
4144 /* 54 */ {"var54", "undefined"},
4145 /* 55 */ {"var55", "undefined"},
4146 /* 56 */ {"var56", "undefined"},
4147 /* 57 */ {"var57", "undefined"},
4148 /* 58 */ {"var58", "undefined"},
4149 /* 59 */ {"var59", "undefined"},
4150 /* 60 */ {"var60", "undefined"},
4151 /* 61 */ {"var61", "undefined"},
4152 /* 62 */ {"var62", "undefined"},
4153 /* 63 */ {"var63", "undefined"},
4154 /* 64 */ {"var64", "undefined"},
4155 /* 65 */ {"var65", "undefined"},
4156 /* 66 */ {"var66", "undefined"},
4157 /* 67 */ {"var67", "undefined"},
4158 /* 68 */ {"var68", "undefined"},
4159 /* 69 */ {"var69", "undefined"},
4160 /* 70 */ {"var70", "undefined"},
4161 /* 71 */ {"var71", "undefined"},
4162 /* 72 */ {"var72", "undefined"},
4163 /* 73 */ {"var73", "undefined"},
4164 /* 74 */ {"var74", "undefined"},
4165 /* 75 */ {"var75", "undefined"},
4166 /* 76 */ {"var76", "undefined"},
4167 /* 77 */ {"var77", "undefined"},
4168 /* 78 */ {"var78", "undefined"},
4169 /* 79 */ {"var79", "undefined"},
4170 /* 80 */ {"var80", "undefined"},
4171 /* 81 */ {"var81", "undefined"},
4172 /* 82 */ {"var82", "undefined"},
4173 /* 83 */ {"var83", "undefined"},
4174 /* 84 */ {"var84", "undefined"},
4175 /* 85 */ {"var85", "undefined"},
4176 /* 86 */ {"var86", "undefined"},
4177 /* 87 */ {"var87", "undefined"},
4178 /* 88 */ {"var88", "undefined"},
4179 /* 89 */ {"var89", "undefined"},
4180 /* 90 */ {"var90", "undefined"},
4181 /* 91 */ {"var91", "undefined"},
4182 /* 92 */ {"var92", "undefined"},
4183 /* 93 */ {"var93", "undefined"},
4184 /* 94 */ {"var94", "undefined"},
4185 /* 95 */ {"var95", "undefined"},
4186 /* 96 */ {"var96", "undefined"},
4187 /* 97 */ {"var97", "undefined"},
4188 /* 98 */ {"var98", "undefined"},
4189 /* 99 */ {"var99", "undefined"},
4190 /* 100 */ {"var100", "undefined"},
4191 /* 101 */ {"var101", "undefined"},
4192 /* 102 */ {"var102", "undefined"},
4193 /* 103 */ {"var103", "undefined"},
4194 /* 104 */ {"var104", "undefined"},
4195 /* 105 */ {"var105", "undefined"},
4196 /* 106 */ {"var106", "undefined"},
4197 /* 107 */ {"var107", "undefined"},
4198 /* 108 */ {"var108", "undefined"},
4199 /* 109 */ {"var109", "undefined"},
4200 /* 110 */ {"var110", "undefined"},
4201 /* 111 */ {"var111", "undefined"},
4202 /* 112 */ {"var112", "undefined"},
4203 /* 113 */ {"var113", "undefined"},
4204 /* 114 */ {"var114", "undefined"},
4205 /* 115 */ {"var115", "undefined"},
4206 /* 116 */ {"var116", "undefined"},
4207 /* 117 */ {"var117", "undefined"},
4208 /* 118 */ {"var118", "undefined"},
4209 /* 119 */ {"var119", "undefined"},
4210 /* 120 */ {"var120", "undefined"},
4211 /* 121 */ {"var121", "undefined"},
4212 /* 122 */ {"var122", "undefined"},
4213 /* 123 */ {"var123", "undefined"},
4214 /* 124 */ {"var124", "undefined"},
4215 /* 125 */ {"var125", "undefined"},
4216 /* 126 */ {"var126", "undefined"},
4217 /* 127 */ {"AT", "Atmospheric tide+ -"},
4218 /* 128 */ {"BV", "Budget values+ -"},
4219 /* 129 */ {"Z", "Geopotential / orography m**2 s**-2"},
4220 /* 130 */ {"T", "Temperature K"},
4221 /* 131 */ {"U", "U-velocity m s**-1"},
4222 /* 132 */ {"V", "V-velocity m s**-1"},
4223 /* 133 */ {"Q", "Specific humidity kg kg**-1"},
4224 /* 134 */ {"SP", "Surface pressure Pa"},
4225 /* 135 */ {"W", "Vertical velocity Pa s**-1"},
4226 /* 136 */ {"var136", "undefined"},
4227 /* 137 */ {"PWC", "Precipitable water content kg m**-2"},
4228 /* 138 */ {"VO", "Vorticity (relative) s**-1"},
4229 /* 139 */ {"STL1", "Soil temperature level 1 K"},
4230 /* 140 */ {"SWL1", "Soil wetness level 1 m"},
4231 /* 141 */ {"SD", "Snow depth m (of water)"},
4232 /* 142 */ {"LSP", "Large scale precipitation kg m**-2 s**-1"},
4233 /* 143 */ {"CP", "Convective precipitation kg m**-2 s**-1"},
4234 /* 144 */ {"SF", "Snow fall kg m**-2 s**-1"},
4235 /* 145 */ {"BLD", "Boundary layer dissipation W m**-2"},
4236 /* 146 */ {"SSHF", "Surface sensible heat flux W m**-2"},
4237 /* 147 */ {"SLHF", "Surface latent heat flux W m**-2"},
4238 /* 148 */ {"var148", "undefined"},
4239 /* 149 */ {"var149", "undefined"},
4240 /* 150 */ {"var150", "undefined"},
4241 /* 151 */ {"MSL", "Mean sea level pressure Pa"},
4242 /* 152 */ {"LNSP", "Ln surface pressure -"},
4243 /* 153 */ {"var153", "undefined"},
4244 /* 154 */ {"var154", "undefined"},
4245 /* 155 */ {"D", "Divergence s**-1"},
4246 /* 156 */ {"GH", "Height (geopotential) m"},
4247 /* 157 */ {"R", "Relative humidity (0 - 1)"},
4248 /* 158 */ {"TSP", "Tendency of surface pressure Pa s**-1"},
4249 /* 159 */ {"var159", "undefined"},
4250 /* 160 */ {"var160", "undefined"},
4251 /* 161 */ {"var161", "undefined"},
4252 /* 162 */ {"var162", "undefined"},
4253 /* 163 */ {"var163", "undefined"},
4254 /* 164 */ {"TCC", "Total cloud cover (0 - 1)"},
4255 /* 165 */ {"10U", "10 metre u wind component m s**-1"},
4256 /* 166 */ {"10V", "10 metre v wind component m s**-1"},
4257 /* 167 */ {"2T", "2 metre temperature K"},
4258 /* 168 */ {"2D", "2 metre dewpoint temperature K"},
4259 /* 169 */ {"var169", "undefined"},
4260 /* 170 */ {"STL2", "Soil temperature level 2 K"},
4261 /* 171 */ {"SWL2", "Soil wetness level 2 m"},
4262 /* 172 */ {"LSM", "Land/sea mask (0 - 1)"},
4263 /* 173 */ {"SR", "Surface roughness m"},
4264 /* 174 */ {"AL", "Albedo (0 - 1)"},
4265 /* 175 */ {"var175", "undefined"},
4266 /* 176 */ {"SSR", "Surface solar radiation W m**-2"},
4267 /* 177 */ {"STR", "Surface thermal radiation W m**-2"},
4268 /* 178 */ {"TSR", "Top solar radiation W m**-2"},
4269 /* 179 */ {"TTR", "Top thermal radiation W m**-2"},
4270 /* 180 */ {"EWSS", "East/west surface stress N m**-2 s**-1"},
4271 /* 181 */ {"NSSS", "North/south surface stress N m**-2 s**-1"},
4272 /* 182 */ {"E", "Evaporation kg m**-2 s**-1"},
4273 /* 183 */ {"STL3", "Soil temperature level 3 K"},
4274 /* 184 */ {"SWL3", "Soil wetness level 3 m"},
4275 /* 185 */ {"CCC", "Convective cloud cover (0 - 1)"},
4276 /* 186 */ {"LCC", "Low cloud cover (0 - 1)"},
4277 /* 187 */ {"MCC", "Medium cloud cover (0 - 1)"},
4278 /* 188 */ {"HCC", "High cloud cover (0 - 1)"},
4279 /* 189 */ {"var189", "undefined"},
4280 /* 190 */ {"EWOV", "EW component of sub-grid scale orographic variance m**2"},
4281 /* 191 */ {"NSOV", "NS component of sub-grid scale orographic variance m**2"},
4282 /* 192 */ {"NWOV", "NWSE component sub-grid scale orographic variance m**2"},
4283 /* 193 */ {"NEOV", "NESW component sub-grid scale orographic variance m**2"},
4284 /* 194 */ {"var194", "undefined"},
4285 /* 195 */ {"LGWS", "Latitudinal component of gravity wave stress N m**-2 s"},
4286 /* 196 */ {"MGWS", "Meridional component of gravity wave stress N m**-2 s"},
4287 /* 197 */ {"GWD", "Gravity wave dissipation W m**-2 s"},
4288 /* 198 */ {"SRC", "Skin reservoir content m (of water)"},
4289 /* 199 */ {"VEG", "Percentage of vegetation %"},
4290 /* 200 */ {"VSO", "Variance of sub-grid scale orography m**2"},
4291 /* 201 */ {"MX2T", "Max temp.2m during averaging time K"},
4292 /* 202 */ {"MN2T", "Min temp.2m during averaging time K"},
4293 /* 203 */ {"var203", "undefined"},
4294 /* 204 */ {"PAW", "Precip. analysis weights -"},
4295 /* 205 */ {"RO", "Runoff kg m**-2 s**-1"},
4296 /* 206 */ {"ZZ", "St.Dev. of Geopotential m**2 s**-2"},
4297 /* 207 */ {"TZ", "Covar Temp & Geopotential K m**2 s**-2"},
4298 /* 208 */ {"TT", "St.Dev. of Temperature K"},
4299 /* 209 */ {"QZ", "Covar Sp.Hum. & Geopotential m**2 s**-2"},
4300 /* 210 */ {"QT", "Covar Sp.Hum & Temp. K"},
4301 /* 211 */ {"QQ", "St.Dev. of Specific humidity (0 - 1)"},
4302 /* 212 */ {"UZ", "Covar U-comp. & Geopotential m**3 s**-3"},
4303 /* 213 */ {"UT", "Covar U-comp. & Temp. K m s**-1"},
4304 /* 214 */ {"UQ", "Covar U-comp. & Sp.Hum. m s**-1"},
4305 /* 215 */ {"UU", "St.Dev. of U-velocity m s**-1"},
4306 /* 216 */ {"VZ", "Covar V-comp. & Geopotential m**3 s**-3"},
4307 /* 217 */ {"VT", "Covar V-comp. & Temp. K m s**-1"},
4308 /* 218 */ {"VQ", "Covar V-comp. & Sp.Hum. m s**-1"},
4309 /* 219 */ {"VU", "Covar V-comp. & U-comp m**2 s**-2"},
4310 /* 220 */ {"VV", "St.Dev. of V-comp m s**-1"},
4311 /* 221 */ {"WZ", "Covar W-comp. & Geopotential Pa m**2 s**-3"},
4312 /* 222 */ {"WT", "Covar W-comp. & Temp. K Pa s**-1"},
4313 /* 223 */ {"WQ", "Covar W-comp. & Sp.Hum. Pa s**-1"},
4314 /* 224 */ {"WU", "Covar W-comp. & U-comp. Pa m s**-2"},
4315 /* 225 */ {"WV", "Covar W-comp. & V-comp. Pa m s**-2"},
4316 /* 226 */ {"WW", "St.Dev. of Vertical velocity Pa s**-1"},
4317 /* 227 */ {"var227", "undefined"},
4318 /* 228 */ {"TP", "Total precipitation m"},
4319 /* 229 */ {"IEWS", "Instantaneous X surface stress N m**-2"},
4320 /* 230 */ {"INSS", "Instantaneous Y surface stress N m**-2"},
4321 /* 231 */ {"ISHF", "Instantaneous surface Heat Flux W m**-2"},
4322 /* 232 */ {"IE", "Instantaneous Moisture Flux (evaporation) kg m**-2 s**-1"},
4323 /* 233 */ {"ASQ", "Apparent Surface Humidity kg kg**-1"},
4324 /* 234 */ {"LSRH", "Logarithm of surface roughness length for heat. -"},
4325 /* 235 */ {"SKT", "Skin Temperature K"},
4326 /* 236 */ {"STL4", "Soil temperature level 4 K"},
4327 /* 237 */ {"SWL4", "Soil wetness level 4 m"},
4328 /* 238 */ {"TSN", "Temperature of snow layer K"},
4329 /* 239 */ {"CSF", "Convective snow-fall kg m**-2 s**-1"},
4330 /* 240 */ {"LSF", "Large scale snow-fall kg m**-2 s**-1"},
4331 /* 241 */ {"CLWC", "Cloud liquid water content kg kg**-1"},
4332 /* 242 */ {"CC", "Cloud cover (at given level) (0 - 1)"},
4333 /* 243 */ {"FAL", "Forecast albedo -"},
4334 /* 244 */ {"FSR", "Forecast surface roughness m"},
4335 /* 245 */ {"FLSR", "Forecast logarithm of surface roughness for heat. -"},
4336 /* 246 */ {"10WS", "10m. Windspeed (irresp of dir.) m s**-1"},
4337 /* 247 */ {"MOFL", "Momentum flux (irresp of dir.) N m**-2"},
4338 /* 248 */ {"HSD", "Heaviside (beta) function (0 - 1)"},
4339 /* 249 */ {"var249", "undefined"},
4340 /* 250 */ {"var250", "undefined"},
4341 /* 251 */ {"var251", "undefined"},
4342 /* 252 */ {"var252", "undefined"},
4343 /* 253 */ {"var253", "undefined"},
4344 /* 254 */ {"var254", "undefined"},
4345 /* 255 */ {"var255", "undefined"},
4346 };
4347
4348
4349 struct ParmTable parm_table_ecmwf_170[256] = {
4350 /* 0 */ {"var0", "undefined"},
4351 /* 1 */ {"var1", "undefined"},
4352 /* 2 */ {"var2", "undefined"},
4353 /* 3 */ {"var3", "undefined"},
4354 /* 4 */ {"var4", "undefined"},
4355 /* 5 */ {"var5", "undefined"},
4356 /* 6 */ {"var6", "undefined"},
4357 /* 7 */ {"var7", "undefined"},
4358 /* 8 */ {"var8", "undefined"},
4359 /* 9 */ {"var9", "undefined"},
4360 /* 10 */ {"var10", "undefined"},
4361 /* 11 */ {"var11", "undefined"},
4362 /* 12 */ {"var12", "undefined"},
4363 /* 13 */ {"var13", "undefined"},
4364 /* 14 */ {"var14", "undefined"},
4365 /* 15 */ {"var15", "undefined"},
4366 /* 16 */ {"var16", "undefined"},
4367 /* 17 */ {"var17", "undefined"},
4368 /* 18 */ {"var18", "undefined"},
4369 /* 19 */ {"var19", "undefined"},
4370 /* 20 */ {"var20", "undefined"},
4371 /* 21 */ {"var21", "undefined"},
4372 /* 22 */ {"var22", "undefined"},
4373 /* 23 */ {"var23", "undefined"},
4374 /* 24 */ {"var24", "undefined"},
4375 /* 25 */ {"var25", "undefined"},
4376 /* 26 */ {"var26", "undefined"},
4377 /* 27 */ {"var27", "undefined"},
4378 /* 28 */ {"var28", "undefined"},
4379 /* 29 */ {"var29", "undefined"},
4380 /* 30 */ {"var30", "undefined"},
4381 /* 31 */ {"var31", "undefined"},
4382 /* 32 */ {"var32", "undefined"},
4383 /* 33 */ {"var33", "undefined"},
4384 /* 34 */ {"var34", "undefined"},
4385 /* 35 */ {"var35", "undefined"},
4386 /* 36 */ {"var36", "undefined"},
4387 /* 37 */ {"var37", "undefined"},
4388 /* 38 */ {"var38", "undefined"},
4389 /* 39 */ {"var39", "undefined"},
4390 /* 40 */ {"var40", "undefined"},
4391 /* 41 */ {"var41", "undefined"},
4392 /* 42 */ {"var42", "undefined"},
4393 /* 43 */ {"var43", "undefined"},
4394 /* 44 */ {"var44", "undefined"},
4395 /* 45 */ {"var45", "undefined"},
4396 /* 46 */ {"var46", "undefined"},
4397 /* 47 */ {"var47", "undefined"},
4398 /* 48 */ {"var48", "undefined"},
4399 /* 49 */ {"var49", "undefined"},
4400 /* 50 */ {"var50", "undefined"},
4401 /* 51 */ {"var51", "undefined"},
4402 /* 52 */ {"var52", "undefined"},
4403 /* 53 */ {"var53", "undefined"},
4404 /* 54 */ {"var54", "undefined"},
4405 /* 55 */ {"var55", "undefined"},
4406 /* 56 */ {"var56", "undefined"},
4407 /* 57 */ {"var57", "undefined"},
4408 /* 58 */ {"var58", "undefined"},
4409 /* 59 */ {"var59", "undefined"},
4410 /* 60 */ {"var60", "undefined"},
4411 /* 61 */ {"var61", "undefined"},
4412 /* 62 */ {"var62", "undefined"},
4413 /* 63 */ {"var63", "undefined"},
4414 /* 64 */ {"var64", "undefined"},
4415 /* 65 */ {"var65", "undefined"},
4416 /* 66 */ {"var66", "undefined"},
4417 /* 67 */ {"var67", "undefined"},
4418 /* 68 */ {"var68", "undefined"},
4419 /* 69 */ {"var69", "undefined"},
4420 /* 70 */ {"var70", "undefined"},
4421 /* 71 */ {"var71", "undefined"},
4422 /* 72 */ {"var72", "undefined"},
4423 /* 73 */ {"var73", "undefined"},
4424 /* 74 */ {"var74", "undefined"},
4425 /* 75 */ {"var75", "undefined"},
4426 /* 76 */ {"var76", "undefined"},
4427 /* 77 */ {"var77", "undefined"},
4428 /* 78 */ {"var78", "undefined"},
4429 /* 79 */ {"var79", "undefined"},
4430 /* 80 */ {"var80", "undefined"},
4431 /* 81 */ {"var81", "undefined"},
4432 /* 82 */ {"var82", "undefined"},
4433 /* 83 */ {"var83", "undefined"},
4434 /* 84 */ {"var84", "undefined"},
4435 /* 85 */ {"var85", "undefined"},
4436 /* 86 */ {"var86", "undefined"},
4437 /* 87 */ {"var87", "undefined"},
4438 /* 88 */ {"var88", "undefined"},
4439 /* 89 */ {"var89", "undefined"},
4440 /* 90 */ {"var90", "undefined"},
4441 /* 91 */ {"var91", "undefined"},
4442 /* 92 */ {"var92", "undefined"},
4443 /* 93 */ {"var93", "undefined"},
4444 /* 94 */ {"var94", "undefined"},
4445 /* 95 */ {"var95", "undefined"},
4446 /* 96 */ {"var96", "undefined"},
4447 /* 97 */ {"var97", "undefined"},
4448 /* 98 */ {"var98", "undefined"},
4449 /* 99 */ {"var99", "undefined"},
4450 /* 100 */ {"var100", "undefined"},
4451 /* 101 */ {"var101", "undefined"},
4452 /* 102 */ {"var102", "undefined"},
4453 /* 103 */ {"var103", "undefined"},
4454 /* 104 */ {"var104", "undefined"},
4455 /* 105 */ {"var105", "undefined"},
4456 /* 106 */ {"var106", "undefined"},
4457 /* 107 */ {"var107", "undefined"},
4458 /* 108 */ {"var108", "undefined"},
4459 /* 109 */ {"var109", "undefined"},
4460 /* 110 */ {"var110", "undefined"},
4461 /* 111 */ {"var111", "undefined"},
4462 /* 112 */ {"var112", "undefined"},
4463 /* 113 */ {"var113", "undefined"},
4464 /* 114 */ {"var114", "undefined"},
4465 /* 115 */ {"var115", "undefined"},
4466 /* 116 */ {"var116", "undefined"},
4467 /* 117 */ {"var117", "undefined"},
4468 /* 118 */ {"var118", "undefined"},
4469 /* 119 */ {"var119", "undefined"},
4470 /* 120 */ {"var120", "undefined"},
4471 /* 121 */ {"var121", "undefined"},
4472 /* 122 */ {"var122", "undefined"},
4473 /* 123 */ {"var123", "undefined"},
4474 /* 124 */ {"var124", "undefined"},
4475 /* 125 */ {"var125", "undefined"},
4476 /* 126 */ {"var126", "undefined"},
4477 /* 127 */ {"var127", "undefined"},
4478 /* 128 */ {"var128", "undefined"},
4479 /* 129 */ {"Z", "Geopotential m**2 s**-2"},
4480 /* 130 */ {"T", "Temperature K"},
4481 /* 131 */ {"U", "U-velocity m s**-1"},
4482 /* 132 */ {"V", "V-velocity m s**-1"},
4483 /* 133 */ {"var133", "undefined"},
4484 /* 134 */ {"var134", "undefined"},
4485 /* 135 */ {"var135", "undefined"},
4486 /* 136 */ {"var136", "undefined"},
4487 /* 137 */ {"var137", "undefined"},
4488 /* 138 */ {"VO", "Vorticity (relative) s**-1"},
4489 /* 139 */ {"var139", "undefined"},
4490 /* 140 */ {"SWL1", "Soil wetness level 1 m"},
4491 /* 141 */ {"SD", "Snow depth m (of water equivalent)"},
4492 /* 142 */ {"var142", "undefined"},
4493 /* 143 */ {"var143", "undefined"},
4494 /* 144 */ {"var144", "undefined"},
4495 /* 145 */ {"var145", "undefined"},
4496 /* 146 */ {"var146", "undefined"},
4497 /* 147 */ {"var147", "undefined"},
4498 /* 148 */ {"var148", "undefined"},
4499 /* 149 */ {"TSW", "Total soil moisture m"},
4500 /* 150 */ {"var150", "undefined"},
4501 /* 151 */ {"MSL", "Mean sea level pressure Pa"},
4502 /* 152 */ {"var152", "undefined"},
4503 /* 153 */ {"var153", "undefined"},
4504 /* 154 */ {"var154", "undefined"},
4505 /* 155 */ {"D", "Divergence s**-1"},
4506 /* 156 */ {"var156", "undefined"},
4507 /* 157 */ {"var157", "undefined"},
4508 /* 158 */ {"var158", "undefined"},
4509 /* 159 */ {"var159", "undefined"},
4510 /* 160 */ {"var160", "undefined"},
4511 /* 161 */ {"var161", "undefined"},
4512 /* 162 */ {"var162", "undefined"},
4513 /* 163 */ {"var163", "undefined"},
4514 /* 164 */ {"var164", "undefined"},
4515 /* 165 */ {"var165", "undefined"},
4516 /* 166 */ {"var166", "undefined"},
4517 /* 167 */ {"var167", "undefined"},
4518 /* 168 */ {"var168", "undefined"},
4519 /* 169 */ {"var169", "undefined"},
4520 /* 170 */ {"var170", "undefined"},
4521 /* 171 */ {"SWL2", "Soil wetness level 2 m"},
4522 /* 172 */ {"var172", "undefined"},
4523 /* 173 */ {"var173", "undefined"},
4524 /* 174 */ {"var174", "undefined"},
4525 /* 175 */ {"var175", "undefined"},
4526 /* 176 */ {"var176", "undefined"},
4527 /* 177 */ {"var177", "undefined"},
4528 /* 178 */ {"var178", "undefined"},
4529 /* 179 */ {"TTR", "Top thermal radiation W m-2"},
4530 /* 180 */ {"var180", "undefined"},
4531 /* 181 */ {"var181", "undefined"},
4532 /* 182 */ {"var182", "undefined"},
4533 /* 183 */ {"var183", "undefined"},
4534 /* 184 */ {"SWL3", "Soil wetness level 3 m"},
4535 /* 185 */ {"var185", "undefined"},
4536 /* 186 */ {"var186", "undefined"},
4537 /* 187 */ {"var187", "undefined"},
4538 /* 188 */ {"var188", "undefined"},
4539 /* 189 */ {"var189", "undefined"},
4540 /* 190 */ {"var190", "undefined"},
4541 /* 191 */ {"var191", "undefined"},
4542 /* 192 */ {"var192", "undefined"},
4543 /* 193 */ {"var193", "undefined"},
4544 /* 194 */ {"var194", "undefined"},
4545 /* 195 */ {"var195", "undefined"},
4546 /* 196 */ {"var196", "undefined"},
4547 /* 197 */ {"var197", "undefined"},
4548 /* 198 */ {"var198", "undefined"},
4549 /* 199 */ {"var199", "undefined"},
4550 /* 200 */ {"var200", "undefined"},
4551 /* 201 */ {"MX2T", "Max temp at 2m since previous postprocess K"},
4552 /* 202 */ {"MN2T", "Min temp at 2m since previous postprocess K"},
4553 /* 203 */ {"var203", "undefined"},
4554 /* 204 */ {"var204", "undefined"},
4555 /* 205 */ {"var205", "undefined"},
4556 /* 206 */ {"var206", "undefined"},
4557 /* 207 */ {"var207", "undefined"},
4558 /* 208 */ {"var208", "undefined"},
4559 /* 209 */ {"var209", "undefined"},
4560 /* 210 */ {"var210", "undefined"},
4561 /* 211 */ {"var211", "undefined"},
4562 /* 212 */ {"var212", "undefined"},
4563 /* 213 */ {"var213", "undefined"},
4564 /* 214 */ {"var214", "undefined"},
4565 /* 215 */ {"var215", "undefined"},
4566 /* 216 */ {"var216", "undefined"},
4567 /* 217 */ {"var217", "undefined"},
4568 /* 218 */ {"var218", "undefined"},
4569 /* 219 */ {"var219", "undefined"},
4570 /* 220 */ {"var220", "undefined"},
4571 /* 221 */ {"var221", "undefined"},
4572 /* 222 */ {"var222", "undefined"},
4573 /* 223 */ {"var223", "undefined"},
4574 /* 224 */ {"var224", "undefined"},
4575 /* 225 */ {"var225", "undefined"},
4576 /* 226 */ {"var226", "undefined"},
4577 /* 227 */ {"var227", "undefined"},
4578 /* 228 */ {"TP", "Total precipitation m"},
4579 /* 229 */ {"var229", "undefined"},
4580 /* 230 */ {"var230", "undefined"},
4581 /* 231 */ {"var231", "undefined"},
4582 /* 232 */ {"var232", "undefined"},
4583 /* 233 */ {"var233", "undefined"},
4584 /* 234 */ {"var234", "undefined"},
4585 /* 235 */ {"var235", "undefined"},
4586 /* 236 */ {"var236", "undefined"},
4587 /* 237 */ {"var237", "undefined"},
4588 /* 238 */ {"var238", "undefined"},
4589 /* 239 */ {"var239", "undefined"},
4590 /* 240 */ {"var240", "undefined"},
4591 /* 241 */ {"var241", "undefined"},
4592 /* 242 */ {"var242", "undefined"},
4593 /* 243 */ {"var243", "undefined"},
4594 /* 244 */ {"var244", "undefined"},
4595 /* 245 */ {"var245", "undefined"},
4596 /* 246 */ {"var246", "undefined"},
4597 /* 247 */ {"var247", "undefined"},
4598 /* 248 */ {"var248", "undefined"},
4599 /* 249 */ {"var249", "undefined"},
4600 /* 250 */ {"var250", "undefined"},
4601 /* 251 */ {"var251", "undefined"},
4602 /* 252 */ {"var252", "undefined"},
4603 /* 253 */ {"var253", "undefined"},
4604 /* 254 */ {"var254", "undefined"},
4605 /* 255 */ {"var255", "undefined"},
4606 };
4607
4608
4609 struct ParmTable parm_table_ecmwf_180[256] = {
4610 /* 0 */ {"var0", "undefined"},
4611 /* 1 */ {"var1", "undefined"},
4612 /* 2 */ {"var2", "undefined"},
4613 /* 3 */ {"var3", "undefined"},
4614 /* 4 */ {"var4", "undefined"},
4615 /* 5 */ {"var5", "undefined"},
4616 /* 6 */ {"var6", "undefined"},
4617 /* 7 */ {"var7", "undefined"},
4618 /* 8 */ {"var8", "undefined"},
4619 /* 9 */ {"var9", "undefined"},
4620 /* 10 */ {"var10", "undefined"},
4621 /* 11 */ {"var11", "undefined"},
4622 /* 12 */ {"var12", "undefined"},
4623 /* 13 */ {"var13", "undefined"},
4624 /* 14 */ {"var14", "undefined"},
4625 /* 15 */ {"var15", "undefined"},
4626 /* 16 */ {"var16", "undefined"},
4627 /* 17 */ {"var17", "undefined"},
4628 /* 18 */ {"var18", "undefined"},
4629 /* 19 */ {"var19", "undefined"},
4630 /* 20 */ {"var20", "undefined"},
4631 /* 21 */ {"var21", "undefined"},
4632 /* 22 */ {"var22", "undefined"},
4633 /* 23 */ {"var23", "undefined"},
4634 /* 24 */ {"var24", "undefined"},
4635 /* 25 */ {"var25", "undefined"},
4636 /* 26 */ {"var26", "undefined"},
4637 /* 27 */ {"var27", "undefined"},
4638 /* 28 */ {"var28", "undefined"},
4639 /* 29 */ {"var29", "undefined"},
4640 /* 30 */ {"var30", "undefined"},
4641 /* 31 */ {"var31", "undefined"},
4642 /* 32 */ {"var32", "undefined"},
4643 /* 33 */ {"var33", "undefined"},
4644 /* 34 */ {"var34", "undefined"},
4645 /* 35 */ {"var35", "undefined"},
4646 /* 36 */ {"var36", "undefined"},
4647 /* 37 */ {"var37", "undefined"},
4648 /* 38 */ {"var38", "undefined"},
4649 /* 39 */ {"var39", "undefined"},
4650 /* 40 */ {"var40", "undefined"},
4651 /* 41 */ {"var41", "undefined"},
4652 /* 42 */ {"var42", "undefined"},
4653 /* 43 */ {"var43", "undefined"},
4654 /* 44 */ {"var44", "undefined"},
4655 /* 45 */ {"var45", "undefined"},
4656 /* 46 */ {"var46", "undefined"},
4657 /* 47 */ {"var47", "undefined"},
4658 /* 48 */ {"var48", "undefined"},
4659 /* 49 */ {"var49", "undefined"},
4660 /* 50 */ {"var50", "undefined"},
4661 /* 51 */ {"var51", "undefined"},
4662 /* 52 */ {"var52", "undefined"},
4663 /* 53 */ {"var53", "undefined"},
4664 /* 54 */ {"var54", "undefined"},
4665 /* 55 */ {"var55", "undefined"},
4666 /* 56 */ {"var56", "undefined"},
4667 /* 57 */ {"var57", "undefined"},
4668 /* 58 */ {"var58", "undefined"},
4669 /* 59 */ {"var59", "undefined"},
4670 /* 60 */ {"var60", "undefined"},
4671 /* 61 */ {"var61", "undefined"},
4672 /* 62 */ {"var62", "undefined"},
4673 /* 63 */ {"var63", "undefined"},
4674 /* 64 */ {"var64", "undefined"},
4675 /* 65 */ {"var65", "undefined"},
4676 /* 66 */ {"var66", "undefined"},
4677 /* 67 */ {"var67", "undefined"},
4678 /* 68 */ {"var68", "undefined"},
4679 /* 69 */ {"var69", "undefined"},
4680 /* 70 */ {"var70", "undefined"},
4681 /* 71 */ {"var71", "undefined"},
4682 /* 72 */ {"var72", "undefined"},
4683 /* 73 */ {"var73", "undefined"},
4684 /* 74 */ {"var74", "undefined"},
4685 /* 75 */ {"var75", "undefined"},
4686 /* 76 */ {"var76", "undefined"},
4687 /* 77 */ {"var77", "undefined"},
4688 /* 78 */ {"var78", "undefined"},
4689 /* 79 */ {"var79", "undefined"},
4690 /* 80 */ {"var80", "undefined"},
4691 /* 81 */ {"var81", "undefined"},
4692 /* 82 */ {"var82", "undefined"},
4693 /* 83 */ {"var83", "undefined"},
4694 /* 84 */ {"var84", "undefined"},
4695 /* 85 */ {"var85", "undefined"},
4696 /* 86 */ {"var86", "undefined"},
4697 /* 87 */ {"var87", "undefined"},
4698 /* 88 */ {"var88", "undefined"},
4699 /* 89 */ {"var89", "undefined"},
4700 /* 90 */ {"var90", "undefined"},
4701 /* 91 */ {"var91", "undefined"},
4702 /* 92 */ {"var92", "undefined"},
4703 /* 93 */ {"var93", "undefined"},
4704 /* 94 */ {"var94", "undefined"},
4705 /* 95 */ {"var95", "undefined"},
4706 /* 96 */ {"var96", "undefined"},
4707 /* 97 */ {"var97", "undefined"},
4708 /* 98 */ {"var98", "undefined"},
4709 /* 99 */ {"var99", "undefined"},
4710 /* 100 */ {"var100", "undefined"},
4711 /* 101 */ {"var101", "undefined"},
4712 /* 102 */ {"var102", "undefined"},
4713 /* 103 */ {"var103", "undefined"},
4714 /* 104 */ {"var104", "undefined"},
4715 /* 105 */ {"var105", "undefined"},
4716 /* 106 */ {"var106", "undefined"},
4717 /* 107 */ {"var107", "undefined"},
4718 /* 108 */ {"var108", "undefined"},
4719 /* 109 */ {"var109", "undefined"},
4720 /* 110 */ {"var110", "undefined"},
4721 /* 111 */ {"var111", "undefined"},
4722 /* 112 */ {"var112", "undefined"},
4723 /* 113 */ {"var113", "undefined"},
4724 /* 114 */ {"var114", "undefined"},
4725 /* 115 */ {"var115", "undefined"},
4726 /* 116 */ {"var116", "undefined"},
4727 /* 117 */ {"var117", "undefined"},
4728 /* 118 */ {"var118", "undefined"},
4729 /* 119 */ {"var119", "undefined"},
4730 /* 120 */ {"var120", "undefined"},
4731 /* 121 */ {"var121", "undefined"},
4732 /* 122 */ {"var122", "undefined"},
4733 /* 123 */ {"var123", "undefined"},
4734 /* 124 */ {"var124", "undefined"},
4735 /* 125 */ {"var125", "undefined"},
4736 /* 126 */ {"var126", "undefined"},
4737 /* 127 */ {"var127", "undefined"},
4738 /* 128 */ {"var128", "undefined"},
4739 /* 129 */ {"Z", "Geopotential (at the surface=orography) m**2 s**-2"},
4740 /* 130 */ {"T", "Temperature K"},
4741 /* 131 */ {"U", "U-velocity m s**-1"},
4742 /* 132 */ {"V", "V-velocity m s**-1"},
4743 /* 133 */ {"Q", "Specific humidity kg kg**-1"},
4744 /* 134 */ {"SP", "Surface pressure Pa"},
4745 /* 135 */ {"var135", "undefined"},
4746 /* 136 */ {"var136", "undefined"},
4747 /* 137 */ {"TCWV", "Total column water vapour kg m**-2"},
4748 /* 138 */ {"VO", "Vorticity (relative) s**-1"},
4749 /* 139 */ {"var139", "undefined"},
4750 /* 140 */ {"var140", "undefined"},
4751 /* 141 */ {"SD", "Snow depth m (of water equivalent)"},
4752 /* 142 */ {"LSP", "Large scale precipitation* m"},
4753 /* 143 */ {"CP", "Convective precipitation* m"},
4754 /* 144 */ {"SF", "Snow fall m(of water equivalent)"},
4755 /* 145 */ {"var145", "undefined"},
4756 /* 146 */ {"SSHF", "Surface sensible heat flux W m**-2 s"},
4757 /* 147 */ {"SLHF", "Surface latent heat flux W m**-2 s"},
4758 /* 148 */ {"var148", "undefined"},
4759 /* 149 */ {"TSW", "Total soil wetness m"},
4760 /* 150 */ {"var150", "undefined"},
4761 /* 151 */ {"MSL", "Mean sea level pressure Pa"},
4762 /* 152 */ {"var152", "undefined"},
4763 /* 153 */ {"var153", "undefined"},
4764 /* 154 */ {"var154", "undefined"},
4765 /* 155 */ {"D", "Divergence s**-1"},
4766 /* 156 */ {"var156", "undefined"},
4767 /* 157 */ {"var157", "undefined"},
4768 /* 158 */ {"var158", "undefined"},
4769 /* 159 */ {"var159", "undefined"},
4770 /* 160 */ {"var160", "undefined"},
4771 /* 161 */ {"var161", "undefined"},
4772 /* 162 */ {"var162", "undefined"},
4773 /* 163 */ {"var163", "undefined"},
4774 /* 164 */ {"TCC", "Total cloud cover (0 - 1)"},
4775 /* 165 */ {"10U", "10 metre u wind component m s**-1"},
4776 /* 166 */ {"10V", "10 metre v wind component m s**-1"},
4777 /* 167 */ {"2T", "2 metre temperature K"},
4778 /* 168 */ {"2D", "2 metre dewpoint temperature K"},
4779 /* 169 */ {"var169", "undefined"},
4780 /* 170 */ {"var170", "undefined"},
4781 /* 171 */ {"var171", "undefined"},
4782 /* 172 */ {"LSM", "Land/sea mask (0"},
4783 /* 173 */ {"var173", "undefined"},
4784 /* 174 */ {"var174", "undefined"},
4785 /* 175 */ {"var175", "undefined"},
4786 /* 176 */ {"SSR", "Surface solar radiation (net) J m**-2 s"},
4787 /* 177 */ {"STR", "Surface thermal radiation (net) J m**-2 s"},
4788 /* 178 */ {"TSR", "Top solar radiation (net) J m**-2 s"},
4789 /* 179 */ {"TTR", "Top thermal radiation (net) J m**-2 s"},
4790 /* 180 */ {"EWSS", "East/West surface stress N m**-2 s"},
4791 /* 181 */ {"NSSS", "North/South surface stress N m**-2 s"},
4792 /* 182 */ {"E", "Evaporation (surface) m (of water)"},
4793 /* 183 */ {"var183", "undefined"},
4794 /* 184 */ {"var184", "undefined"},
4795 /* 185 */ {"var185", "undefined"},
4796 /* 186 */ {"var186", "undefined"},
4797 /* 187 */ {"var187", "undefined"},
4798 /* 188 */ {"var188", "undefined"},
4799 /* 189 */ {"var189", "undefined"},
4800 /* 190 */ {"var190", "undefined"},
4801 /* 191 */ {"var191", "undefined"},
4802 /* 192 */ {"var192", "undefined"},
4803 /* 193 */ {"var193", "undefined"},
4804 /* 194 */ {"var194", "undefined"},
4805 /* 195 */ {"var195", "undefined"},
4806 /* 196 */ {"var196", "undefined"},
4807 /* 197 */ {"var197", "undefined"},
4808 /* 198 */ {"var198", "undefined"},
4809 /* 199 */ {"var199", "undefined"},
4810 /* 200 */ {"var200", "undefined"},
4811 /* 201 */ {"var201", "undefined"},
4812 /* 202 */ {"var202", "undefined"},
4813 /* 203 */ {"var203", "undefined"},
4814 /* 204 */ {"var204", "undefined"},
4815 /* 205 */ {"RO", "Runoff (total) m"},
4816 /* 206 */ {"var206", "undefined"},
4817 /* 207 */ {"var207", "undefined"},
4818 /* 208 */ {"var208", "undefined"},
4819 /* 209 */ {"var209", "undefined"},
4820 /* 210 */ {"var210", "undefined"},
4821 /* 211 */ {"var211", "undefined"},
4822 /* 212 */ {"var212", "undefined"},
4823 /* 213 */ {"var213", "undefined"},
4824 /* 214 */ {"var214", "undefined"},
4825 /* 215 */ {"var215", "undefined"},
4826 /* 216 */ {"var216", "undefined"},
4827 /* 217 */ {"var217", "undefined"},
4828 /* 218 */ {"var218", "undefined"},
4829 /* 219 */ {"var219", "undefined"},
4830 /* 220 */ {"var220", "undefined"},
4831 /* 221 */ {"var221", "undefined"},
4832 /* 222 */ {"var222", "undefined"},
4833 /* 223 */ {"var223", "undefined"},
4834 /* 224 */ {"var224", "undefined"},
4835 /* 225 */ {"var225", "undefined"},
4836 /* 226 */ {"var226", "undefined"},
4837 /* 227 */ {"var227", "undefined"},
4838 /* 228 */ {"var228", "undefined"},
4839 /* 229 */ {"var229", "undefined"},
4840 /* 230 */ {"var230", "undefined"},
4841 /* 231 */ {"var231", "undefined"},
4842 /* 232 */ {"var232", "undefined"},
4843 /* 233 */ {"var233", "undefined"},
4844 /* 234 */ {"var234", "undefined"},
4845 /* 235 */ {"var235", "undefined"},
4846 /* 236 */ {"var236", "undefined"},
4847 /* 237 */ {"var237", "undefined"},
4848 /* 238 */ {"var238", "undefined"},
4849 /* 239 */ {"var239", "undefined"},
4850 /* 240 */ {"var240", "undefined"},
4851 /* 241 */ {"var241", "undefined"},
4852 /* 242 */ {"var242", "undefined"},
4853 /* 243 */ {"var243", "undefined"},
4854 /* 244 */ {"var244", "undefined"},
4855 /* 245 */ {"var245", "undefined"},
4856 /* 246 */ {"var246", "undefined"},
4857 /* 247 */ {"var247", "undefined"},
4858 /* 248 */ {"var248", "undefined"},
4859 /* 249 */ {"var249", "undefined"},
4860 /* 250 */ {"var250", "undefined"},
4861 /* 251 */ {"var251", "undefined"},
4862 /* 252 */ {"var252", "undefined"},
4863 /* 253 */ {"var253", "undefined"},
4864 /* 254 */ {"var254", "undefined"},
4865 /* 255 */ {"var255", "undefined"},
4866 };
4867
4868 /* parameter table for ocean modeling branch (OMB) of NCEP */
4869 /* center = 7, subcenter = EMC, parameter table = 128 */
4870
4871 struct ParmTable parm_table_omb[256] = {
4872 {"var0", "Reserved"},
4873 {"var1", "Reserved"},
4874 {"GHz6", "6.6 GHz - K"},
4875 {"GHz10", "10.7 GHz - K"},
4876 {"GHz18", "18.0 GHz - K"},
4877 {"GHz19V", "SSMI 19 GHz, Vertical Polarization - K"},
4878 {"GHz19H", "SSMI 19 GHz, Horizontal Polarization - K"},
4879 {"GHz21", "21.0 GHz - K"},
4880 {"GHz22V", "SSMI 22 GHz, Vertical Polarization - K"},
4881 {"GHz37V", "SSMI 37 GHz, Vertical Polarization - K"},
4882 {"GHz37H", "SSMI 37 GHz, Horizontal Polarization - K"},
4883 {"MSU1", "MSU Ch 1 - 50.30 GHz - K"},
4884 {"MSU2", "MSU Ch 2 - 53.74 GHz - K"},
4885 {"MSU3", "MSU Ch 3 - 54.96 GHz - K"},
4886 {"MSU4", "MSU Ch 4 - 57.95 GHz - K"},
4887 {"GHz85V", "SSMI 85 GHz, Vertical Polarization - K"},
4888 {"GHz85H", "SSMI 85 GHz, Horizontal Polarization - K"},
4889 {"GHz91", "91.65 GHz - K"},
4890 {"GHz150", "150 GHz - K"},
4891 {"GHz183pm7", "183 +- 7 GHz - K"},
4892 {"GHz183pm3", "183 +- 3 GHz - K"},
4893 {"GHz183pm1", "183 +- 1 GHz - K"},
4894 {"SSMT1C1", "SSM/T1 - ch 1 - K"},
4895 {"SSMT1C2", "SSM/T1 - ch 2 - K"},
4896 {"SSMT1C3", "SSM/T1 - ch 3 - K"},
4897 {"SSMT1C4", "SSM/T1 - ch 4 - K"},
4898 {"SSMT1C5", "SSM/T1 - ch 5 - K"},
4899 {"SSMT1C6", "SSM/T1 - ch 6 - K"},
4900 {"SSMT1C7", "SSM/T1 - ch 7 - K"},
4901 {"var29", "Reserved"},
4902 {"var30", "Reserved"},
4903 {"var31", "Reserved"},
4904 {"var32", "Reserved"},
4905 {"var33", "Reserved"},
4906 {"var34", "Reserved"},
4907 {"var35", "Reserved"},
4908 {"var36", "Reserved"},
4909 {"var37", "Reserved"},
4910 {"var38", "Reserved"},
4911 {"var39", "Reserved"},
4912 {"var40", "Reserved"},
4913 {"var41", "Reserved"},
4914 {"var42", "Reserved"},
4915 {"var43", "Reserved"},
4916 {"var44", "Reserved"},
4917 {"var45", "Reserved"},
4918 {"var46", "Reserved"},
4919 {"var47", "Reserved"},
4920 {"var48", "Reserved"},
4921 {"var49", "Reserved"},
4922 {"var50", "Reserved"},
4923 {"var51", "Reserved"},
4924 {"var52", "Reserved"},
4925 {"var53", "Reserved"},
4926 {"var54", "Reserved"},
4927 {"var55", "Reserved"},
4928 {"var56", "Reserved"},
4929 {"var57", "Reserved"},
4930 {"var58", "Reserved"},
4931 {"var59", "Reserved"},
4932 {"MI14.95", "HIRS/2 ch 1 - 14.95 micron - K"},
4933 {"MI14.71", "HIRS/2, GOES 14.71 micron - K"},
4934 {"MI14.49", "HIRS/2 ch 3 - 14.49 micron - K"},
4935 {"MI14.37", "GOES I-M - 14.37 micron - K"},
4936 {"MI14.22", "HIRS/2 ch 4 - 14.22 micron - K"},
4937 {"MI14.06", "GOES I-M - 14.06 micron - K"},
4938 {"MI13.97", "HIRS/2 ch 5 - 13.97 micron - K"},
4939 {"MI13.64", "HIRS/2, GOES 13.64 micron - K"},
4940 {"MI13.37", "GOES I-M - 13.37 micron - K"},
4941 {"MI13.35", "HIRS/2 ch 7 - 13.35 micron - K"},
4942 {"MI12.66", "GOES I-M - 12.66 micron - K"},
4943 {"MI12.02", "GOES I-M - 12.02 micron - K"},
4944 {"MI12.00", "AVHRR ch 5 - 12.0 micron - K"},
4945 {"MI11.11", "HIRS/2 ch 8 - 11.11 micron - K"},
4946 {"MI11.03", "GOES I-M - 11.03 micron - K"},
4947 {"MI10.80", "AVHRR ch 4 - 10.8 micron - K"},
4948 {"MI9.71", "HIRS/2, GOES - 9.71 micron - K"},
4949 {"var77", "Reserved"},
4950 {"var78", "Reserved"},
4951 {"var79", "Reserved"},
4952 {"MI8.16", "HIRS/2 ch 10 - 8.16 micron - K"},
4953 {"MI7.43", "GOES I-M - 7.43 micron - K"},
4954 {"MI7.33", "HIRS/2 ch 11 - 7.33 micron - K"},
4955 {"MI7.02", "GOES I-M - 7.02 micron - K"},
4956 {"MI6.72", "HIRS/2 ch 12 - 6.72 micron - K"},
4957 {"MI6.51", "GOES I-M - 6.51 micron - K"},
4958 {"MI4.57", "HIRS/2, GOES - 4.57 micron - K"},
4959 {"MI4.52", "HIRS/2, GOES - 4.52 micron - K"},
4960 {"MI4.46", "HIRS/2 ch 15 - 4.46 micron - K"},
4961 {"MI4.45", "GOES I-M - 4.45 micron - K"},
4962 {"MI4.40", "HIRS/2 ch 16 - 4.40 micron - K"},
4963 {"MI4.24", "HIRS/2 ch 17 - 4.24 micron - K"},
4964 {"MI4.13", "GOES I-M - 4.13 micron - K"},
4965 {"MI4.00", "HIRS/2 ch 18 - 4.00 micron - K"},
4966 {"MI8.16", "GOES I-M - 3.98 micron - K"},
4967 {"MI8.16", "HIRS/2 Window - 3.76 micron - K"},
4968 {"MI8.16", "AVHRR, GOES - 3.74 micron - K"},
4969 {"var97", "Reserved"},
4970 {"var98", "Reserved"},
4971 {"var99", "Reserved"},
4972 {"MI0.91", "AVHRR ch 2 - 0.91 micron - K"},
4973 {"MI0.696", "GOES I-M - 0.696 micron - K"},
4974 {"MI0.69", "HIRS/2 Vis - 0.69 micron - K"},
4975 {"MI0.63", "AVHRR ch 1 - 0.63 micron - K"},
4976 {"var104", "Reserved"},
4977 {"var105", "Reserved"},
4978 {"var106", "Reserved"},
4979 {"var107", "Reserved"},
4980 {"var108", "Reserved"},
4981 {"var109", "Reserved"},
4982 {"var110", "Reserved"},
4983 {"var111", "Reserved"},
4984 {"var112", "Reserved"},
4985 {"var113", "Reserved"},
4986 {"var114", "Reserved"},
4987 {"var115", "Reserved"},
4988 {"var116", "Reserved"},
4989 {"var117", "Reserved"},
4990 {"var118", "Reserved"},
4991 {"var119", "Reserved"},
4992 {"var120", "Reserved"},
4993 {"var121", "Reserved"},
4994 {"var122", "Reserved"},
4995 {"var123", "Reserved"},
4996 {"var124", "Reserved"},
4997 {"var125", "Reserved"},
4998 {"var126", "Reserved"},
4999 {"var127", "Reserved"},
5000 {"AVDEPTH", "Ocean depth - mean - m"},
5001 {"DEPTH", "Ocean depth - instantaneous - m"},
5002 {"ELEV", "Ocean surface elevation relative to geoid - m"},
5003 {"MXEL24", "Max ocean surface elevation in last 24 hours - m"},
5004 {"MNEL24", "Min ocean surface elevation in last 24 hours - m"},
5005 {"var133", "Reserved"},
5006 {"var134", "Reserved"},
5007 {"O2", "Oxygen -Mol/kg"},
5008 {"PO4", "PO4 - Mol/kg"},
5009 {"NO3", "NO3 - Mol/kg"},
5010 {"SiO4", "SiO4 - Mol/kg"},
5011 {"CO2aq", "CO2 (aq) - Mol/kg"},
5012 {"HCO3", "HCO3 - - Mol/kg"},
5013 {"CO3", "CO3 -- - Mol/kg"},
5014 {"TCO2", "TCO2 - Mol/kg"},
5015 {"TALK", "TALK - Mol/kg"},
5016 {"var144", "Reserved"},
5017 {"var145", "Reserved"},
5018 {"S11", "S11 - 1,1 component of ice stress tensor"},
5019 {"S12", "S12 - 1,2 component of ice stress tensor"},
5020 {"S22", "S22 - 2,2 component of ice stress tensor"},
5021 {"INV1", "T1 - First invariant of stress tensor"},
5022 {"INV2", "T2 - Second invariant of stress tensor"},
5023 {"var151", "Reserved"},
5024 {"var152", "Reserved"},
5025 {"var153", "Reserved"},
5026 {"var154", "Reserved"},
5027 {"WVRGH", "Wave Roughness"},
5028 {"WVSTRS", "Wave Stresses"},
5029 {"WHITE", "Whitecap coverage"},
5030 {"SWDIRWID", "Swell direction width"},
5031 {"SWFREWID", "Swell frequency width"},
5032 {"WVAGE", "Wave age"},
5033 {"PWVAGE", "Physical Wave age"},
5034 {"var162", "Reserved"},
5035 {"var163", "Reserved"},
5036 {"var164", "Reserved"},
5037 {"LTURB", "Master length scale (turbulence) - m"},
5038 {"var166", "Reserved"},
5039 {"var167", "Reserved"},
5040 {"var168", "Reserved"},
5041 {"var169", "Reserved"},
5042 {"AIHFLX", "Net Air-Ice heat flux - W/m^2"},
5043 {"AOHFLX", "Net Air-Ocean heat flux - W/m^2"},
5044 {"IOHFLX", "Net Ice-Ocean heat flux - W/m^2"},
5045 {"IOSFLX", "Net Ice-Ocean salt flux - kg/s"},
5046 {"var174", "Reserved"},
5047 {"OMLT", "Ocean Mixed Layer Temperature - K"},
5048 {"OMLS", "Ocean Mixed Layer Salinity - kg/kg"},
5049 {"var177", "Reserved"},
5050 {"var178", "Reserved"},
5051 {"var179", "Reserved"},
5052 {"var180", "Reserved"},
5053 {"var181", "Reserved"},
5054 {"var182", "Reserved"},
5055 {"var183", "Reserved"},
5056 {"var184", "Reserved"},
5057 {"var185", "Reserved"},
5058 {"var186", "Reserved"},
5059 {"var187", "Reserved"},
5060 {"var188", "Reserved"},
5061 {"var189", "Reserved"},
5062 {"var190", "Reserved"},
5063 {"var191", "Reserved"},
5064 {"var192", "Reserved"},
5065 {"var193", "Reserved"},
5066 {"var194", "Reserved"},
5067 {"var195", "Reserved"},
5068 {"var196", "Reserved"},
5069 {"var197", "Reserved"},
5070 {"var198", "Reserved"},
5071 {"var199", "Reserved"},
5072 {"var200", "Reserved"},
5073 {"var201", "Reserved"},
5074 {"var202", "Reserved"},
5075 {"var203", "Reserved"},
5076 {"var204", "Reserved"},
5077 {"var205", "Reserved"},
5078 {"var206", "Reserved"},
5079 {"var207", "Reserved"},
5080 {"var208", "Reserved"},
5081 {"var209", "Reserved"},
5082 {"var210", "Reserved"},
5083 {"var211", "Reserved"},
5084 {"var212", "Reserved"},
5085 {"var213", "Reserved"},
5086 {"var214", "Reserved"},
5087 {"var215", "Reserved"},
5088 {"var216", "Reserved"},
5089 {"var217", "Reserved"},
5090 {"var218", "Reserved"},
5091 {"var219", "Reserved"},
5092 {"var220", "Reserved"},
5093 {"var221", "Reserved"},
5094 {"var222", "Reserved"},
5095 {"var223", "Reserved"},
5096 {"var224", "Reserved"},
5097 {"var225", "Reserved"},
5098 {"var226", "Reserved"},
5099 {"var227", "Reserved"},
5100 {"var228", "Reserved"},
5101 {"var229", "Reserved"},
5102 {"var230", "Reserved"},
5103 {"var231", "Reserved"},
5104 {"var232", "Reserved"},
5105 {"var233", "Reserved"},
5106 {"var234", "Reserved"},
5107 {"var235", "Reserved"},
5108 {"var236", "Reserved"},
5109 {"var237", "Reserved"},
5110 {"var238", "Reserved"},
5111 {"var239", "Reserved"},
5112 {"var240", "Reserved"},
5113 {"var241", "Reserved"},
5114 {"var242", "Reserved"},
5115 {"var243", "Reserved"},
5116 {"var244", "Reserved"},
5117 {"var245", "Reserved"},
5118 {"var246", "Reserved"},
5119 {"var247", "Reserved"},
5120 {"var248", "Reserved"},
5121 {"var249", "Reserved"},
5122 {"var250", "Reserved"},
5123 {"var251", "Reserved"},
5124 {"var252", "Reserved"},
5125 {"var253", "Reserved"},
5126 {"var254", "Reserved"},
5127 {"var255", "Reserved"}
5128 };
5129
5130
5131 /*
5132 * EC_ext v1.0 wesley ebisuzaki
5133 *
5134 * prints something readable from the EC stream parameter
5135 *
5136 * prefix and suffix are only printed if EC_ext has text
5137 */
5138
EC_ext(unsigned char * pds,char * prefix,char * suffix)5139 void EC_ext(unsigned char *pds, char *prefix, char *suffix) {
5140
5141 /* int i;
5142 printf("\n");
5143 for (i=0; i < PDS_LEN(pds); i++) {
5144 printf("%x ",pds[i]);
5145 }
5146 */
5147 if (PDS_Center(pds) == ECMWF && PDS_LEN(pds) >= 45) {
5148
5149 switch(PDS_EcStream(pds)) {
5150 case 1043:
5151 printf("%smon mean%s", prefix, suffix);
5152 break;
5153 case 1070:
5154 printf("%smon (co)var%s", prefix, suffix);
5155 break;
5156 case 1071:
5157 printf("%smon mean from daily%s", prefix, suffix);
5158 break;
5159 default:
5160 printf("%sECMWF stream?%s", prefix, suffix);
5161 break;
5162 }
5163 }
5164 }
5165
5166
5167 /*
5168 * get grid size from GDS
5169 *
5170 */
5171
GDS_grid(unsigned char * gds,int * nx,int * ny,long int * nxny)5172 int GDS_grid(unsigned char *gds, int *nx, int *ny, long int *nxny) {
5173
5174 int i, ix, iy, pl;
5175 long int isum;
5176
5177 *nx = ix = GDS_LatLon_nx(gds);
5178 *ny = iy = GDS_LatLon_ny(gds);
5179 *nxny = ix * iy;
5180
5181 /* thin grid */
5182
5183 if (GDS_Gaussian(gds) || GDS_LatLon(gds)) {
5184 if (ix == 65535) {
5185 *nx = -1;
5186 /* reduced grid */
5187 isum = 0;
5188 pl = GDS_PL(gds);
5189 for (i = 0; i < iy; i++) {
5190 isum += gds[pl+i*2]*256 + gds[pl+i*2+1];
5191 }
5192 *nxny = isum;
5193 }
5194 return 0;
5195 }
5196 return 0;
5197 }
5198
5199 #define NCOL 15
GDS_prt_thin_lon(unsigned char * gds)5200 void GDS_prt_thin_lon(unsigned char *gds) {
5201 int iy, i, col, pl;
5202
5203 iy = GDS_LatLon_ny(gds);
5204 iy = (iy + 1) / 2;
5205 iy = GDS_LatLon_ny(gds);
5206
5207 if ((pl = GDS_PL(gds)) == -1) {
5208 fprintf(stderr,"\nprogram error: GDS_prt_thin\n");
5209 return;
5210 }
5211 for (col = i = 0; i < iy; i++) {
5212 if (col == 0) printf(" ");
5213 printf("%5d", (gds[pl+i*2] << 8) + gds[pl+i*2+1]);
5214 col++;
5215 if (col == NCOL) {
5216 col = 0;
5217 printf("\n");
5218 }
5219 }
5220 if (col != 0) printf("\n");
5221 }
5222
5223 #define START -1
5224
5225 static int user_center = 0, user_subcenter = 0, user_ptable = 0;
5226 static enum {filled, not_found, not_checked, no_file, init} status = init;
5227
5228 struct ParmTable parm_table_user[256];
5229
5230 /*
5231 * sets up user parameter table
5232 */
5233
setup_user_table(int center,int subcenter,int ptable)5234 int setup_user_table(int center, int subcenter, int ptable) {
5235
5236 int i, j, c0, c1, c2;
5237 FILE *input;
5238 char *filename, line[300];
5239
5240 if (status == init) {
5241 for (i = 0; i < 256; i++) {
5242 parm_table_user[i].name = parm_table_user[i].comment = NULL;
5243 }
5244 status = not_checked;
5245 }
5246
5247 if (status == no_file) return 0;
5248
5249 if ((user_center == -1 || center == user_center) &&
5250 (user_subcenter == -1 || subcenter == user_subcenter) &&
5251 (user_ptable == -1 || ptable == user_ptable)) {
5252
5253 if (status == filled) return 1;
5254 if (status == not_found) return 0;
5255 }
5256
5257 /* open gribtab file */
5258
5259 filename = getenv("GRIBTAB");
5260 if (filename == NULL) filename = getenv("gribtab");
5261 if (filename == NULL) filename = "gribtab";
5262
5263 if ((input = fopen(filename,"r")) == NULL) {
5264 status = no_file;
5265 return 0;
5266 }
5267
5268 user_center = center;
5269 user_subcenter = subcenter;
5270 user_ptable = ptable;
5271
5272 /* scan for center & subcenter and ptable */
5273 for (;;) {
5274 if (fgets(line, 299, input) == NULL) {
5275 status = not_found;
5276 return 0;
5277 }
5278 if (atoi(line) != START) continue;
5279 i = sscanf(line,"%d:%d:%d:%d", &j, ¢er, &subcenter, &ptable);
5280 if (i != 4) {
5281 fprintf(stderr,"illegal gribtab center/subcenter/ptable line: %s\n", line);
5282 continue;
5283 }
5284 if ((center == -1 || center == user_center) &&
5285 (subcenter == -1 || subcenter == user_subcenter) &&
5286 (ptable == -1 || ptable == user_ptable)) break;
5287 }
5288
5289 user_center = center;
5290 user_subcenter = subcenter;
5291 user_ptable = ptable;
5292
5293 /* free any used memory */
5294 if (parm_table_user[i].name != NULL) {
5295 for (i = 0; i < 256; i++) {
5296 free(parm_table_user[i].name);
5297 free(parm_table_user[i].comment);
5298 }
5299 }
5300
5301 /* read definitions */
5302
5303 for (;;) {
5304 if (fgets(line, 299, input) == NULL) break;
5305 if ((i = atoi(line)) == START) break;
5306 line[299] = 0;
5307
5308 /* find the colons and end-of-line */
5309 for (c0 = 0; line[c0] != ':' && line[c0] != 0; c0++) ;
5310 /* skip blank lines */
5311 if (line[c0] == 0) continue;
5312
5313 for (c1 = c0 + 1; line[c1] != ':' && line[c1] != 0; c1++) ;
5314 c2 = strlen(line);
5315 if (line[c2-1] == '\n') line[--c2] = '\0';
5316 if (c2 <= c1) {
5317 fprintf(stderr,"illegal gribtab line:%s\n", line);
5318 continue;
5319 }
5320 line[c0] = 0;
5321 line[c1] = 0;
5322
5323 parm_table_user[i].name = (char *) malloc(c1 - c0);
5324 parm_table_user[i].comment = (char *) malloc(c2 - c1);
5325 strcpy(parm_table_user[i].name, line+c0+1);
5326 strcpy(parm_table_user[i].comment, line+c1+1);
5327 }
5328
5329 /* now to fill in undefined blanks */
5330 for (i = 0; i < 255; i++) {
5331 if (parm_table_user[i].name == NULL) {
5332 parm_table_user[i].name = (char *) malloc(7);
5333 sprintf(parm_table_user[i].name, "var%d", i);
5334 parm_table_user[i].comment = (char *) malloc(strlen("undefined")+1);
5335 strcpy(parm_table_user[i].comment, "undefined");
5336 }
5337 }
5338 status = filled;
5339 return 1;
5340 }
5341
5342 /*
5343 * PDS_date.c v1.2 wesley ebisuzaki
5344 *
5345 * prints a string with a date code
5346 *
5347 * PDS_date(pds,option, v_time)
5348 * options=0 .. 2 digit year
5349 * options=1 .. 4 digit year
5350 *
5351 * v_time=0 .. initial time
5352 * v_time=1 .. verification time
5353 *
5354 * assumption: P1 and P2 are unsigned integers (not clear from doc)
5355 *
5356 * v1.2 years that are multiple of 400 are leap years, not 500
5357 * v1.2.1 make the change to the source code for v1.2
5358 * v1.2.2 add 3/6/12 hour forecast time units
5359 */
5360
5361 static int msg_count = 0;
5362
PDS_date(unsigned char * pds,int option,int v_time)5363 int PDS_date(unsigned char *pds, int option, int v_time) {
5364
5365 int year, month, day, hour;
5366
5367 if (v_time == 0) {
5368 year = PDS_Year4(pds);
5369 month = PDS_Month(pds);
5370 day = PDS_Day(pds);
5371 hour = PDS_Hour(pds);
5372 }
5373 else {
5374 if (verf_time(pds, &year, &month, &day, &hour) != 0) {
5375 if (msg_count++ < 5) fprintf(stderr, "PDS_date: problem\n");
5376 }
5377 }
5378
5379 switch(option) {
5380 case 0:
5381 printf("%2.2d%2.2d%2.2d%2.2d", year % 100, month, day, hour);
5382 break;
5383 case 1:
5384 printf("%4.4d%2.2d%2.2d%2.2d", year, month, day, hour);
5385 break;
5386 default:
5387 fprintf(stderr,"missing code\n");
5388 exit(8);
5389 }
5390 return 0;
5391 }
5392
5393 #define FEB29 (31+29)
5394 static int monthjday[12] = {
5395 0,31,59,90,120,151,181,212,243,273,304,334};
5396
leap(int year)5397 static int leap(int year) {
5398 if (year % 4 != 0) return 0;
5399 if (year % 100 != 0) return 1;
5400 return (year % 400 == 0);
5401 }
5402
5403
add_time(int * year,int * month,int * day,int * hour,int dtime,int unit)5404 int add_time(int *year, int *month, int *day, int *hour, int dtime, int unit) {
5405 int y, m, d, h, jday, i;
5406
5407 y = *year;
5408 m = *month;
5409 d = *day;
5410 h = *hour;
5411
5412 if (unit == YEAR) {
5413 *year = y + dtime;
5414 return 0;
5415 }
5416 if (unit == DECADE) {
5417 *year = y + (10 * dtime);
5418 return 0;
5419 }
5420 if (unit == CENTURY) {
5421 *year = y + (100 * dtime);
5422 return 0;
5423 }
5424 if (unit == NORMAL) {
5425 *year = y + (30 * dtime);
5426 return 0;
5427 }
5428 if (unit == MONTH) {
5429 dtime += (m - 1);
5430 *year = y + (dtime / 12);
5431 *month = 1 + (dtime % 12);
5432 return 0;
5433 }
5434
5435 if (unit == SECOND) {
5436 dtime /= 60;
5437 unit = MINUTE;
5438 }
5439 if (unit == MINUTE) {
5440 dtime /= 60;
5441 unit = HOUR;
5442 }
5443
5444 if (unit == HOURS3) {
5445 dtime *= 3;
5446 unit = HOUR;
5447 }
5448 else if (unit == HOURS6) {
5449 dtime *= 6;
5450 unit = HOUR;
5451 }
5452 else if (unit == HOURS12) {
5453 dtime *= 12;
5454 unit = HOUR;
5455 }
5456
5457 if (unit == HOUR) {
5458 dtime += h;
5459 *hour = dtime % 24;
5460 dtime = dtime / 24;
5461 unit = DAY;
5462 }
5463
5464 /* this is the hard part */
5465
5466 if (unit == DAY) {
5467 /* set m and day to Jan 0, and readjust dtime */
5468 jday = d + monthjday[m-1];
5469 if (leap(y) && m > 2) jday++;
5470 dtime += jday;
5471
5472 /* 4 year chuncks */
5473 i = dtime / (4 * 365 + 1);
5474 if (i) {
5475 /* assume century years are leap */
5476 y = y + i*4;
5477 dtime -= i*(4 * 365 + 1);
5478 /* see if we have gone past feb 28, 1900, 2000, etc */
5479 if ((y - 1) / 100 != (*year-1) / 100) {
5480 /* crossed the feb 28, xx00 */
5481 /* correct for only one century mark */
5482 if ((y / 100) % 4 != 0) dtime++;
5483 }
5484 }
5485
5486 /* one year chunks */
5487 while (dtime > 365 + leap(y)) {
5488 dtime -= (365 + leap(y));
5489 y++;
5490 }
5491
5492 /* calculate the month and day */
5493
5494 if (leap(y) && dtime == FEB29) {
5495 m = 2;
5496 d = 29;
5497 }
5498 else {
5499 if (leap(y) && dtime > FEB29) dtime--;
5500 for (i = 11; monthjday[i] >= dtime; --i);
5501 m = i + 1;
5502 d = dtime - monthjday[i];
5503 }
5504 *year = y;
5505 *month = m;
5506 *day = d;
5507 return 0;
5508 }
5509 fprintf(stderr,"add_time: undefined time unit %d\n", unit);
5510 return 1;
5511 }
5512
5513
5514 /*
5515 * verf_time:
5516 *
5517 * this routine returns the "verification" time
5518 * should have behavior similar to gribmap
5519 *
5520 */
5521
verf_time(unsigned char * pds,int * year,int * month,int * day,int * hour)5522 int verf_time(unsigned char *pds, int *year, int *month, int *day, int *hour) {
5523 int tr, dtime, unit;
5524
5525 *year = PDS_Year4(pds);
5526 *month = PDS_Month(pds);
5527 *day = PDS_Day(pds);
5528 *hour = PDS_Hour(pds);
5529
5530 /* find time increment */
5531
5532 dtime = PDS_P1(pds);
5533 tr = PDS_TimeRange(pds);
5534 unit = PDS_ForecastTimeUnit(pds);
5535
5536 if (tr == 10) dtime = PDS_P1(pds) * 256 + PDS_P2(pds);
5537 if (tr > 1 && tr < 6 ) dtime = PDS_P2(pds);
5538
5539 if (dtime == 0) return 0;
5540
5541 return add_time(year, month, day, hour, dtime, unit);
5542 }
5543
5544
5545 /*
5546 * ensemble.c v0.1 wesley ebisuzaki
5547 *
5548 * prints ensemble meta-data
5549 *
5550 * only for NCEP and ECMWF
5551 *
5552 * output format:
5553 *
5554 * ECMWF
5555 * ens=n/N: n: 0=ctl, +/-ve
5556 * N: total number of members
5557 *
5558 * NCEP
5559 * ens=n/type: n: 0=ctl, +/-ve, CLUST, PROD/
5560 * type: Mn, WtdMn, SDev, NSDev
5561 */
5562
ensemble(unsigned char * pds,int mode)5563 void ensemble(unsigned char *pds, int mode) {
5564
5565 int pdslen;
5566 unsigned char ctmp;
5567 char char_end;
5568
5569 pdslen = PDS_LEN(pds);
5570 char_end = mode == 2 ? ' ' : ':';
5571
5572 if (PDS_Center(pds) == ECMWF) {
5573 }
5574 else if (PDS_Center(pds) == NMC && pdslen >= 45 && pds[40] == 1) {
5575
5576 /* control run */
5577
5578 if (pds[41] == 1) {
5579 if (mode != 2) {
5580 printf("ens%c0:", pds[42] == 1 ? '+' : '-');
5581 }
5582 else {
5583 printf("%s-res_ens_control ", pds[42] == 1 ? "hi" : "low");
5584 }
5585 }
5586
5587 /* perturbation run */
5588
5589 else if (pds[41] == 2 || pds[41] == 3) {
5590 if (mode != 2) {
5591 printf("ens%c%d:", pds[41] == 3 ? '+' : '-', pds[42]);
5592 }
5593 else {
5594 printf("ens_perturbation=%c%d ",pds[41] == 3 ? '+' : '-',
5595 pds[42]);
5596 }
5597 }
5598
5599 /* ensemble mean */
5600
5601 else if (pds[41] == 5) {
5602 /* makes no sense to say "ensemble mean" for prob forecasts */
5603 if (PDS_PARAM(pds) != 191 && PDS_PARAM(pds) != 192) {
5604 if (mode != 2 || pdslen < 61) {
5605 printf("ens-mean%c", char_end);
5606 }
5607 else {
5608 printf("ensemble-mean(%d members) ",pds[60]);
5609 }
5610 }
5611 }
5612
5613 /* other case .. debug code */
5614
5615 else {
5616 printf("ens %d/%d/%d/%d:", pds[41],pds[42],pds[43],pds[44]);
5617 }
5618
5619 /* NCEP probability limits */
5620
5621 if ((PDS_PARAM(pds) == 191 || PDS_PARAM(pds) == 192) && pdslen >= 47) {
5622 ctmp = PDS_PARAM(pds);
5623 PDS_PARAM(pds) = pds[45];
5624 if (pds[46] == 1 && pdslen >= 51) {
5625 printf("prob(%s<%f)%c", k5toa(pds), ibm2flt(pds+47),char_end);
5626 }
5627 else if (pds[46] == 2 && pdslen >= 54) {
5628 printf("prob(%s>%f)%c", k5toa(pds), ibm2flt(pds+51), char_end);
5629 }
5630 else if (pds[46] == 3 && pdslen >= 54) {
5631 printf("prob(%f<%s<%f)%c", ibm2flt(pds+47), k5toa(pds),
5632 ibm2flt(pds+51), char_end);
5633 }
5634 PDS_PARAM(pds) = ctmp;
5635 }
5636
5637 }
5638 }
5639
5640 #ifndef HAVE_FSEEKO
5641
fseeko(FILE * stream,off_t offset,int whence)5642 int fseeko(FILE *stream, off_t offset, int whence) {
5643 fseek(stream, (long)offset, whence);
5644 }
5645
ftello(FILE * stream)5646 off_t ftello(FILE *stream) {
5647 return (off_t)ftell(stream);
5648 }
5649 #endif
5650
5651