source: trunk/SRC/ToBeReviewed/LECTURE/GRIB/read_grib_bds.pro @ 214

Last change on this file since 214 was 157, checked in by navarro, 18 years ago

header improvements + xxx doc

  • Property svn:keywords set to Id
File size: 2.5 KB
Line 
1;+
2; @file_comments
3;
4;
5; @categories
6;
7;
8; @param NUM
9;
10;
11; @param RECSTART
12;
13;
14; @param NI
15;
16;
17; @param NJ
18;
19;
20; @returns
21;
22;
23; @restrictions
24;
25;
26; @examples
27;
28;
29; @history
30;
31;
32; @version
33; $Id$
34;-
35FUNCTION read_grib_bds, num, recstart, ni, nj
36;
37;
38  compile_opt idl2, strictarrsubs
39;
40  offset = recstart+8
41  a = assoc(num, bytarr(1, /nozero), offset-1)
42  sizepds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])])
43  flag = binary(a[8])
44  gdsnotomitted = flag[0]
45  bmsnotomitted = flag[1]
46  ddd =  bit2int([binary(a[27]), binary(a[28])], /checkneg)
47;
48  offset = offset+sizepds
49;
50  IF gdsnotomitted THEN BEGIN
51    a = assoc(num, bytarr(1, /nozero), offset-1)
52    sizedds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])])
53    offset = offset+sizedds
54  ENDIF
55;
56  IF bmsnotomitted THEN BEGIN
57    a = assoc(num, bytarr(1, /nozero), offset-1)
58    sizebms = bit2int([binary(a[1]), binary(a[2]), binary(a[3])])
59    offset = offset+sizebms
60  ENDIF
61;
62  a = assoc(num, bytarr(1, /nozero), offset-1)
63;
64  sizebds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])])
65                                ;
66  flags = binary(a[4])
67; BIT VALUE MEANING
68; 1   0     Grid point data
69;     1     Spherical Harmonic Coefficients
70; 2   0     Simple packing
71;     1     Second order ("Complex") Packing
72; 3   0     Original data were floating point values
73;     1     Original data were integer values
74; 4   0     No additional flags at octet 14
75;     1     Octet 14 contains flag bits 5 - 12
76; 5         Reserved (set to 0)
77; 6   0     Single datum at each grid point
78;     1     Matrix of values at each grid point
79; 7   0     No secondary bit maps
80;     1     Secondary bit maps present
81; 8   0     Second order values have constant width
82;     1     Second order values have different widths
83; 9-12      Reserved (set to 0)
84;
85  eee = bit2int([binary(a[5]), binary(a[6])], /checkneg)
86;
87  aaa = bit2int(binary(a[7]), /checkneg)
88  bbb = bit2int([binary(a[8]), binary(a[9]), binary(a[10])])
89  IF aaa LT 0 THEN rrr = -2.^(-24) * bbb * 16.^(-aaa-64) $
90  ELSE rrr = 2.^(-24) * bbb * 16.^(aaa-64)
91;
92  nbits = (a[11])[0]
93  CASE 1 OF
94    flags[0] EQ 0 AND flags[1] EQ 0:BEGIN
95      CASE nbits OF
96        8 :a = assoc(num, bytarr(ni, nj, /nozero), offset-1+12)
97        16:a = assoc(num, uintarr(ni, nj, /nozero), offset-1+12)
98        32:a = assoc(num, ulonarr(ni, nj, /nozero), offset-1+12)
99        64:a = assoc(num, ulon64arr(ni, nj, /nozero), offset-1+12)
100        ELSE:
101      ENDCASE
102    END
103  ENDCASE
104
105  RETURN, (rrr+(a[0]*2.^(eee)))*10.^(-ddd)
106END
Note: See TracBrowser for help on using the repository browser.