Overview
The National Weather Service's National Centers for Environmental
Prediction (NCEP) runs a series of computer analyses and forecasts
operationally. NOAA's Air Resources Laboratory (ARL) routinely uses NCEP
model data for use in air quality transport and dispersion modeling calculations.
In 1989 ARL began to archive some of these datasets for future research
studies. ARL has in the past, or is presently archiving the following NCEP
datasets, which can be retrieved via ftp by clicking on the name of the dataset:
Currently Available Data
- NAM 12 km (31-day rotating archive; these files are NOT available for download from ARL)...
Data No Longer Updated
All of theses datasets
contain basic fields such as the u- and v-wind components, temperature,
and humidity. However, the archives differ from each other because of
the horizontal and vertical resolution, as well as in the specific
fields provided by NCEP. All fields were selected by ARL
according to what is most relevant for transport and dispersion
studies and disk space limitations.
Data Packing Format
NCEP typically saves their model output in GRIB format.
However, at ARL the data are reprocessed and stored in a 1-byte
packing algorithm. This 1-byte packing
is a bit more compact than GRIB and can be directly used on a variety of
computing platforms with direct access I/O.
The data array is packed and stored into one byte characters.
To preserve as much data precision as possible the difference
between the values at grid points is saved and packed rather than
the actual values. The grid is then reconstructed by adding the
differences between grid values starting with the first value,
which is stored in unpacked ASCII form in the header record. To
illustrate the process, assume that a grid of real data, R, of
dimensions i,j is given by the below example.
1,j 2,j .... i-1,j i,j
1,j-1 2,j-1 .... i-1,j-1 i,j-1
.... .... .... .... ....
1,2 2,2 .... i-1,2 i,2
1,1 2,1 .... i-1,1 i,1
The packed value, P, is then given by
Pi,j = (Ri,j - Ri-1,j)* (2**(7-N)),
where the scaling exponent
N = ln dRmax / ln 2 .
The value of dRmax is the maximum difference between any two
adjacent grid points for the entire array. It is computed from the
differences along each i index holding j constant. The difference
at index (1,j) is computed from index (1,j-1), and at 1,1 the
difference is always zero. The packed values are one byte unsigned
integers, where values from 0 to 126 represent
-127 to -1, 127 represents zero, and values of 128 to 254 represent
1 to 127. Each record length is then equal in bytes to the number
of array elements plus 50 bytes for the header label information. The
50 byte label field precedes each packed data field and contains the
following ASCII data:
Field Format Description
Year I2 Greenwich date for which data valid
Month I2 "
Day I2 "
Hour I2 "
Forecast* I2 Hours forecast, zero for analysis
Level I2 Level from the surface up (see Table 3)
Grid I2 Grid identification (see Table 1)
Variable A4 Variable label (see Table 2)
Exponent I4 Scaling exponent needed for unpacking
Precision E14.7 Precision of unpacked data
Value 1,1 E14.7 Unpacked data value at grid point 1,1
*Forecast hour is -1 for missing data.
The following Fortran90 program can be used to to unpack and read the first few elements of the
data array for each record of an ARL packed meteorological file.
CHK_DATA.F
|