A GUIDE TO THE CODE FORM FM 92IX Ext. GRIB Edition 1
(Technical Report No.17, Geneva, May 1994 (WMO TDNo.611)
TABLE OF CONTENTS
Introduction
GRIB Code Form
Section 0: The indicator section
Section 1: The product definition section
Section 2: Grid description section
Section 3: Bit map section
Section 4: Binary data section
Section 5: End section
The World Meteorological Organization (WMO) Commission for Basic Systems (CBS) Extraordinary Meeting Number VIII (1985) approved a general purpose, bitoriented data exchange format, designated FM 92VIII Ext. GRIB (GRIdded Binary). It is an efficient vehicle for transmitting large volumes of gridded data to automated centers over highspeed telecommunication lines using modern protocols. By packing information into the GRIB code, messages (or records  the terms are synonymous in this context) can be made more compact than character oriented bulletins, which will produce faster computertocomputer transmissions. GRIB can equally well serve as a data storage format, generating the same efficiencies relative to information storage and retrieval devices.
Changes and extensions to GRIB were approved at the regular meeting of the WMO/CBS in February 1988; additional changes were introduced at the CBS/WGDM/SubGroup on Data Representation (SGDR) meetings in May 1989 and in October 1990. The 1990 changes were of such structural magnitude as to require a new Edition of GRIB, Edition 1, which this document describes. The SubGroup made further augmentations and interpretations on Data Representation and Codes (SGDRC) in September 1993, with approval by the WGDM in February 1994. These changes did not result in a new Edition to GRIB, but did change some of the Tables, resulting a new Version number for them. This brings us now to Table Version 2. The changes from Version 1 were mainly additions of new parameters or more precise definition of existing ones.
It is not anticipated that there will be any largescale structural changes to GRIB for at least four to five years, or more. The SGDRC is undertaking a thorough review of the present and future requirements that GRIB is supposed to satisfy. The plan is to design a major revision of GRIB capable of accommodating these requirements and more, without "straining" the structure of the data representation form. Some things are getting a little strained even now. See below.
Note: the Edition number is placed in the same location, relative to the start of the GRIB message, for all Editions. Thus, decoding programs can detect which Edition was used to construct a particular GRIB message and behave accordingly. This is useful for archives of messages encoded in earlier Editions or during transition periods. Of course, this requires that data centers retain copies of older editions of the code, and older versions of the parameter tables.
Each GRIB record intended for either transmission or storage contains a single parameter with values located at an array of grid points, or represented as a set of spectral coefficients, for a single level (or layer), encoded as a continuous bit stream. Logical divisions of the record are designated as "sections", each of which provides control information and/or data. A GRIB record consists of six sections, two of which are optional:
(0) Indicator Section
(1) Product Definition Section (PDS)
(2) Grid Description Section (GDS)  optional
(3) Bit Map Section (BMS)  optional
(4) Binary Data Section (BDS)
(5) '7777' (ASCII Characters)
Although the Grid Description Section is indicated as optional, it is highly desirable that it be included in all messages. That way there will be no question about just what is the "correct" geographical grid for a particular field.
Most centers require bulletin headers to enable them to receive, identify, and switch messages. The standard WMO abbreviated heading for GRIB is described in Appendix A.
In this documentation, certain symbols are used to clarify the contents of octets (groups of eight consecutive binary bits). If unadorned letters are used, they are symbolic and their meanings are described in the text; a decimal number is simply printed as is; a character or string of characters is represented inside single quote marks. International Alphabet No. 5, which is identical in its essential elements to the U.S. National Standard 7bit ASCII, is used for character representation in the GRIB code.
Octets are numbered consecutively from the start of each section; bits within an octet are also numbered from left (the most significant bit) to right (the least significant bit). Thus an octet with bit 8 set to the value 1 would have the integer value 1; bit 7 set to one would have a value of 2, etc.
The numbering of Tables in the following text corresponds to the description of GRIB in the WMO Manual on Codes. Some additional tables not found in the WMO Manual are indicated by letters. These, generally, contain information unique to a particular processing center.
A caveat: The Official International Documentation for GRIB is the just referenced Manual on Codes. This document is, in part, intended to be a guide to the use of GRIB and may not include all of the features currently found in the Manual. The features described here are intended to be a completely consistent subset of the full WMO documentation; if there are any discrepancies the Manual on Codes is the final authority.
DATA PACKING METHODS
The code form represents numeric data as a series of binary digits (bits). Such data representation is independent of any particular machine representation; by convention data lengths are measured in octets. Data are coded as binary integers using the minimum number of bits required for the desired precision. Numeric values, with units as shown in Table 2, may first be scaled by a power of ten to achieve an appropriate decimal precision, a reference value is subtracted from them to reduce redundancy and eliminate negative values, and they may then be further scaled by a power of two to pack them into a preselected word length. The two scaling operations are independent; which, or both, are used in any given case depends upon choices made as to the method of packing. See below.
The representation of a single value is such that:
Y x 10^{D} = R + (X x 2^{E})
Where
Y = original or unpacked value; units as in Table 2;
D = decimal scale factor, to achieve desired precision
(sign bit, followed by a 15bit integer);
R = reference value (32 bits);
X = internal value (No. of bits varies for each record);
E = binary scale factor for variable bit word length packing
(sign bit, followed by a 15bit integer).
The reference value (R) is the minimum value of the (possibly) decimally scaled data that is being encoded.
R is placed in the Binary Data Section in four octets as a single precision floatingpoint number:
sAAAAAAA BBBBBBBB BBBBBBBB BBBBBBBB
where s = sign bit, encoded as 0 => positive, 1 => negative
A = 7bit binary integer, the characteristic
B = 24bit binary integer, the mantissa.
The appropriate formula to recover the value of R is:
R = (1)^{s} x 2^{(24)} x B x 16^{(A64)}
This formula is the standard IBM representation for a single precision (real) floating point number. (Consideration is being given to using the IEEE floating point representation in the future, in a later Edition of GRIB.)
If second order (or "complex") packing is used (see the description of that later on) the internal value, X, will be made up of two values, a "local minimum value", Xi, and a "second order packed value", Xj. There will be one Xj for each grid point and a variable number of Xi values. This will all become clear later on when we get to the description of secondorder packing.
What follows is a description, slightly simplified, of the process that one would go through to pack a (meteorological) field into a GRIB message, using "simple packing". It includes some explanations of why certain steps are taken, some of the consequences, and what choices have to be made. Some of the choices are interrelated; the relationships should be clear when the explanation is done. The additional features of complex or "second order" packing will be dealt with in a later section.
Give that a full field is available, the first step, if necessary, is to convert the units of the parameter into those shown in Table 2, the SI standard units, also known as the mks system. Some of the units may seem a little peculiar (kg/m^{2}, for example, for precipitation  1 kg/m^{2 }is equivalent to a water depth of 1 mm); others may seem inappropriate (Pa for pressure, for example, implies substantially greater precision than is typical in meteorological usage; inverse seconds are not nearly precise enough for divergence and vorticity) but they are all self consistent. The precision of the parameters, as actually packed in a message, can be set to any desired degree through the appropriate use of the powerof10 ("D") scaling and the powerof2 ("E") scaling. Just how this comes about will be described momentarily.
At this point there is a choice to be made. If it is desired to use a preselected bit word length for the packed variables, then just proceed on to the next step. However, if a variable bit word length is to be used, where the word length is adjusted to accommodate the data values, then it is necessary to undertake the poweroften scaling. The D value should be selected such that, when the original data, in the SI units of Table 2, is multiplied by 10^{D}, the integer part of the result will have enough precision to contain all the appropriate information of the variable. Anticipating things a little bit, the (scaled) value will be rounded to an integer as a part of the packing process; thus the "significant part" of the value of the variable has to be moved to the left of the decimal point prior to the rounding. Temperature might be scaled with D=1, thus changing the units to decidegrees; pressure, on the other hand, might be scaled with D=2, thus actually reducing the precision to hectoPascals (mb), a more reasonable meteorological precision; vorticity would be scaled up by D=8, and so on.
The second step in the packing operation is to scan through the field, which may or may not have been "Dscaled" at this point, find the minimum value of the parameter, and subtract that minimum  the reference value, R  from all the data points, leaving a residual of nonnegative numbers. This step has two benefits. The first of these is convenience  making all the data points nonnegative bypasses problems with different computer hardware that represent negatives in various ways: 1's complement, 2's complement, signed positive integers, whatever. The GRIB message is rendered just that much more machine independent by being nonnegative throughout.
The second benefit is more consequential: it can result in a substantial compression of the bulletin size without any loss of information content. If a field has an appreciable bias away from zero, the residuals formed by the minimum removal operation will all be much smaller numbers than otherwise. Thus they will need fewer bits to contain them when they are, eventually, packed as integers.
The third step is simply to scan through the field of residuals and find the maximum value.
At this point another choice must be made, similar to the one made previously. This time, if a variable bit word length is to be used, then it is necessary to calculate how many bits (per word or per data grid point) are going to be needed to contain that largest data value, when the latter has been rounded to an integer. Recall that at the previous decision point, the variables were poweroften ("D") scaled such that a rounding operation will preserve all the significant part of the information. Discovering how many bits are needed is a simple scan through a table of powers of two, of course. The poweroftwoscaling is not employed and E is set equal to 0. Then go on to the fourth step.
If, alternatively, it is desired to use a preselected bit word length for the packed variables, the data must now be scaled, this time by a power of two (the "E" scaling), sufficient to either reduce the maximum value down to just fit into the available number of bits, or enlarge the value to just fit. This latter step takes care of the problem of small numbers where the precision is all in the fractional part of the number. How much precision is retained, for the eventual rounding, is a function of the preselected bit word length and the "typical" range, or maximum value with the minimum removed, of the particular variable. The choice of bit word length, which is made ahead of time, must be made with full knowledge of the characteristics of the particular variable that is to be packed and a prior assumption of how much precision needs to be retained for the largest likely value.
The fourth step is to round all the values to integers, now that they have all been scaled to appropriate units, and pack them in the specified bit length words.
The last step is then to set up the various identification fields and put the GRIB bulletin in proper form. We shall turn to this "proper form" in the next section.
We have ended up with two alternate ways to construct a GRIB messages: a fixed bit word length method and a variable bit word length method. What are the relative advantages or disadvantages, or at least the differences, of one with respect to the other?
Message length: the fixed word length bulletins are always the same length, for a given parameter; the variable word length bulletins are, naturally, variable. The variation is driven by the range of the value of the parameter over the field (or the maximum value) which can change from day to day. Whether variations in message length is a problem or not depends on the computer systems used to work with the GRIB records.
Precision: The variable word length bulletins have a fixed and unchanging precision, determined by the "D" scaling. This assures that the same information content is available day after day. It is straightforward to change the precision in a familiar manner, that is, simply by orders of magnitude, just by altering the D value. This comes at a cost, of course; increasing the precision by a power of 10 adds about 3.3 bits (average) to each data point in the message.
The fixed word length bulletins show a variable precision which is case by case data driven and is determined by the "E" (poweroftwo) scaling that was used to fit the numbers into the available space. This can happen even with the same data, on the same date, but at adjacent grid areas. If one area shows a low variability and the neighboring one a high variability such that a different poweroftwo scaling is needed in the two areas, then, unfortunately, the values on a common boundary will not be exactly equal after they are unpacked. This can be disconcerting and a cause for confusion. It will not happen if Dscaling (only) is employed. On the other hand, the variable precision can be viewed as a strength: a data field with a low variability will be encoded at a higher precision, thus preserving the character of the field; a high variability field will be represented with less precision, but that is not a problem as the small, and possibly lost, variations will not matter in the presence of the large ones. The precision of the encoded field can be increased by adding bits to the fixed word length, but the degree of change (a power of 2 for each bit) may not be as easy to deal with (or explain to people) as the simple order of magnitude change afforded by the "D" scaling method.
No matter which packing method was employed, a proper GRIB decoding program, that took account of the transmitted values of both "D" and "E", would return the correct unpacked numbers, regardless of which packing method was employed. It would be transparent to the user except for the questions of precision outlined above.
GRIB CODE FORM
With the exception of the first four octets of the Indicator Section, and the End Section, all octets contain binary values. All sections contain an even number of octets; the variable length sections are padded with zero values as necessary. These extra bits must be accounted for in finding one's way through the sections; their content should be ignored.
SECTION 0: THE INDICATOR SECTION (IS)
The indicator section serves to: identify the start of the record in a human readable form, indicate the total length of the message, and indicate the Edition number of GRIB used to construct or encode the message. The section is always eight octets long.
Octet no. 
IS Content 
14 
'GRIB' (Coded CCITTITA No. 5) (ASCII); 
57 
Total length, in octets, of GRIB message(including Sections 0 & 5); 
8 
Edition number  currently 1 
SECTION 1: THE PRODUCT DEFINITION SECTION (PDS).
The PDS contains indicators for the Parameter table Version, the originating center, the numerical model (or "generating process") that created the data, the geographical area covered by the data, the parameter itself, the values for the appropriate vertical level or layer where the data reside, the decimal scale factor, and date/time information. The PDS is normally 28 octets long but it may be longer if an originating center chooses to make it so. Users of GRIB messages are strongly urged to use the lengthofsection portion of the PDS to determine where the next section begins. Never assume a fixed octet length in this, or any other, section.
Octet no. 
PDS Content 

1  3 
Length in octets of the Product Definition Section 

4 
Parameter Table Version number. 

Currently Version 2 for international exchange. 

Parameter table version numbers 128254 are reserved for local use. 

5 
Identification of center (Table 0  Part 1) 

6 
Generating process ID number 

(allocated by the originating center; See Table A) 

7 
Grid Identification (geographical location and area; See Table B) 

8 
Flag specifying the presence or absence of a GDS or a BMS 

(See Table 1) 

9 
Indicator of parameter and units (Table 2) 

10 
Indicator of type of level or layer (See Tables 3 & 3a) 

1112 
Height, pressure, etc. of the level or layer (See Table 3) 

13 14 15 16 17 
Year of century Month of year Day of month Hour of day Minute of hour 
\ Initial (or Reference)  time of forecast  UTC   > or   for averaging or  accumulation of / analyses 
18 
Forecast time unit (see Table 4) 

19 
P1  Period of time (Number of time units) 

(0 for analysis or initialized analysis.) 

Units of time given by content of octet 18. 

20 
P2  Period of time (Number of time units) or Time interval between successive analyses, successive initialized analyses, or forecasts, undergoing averaging or accumulation. Units given by octet 18. 

21 
Time range indicator (See Table 5) 

2223 
Number included in average, when octet 21 (Table 5) indicates an average or accumulation; otherwise set to zero. 

24 
Number Missing from averages or accumulations. 

25 
Century of Initial (Reference) time (=20 until Jan. 1, 2001) 

26 
Identification of subcenter (Table 0  Part 2) 

2728 
The decimal scale factor D. A negative value is indicated by setting the high order bit (bit No. 1) in octet 27 to 1 (on). 

2940 
Reserved (need not be present) 

41... 
Reserved for originating center use. 
Note: Octet 8 may indicate the presence of the Grid Description Section (GDS) even though octet 7 specifies a predefined grid. In this case the GDS must describe that grid this device serves as a mechanism for transmitting new "predefined" grids to users prior to their formal publication in this or the official WMO documentation. It is, however, the desired practice to always include the GDS in GRIB bulletins.
Another Note: The use of octet 26 to indicate a "subcenter" is not (yet) an officially sanctioned WMO practice. The Manual indicates the octet is to be "reserved", and set to 0. The use arises out of an upcoming change in the Manual in which the "originating centers" for both GRIB and BUFR (FM 94) will reference a single common table. The difficulty is that BUFR has two octets available for an originating center number while GRIB has only one. The compromise solution is to allow the use of octet 26 as the "second" octet for GRIB, but only in a national context. The WMO will coordinate the assignment of the numbers for octet 5 for national and international centers (for both GRIB and BUFR), while each national center will then be free to assign subcenter numbers at will to be placed in the octet 26. A zero value in octet 26 will serve as the default indicating that there is no subcenter associated with a particular center. Table 0, in this document, shows, in Part 1, a selection of the WMO recognized originating centers (those that are currently active) as would be found in octet 5.
TABLES FOR THE PDS
TABLE 0  Part 1
NATIONAL/INTERNATIONAL
ORIGINATING CENTERS
(Assigned By The WMO)
(PDS Octet 5)
Value  Contents 
07  US Weather Service  National Met. Center 
08  US Weather Service  NWS Telecomms Gateway 
09  US Weather Service  Field Stations 
34  Japanese Meteorological Agency  Tokyo 
52  National Hurricane Center, Miami 
54  Canadian Meteorological Service  Montreal 
57  U.S. Air Force  Global Weather Center 
58  US Navy  Fleet Numerical Oceanography Center 
59  NOAA Forecast Systems Lab, Boulder CO 
74  U.K. Met Office  Bracknell 
85  French Weather Service  Toulouse 
97  European Space Agency (ESA) 
98  European Center for MediumRange Weather Forecasts  Reading 
99  DeBilt, Netherlands 
TABLE 0  Part 2
NATIONAL SUBCENTERS
(Assigned By The Nation)
(PDS Octet 26)
National subcenters, if any, would be found here.
TABLE A.Generating Process or Model
(PDS Octet 6)
VALUE MODEL
These values and model ("generating process") numbers would be supplied by the individual centers.
TABLE B. GRID IDENTIFICATION
(PDS Octet 7)
Various National Grids would be identified here by the Center International exchange grids are included here.
VALUE  GRID 
2126  International Exchange grids  see below 
3744  Eight latlong 1.25 x 1.25 "thinned" grids, covering the globe by octants of 3447 points. Full GRIB specifications below. For WAFC, ICAO, and International exchange. 
6164  International Exchange grids  see below. 
255  (nondefined grid  specified in the GDS) 
INTERNATIONAL EXCHANGE GRIDS
VALUE 
RESOLUTION 
AREA 
GRID 
GRID 

(degrees) 
COVERAGE 
SHAPE 
POINTS 

lon x lat 
(degrees) 
cols 
rows 

21 
5.0 x 2.5 
0180E, 090N 
37 
36 + pole 
1333 
22 
5.0 x 2.5 
180W0, 090N 
37 
36 + pole 
1333 
23 
5.0 x 2.5 
0180E, 90S0 
pole + 37 
36 
1333 
24 
5.0 x 2.5 
180W0, 90S0 
pole + 37 
36 
1333 
25 
5.0 x 5.0 
0355E, 090N 
72 
18 + pole 
1297 
26 
5.0 x 5.0 
0355E, 90S0 
pole + 72 
18 
1297 
61 
2.0 x 2.0 
0180E, 090N 
91 
45 + pole 
4096 
62 
2.0 x 2.0 
180W0, 090N 
91 
45 + pole 
4096 
63 
2.0 x 2.0 
0180E, 90S0 
pole + 91 
45 
4096 
64 
2.0 x 2.0 
180W0, 90S0 
pole + 91 
45 
4096 
255 
(nonstandard grid  defined in the GDS) 
NOTES ON INTERNATIONAL EXCHANGE/FOS GRIDS:
(i) The grid points are laid out in a linear array such that the longitude index (the columns) is the most rapidly varying. For the northern hemisphere grids the first point in the record is at the intersection of the westernmost meridian and southernmost circle of latitude; the last point is the single polar value (see note iii, below). For the southern hemisphere grids the first point in the record is the single polar value (see note iii, below); the last point is at the intersection of the easternmost meridian and northernmost circle of latitude. For those familiar with FORTRAN subscripting conventions, longitude is the first subscript, latitude the second.
(ii) In grids 21 through 26, and 61 through 64, the values on the shared boundaries are included in each area.
(iii) The datum for the pole point is given only once in each grid. The user must expand, if desired, the single pole point value to all the pole "points" at the pole row of a latitudelongitude grid. Scalar quantity values are the same for all pole points on a the grid. Wind components at the poles are given by the formulae:
u = speed x sin(dd) & v = speed x cos(dd)
where dd is the direction of the wind as reported according to the specification of wind direction at the poles (refer to WMO Manual on Codes <1>, code table 878).
The WMO convention can be given this operational definition: At the North Pole, face into the wind and report the value of the west longitude meridian along which the wind is coming at you; at the South Pole do likewise but report the east longitude meridian value. This is equivalent to placing the origin of a righthanded Cartesian coordinate system on the North Pole with the yaxis pointing to the prime (0 degree) meridian and the xaxis pointing to the 90 degrees west meridian, and then resolving any vector wind at the pole point into components along those axes. At the South Pole the coordinate axes are oriented such that the yaxis points toward 180 degrees west. Those components are the u and vvalues given as the single pair of pole point winds in the GRIB format.
In terms of a longitude/latitude grid these are the wind components for the pole point at the 180 degree meridian. For example, on a 2.5 x 2.5 degree northern hemisphere grid (145 x 37 points), with the abscissa along the equator and the ordinate along the prime meridian, the transmitted north pole wind components are those that belong at the grid point (73,37). The wind components at the other grid points along the pole row may be obtained through suitable rotation of the coordinate system. All the components at the pole row are, of course, simply representations of the same vector wind viewed from differing (rotated) coordinate systems. In the southern hemisphere the analogous situation holds; the single set of transmitted pole point wind components belong at the grid point (73,1).
WAFS/ICAO/INTERNATIONAL EXCHANGE/FOS GRIDS
(Grids 37  44)
Global Coverage of Grids
Octants of the Globe
In the figure the boxes indicate the location of the octants of the globe, the numbers are the corresponding grid identification numbers (PDS Octet 7), and the letters are the grid identification used in the WMO heading (see Appendix A). The left and right meridional columns of each octant/grid are shared with the neighbors.
The basic grid point separation is 1.25x1.25 deg. on a latitude/longitude array, but the grid is "thinned" by reducing the number of points in each row as one goes northward (or southward) away from the equator. In GRIB terms, this is referred to as a "quasiregular" grid.
The latitudinal increment is always 1.25 deg.; this results in 73 rows where the pole is included as a "row", not a single grid point.
The longitudinal spacing at the equator is also 1.25 deg.; thus there will be 73 grid points at the equator in each octant.
The number of points on each latitudinal row, other than the equator, is given by (using FORTRAN notation):
NPOINTS = IFIX(2.0 + (90.0/1.25) x COS(LATITUDE))
Thus at the pole there will be two grid points, one each at the meridians that delineate the edges of the octant. The formula was worked out so that there is (approximately) equal geographic separation between the grid points uniformly across the globe.
Because of variations in precision and round off error in different computers, the value of NPOINTS may vary by 1 at "critical" latitudes when calculated on various hardware platforms. Here is a table of the exact values of NPOINTS as a function of latitude as used in the internationally exchanged grids. These numbers will, of course, be found in the Grid Description Section of each GRIB bulletin.
Latitude Range inclusive (north or south) 
NPOINTS  Latitude Range Inclusive (north or south) 
NPOINTS 
0.00  8.75 
73 
55.00 
43 
10.00  12.50 
72 
56.25 
42 
13.75  16.25 
71 
57.50 
40 
17.50  18.75 
70 
58.75 
39 
20.00  21.25 
69 
60.00 
38 
22.50 
68 
61.25 
36 
23.75  25.00 
65 
62.50 
35 
30.00 
64 
63.75 
33 
31.25 
63 
65.00 
32 
32.50 
62 
66.25 
30 
33.75 
61 
67.50 
29 
35.00  36.25 
60 
68.75 
28 
37.50 
59 
70.00 
26 
38.75 
58 
71.25 
25 
40.00 
57 
72.50 
23 
41.25 
56 
73.75 
22 
42.50 
55 
75.00 
20 
43.75 
54 
76.25 
19 
45.00 
52 
77.50 
17 
46.25 
51 
78.75 
16 
47.50 
50 
80.00 
14 
48.75 
49 
81.25 
12 
50.00 
48 
82.50 
11 
51.25 
47 
83.75 
9 
52.50 
45 
85.00 
8 
53.75 
44 
86.25 
6 
87.50 
5 

88.75 
3 

90.00 
2 
When all this is put together the result is that there are 3447 points of data actually transmitted in any individual GRIB bulletin containing one octant of the globe.
In the GRIB bulletins all of this information will be included in the Grid Description Section (GDS); the GDS must be included in order to describe the thinned or "quasiregular" grid structure. See Section 2 and Table C for the general description of the GDS; what follows are the specific values of the variables in the GDS that describe these eight grids.
GDS Contents
Octets  Value or variable 
13  178 (length of GDS) 
4  0 (or 255, either indicating no PV) 
5  33 (pointer to start of PL list) 
6  0 
732  Grid description  see below 
33178  Number of points in each of 73 rows 
(2 octets per point)  
Details of Octets 732  Grid Description
Octets  Variable & Value  
78  Ni = all bits set to 1 (missing)  
910  Nj = 73  
GRID: 
37 
38 
39 
40 
41 
42 
43 
44 

1113  La1 =  0 
0 
0 
0 
90S 
90S 
90S 
90S 

1416  Lo1 =  330 
60 
150 
240 
330 
60 
150 
240 

17  Resolution & Component Flag = [10000000] (binary)  
GRID: 
37 
38 
39 
40 
41 
42 
43 
44 

1820  La2 =  90N 
90N 
90N 
90N 
0 
0 
0 
0 

2123  Lo2 =  60 
150 
240 
330 
60 
150 
240 
330 

2425  Di = all bits set to 1 (missing)  
2627  Dj = 1.25 deg  
28  Scan Mode = [01000000] (binary)  
2932  Set to 0 (unused) 
Note that the scanning direction is from the bottom (south edge) to the top of the octant grids, regardless of the hemisphere. Thus in the northern hemisphere the first 73 data points (in the BDS) will be the equatorial values and the last two will be the polar values. The PL counts in the GDS octets 33178 will, of course, indicate contain these numbers.
In the southern hemisphere, the first two data points will be the south pole values, and the last 73 points will be the equatorial values. Octets 3334 in the GDS will contain "2", octets 3536 will contain a "3", and so on to octets 177178 which will contain "73".
TABLE 1. FLAG FOR GDS OR BMS
(PDS Octet 8)
The bit flag indicates the omission or inclusion of the Grid Description and/or Bit Map Sections.
BIT  VALUE  MEANING 
1  0  GDS Omitted 
1  GDS Included  
2  0  BMS Omitted 
1  BMS Included  
38  0  reserved 
TABLE 2. PARAMETERS & UNITS
Version 2
(PDS Octet 9)
VALUE  PARAMETER  UNITS 
000  Reserved  
001  Pressure  Pa 
002  Pressure reduced to MSL  Pa 
003  Pressure tendency  Pa/s 
004  
005  
006  Geopotential  m^{2}/s^{2} 
007  Geopotential height  Gpm 
008  Geometric height  M 
009  Standard deviation of height  M 
010  
011  Temperature  K 
012  Virtual temperature  K 
013  Potential temperature  K 
014  Pseudoadiabatic potential temperature  K 
015  Maximum temperature  K 
016  Minimum temperature  K 
017  Dew point temperature  K 
018  Dew point depression (or deficit)  K 
019  Lapse rate  K/m 
020  Visibility  M 
021  Radar Spectra (1)   
022  Radar Spectra (2)   
023  Radar Spectra (3)   
024  
025  Temperature anomaly  K 
026  Pressure anomaly  Pa 
027  Geopotential height anomaly  Gpm 
028  Wave Spectra (1)   
029  Wave Spectra (2)   
030  Wave Spectra (3)   
031  Wind direction  Deg. true 
032  Wind speed  m/s 
033  ucomponent of wind  m/s 
034  vcomponent of wind  m/s 
035  Stream function  m^{2}/s 
036  Velocity potential  m^{2}/s 
037  Montgomery stream function  m^{2}/s^{2} 
038  Sigma coord. vertical velocity  s /s 
039  Pressure Vertical velocity  Pa/s 
040  Geometric Vertical velocity  m/s 
041  Absolute vorticity  /s 
042  Absolute divergence  /s 
043  Relative vorticity  /s 
044  Relative divergence  /s 
045  Vertical ucomponent shear  /s 
046  Vertical vcomponent shear  /s 
047  Direction of current  Deg. true 
048  Speed of current  m/s 
049  ucomponent of current  m/s 
050  vcomponent of current  m/s 
051  Specific humidity  kg/kg 
052  Relative humidity  % 
053  Humidity mixing ratio  kg/kg 
054  Precipitable water  kg/m^{2} 
055  Vapor pressure  Pa 
056  Saturation deficit  Pa 
057  Evaporation  kg/m^{2} 
058  Cloud Ice  kg/m^{2} 
059  Precipitation rate  kg/m^{2}/s 
060  Thunderstorm probability  % 
061  Total precipitation  kg/m^{2} 
062  Large scale precipitation  kg/m^{2} 
063  Convective precipitation  kg/m^{2} 
064  Snowfall rate water equivalent  kg/m^{2}s 
065  Water equiv. of accum. snow depth  kg/m^{2} 
066  Snow depth  M 
067  Mixed layer depth  M 
068  Transient thermocline depth  M 
069  Main thermocline depth  M 
070  Main thermocline anomaly  M 
071  Total cloud cover  % 
072  Convective cloud cover  % 
073  Low cloud cover  % 
074  Medium cloud cover  % 
075  High cloud cover  % 
076  Cloud water  kg/m^{2} 
077  
078  Convective snow  kg/m^{2} 
079  Large scale snow  kg/m^{2} 
080  Water Temperature  K 
081  Landsea mask  Fraction 
(1=land;0=sea) (see note)  
082  Deviation of sea level from mean  M 
083  Surface roughness  M 
084  Albedo  % 
085  Soil temperature  K 
086  Soil moisture content  kg/m^{2} 
087  Vegetation  % 
088  Salinity  kg/kg 
089  Density  kg/m^{3} 
090  Water run off  kg/m^{2} 
091  Ice concentration  Fraction 
(ice=1;no ice=0)(see note)  
092  Ice thickness  M 
093  Direction of ice drift  deg. true 
094  Speed of ice drift  m/s 
095  ucomponent of ice drift  m/s 
096  vcomponent of ice drift  m/s 
097  Ice growth rate  m/s 
098  Ice divergence  /s 
099  Snow melt  kg/m^{2} 
100  Significant height of combined wind  m 
waves and swell  
101  Direction of wind waves  deg. true 
102  Significant height of wind waves  m 
103  Mean period of wind waves  s 
104  Direction of swell waves  deg. true 
105  Significant height of swell waves  m 
106  Mean period of swell waves  s 
107  Primary wave direction  deg. true 
108  Primary wave mean period  s 
109  Secondary wave direction  deg. true 
110  Secondary wave mean period  s 
111  Net shortwave radiation (surface)  W/m^{2} 
112  Net long wave radiation (surface)  W/m^{2} 
113  Net shortwave radiation (top of atmos.)  W/m^{2} 
114  Net long wave radiation (top of atmos.)  W/m^{2} 
115  Long wave radiation  W/m^{2} 
116  Short wave radiation  W/m^{2} 
117  Global radiation  W/m^{2} 
118  
119  
120  
121  Latent heat net flux  W/m^{2} 
122  Sensible heat net flux  W/m^{2} 
123  Boundary layer dissipation  W/m^{2} 
124  Momentum flux, u component  N/m^{2} 
125  Momentum flux, v component  N/m^{2} 
126  Wind mixing energy  J 
127  Image data  
128254  Reserved for use by originating center)  
255  Missing 
Notes:
1) Direction and Frequency
2) Direction and radial number
3) Radial number and radial number
TABLE 3. TYPE AND VALUE OF LEVEL
(PDS Octets 10, 11, & 12)
Octet Number 10 Number 11 Number 12 VALUE MEANING CONTENTS ++  0  99 special codes,  0  0   see Table 3a    ++  100 isobaric level  pressure in hectoPascals (hPa)    (2 octets)  ++  101 layer between two  pressure of  pressure of   isobaric levels  top (kPa)  bottom (kPa)  ++  102 mean sea level  0  0  ++  103 fixed height level height above mean sea level    (MSL) in meters  ++  104 layer between two  height of top  height of   height levels  (hm)  bottom (hm)   above msl  above mean sea level  ++  105 fixed height above height in meters   ground  (2 octets)  ++  106 layer between two  height of top  height of   height levels  (hm)  bottom (hm)   above ground  above ground  ++  107 sigma level  sigma value in 1/10000    (2 octets)  ++  108 layer between two  sigma value at  sigma value   sigma levels  top  at bottom    in 1/100  in 1/100  ++  109 Hybrid level  level number    (2 octets)  ++  110 layer between two  level number of  level number   hybrid levels  top  of bottom  ++  111 depth below  centimeters   land surface  (2 octets)  ++  112 layer between two  depth of upper  depth of lower   depths below  surface (cm)  surface (cm)   land surface    ++  113 isentropic  Potential Temperature K   (theta) level  (2 octets)  ++  114 layer between two  475K minus  475K minus   isentropic  theta of top theta of bottom   levels  in K  in K  ++  121 layer between two  1100 hPa minus  1100 hPa minus   isobaric surfaces  pressure of  pressure of   (high precision)  top, in hPa  bottom, in hPa  ++  125 Height level  centimeters   above ground  (2 octets)   (high precision)   ++  128 layer between two  1.1 minus sigma 1.1 minus sigma  sigma levels  of top, in  of bottom, in  ++  (high precision)  1/1000 of sigma 1/1000 of sigma ++  141 layer between two  pressure of  1100hPa minus   isobaric surfaces  top, in kPa  pressure of   (mixed precision)   bottom, in hPa  ++  160 depth below  meters   sea level  (2 octets)  ++  200 entire atmosphere  0   considered as a single layer (2 octets)  ++  201 entire ocean  0   considered as a single layer (2 octets)  ++
Note: The numbering allows for additions within this framework:
100119 normal precision
120139 high precision
140159 mixed precision
TABLE 3a. SPECIAL LEVELS
(PDS Octet 10)
VALUE  LEVEL 
00  reserved 
01  surface (of the Earth, which includes sea surface) 
02  cloud base level 
03  cloud top level 
04  0 deg (C) isotherm level 
05  adiabatic condensation level(parcel lifted from surface) 
06  maximum wind speed level 
07  tropopause level 
08  Nominal top of atmosphere 
09  Sea bottom 
1099  Reserved 
TABLE 4. FORECAST TIME UNIT
(PDS Octet 18)
VALUE  TIME UNIT 
0  minute 
1  hour 
2  day 
3  month 
4  year 
5  decade 
6  normal (30 years) 
7  century 
8253  reserved 
254  second 
TABLE 5.
TIME RANGE INDICATOR
(PDS Octet 21)
VALUE  MEANING 
0 
Forecast product valid at reference time + P1 P1>0), or Uninitialized analysis product for reference time (P1=0). Or 
1 
Initialized analysis product for reference time (P1=0). 
2 
Product with a valid time ranging between reference time + P1 and reference time + P2 
3 
Average(reference time + P1 to reference time + P2) 
4 
Accumulation (reference time + P1 to reference time + P2) 
product considered valid at reference time + P2 

5 
Difference(reference time + P2 minus reference time + P1) product considered valid at reference time + P2 
69 
reserved 
10 
P1 occupies octets 19 and 20; 
product valid at reference time + P1 

1150 
reserved 
51 
Climatological Mean Value: multiple year averages of quantities which are themselves means over some period of time (P2) less than a year. The reference time (R) indicates the date and time of the start of a period of time, given by R to R + P2, over which a mean is formed; N indicates the number of such periodmeans that are averaged together to form the climatological value, assuming that the N periodmean fields are separated by one year. The reference time indicates the start of the Nyear climatology. N is given in octets 2223 of the PDS. 
If P1 = 0 then the data averaged in the basic interval P2 are assumed to be continuous, i.e., all available data are simply averaged together. 

If P1 = 1 (the units of time  octet 18, code table 4  are not relevant here) then the data averaged together in the basic interval P2 are valid only at the time (hour, minute) given in the reference time, for all the days included in the P2 period. The units of P2 are given by the contents of octet 18 and Table 4. 

52112 
reserved 
113 
Average of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. 
114 
Accumulation of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. 
115 
Average of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining forecasts follow at intervals of P2. 
116 
Accumulation of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining follow at intervals of P2. 
117 
Average of N forecasts, the first has a period of P1, the subsequent ones have forecast periods reduced from the previous one by an interval of P2; the reference time for the first is given in octets 1317, the subsequent ones have reference times increased from the previous one by an interval of P2. Thus all the forecasts have the same valid time, given by the initial reference time + P1. 
118 
Temporal variance, or covariance, of N initialized analyses; each product has forecast period P1=0; products have reference times at intervals of P2, beginning at the given reference time. 
119 122 
reserved 
123 
Average of N uninitialized analyses, starting at the reference time, at intervals of P2. 
124 
Accumulation of N uninitialized analyses, starting at the reference time, at intervals of P2. 
125254 
reserved 
NOTES:
A few examples may help to clarify the use of Table 5:
For analysis products P1 is zero and the time range indicator is also zero; for initialized products (sometimes called "zero hour forecasts") P1 is zero, but octet 21 is set to 1.
For forecasts, typically, P1 contains the number of hours of the forecast (the unit indicator given in octet 18 would be 1) and octet 21 contains a zero.
Value 51 allows for the identification of the most common climatological entities. With P1=0, it could represent (or identify) the multiple year climatology of anything from daily means (or less) to semiannual means (or more, up to a full year). The assumption is that all the available values within the basic period P2 are averaged together. (An "annual mean climatology" would just be an average over the total climatological period  Table 5, entry 3.) P1=1 allows for a diurnal substratification of the data within the P2 period, such as 30year climatology of February mean 00Z temperature starting at a date certain, or all the 12Z surface radiation fluxes averaged for all the days in a season, or whatever. If other substratifications are appropriate they could be identified by different values of P1. No others have been proposed at this time.
Value 115 would be used, typically, for multiple day mean forecasts, all derived from the same initial conditions.
Value 117 would be used, typically, for Monte Carlo type calculations: many forecasts valid at the same time from different initial (reference) times.
Averages, accumulations, and differences get a somewhat specialized treatment. If octet 21 (Table 5) has a value between 2 and 5 (inclusive) then the reference time + P1 is the initial date/time and the reference time + P2 is the final date/time of the period over which averaging or accumulation takes place. If, however, octet 21 has a value of 113, 114, 115, 116, 117, 118, 123, or 124 then P2 specifies the time interval between each of the fields (or the forecast initial times) that have been averaged or accumulated. These latter values of octet 21 require the quantities averaged to be equally separated in time; the former values, 3 and 4 in particular, allow for irregular or unspecified intervals of time between the fields that are averaged or accumulated.
SECTION 2: GRID DESCRIPTION SECTION (GDS)
The purpose of the (optional) GDS is to provide a grid description for grids not defined by number in Table 3.
Octet no.GDS Content 

1  3 
Length in octets of the Grid Description Section 
4 
NV, the number of vertical coordinate parameters 
5 
PV, the location (octet number) of the list of vertical coordinate parameters, if present or 
PL, the location (octet number) of the list of numbers of points in each row (when no vertical parameters are present), if present 

or 

255 
(all bits set to 1) if neither are present 
6 
Data representation type (See Table 6) 
7  32 
Grid description, according to data representation type, except Lambert, Mercator or Space View. 
or 

7  42 
Grid description for Lambert or Mercator grid 
or 

7  44 
Grid description for Space View perspective grid 
PV 
List of vertical coordinate parameters 
(length = NV x 4 octets); 

if present, then PL = 4 x NV + PV 

PL 
List of numbers of points in each row, used for quasiregular grids 
(length = NROWS x 2 octets, where NROWS is the total number of rows defined within the grid description) 

Note: NV and PV relate to features of GRIB not, at present, in use in international exchange. See the WMO Manual on Codes for the descriptions of those features.
PL is used for "quasiregular" or "thinned" grids; e.g., a lat/lon grid where the number of points in each row is reduced as one moves poleward from the equator. The reduction usually follows some mathematical formula involving the cosine of the latitude, to generate an (approximately) equally spaced grid array. The association of the numbers in octet PL (and following) with the particular row follows the scanning mode specification in Table 8.
TABLES FOR THE GDS
TABLE 6. DATA REPRESENTATION TYPE
(GDS Octet 6)
VALUE  MEANING 
0  Latitude/Longitude Grid also called Equidistant Cylindrical or Plate Carree projection grid 
1  Mercator Projection Grid 
2  Gnomonic Projection Grid 
3  Lambert Conformal, secant or tangent, conical or bipolar (normal or oblique) Projection Grid 
4  Gaussian Latitude/Longitude Grid 
5  Polar Stereographic Projection Grid 
6  12  (reserved  see Manual on Codes) 
13  Oblique Lambert conformal, secant or 
tangent, conical or bipolar,  
projection  
14  49  (reserved  see Manual on Codes) 
50  Spherical Harmonic Coefficients 
51  89  (reserved  see Manual on Codes) 
90  Space view perspective or orthographic grid 
91  254  (reserved  see Manual on Codes) 
TABLE C. Sundry Grid Definitions
LATITUDE/LONGITUDE GRIDS
INCLUDING GAUSSIAN
(GDS Octets 7  32)
OCTET NO.  CONTENT & MEANING 
7  8  Ni  No. of points along a latitude circle 
9  10  Nj  No. of points along a longitude meridian 
11  13  La_{1}  latitude of first grid point units:
millidegrees (degrees x 1000) values limited to range 0  90,000 bit 1 (leftmost) set to 1 for south latitude 
14  16  Lo_{1}  longitude of first grid point units:
millidegrees (degrees x 1000) values limited to range 0  360,000 bit 1 (leftmost) set to 1 for west longitude 
17  Resolution and component flags (Table 7) 
18  20  La_{2}  Latitude of last grid point 
(same units, value range, and bit 1 as La_{1})  
21  23  Lo_{2}  Longitude of last grid point 
(same units, value range, and bit 1 as Lo_{1})  
24  25  Di  Longitudinal Direction Increment 
(same units as Lo_{1}) (if not given, all bits set = 1)  
26  27  Regular Lat/Lon Grid: 
Dj  Latitudinal Direction Increment (same units as La_{1})  
(if not given, all bits set = 1) or  
Gaussian Grid:  
N  number of latitude circles between a pole and the equator  
Mandatory if Gaussian Grid specified  
28  Scanning mode flags (See Table 8) 
29  32  Reserved (set to zero) 
Notes:
POLAR STEREOGRAPHIC GRIDS
(GDS Octets 7  32)
OCTET NO. 
CONTENT & MEANING 
7  8 
Nx  Number of points along xaxis 
9  10 
Ny  Number of points along yaxis 
11  13 
La1  Latitude of first grid point 
14  16 
Lo1  Longitude of first grid point 
17 
Resolution and component flags (see Table 7) 
18  20 
Lov  The orientation of the grid; i.e., the east longitude value of the meridian which is parallel to the yaxis (or columns of the grid) along which latitude increases as the ycoordinate increases. (Note: The orientation longitude may, or may not, appear within a particular grid.) 
21  23 
Dx  the Xdirection grid length (see Note 2) 
24  26 
Dy  the Ydirection grid length (see note 2) 
27 
Projection center flag (see note 5) 
28 
Scanning mode (see Table 8) 
29  32 
Set to 0 (reserved) 
Notes:
Bit 1 set to 0 if the North pole is on the projection plane.
Bit 1 set to 1 if the South pole is on the projection plane.
LAMBERT CONFORMAL SECANT OR TANGENT CONE GRIDS
(GDS Octets 7  42)
OCTET NO. 
CONTENT & MEANING 
7  8 
Nx  Number of points along xaxis 
9  10 
Ny  Number of points along yaxis 
11  13 
La1  Latitude of first grid point 
14  16 
Lo1  Longitude of first grid point 
17 
Resolution and component flags (see Table 7) 
18  20 
Lov  The orientation of the grid; i.e., the east longitude value of the meridian which is parallel to the yaxis (or columns of the grid) along which latitude increases as the ycoordinate increases. (Note: The orientation longitude may, or may not, appear within a particular grid.) 
21  23 
Dx  the Xdirection grid length (see note 2) 
24  26 
Dy  the Ydirection grid length (see Note 2) 
27 
Projection center flag (see note 5) 
28 
Scanning mode (see Table 8) 
29  31 
Latin 1  The first latitude from the pole at which the secant cone cuts the spherical earth. (See Note 8) 
32  34 
Latin 2  The second latitude from the pole at which the secant cone cuts the spherical earth. (See Note 8) 
35  37 
Latitude of southern pole (millidegrees) 
38  40 
Longitude of southern pole (millidegrees) 
41  42 
Reserved (set to 0) 
Notes:
MERCATOR GRIDS
(GDS Octets 7  42)
OCTET NO.  CONTENT & MEANING 
7  8  Ni  Number of points along a latitude circle 
9  10  Nj  Number of points along a longitude meridian 
11  13  La1  Latitude of first grid point 
14  16  Lo1  Longitude of first grid point 
17  Resolution and component flags (see Table 7) 
18  20  La2  latitude of last grid point 
21  23  Lo2  longitude of last grid point 
24  26  Latin  The latitude(s) at which the Mercator projection cylinder intersects the earth. 
27  Reserved (set to 0) 
28  Scanning mode (see Table 8) 
29  31  Di  the longitudinal direction increment (see Note 2) 
32  34  Dj  the latitudinal direction increment (see note 2) 
35  42  Reserved (set to 0) 
Notes:
SPACE VIEW PERSPECTIVE OR ORTHOGRQAPHIC
(GDS Octets 744)
OCTET NUMBER 
CONTENTS 
78 
Nx  number of points along x axis (columns) 
910 
Ny  number of points along y axis (rows or lines) 
1113 
Lap  latitude of subsatellite point 
1416 
Lop  longitude of subsatellite point 
17 
Resolution and component flags (Table 7) 
1820 
dx  apparent diameter of earth in grid lengths, in x direction 
2123 
dy  apparent diameter of earth in grid lengths, in y direction 
2425 
Xp  Xcoordinate of sub satellite point 
2627 
Yp  Ycoordinate of subsatellite point 
28 
Scanning Mode (Table 8) 
2931 
the orientation of the grid; i.e., the angle in millidegrees between the increasing y axis and the meridian of the subsatellite point in the direction of increasing latitude (see Note 3). 
3234 
Nr  the altitude of the camera from the earth's center, measured in units of the earth's (equatorial) radius (See Note 4). 
3544 
reserved 
Notes:
Rx = 2 x asin(1/Nr) / dx
Ry = 2 x asin(1/Nr) / dy
SPHERICAL HARMONIC COEFFICIENTS
(GDS Octets 7  32)
OCTET NO.  CONTENT & MEANING 
7  8  J  Pentagonal Resolution Parameter 
9  10  K  Pentagonal Resolution Parameter 
11  12  M  Pentagonal Resolution Parameter 
13  Representation Type (See Table 9) 
14  Coefficient Storage Mode (See Table 10) 
15  32  Set to zero (reserved) 
TABLE 7  RESOLUTION AND COMPONENT FLAGS
(GDS Octet 17)
Bit 
Value 
Meaning 
1 
0 
Direction increments not given 
1 
Direction increments given 

2 
0 
Earth assumed spherical with radius = 6367.47 km 
1 
Earth assumed oblate spheroid with size 

as determined by IAU in 1965: 

6378.160 km, 6356.775 km, f = 1/297.0 

34 
reserved (set to 0) 

5 
0 
u and vcomponents of vector quantities resolved relative to easterly and northerly directions 
1 
u and v components of vector quantities resolved relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively 

68 
reserved (set to 0) 
Note: If the GDS is not included in a message then any wind components are assumed to be resolved relative to the grid specified in the PDS with u and v defined as positive in the direction of increasing x and y (or i and j) coordinates respectively.
TABLE 8. SCANNING MODE FLAG
(GDS Octet 28)
BIT  VALUE  MEANING 
1  0  Points scan in +i direction 
1  Points scan in i direction  
2  0  Points scan in j direction 
1  Points scan in +j direction  
3  0  Adjacent points in i direction are consecutive 
(FORTRAN: (I,J))  
1  Adjacent points in j direction are consecutive  
(FORTRAN: (J,I)) 
Note: i direction is defined as west to east along a parallel of latitude, or left to right along an x axis.
j direction is defined as south to north along a meridian of longitude, or bottom to top along a y axis.
TABLE 9. SPECTRAL REPRESENTATION TYPE
(GDS Octet 13)
VALUE  MEANING 
1 
Associated Legendre Polynomials of the First Kind with normalization such that the integral equals 1 
TABLE 10. COEFFICIENT STORAGE MODE
(GDS Octet 14)
VALUE  MEANING 
1 
The complex coefficients X_{nm} are stored for m > 0 as pairs of real numbers Re(Xnm), Im(Xnm) ordered with n increasing from m to N(m), first for m = 0 and then for m = 1, 2, 3,...M. The real part of the (0,0) coefficient is stored in octets 1215 of the BDS, as a floating point number in the same manner as the packing reference value, with units as in Table 2. The remaining coefficients, starting with the imaginary part of the (0,0) coefficient, are packed according to the GRIB packing algorithm, with units as given in Table 5, in octets 16 and onward in the BDS. 
NOTES ON SPECTRAL TRUNCATION:
Using the associated Legendre Polynomials of the First Kind, Pnm, as typical expansion functions, any variable x(l ,F), which is a function of longitude, l , and sin(latitude), F , can be represented by
In the summations, M is the maximum zonal wave number that is to be included, and K & J together define the maximum meridional total wave number N(m), which, it should be noted, is a function of m. A sketch shows the relationships:
In this figure, the ordinate is n the zonal wave number, the abscissa, m, is the total meridional wave number, the vertical line at m = M is the zonal truncation, and the diagonal passing through (0,0) is the line n = m. The Legendre Polynomials are defined only on or above this line, that is for n > m. On the naxis, the horizontal line at n = K indicates the upper limit to n values, and the diagonal that intersects the naxis at n = J indicates the upper limit of the area in which the Polynomials are defined. The shaded irregular pentagon defined by the naxis, the diagonal from n = J, the horizontal n = K, the vertical m = M, and the other diagonal n = m surrounds the region of the (n x m) plane containing the Legendre Polynomials used in the expansion.
This general pentagonal truncation reduces to some familiar common truncations as special cases:
Triangular: K = J = M and N(m) = J
Rhomboidal: K = J + M and N(m) = J + m
Trapezoidal: K = J, K > M and N(m) = J
In all of the above m can take on negative values to represent the imaginary part of the spectral coefficients.
SECTION 3: BIT MAP SECTION (BMS)
The purpose of the (optional) BMS is to provide either a bit map or a reference to a bit map predefined by the center. The bit map consists of contiguous bits with a bittodatapoint correspondence as defined in the grid description. A bit set equal to 1 implies the presence of a datum for that grid point in the BDS; a value of zero implies the absence of such. This is useful in shrinking fields where fair portions of the field are not defined. An example would be global grids of sea surface temperature; the bit map would be used to suppress the "data" at grid points over land. One would not want to use the BMS if the data were undefined at only a small number of grid points as the overhead of adding the bit map array (one bit for each grid point) might add more bits to the overall message that were subtracted by the removal of a few data values.
Octet no. 

1  3 
Length in octets of Bit Map Section 
4 
Number of unused bits at end of Section 3. 
5  6 
Numeric: 
= 0: a bit map follows; otherwise: the numeric refers to a predefined bit map provided by the center 

7  nnn 
Bit map, zero filled to an even number of octets 
SECTION 4: BINARY DATA SECTION (BDS).
The BDS contains the packed data and the binary scaling information needed to reconstruct the original data from the packed data. The required decimal scale factor is found in the PDS, above. The data stream is zero filled to an even number of octets.
Octet no. 

1  3 
Length in octets of binary data section 
4 
Bits 1 through 4: Flag  See Table 11 
Bits 5 through 8: Number of unused bits at end of Section 4. 

5  6 
The binary scale factor (E). A negative value is indicated by setting the high order bit (bit No. 1) in octet 5 to 1 (on). 
7  10 
Reference value (minimum value); floating point representation of the number. 
11 
Number of bits into which a datum point is packed 
12 nnn 
Variable, depending on octet 4; zero filled to an even number of octets. 
14 
Optionally, may contain an extension of the flags in octet 4. See Table 11. 
Here are some of the various forms the binary data can take; the flag table in BDS octet 4, possibly extended into octet 14, identifies which variant is in use.
Gridpoint data  Simple packing
Here the data simply begin in octet 12 and continue, packed according to the simple packing algorithm described above, without any particular regard for computer "word" boundaries, until there is no more data. There may be some "zerofill" bits at the end.
If all the data in a grid point field happen to have the same value, then all of the deviations from the reference value are set to zero. Since a zero value requires no bits for packing, octet 11 is set to zero, thus indicating a field of constant data, the value of which is given by the reference value. Under these circumstances, octet 12 is set to zero (the required "zero fill to an even number of octets") and bits 58 of octet 4 contain an 8. The number of data points in the field is implied by the grid identification given in the PDS and/or the GDS and BMS.
Spherical Harmonic Coefficients  Simple packing
Octets 1215 contain the real part of the (0.0) coefficient in the same floating point format as the reference value in octets 710. The imaginary part of the (0.0) coefficient, mathematically, is always equal zero. Octets 16 to the end contain the remaining coefficients packed up as binary data with the same sort of scaling, reference value, and the like, as with gridpoint numbers. Excluding the (0,0) coefficient, which is usually much larger than the others, from the packing operation means that the remaining coefficients can be packed to a given precision more efficiently (fewer bits per word) than would be the case otherwise.
GridPoint Data  Second Order or Complex Packing
Before laying out where the various second order values, subparameters, counters, and what have you, go, it is appropriate to describe the second order packing method in an algorithmic manner.
Referring back to the description of simple packing, the encoding method is the same up to part way through the fourth step, stopping just short of the actual packing of the scaled integers into the "words" of either a prespecified or calculated bit length.
The basic outline of second order packing is to scan through the array of integers (one per grid point, or possibly less than that if the Bit Map Section has been employed to discard some of the null value points) and seek out subsections exhibiting relatively low variability within the subsection. One then finds the (local) minimum value in that subsection and subtracts it from the ("first order") integers in that subsection, which leave a set of "second order" integers. These numbers are then scanned to find the maximum value, which in turn is used to specify the minimum bit width for a "word" necessary to contain the subsection set of second order numbers.
The term "first order" in this context refers to the integer variables that result from subtracting the overall (global) minimum from the original variables and then doing all scaling and rounding; "second order" refers to the variables that result from subtracting the local minimum from the subset of first order variables. No further scaling is necessary or appropriate.
The subsection set of numbers are then packed into "words" of the just determined bit length. The overall savings in space comes about because the second order values are, usually, smaller than their first order counterparts. They have, after all, had two minima subtracted from the original values, the overall minimum and the local minimum, where the first order values have had only the overall minimum subtracted out. There is no guarantee, however, that the second order packing will compress a given field to a greater degree than the first order packing. If the first order field of integers is highly variable, or generally close to zero, then there will be no gain in compression. But if the field shows long runs of small variation, particularly if some of the runs are constant (zero variability), then the second order packing will contribute to the compression.
The process then repeats and a whole collection of subsections are found, their local minima are subtracted, etc. One of the tricky parts of this process is defining just what is meant by a "subsection of low variability". The WMO Manual is silent on this as it only describes how the subsections and their ancillary data are to be packed in the message. The U.S. National Weather Service, the U.K. Meteorological Office, the European Centre for MediumRange Weather Forecasts, and probably other groups have, independently, designed selection criteria and built them into GRIB encoders. It is beyond the scope of this document to attempt to describe them in any detail. These groups have all expressed their willingness to share their GRIB encoders with any who ask for them.
Before laying out where the second order values, etc., are placed in a message, we had best review just what information has to be saved. We need to include the following information:
1) How many subsections there are;
2) Where does each subsection begin;
3) Where does each subsection end; or, how many data points are in each subsection;
4) That is the local minimum value (a first order value) that was found for each subsection;
5) What is the bit width of the collection of first order values (the local minima) found for each subsection;
6) What are the second order values for each subsection;
7) What are the bit widths of the second order values appropriate for all the subsection; and, finally,
8) Sufficient information to specify where the above information is located.
A moments consideration (a long moment, perhaps) will satisfy the reader that the information given will be sufficient to reconstruct the original data field.
The information needed for points 2) and 3), the beginning and end of the subsections, is presented in the form of a bit map, called a "secondary bit map" to distinguish it from the bit map (optionally) contained in the BMS. There is one bit for each grid point containing data, ordered in the same way as the grid is laid out. The "primary" bit map, the BMS bit map, may have been used to eliminate data at points where the data are meaningless  only the remaining "real" data points are matched by the bits in the secondary bit map. This possibility is understood to exist throughout the following discussion. The start of each subsection is indicated by the corresponding bit set to "on" or to a value of 1. Clearly, the first bit in the secondary bit map will always be set on, since the first data point must be the start of the first subsection. (If it is not, then something is wrong somewhere. Unfortunately it is not always easy to tell just where the error occurred.) The secondary bit map is then no more than a collection of 1s and 0s, indicating the start and the extent of each subsection. It would be possible to scan through the secondary bit map and determine how many subsections there are; however, this number is explicitly included in the GRIB message to save one the trouble, and to serve as an internal selfchecking mechanism.
At long last, then, here is the layout of the information, with further explanatory notes, when second order packing has been employed:
Octet no.Content 

13 
Length in octets of binary data section 
4 
Bits 1 through 4: Flag  See Table 11 
Bits 5 through 8: Number of unused bits at end of Section 4. 

56 
The binary scale factor (E). A negative value is indicated by setting the high order bit(bit No. 1) in octet 5 to 1 (on). 
710 
Reference value (minimum value); floating point representation of the number. This is the overall or "global" minimum that has been subtracted from all the values. 
11 
Number of bits into which a datum point is packed. This width now refers to the collection of first order packed values that serve as the local minimum values, one for each subsection. It is determined in the same manner as for the simple (first order) packing. 
1213 
N1  Octet number, relative to the start of the BDS, at which the collection of first order packed numbers begins, i.e. the collection of local minimum values. 
14 
The flags that are an extension of octet 4. See Code Table 11. 
1516 
N2  Octet number, relative to the start of the BDS, at which the collection of second order packed numbers begins. 
1718 
P1  The number of first order packed values, the local minima. This number is the same as the number of subsections. 
1920 
P2  The number of second order packed values. This is the number of actual data points (as possibly modified by the bit map in the BMS, if any). 
21 
Reserved 
22(xx1) 
Width(s), in bits, of the second order packed values; each width value is contained in 1 octet. There are as many width values, or octets, as there are subsections, P1 of them. However, there may be but one such value under special circumstances; see below. Also, the width value for a particular subsection may perfectly well be zero. 
xx(N11) 
Secondary bit map, one bit for each data point. It will be P2 bits long, then padded to an even number of octets with binary 0. 
N1(N21) 
P1 first order packed values, the local minima, each held in a "word" of bitlength found in octet 11, then padded to a whole number of octets with 0s. 
N2... 
P2 second order packed values. There is no "marking" of the subsections here; all the subsection second order values are placed in a continuous string of bits. The bitlength of the "words" holding the values will change from place to place but again this has to be determined by reference to the other information. 
As usual, there may be padding by binary 0 bits sufficient to bring the entire section to an even number of octets.
There are a small number of special cases and variations on the above layout:
If the bitwidth for a subsection is zero, then no second order values for that subsection are included in the part of the message starting at octet N2. This will happen is all the first order values in the subsection are identical. This is a form of "runlength encoding" and contributes greatly to packing efficiency if the original data contains strings of constant value (including zero).
Under some circumstances, it may turn out that there is no need to use different bitwidths for each of the subsections. In that case, a flag is set in bit 8 of the extended flags found in octet 14 (see table 11) indicating that all the subsections are packed with the same bitwidth, and that the single value will be found in octet 22.
Row by row packing is defined as selecting entire rows (or columns) to serve as subsections, without regard to "variability" determinations. It can have some compression value. If row by row packing is employed, this is indicated by setting a flag in bit 7 of the extended flags found in octet 14 (see table 11) and NOT including the secondary bit map in the message. It is unnecessary since the length of the rows (columns) is known from the grid specifications given elsewhere in the message.
TABLES FOR THE BDS
TABLE 11. FLAG
(BDS Octet 4 and, optionally, 14)
BIT  VALUE  MEANING 
1  0  Grid point data 
1  Spherical Harmonic Coefficients  
2  0  Simple packing 
1  Second order ("Complex") Packing  
3  0  Original data were floating point values 
1  Original data were integer values  
4  0  No additional flags at octet 14 
1  Octet 14 contains flag bits 5  12 
The following gives the meaning of the bits in octet 14 ONLY if bit 4 is set to 1. Otherwise octet 14 contains regular binary data.
5  Reserved (set to 0)  
6  0  Single datum at each grid point 
1  Matrix of values at each grid point  
7  0  No secondary bit maps 
1  Secondary bit maps present  
8  0  Second order values have constant width 
1  Second order values have different widths  
912  Reserved (set to 0) 
Notes:
SECTION 5: END SECTION.
The end section serves a human readable indication of the end of a GRIB record. It can also be used for computer verification that a complete GRIB record is available for data extraction. It should not be used as a search target since a '7777' bit combination could exist anywhere in the binary data stream.
Octet no.
14 '7777' (Coded CCITTITA No. 5)