Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / io_grib1 / README.io_grib1
blob9fe1375cab4b7e27749a1575d27f6e4387d38086
1 io_grib1
3 Author: Todd Hutchinson
4         WSI
5         thutchinson@wsi.com
7 5 August 2004
8 8 February 2005 - Updated by Todd Hutchinson.  Section V was updated to 
9                   clarify the description of the decimal scale factor field 
10                   in the gribmap file.
11 12 July 2005    - Updated by Todd Hutchinson.  GRIB version 1 input capability 
12                   was added to WRF. All sections in this README were updated to
13                   add information relevant for grib input capability.
16 I. Introduction
18 io_grib1 is a WRF module that allows for input and output of WRF data in GRIB 
19    version 1 format.
21 Why would anyone use GRIB output?  
22   GRIB stores data in a compressed format so output files are much smaller 
23     than in other formats such as netCDF.  In addition, encoding in GRIB format
24     is very efficient and can be faster than writing out netCDF formatted 
25     data, especially for large grids.  (See Section V for more on performance).
27 II. Running WRF
28   1. Set namelist entry or entries io_form_<x> to 5
29   2. Run WRF as you normally would, for example:
30      cd test/em_real
31      ./wrf.exe
33 IV. Examining GRIB output with wgrib
34   1. wgrib is installed within external/io_grib1 
35      (See http://wesley.wwb.noaa.gov/wgrib.html for more information.)
36   2. Define the GRIBTAB environment variable:
37         For bourne shell users:
38           export GRIBTAB=<your WRF dir>/run/gribmap.txt
39         For csh users
40           setenv GRIBTAB <your WRF dir>/run/gribmap.txt
41   3. To get a listing of the records in the GRIB data:
42         <your WRF dir>/external/io_grib1/wgrib wrfout_d01_000000
44 IV. Quilting
45   If you are running WRF using MPI, you may use a seperate processor for
46     quilting just as is done with netCDF.  Simply set the namelist variable
47     nio_tasks_per_group to 1 (or more).
49 V. Details
50   1. gribmap.txt file
51      io_grib1 makes use of a GRIB table for encoding the WRF data into GRIB 
52         format.  The GRIB table that io_grib1 uses is contained in the 
53         WRF run directory, and is called gribmap.txt.  This file is read at
54         run-time by io_grib1.  Settings in this file are used to encode the 
55         corresponding parameters in the GRIB output files.  You may modify 
56         this file to suit your needs.
58       The file has the following format:
60       the first line of a table (note: there may be several tables in a 
61                                  gribmap.txt file)
62       -1:CENTER:SUBCENTER:PARAMETER_TABLE_VERSION
63           "-1" is an indicator for the start of a table
64           "CENTER" is generating center (PDS 5, i.e., for NCEP, this is 7)
65           "SUBCENTER" is the generating sub-center (PDS 26)
66           "PARAMETER_TABLE_VERSION" is the parameter table version (PDS 4)
68       Subsequent lines:
69       GRIBID:<PARAMETER>:<DESCRIPTION>:<WRF VAR>:<DECSCL>
70           "GRIBID" is the GRIB parameter id (PDS 9).
71           "PARAMETER" is the abbreviated parameter name.   
72           "DESCRIPTION" is a description of the parameter.
73           "WRF VAR" is a comma-seperated list of WRF variables that will be
74                     encoded as with PARAMETER described in the line and with 
75                     the CENTER, SUBCENTER and PARAMETER_TABLE_VERSION listed 
76                     at the beginning of the table.  WRF VAR must use 
77                     the WRF variable names that are defined in the "DNAME" 
78                     column in the WRF Registry.
79           "DECSCL" is the decimal scale factor.  It is the number of digits
80                     to the right of the decimal point that will be saved in
81                     the output data.  This number may be less than zero, in 
82                     which case, the precision of data will be truncated the 
83                     specified number of digits to the left of the decimal 
84                     point. 
85                        Examples:
86                          -2 : Data will be encoded at the hundreds level, 
87                               i.e., 102425.231 will be encoded as 102400
88                           3 : Data will be encoded at the thousandths level, 
89                               i.e., 102425.231243 will be encoded as 1024.231
90       Example:
91            1:PRES:Pressure [Pa]:P,PSFC:1
92              In this example, GRIB parameter 1, abbreviated PRES, is 
93                 pressure in pascals.  WRF variables P and PSFC (as listed in
94                 the WRF Registry) will be encoded as PRES.  The data will have
95                 one decimals of precision, i.e., 101323.1 Pa.
96            62:NCPCP:Large scale precipitation [kg/m^2]:NCPCP:2
97              In this example, GRIB parameter 62, abbreviated NCPCP, is 
98                 Large-scale precipitation.  The WRF variables NCPCP (as listed 
99                 in the WRF Registry) will be encoded as NCPCP.  The data will 
100                 have two decimals of precision, i.e., 1.23 kg/m^2 (i.e., 
101                 1.23 mm).
103       Note:
104           For GRIB encoding, parameters 1-127 are the standard parameters
105             described by the WMO GRIB convention.  Interpretation of parameters
106             128-254 vary depending on the setting of the CENTER, SUBCENTER, 
107             and PARAMETER_TABLE_VERSION.  In the default gribmap.txt file,
108             the CENTER and SUBCENTER are both set to be 255.  Five tables
109             with PARAMETER_TABLE_VERSION's varying between 2 and 6 are 
110             specified in the default gribmap.txt file.
112   2. Variable dimensions.
113       A GRIB file is a set of records of data.  Each record is a 2-dimensional,
114         horizontal field, i.e., temperature on a pressure surface,
115         In the case of the WRF Eulerian mass model, we have variables on Eta 
116         coordinates, so, we have, i.e., temperature on the 0.995 Eta level.
117       WRF outputs 3, 2 and 1-dimensional fields and point data.  3-dimensional 
118         (i.e., u-component of wind) fields are stored in GRIB as a series of 
119         horizontal 2-dimensional fields.  WRF horizontal 2-d fields are stored 
120         simply as horizontal 2-d fields (i.e., surface pressure).  
121         One-dimensional fields with dimension varying in the vertical (i.e., 
122         the vertical coordinate ZN), are stored as a set of 1x1 grids valid
123         at the center of the grid.  So, the third vertical level (ZN) is 
124         encoded as a 1x1 grid, valid at the center of the grid.  Point data
125         is also stored as a 1x1 grid valid at the center of the grid.
126       
127 VI. Performance
128    GRIB output has proven to be very fast, as compared to netcdf output.
130    Listed below is a comparison of file size and run-time for io_grib1 and
131    io_netcdf.  WRF was run twice, once with GRIB output and once with netcdf
132    output.  In both cases, 32 CPUS (on 16 machines) were dedicated to 
133    model integration, and one was CPU dedicated to I/O and quilting (using 
134    nio_tasks_per_group = 1).  The run had a domain with 360x485 grid points 
135   (12 km spacing) and 10-minute output.  The model was run out to 3 hours.
137    Shown is the file size for one-output time, the total model run-time 
138    and the time for I/O as listed in the WRF output.  In addition, the 
139    additional time that is required for a time-step just after model output
140    is listed.
142    Format    File Size    Run time     I/O time   additional time after output
143    netCDF     368 MB       719 s         1.26 s            3.3 s
144    GRIB v1    109 MB       519 s         0.28 s            1.9 s
147 VII. Testing
148    We (at WSI) have tested io_grib1 with WRF running on linux (redhat v 9.0).  
149    We typically use the intel fortran compiler (v8.0) and the gnu C compiler, 
150    so, that configuration has the most testing.  We have also done limited
151    testing with the Portland Group Compiler on linux.  We have not tested any
152    other platforms or compilers.
154 io_grib1
156 Author: Todd Hutchinson
157         WSI
158         thutchinson@wsi.com