NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FW: re FW: NOGAPS GRIB data decoder



Wendy,

Here's the first pass at a nogaps cdl file. The NOGAPS model contains more
variables then the P_msl variable. To comment out the unwanted vars, put a 
"//" in front of the var and the attributes.  I attached the cdl file,
next week I plan on putting out a decoders release.

Robb...


On Wed, 1 May 2002, FSU COAPS Unidata LDM wrote:

> Thank you all for the help. In my understanding, with a proper CDL file
> for the disired netCDF format, the regular "gribtonc" should be able to
> convert the NOGAPS GRIB (MSL pressure) data to the netCDF format we need.
> Robb Kambic (address@hidden) promised he would try to
> make one, but not done yet.
> 
> --
> Wendy Shi
> Senior Computer Programmer-Analyst
> Center for Ocean-Atmospheric Prediction Studies (COAPS)
> Florida State University, Tallahassee, FL 32306
> http://www.coaps.fsu.edu
> 
> On Tue, 30 Apr 2002, Jones, LT Carla wrote:
> 
> > Previously had incorrect email address.
> > 
> > -----Original Message-----
> > From: Jones, LT Carla 
> > Sent: Tuesday, April 30, 2002 1:12 PM
> > To: Sharfstein, Phil; 'address@hidden'
> > Cc: Huff, Dave; Dimitriou, David; Panek, Charles
> > Subject: FW: re FW: NOGAPS GRIB data decoder
> > 
> > 
> > 
> > 
> > -----Original Message-----
> > From: Williams, Anthony 
> > Sent: Tuesday, April 30, 2002 11:30 AM
> > To: Jones, LT Carla
> > Subject: RE: re FW: NOGAPS GRIB data decoder
> > 
> > 
> > LT Jones, could you forward this e-mail to Phil Sharfstein and
> > 'address@hidden', cc to Dave Dimitriou, Jim Dykes, Dave Huff, and
> > Czec Panek? Thanks, Tony.
> > 
> > 
> > 
> > Phil, we probably owe Wendy Shi an apology. The "GRIB->netCDF converters"
> > you and Wendy are talking about probably are not the same things as the
> > "current grb2nc, nc2grb, grib, netCDF, and locnet packages" that SOARS
> > project participants are using. From our conversation this morning, I
> > understand that you know the former to be COARDS compliant. Unless by
> > remarkable coincidence, the latter are not. As mentioned below, the
> > first-pass "GIEF-F" format was worked out among myself, Eric Davies at
> > Barrodale Computing Services, and Oleg Kiselyov at NPS, based in part on the
> > code from Jim Dykes, for the purpose of loading FNMOC (and certain other
> > originating center) GriB files into Barrodale's DataBlade, then passing them
> > to XiS for the 3rd Fleet Battle Lab.
> > 
> > You certainly are welcome to post our material on the USGODAE FTP site,
> > after the GIEF-F Version 1.0 Standard has been proved to work and the
> > resulting code has been loaded into Czec's CM area. I strongly recommend
> > that you do not do this unless you can post a very clear disclaimer, to the
> > effect that this special-purpose standard has no obligation to conform to
> > anything other than SOARS project needs, and that it is evolving rapidly.
> > After Mayday, the GIEF-F-1.0 netCDF files will not be legible to our
> > previous software, and we look forward to further divergences in pursuit of
> > compatibility with JMV, MetCast, and WxMap.
> > 
> > -----Original Message-----
> > From: Phil Sharfstein [mailto:address@hidden]
> > Sent: Monday, April 29, 2002 4:07 PM
> > 
> > To: Williams, Anthony
> > Cc: Dimitriou, David; Dykes, James; Huff, Dave; Panek, Charles
> > Subject: Re: re FW: NOGAPS GRIB data decoder
> > 
> > 
> > Tony,
> > I have another request for GRIB->NetCDF converters.  Since this will
> > probably be a common request from USGODAE server users, I would like to
> > place your release (or most current) version on the USGODAE FTP site. 
> > Please keep me updated as to the status & readiness for distribution of
> > the code.
> > 
> > Thanks,
> > 
> > -Phil
> > 
> > -- 
> >  Phil Sharfstein
> >  GODAE Project Manager
> >  Fleet Numerical Meteorology and Oceanography Center
> >  7 Grace Hopper Ave, Stop 1.
> >  Monterey, CA 93943
> >  831.656.4525
> >  address@hidden
> > 
> > On Wed, 2002-04-24 at 11:36, Williams, Anthony wrote:
> > > Dave, as you requested, Wendy Shi at FSU by now should have a complete
> > copy
> > > of all the current grb2nc, nc2grb, grib, netCDF, and locnet packages, with
> > > notes and test cases, reflecting the current FNMOC version of the original
> > > Jim Dykes NAVO software. These constitute the first-pass "GIEF-F" format
> > > worked out among myself, Eric Davies at Barrodale Computing Services, and
> > > Oleg Kiselyov at NPS. Although proved to work without loss for ten dozen
> > or
> > > so of Czec Panek's well-chosen operational GriB files, we want to change
> > > everything, and so we are still working on the definitive Version 1.0 list
> > > of Attributes for that format, second draft.
> > > 
> > > If no showstoppers appear, that Version takes effect on Mayday, at which
> > > time we will place everything under Configuration Management. Since Czec
> > is
> > > the GriB Domain Manager, I shall ask him to provide a "parking area" in
> > his
> > > CM directory for these files.
> > > 
> > > Thanks, Tony.
> > 
> > 
> 
> 

===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
address@hidden             WWW: http://www.unidata.ucar.edu/
===============================================================================
netcdf nogaps {         // 126 Wave, 18 Layer Spectral Model Aviation Run
                        // on expanded quasi-regular "thinned" grids

dimensions:

        record = UNLIMITED ;    // (reference time, forecast time)
        level = 26 ;

        lat = 181 ;             // latitude
        lon = 360 ;             // longitude
        lpdg = 2 ;              // boundary layer levels
        fhg = 2 ;               // fixed height above ground levels
        fh = 3 ;                // fixed height above ground levels
        soil_lpdg = 6 ;         // soil boundary layer levels
        ls_all = 7 ;            // whole atmosphere layer
        sigma = 1 ;             // sigma level
        datetime_len = 21 ;     // string length for datetime strings
        nmodels = 3 ;           // both AVN and SSIAVN models
        accum = 2 ;             // time range for accumulations
        nav = 1 ;               // For navigation.  Variables that use
                                // this dimension define a mapping between
                                // (lat, lon) indices and (lat, lon) coords.

        nav_len = 100 ;         // max string length for navigation strings

variables:

        double  reftime(record) ;       // reference time of the model
                reftime:long_name = "reference time" ;
                reftime:units = "hours since 1992-1-1" ;

        double  valtime(record) ;       // forecast time ("valid" time)
                valtime:long_name = "valid time" ;
                valtime:units = "hours since 1992-1-1" ;

        :record = "reftime, valtime" ;  // "dimension attribute" -- means
                                        // (reftime, valtime) uniquely
                                        // determine record

        char    datetime(record, datetime_len) ; // derived from reftime
                datetime:long_name = "reference date and time" ;
                // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)

        float   valtime_offset(record) ; // derived as valtime-reftime
                valtime_offset:long_name = "hours from reference time" ;
                valtime_offset:units = "hours" ;

        float   level(level) ;
                level:long_name = "level" ;
                level:units = "hectopascals" ;

        // (soil_lpdg_bot, soil_lpdg_top) uniquely determines soil_lpdg
                
        float   soil_lpdg_bot(soil_lpdg) ;
                soil_lpdg_bot:long_name = "bottom level of boundary layer 
between 2 levels from ground to levels" ;
                //soil_lpdg_bot:units = "centimeters" ;
                
        float   soil_lpdg_top(soil_lpdg) ;
                soil_lpdg_top:long_name = "top level of boundary layer between 
2 levels from ground to levels" ;
                //soil_lpdg_top:units = "centimeters" ;

        :lpdg = "lpdg_bot, lpdg_top" ; // (lpdg_bot, lpdg_top) uniquely
                                       // determines lpdg
                
        float   lpdg_bot(lpdg) ;
                lpdg_bot:long_name = "bottom level of boundary layer between 2 
levels at specified pressure differences from ground to levels" ;
                lpdg_bot:units = "hectopascals" ;
                
        float   lpdg_top(lpdg) ;
                lpdg_top:long_name = "top level of boundary layer between 2 
levels at specified pressure differences from ground to levels" ;
                lpdg_top:units = "hectopascals" ;

        float   fhg(fhg) ;               // fixed height above ground
                fhg:long_name = "fixed height above ground" ;
                fhg:units = "meters" ;

        float   fh(fh) ;                 // fixed height above ground
                fh:long_name = "fixed height above ground" ;
                fh:units = "meters" ;

        :ls_all = "ls_all_bot, ls_all_top" ;
                
        float   ls_all_bot(ls_all) ;
                ls_all_bot:long_name = "bottom level of atmosphere between 2 
sigma levels" ;
                ls_all_bot:units = "" ;
                
        float   ls_all_top(ls_all) ;
                ls_all_top:long_name = "top level of atmosphere between 2 sigma 
levels" ;
                ls_all_top:units = "" ;

        float   sigma(sigma) ;           // fixed height above ground
                sigma:long_name = "sigma level" ;
                sigma:units = "" ;       // dimensionless

        long    model_id(nmodels) ;
                model_id:long_name = "generating process ID number" ;

        // The following lat and lon coordinate variables are redundant,
        // since the navigation variables provide the necessary information.
        // The extra information is included here for human readability.

        float   lat(lat) ;
                lat:long_name = "latitude" ;
                lat:units = "degrees_north" ;

        float   lon(lon) ;
                lon:long_name = "longitude" ;
                lon:units = "degrees_east" ;

        // navigation variables all use nav dimension

        char    nav_model(nav, nav_len) ;        // navigation parameterization
                nav_model:long_name = "navigation model name" ;

        int     grid_type_code(nav) ;
                grid_type_code:long_name = "GRIB-1 GDS data representation 
type" ;

        char    grid_type(nav, nav_len) ;
                grid_type:long_name = "GRIB-1 grid type" ;

        char    grid_name(nav, nav_len) ;
                grid_name:long_name = "grid name" ;

        int     grid_center(nav) ;
                grid_center:long_name = "GRIB-1 originating center ID" ;

        int     grid_number(nav) ;
                grid_number:long_name = "GRIB-1 catalogued grid numbers" ;
                grid_number:_FillValue = -9999 ;

        char    i_dim(nav, nav_len) ;
                i_dim:long_name = "longitude dimension name" ;

        char    j_dim(nav, nav_len) ;
                j_dim:long_name = "latitude dimension name" ;

        int     Ni(nav) ;
                Ni:long_name = "number of points along a latitude circle" ;

        int     Nj(nav) ;
                Nj:long_name =  "number of points along a longitude circle" ;

        float   La1(nav) ;
                La1:long_name = "latitude of first grid point" ;
                La1:units = "degrees_north" ;

        float   Lo1(nav) ;
                Lo1:long_name = "longitude of first grid point" ;
                Lo1:units = "degrees_east" ;

        float   La2(nav) ;
                La2:long_name = "latitude of last grid point" ;
                La2:units = "degrees_north" ;

        float   Lo2(nav) ;
                Lo2:long_name = "longitude of last grid point" ;
                Lo2:units = "degrees_east" ;

        float   Di(nav) ;
                Di:long_name = "Longitudinal direction increment" ;
                Di:units = "degrees" ;

        float   Dj(nav) ;
                Dj:long_name = "Latitudinal direction increment" ;
                Dj:units = "degrees" ;

        byte    ResCompFlag(nav) ;
                ResCompFlag:long_name = "resolution and component flags" ;

        // end of navigation variables

        //float P(record, lat, lon) ;
                //P:long_name = "pressure" ;
                //P:units = "Pa" ;
                //P:_FillValue = -9999.f ;
                //P:navigation = "nav" ;

        float   P_maxwind(record, lat, lon) ;
                P_maxwind:long_name = "pressure at maximum wind" ;
                P_maxwind:units = "Pa" ;
                P_maxwind:_FillValue = -9999.f ;
                P_maxwind:navigation = "nav" ;

        float   P_trop(record, lat, lon) ;
                P_trop:long_name = "pressure at tropopause" ;
                P_trop:units = "Pa" ;
                P_trop:_FillValue = -9999.f ;
                P_trop:navigation = "nav" ;

        float   P_msl(record, lat, lon) ;
                P_msl:long_name = "pressure reduced to MSL" ;
                P_msl:units = "Pa" ;
                P_msl:_FillValue = -9999.f ;
                P_msl:navigation = "nav" ;

        float   P_sfc(record, lat, lon) ;
                P_sfc:long_name = "pressure at surface" ;
                P_sfc:units = "Pa" ;
                P_sfc:_FillValue = -9999.f ;
                P_sfc:navigation = "nav" ;

        //float RH(record, level, lat, lon) ;
                //RH:long_name = "relative humidity" ;
                //RH:units = "percent" ;
                //RH:_FillValue = -9999.f ;
                //RH:navigation = "nav" ;

        float   T(record, level, lat, lon) ;
                T:long_name = "temperature" ;
                T:units = "degK" ;
                T:_FillValue = -9999.f ;
                T:navigation = "nav" ;

        float   T_TD(record, level, lat, lon) ;
                T_TD:long_name = "Dew point depression" ;
                T_TD:units = "degK" ;
                T_TD:_FillValue = -9999.f ;
                T_TD:navigation = "nav" ;

        float   T_TD_sfc(record, lat, lon) ;
                T_TD_sfc:long_name = "Dew point depression" ;
                T_TD_sfc:units = "degK" ;
                T_TD_sfc:_FillValue = -9999.f ;
                T_TD_sfc:navigation = "nav" ;

        float   v(record, level, lat, lon ) ;
                v:long_name = "v-component of wind" ;
                v:units = "meters/second" ;
                v:_FillValue = -9999.f ;
                v:navigation = "nav" ;

        float   T_maxwind(record, lat, lon) ;
                T_maxwind:long_name = "temperature at maxwind" ;
                T_maxwind:units = "degK" ;
                T_maxwind:_FillValue = -9999.f ;
                T_maxwind:navigation = "nav" ;

        float   T_trop(record, lat, lon) ;
                T_trop:long_name = "temperature at tropopause" ;
                T_trop:units = "degK" ;
                T_trop:_FillValue = -9999.f ;
                T_trop:navigation = "nav" ;

        //float T_sigma(record, sigma, lat, lon) ;
                //T_sigma:long_name = "temperature" ;
                //T_sigma:units = "degK" ;
                //T_sigma:_FillValue = -9999.f ;
                //T_sigma:navigation = "nav" ;

        //float RH_sigma(record, sigma, lat, lon) ;
                //RH_sigma:long_name = "relative humidity at sigma level" ;
                //RH_sigma:units = "percent" ;
                //RH_sigma:_FillValue = -9999.f ;
                //RH_sigma:navigation = "nav" ;

        //float u_sigma(record, sigma, lat, lon ) ;
                //u_sigma:long_name = "u-component of wind" ;
                //u_sigma:units = "m/s" ;
                //u_sigma:_FillValue = -9999.f ;
                //u_sigma:navigation = "nav" ;

        //float v_sigma(record, sigma, lat, lon ) ;
                //v_sigma:long_name = "v-component of wind" ;
                //v_sigma:units = "m/s" ;
                //v_sigma:_FillValue = -9999.f ;
                //v_sigma:navigation = "nav" ;

        //float theta_sigma(record, sigma, lat, lon) ;
                //theta_sigma:long_name = "Potential temperature" ;
                //theta_sigma:units = "degK" ;
                //theta_sigma:_FillValue = -9999.f ;
                //theta_sigma:navigation = "nav" ;

        //float omega_sigma(record, sigma, lat, lon) ;
                //omega_sigma:long_name = "pressure vertical velocity" ;
                //omega_sigma:units = "Pa/s" ;
                //omega_sigma:_FillValue = -9999.f ;
                //omega_sigma:navigation = "nav" ;      // georeference info

        float   Z(record, level, lat, lon) ;
                Z:long_name = "geopotential height" ;
                Z:units = "gp m" ;
                Z:_FillValue = -9999.f ;
                Z:navigation = "nav" ;  // georeference info

        float   Z_maxwind(record, lat, lon) ;
                Z_maxwind:long_name = "geopotential height at maxwind" ;
                Z_maxwind:units = "gp m" ;
                Z_maxwind:_FillValue = -9999.f ;
                Z_maxwind:navigation = "nav" ;

        //float Z_trop(record, lat, lon) ;
                //Z_trop:long_name = "geopotential height at tropopause" ;
                //Z_trop:units = "gp m" ;
                //Z_trop:_FillValue = -9999.f ;
                //Z_trop:navigation = "nav" ;

        //float T_lpdg(record, lpdg, lat, lon) ;
                //T_lpdg:long_name = "temperature in boundary layer" ;
                //T_lpdg:units = "degK" ;
                //T_lpdg:_FillValue = -9999.f ;
                //T_lpdg:navigation = "nav" ;

        //float RH_lpdg(record, lpdg, lat, lon) ;
                //RH_lpdg:long_name = "relative humidity in boundary layer" ;
                //RH_lpdg:units = "percent" ;
                //RH_lpdg:_FillValue = -9999.f ;
                //RH_lpdg:navigation = "nav" ;

        //float cin_lpdg(record, lpdg, lat, lon ) ;
                //cin_lpdg:long_name = "boundary convective inhibition" ;
                //cin_lpdg:units = "J/kg" ;
                //cin_lpdg:_FillValue = -9999.f ;
                //cin_lpdg:navigation = "nav" ;

        //float spec_hum_lpdg(record, lpdg, lat, lon ) ;
                //spec_hum_lpdg:long_name = "specific humidity" ;
                //spec_hum_lpdg:units = "kg/kg" ;
                //spec_hum_lpdg:_FillValue = -9999.f ;
                //spec_hum_lpdg:navigation = "nav" ;

        //float cape_lpdg(record, lpdg, lat, lon ) ;
                //cape_lpdg:long_name = "boundary convective available 
potential energy" ;
                //cape_lpdg:units = "J/kg" ;
                //cape_lpdg:_FillValue = -9999.f ;
                //cape_lpdg:navigation = "nav" ;

        //float u_lpdg(record, lpdg, lat, lon) ;
                //u_lpdg:long_name = "u-component of wind in boundary layer" ;
                //u_lpdg:units = "meters/second" ;
                //u_lpdg:_FillValue = -9999.f ;
                //u_lpdg:navigation = "nav" ;

        //float v_lpdg(record, lpdg, lat, lon) ;
                //v_lpdg:long_name = "v-component of wind in boundary layer" ;
                //v_lpdg:units = "meters/second" ;
                //v_lpdg:_FillValue = -9999.f ;
                //v_lpdg:navigation = "nav" ;

        float   u(record, level, lat, lon) ;
                u:long_name = "u-component of wind" ;
                u:units = "meters/second" ;
                u:_FillValue = -9999.f ;
                u:navigation = "nav" ;

        float   u_maxwind(record, lat, lon) ;
                u_maxwind:long_name = "u-component of wind at max wind" ;
                u_maxwind:units = "meters/second" ;
                u_maxwind:_FillValue = -9999.f ;
                u_maxwind:navigation = "nav" ;

        //float u_trop(record, lat, lon) ;
                //u_trop:long_name = "u-component of wind at tropopause" ;
                //u_trop:units = "meters/second" ;
                //u_trop:_FillValue = -9999.f ;
                //u_trop:navigation = "nav" ;

        //float v(record, level, lat, lon) ;
                //v:long_name = "v-component of wind" ;
                //v:units = "meters/second" ;
                //v:_FillValue = -9999.f ;
                //v:navigation = "nav" ;

        float   v_maxwind(record, lat, lon) ;
                v_maxwind:long_name = "v-component of wind at max wind" ;
                v_maxwind:units = "meters/second" ;
                v_maxwind:_FillValue = -9999.f ;
                v_maxwind:navigation = "nav" ;

        //float v_trop(record, lat, lon) ;
                //v_trop:long_name = "v-component of wind at tropopause" ;
                //v_trop:units = "meters/second" ;
                //v_trop:_FillValue = -9999.f ;
                //v_trop:navigation = "nav" ;

        float   SPD_fhg(record, fhg, lat, lon) ;
                SPD_fhg:long_name = "wind speed at fixed height above ground" ;
                SPD_fhg:units = "meters/second" ;
                SPD_fhg:_FillValue = -9999.f ;
                SPD_fhg:navigation = "nav" ;

        float   u_fhg(record, fhg, lat, lon) ;
                u_fhg:long_name = "u-component of wind at fixed height above 
ground" ;
                u_fhg:units = "meters/second" ;
                u_fhg:_FillValue = -9999.f ;
                u_fhg:navigation = "nav" ;

        float   v_fhg(record, fhg, lat, lon) ;
                v_fhg:long_name = "v-component of wind at fixed height above 
ground" ;
                v_fhg:units = "meters/second" ;
                v_fhg:_FillValue = -9999.f ;
                v_fhg:navigation = "nav" ;

        //float RH_fhg(record, fhg, lat, lon) ;
                //RH_fhg:long_name = "relative humidity at fixed height above 
ground" ;
                //RH_fhg:units = "percent" ;
                //RH_fhg:_FillValue = -9999.f ;
                //RH_fhg:navigation = "nav" ;

        //float spec_hum_fhg(record, fhg, lat, lon) ;
                //spec_hum_fhg:long_name = "specific humidity at fixed height 
above ground" ;
                //spec_hum_fhg:units = "kg/kg" ;
                //spec_hum_fhg:_FillValue = -9999.f ;
                //spec_hum_fhg:navigation = "nav" ;

        //float T_fhg(record, fhg, lat, lon) ;
                //T_fhg:long_name = "temperature at fixed height above ground" ;
                //T_fhg:units = "degK" ;
                //T_fhg:_FillValue = -9999.f ;
                //T_fhg:navigation = "nav" ;

        //float Tmax_fhg(record, fhg, lat, lon) ;
                //Tmax_fhg:long_name = " maximum temperature at fixed height 
above ground" ;
                //Tmax_fhg:units = "degK" ;
                //Tmax_fhg:_FillValue = -9999.f ;
                //Tmax_fhg:navigation = "nav" ;

        //float Tmin_fhg(record, fhg, lat, lon) ;
                //Tmin_fhg:long_name = " minimum temperature at fixed height 
above ground" ;
                //Tmin_fhg:units = "degK" ;
                //Tmin_fhg:_FillValue = -9999.f ;
                //Tmin_fhg:navigation = "nav" ;

        //float u_fh(record, fh, lat, lon) ;
                //u_fh:long_name = "u-component of wind at fixed height above 
ground" ;
                //u_fh:units = "meters/second" ;
                //u_fh:_FillValue = -9999.f ;
                //u_fh:navigation = "nav" ;

        //float v_fh(record, fh, lat, lon) ;
                //v_fh:long_name = "v-component of wind at fixed height above 
ground" ;
                //v_fh:units = "meters/second" ;
                //v_fh:_FillValue = -9999.f ;
                //v_fh:navigation = "nav" ;

        //float RH_fh(record, fh, lat, lon) ;
                //RH_fh:long_name = "relative humidity at fixed height above 
ground" ;
                //RH_fh:units = "percent" ;
                //RH_fh:_FillValue = -9999.f ;
                //RH_fh:navigation = "nav" ;

        //float T_fh(record, fh, lat, lon) ;
                //T_fh:long_name = "temperature at fixed height above ground" ;
                //T_fh:units = "degK" ;
                //T_fh:_FillValue = -9999.f ;
                //T_fh:navigation = "nav" ;

        //float RH_ls(record, ls_all, lat, lon) ;
                //RH_ls:long_name = "relative humidity" ;
                //RH_ls:units = "percent" ;
                //RH_ls:_FillValue = -9999.f ;
                //RH_ls:navigation = "nav" ;

        float   PRECIP(record, lat, lon) ;
                PRECIP:long_name = "total precipitation over accumulation 
interval" ;
                PRECIP:units = "kg/m2" ;
                PRECIP:_FillValue = -9999.f ;
                PRECIP:navigation = "nav" ;

        //float PRECIP_accum_times(record, accum) ;
                //PRECIP_accum_times:long_name = "precipitation accumulation 
interval" ;
                //PRECIP_accum_times:units = "hours" ;
                //PRECIP_accum_times:_FillValue = -9999.f ;

        float   precip_cn(record, lat, lon) ;
                precip_cn:long_name = "convective precipitation over 
accumulation interval" ;
                precip_cn:units = "kg/m2" ;
                precip_cn:_FillValue = -9999.f ;
                precip_cn:navigation = "nav" ;

        //float precip_cn_accum_times(record, accum) ;
                //precip_cn_accum_times:long_name = "convective precipitation 
accumulation interval" ;
                //precip_cn_accum_times:units = "hours" ;
                //precip_cn_accum_times:_FillValue = -9999.f ;

        float   preix(record, lat, lon ) ;
                preix:long_name = "precipitation index" ;
                preix:units = "" ;
                preix:_FillValue = -9999.f ;
                preix:navigation = "nav" ;

        //float watr(record, lat, lon ) ;
                //watr:long_name = "water runoff" ;
                //watr:units = "kg/m2" ;
                //watr:_FillValue = -9999.f ;
                //watr:navigation = "nav" ;

        //float pr_water_atm(record, lat, lon ) ; // entire atmosphere as 
single layer
                //pr_water_atm:long_name = "precipitable water" ;
                //pr_water_atm:units = "kg/m2" ;
                //pr_water_atm:_FillValue = -9999.f ;
                //pr_water_atm:navigation = "nav" ;

        //float cprat(record, lat, lon) ;
                //cprat:long_name = "Convective precipitation rate" ;
                //cprat:units = "kg/m2/sec" ;
                //cprat:_FillValue = -9999.f ;
                //cprat:navigation = "nav" ;

        //float crain(record, lat, lon ) ;
                //crain:long_name = "Categorical rain" ;
                //crain:_FillValue = -9999.f ;
                //crain:navigation = "nav" ;

        //float cfrzrn(record, lat, lon ) ;
                //cfrzrn:long_name = "Categorical freezing rain" ;
                //cfrzrn:_FillValue = -9999.f ;
                //cfrzrn:navigation = "nav" ;

        float   snow(record, lat, lon ) ;
                snow:long_name = "snow dept" ;
                snow:_FillValue = -9999.f ;
                snow:navigation = "nav" ;

        float   ice_conc(record, lat, lon ) ;
                ice_conc:long_name = "Ice concentration" ;
                ice_conc:_FillValue = -9999.f ;
                ice_conc:navigation = "nav" ;

        //float LI(record, lat, lon ) ;
                //LI:long_name = "lifted index" ;
                //LI:units = "degK" ;
                //LI:_FillValue = -9999.f ;       // To fill grid corners
                //LI:navigation = "nav" ;

        //float T_sfc(record, lat, lon) ;
                //T_sfc:long_name = "surface temperature" ;
                //T_sfc:units = "degK" ;
                //T_sfc:_FillValue = -9999.f ;
                //T_sfc:navigation = "nav" ;

        //float Z_sfc(record, lat, lon) ;
                //Z_sfc:long_name = "terrain" ;
                //Z_sfc:units = "gp m" ;
                //Z_sfc:_FillValue = -9999.f ;
                //Z_sfc:navigation = "nav" ;

        float   sen_ht_sfc(record, lat, lon ) ;
                sen_ht_sfc:long_name = "Sensible heat net flux" ;
                sen_ht_sfc:units = "W / m2" ;
                sen_ht_sfc:_FillValue = -9999.f ;
                sen_ht_sfc:navigation = "nav" ;

        //float cin_sfc(record, lat, lon ) ;
                //cin_sfc:long_name = "surface convective inhibition" ;
                //cin_sfc:units = "J/kg" ;
                //cin_sfc:_FillValue = -9999.f ;
                //cin_sfc:navigation = "nav" ;

        float   rdn_swsrf_sfc(record, lat, lon ) ;
                rdn_swsrf_sfc:long_name = "net short wave rad. surface" ;
                rdn_swsrf_sfc:units = "W/m2" ;
                rdn_swsrf_sfc:_FillValue = -9999.f ;
                rdn_swsrf_sfc:navigation = "nav" ;

        //float dswrf_sfc(record, lat, lon ) ;
                //dswrf_sfc:long_name = "Downward short wave rad. flux" ;
                //dswrf_sfc:units = "W/m2" ;
                //dswrf_sfc:_FillValue = -9999.f ;
                //dswrf_sfc:navigation = "nav" ;

        //float ulwrf_sfc(record, lat, lon ) ;
                //ulwrf_sfc:long_name = "Upward long wave rad. flux" ;
                //ulwrf_sfc:units = "W / m2" ;
                //ulwrf_sfc:_FillValue = -9999.f ;
                //ulwrf_sfc:navigation = "nav" ;

        //float dlwrf_sfc(record, lat, lon ) ;
                //dlwrf_sfc:long_name = "Downward long wave rad. flux" ;
                //dlwrf_sfc:units = "W / m2" ;
                //dlwrf_sfc:_FillValue = -9999.f ;
                //dlwrf_sfc:navigation = "nav" ;

        //float land_mask_sfc(record, lat, lon ) ;
                //land_mask_sfc:long_name = "Land-Sea mask" ;
                //land_mask_sfc:units = "bit" ;
                //land_mask_sfc:_FillValue = -9999.f ;
                //land_mask_sfc:navigation = "nav" ;

        //float albedo_sfc(record, lat, lon ) ;
                //albedo_sfc:long_name = "Albedo" ;
                //albedo_sfc:_FillValue = -9999.f ;
                //albedo_sfc:navigation = "nav" ;

        //      Latent heat net flux

        float   lat_ht_sfc(record, lat, lon ) ;
                lat_ht_sfc:long_name = "Latent heat net flux" ;
                lat_ht_sfc:units = "W / m2" ;
                lat_ht_sfc:_FillValue = -9999.f ;
                lat_ht_sfc:navigation = "nav" ;

        //float LI4_sfc(record, lat, lon ) ;
                //LI4_sfc:long_name = "Best 4 layer lift index" ;
                //LI4_sfc:units = "K" ;
                //LI4_sfc:_FillValue = -9999.f ;
                //LI4_sfc:navigation = "nav" ;

        //float cape_sfc(record, lat, lon ) ;
                //cape_sfc:long_name = "surface convective available potential 
energy" ;
                //cape_sfc:units = "J/kg" ;
                //cape_sfc:_FillValue = -9999.f ;
                //cape_sfc:navigation = "nav" ;

        float   u_flx_sfc(record, lat, lon ) ;
                u_flx_sfc:long_name = "Momentum flux, u componet" ;
                u_flx_sfc:units = "N/m2" ;
                u_flx_sfc:_FillValue = -9999.f ;
                u_flx_sfc:navigation = "nav" ;

        float   v_flx_sfc(record, lat, lon ) ;
                v_flx_sfc:long_name = "Momentum flux, v componet" ;
                v_flx_sfc:units = "N/m2" ;
                v_flx_sfc:_FillValue = -9999.f ;
                v_flx_sfc:navigation = "nav" ;

        //      Planetary boundary layer height

        float   hpbl_sfc(record) ;
                hpbl_sfc:long_name = "Planetary boundary layer height" ;
                hpbl_sfc:units = "m" ;
                hpbl_sfc:_FillValue = -9999.f ;
                hpbl_sfc:navigation = "nav" ;

        //float RH_atm(record, lat, lon) ;
                //RH_atm:long_name = "relative humidity entire atmosphere" ;
                //RH_atm:units = "percent" ;
                //RH_atm:_FillValue = -9999.f ;
                //RH_atm:navigation = "nav" ;

        //float totoz_atm(record, lat, lon) ;
                //totoz_atm:long_name = "Total ozone entire atmosphere" ;
                //totoz_atm:units = "Dobson" ;
                //totoz_atm:_FillValue = -9999.f ;
                //totoz_atm:navigation = "nav" ;

        //float RH_frzlvl(record, lat, lon ) ;
                //RH_frzlvl:long_name = "relative humidity at 0 degree 
isotherm" ;
                //RH_frzlvl:units = "percent" ;
                //RH_frzlvl:_FillValue = -9999.f ;
                //RH_frzlvl:navigation = "nav" ;

        //float Z_frzlvl(record, lat, lon ) ;
                //Z_frzlvl:long_name = "geopotential height at 0 isotherm" ;
                //Z_frzlvl:units = "gp m" ;
                //Z_frzlvl:_FillValue = -9999.f ;
                //Z_frzlvl:navigation = "nav" ;

        //float T_hctl(record, lat, lon) ;
                //T_hctl:long_name = "temperature at high cloud top level" ;
                //T_hctl:units = "degK" ;
                //T_hctl:_FillValue = -9999.f ;
                //T_hctl:navigation = "nav" ;

        //float P_hctl(record, lat, lon) ;
                //P_hctl:long_name = "Pressure at high cloud top level" ;
                //P_hctl:units = "Pa" ;
                //P_hctl:_FillValue = -9999.f ;
                //P_hctl:navigation = "nav" ;

        //float T_mctl(record, lat, lon) ;
                //T_mctl:long_name = "temperature at middle cloud top level" ;
                //T_mctl:units = "degK" ;
                //T_mctl:_FillValue = -9999.f ;
                //T_mctl:navigation = "nav" ;

        //float P_mctl(record, lat, lon) ;
                //P_mctl:long_name = "Pressure at middle cloud top level" ;
                //P_mctl:units = "Pa" ;
                //P_mctl:_FillValue = -9999.f ;
                //P_mctl:navigation = "nav" ;

        //float T_lctl(record, lat, lon) ;
                //T_lctl:long_name = "temperature at low cloud top level" ;
                //T_lctl:units = "degK" ;
                //T_lctl:_FillValue = -9999.f ;
                //T_lctl:navigation = "nav" ;

        //float P_lctl(record, lat, lon) ;
                //P_lctl:long_name = "Pressure at low cloud top level" ;
                //P_lctl:units = "Pa" ;
                //P_lctl:_FillValue = -9999.f ;
                //P_lctl:navigation = "nav" ;

        //float P_mcbl(record, lat, lon) ;
                //P_mcbl:long_name = "Pressure at middle cloud bottom level" ;
                //P_mcbl:units = "Pa" ;
                //P_mcbl:_FillValue = -9999.f ;
                //P_mcbl:navigation = "nav" ;

        //float P_cctl(record, lat, lon) ;
                //P_cctl:long_name = "Pressure at convective cloud top layer" ;
                //P_cctl:units = "Pa" ;
                //P_cctl:_FillValue = -9999.f ;
                //P_cctl:navigation = "nav" ;

        //float P_ccbl(record, lat, lon) ;
                //P_ccbl:long_name = "Pressure at convective cloud bottom 
layer" ;
                //P_ccbl:units = "Pa" ;
                //P_ccbl:_FillValue = -9999.f ;
                //P_ccbl:navigation = "nav" ;

        //float uswrf_topa(record, lat, lon) ;
                //uswrf_topa:long_name = "Upward short wave rad.flux" ;
                //uswrf_topa:units = "W / m2" ;
                //uswrf_topa:_FillValue = -9999.f ;
                //uswrf_topa:navigation = "nav" ;

        //float ulwrf_topa(record, lat, lon) ;
                //ulwrf_topa:long_name = "Upward long wave rad.flux" ;
                //ulwrf_topa:units = "W / m2" ;
                //ulwrf_topa:_FillValue = -9999.f ;
                //ulwrf_topa:navigation = "nav" ;

        //float N(record, lat, lon) ;
                //N:long_name = "Total cloud cover" ;
                //N:units = "percent" ;
                //N:_FillValue = -9999.f ;
                //N:navigation = "nav" ;

        //float N_hcy(record, lat, lon) ;
                //N_hcy:long_name = "Total cloud cover, high cloud layer" ;
                //N_hcy:_FillValue = -9999.f ;
                //N_hcy:navigation = "nav" ;

        //float N_mcy(record, lat, lon) ;
                //N_mcy:long_name = "Total cloud cover, middle cloud layer" ;
                //N_mcy:_FillValue = -9999.f ;
                //N_mcy:navigation = "nav" ;

        //float N_lcy(record, lat, lon) ;
                //N_lcy:long_name = "Total cloud cover, low cloud layer" ;
                //N_lcy:_FillValue = -9999.f ;
                //N_lcy:navigation = "nav" ;

        //float N_bcy(record, lat, lon) ;
                //N_bcy:long_name = "Total cloud cover, boundary layer cloud 
layer" ;
                //N_bcy:_FillValue = -9999.f ;
                //N_bcy:navigation = "nav" ;

        //float N_ccy(record, lat, lon) ;
                //N_ccy:long_name = "Total cloud cover, covective cloud layer" ;
                //N_ccy:_FillValue = -9999.f ;
                //N_ccy:navigation = "nav" ;

        //float N_atm(record, lat, lon) ;
                //N_atm:long_name = "Total cloud cover entire atmosphere" ;
                //N_atm:_FillValue = -9999.f ;
                //N_atm:navigation = "nav" ;

        //float P_hcbl(record, lat, lon) ;
                //P_hcbl:long_name = "Pressure, high cloud bottom level" ;
                //P_hcbl:units = "Pa" ;
                //P_hcbl:_FillValue = -9999.f ;
                //P_hcbl:navigation = "nav" ;

        //float P_lcbl(record, lat, lon) ;
                //P_lcbl:long_name = "Pressure, low cloud bottom level" ;
                //P_lcbl:units = "Pa" ;
                //P_lcbl:_FillValue = -9999.f ;
                //P_lcbl:navigation = "nav" ;

        float   omega(record, level, lat, lon) ;
                omega:long_name = "pressure vertical velocity" ;
                omega:units = "Pa/s" ;
                omega:_FillValue = -9999.f ;
                omega:navigation = "nav" ;      // georeference info

        float   absvor(record, level, lat, lon) ;
                absvor:long_name = "absolute vorticity" ;
                absvor:units = "1/s" ;
                absvor:_FillValue = -9999.f ;
                absvor:navigation = "nav" ;

        //      Cloud water 

        //float clwmr(record, level, lat, lon ) ;
                //clwmr:long_name = "Cloud water" ;
                //clwmr:units = "kg / kg" ;
                //clwmr:_FillValue = -9999.f ;
                //clwmr:navigation = "nav" ;

        //float cloud_wat_atm(record, lat, lon ) ;
                //cloud_wat_atm:long_name = "Cloud water" ;
                //cloud_wat_atm:units = "kg / m2" ;
                //cloud_wat_atm:_FillValue = -9999.f ;
                //cloud_wat_atm:navigation = "nav" ;

        //float snow_wat(record, lat, lon ) ;
                //snow_wat:long_name = "Water equiv. of accumulated snow depth" 
;
                //snow_wat:units = "kg / m2" ;
                //snow_wat:_FillValue = -9999.f ;
                //snow_wat:navigation = "nav" ;

        //float cicepl(record, lat, lon ) ;
                //cicepl:long_name = "Categorical ice pellets" ;
                //cicepl:_FillValue = -9999.f ;
                //cicepl:navigation = "nav" ;

        //      Ozone mixing ratio 

        //float o3mr(record, level, lat, lon ) ;
                //o3mr:long_name = "Ozone mixing ratio" ;
                //o3mr:units = "kg / kg" ;
                //o3mr:_FillValue = -9999.f ;
                //o3mr:navigation = "nav" ;

        //float Zdev(record, level, lat, lon ) ;
                //Zdev:long_name = "Geopotential height anomaly" ;
                //Zdev:units = "gp m" ;
                //Zdev:_FillValue = -9999.f ;
                //Zdev:navigation = "nav" ;

        float   gpt_hgt5_sfc(record, lat, lon ) ;
                gpt_hgt5_sfc:long_name = "5-wave Geopotential height" ;
                gpt_hgt5_sfc:units = "gp m" ;
                gpt_hgt5_sfc:_FillValue = -9999.f ;
                gpt_hgt5_sfc:navigation = "nav" ;

        //float gflux(record, lat, lon ) ;
                //gflux:long_name = "Ground heat flux" ;
                //gflux:units = "W / m2" ;
                //gflux:_FillValue = -9999.f ;
                //gflux:navigation = "nav" ;

        //float vert_sshr_trop(record, lat, lon ) ;
                //vert_sshr_trop:long_name = "vertical speed shear" ;
                //vert_sshr_trop:units = "1/s" ;
                //vert_sshr_trop:_FillValue = -9999.f ;
                //vert_sshr_trop:navigation = "nav" ;

        //float T_lbls(record, soil_lpdg, lat, lon ) ;
                //T_lbls:long_name = "Temperature layer between 2 depth below 
surface" ;
                //T_lbls:units = "K" ;
                //T_lbls:_FillValue = -9999.f ;
                //T_lbls:navigation = "nav" ;

        //float Z_htfl(record, lat, lon ) ;
                //Z_htfl:long_name = "geopotential height" ;
                //Z_htfl:units = "gp m" ;
                //Z_htfl:_FillValue = -9999.f ;
                //Z_htfl:navigation = "nav" ;

        //float RH_htfl(record, lat, lon ) ;
                //RH_htfl:long_name = "relative humidity" ;
                //RH_htfl:units = "percent" ;
                //RH_htfl:_FillValue = -9999.f ;
                //RH_htfl:navigation = "nav" ;

        float   srf_rn(record, lat, lon) ;
                srf_rn:long_name = "surface roughness" ;
                srf_rn:units = "m" ;
                srf_rn:_FillValue = -9999.f ;
                srf_rn:navigation = "nav" ;

        float   Kind_sfc(record, lat, lon) ;
                Kind_sfc:long_name = "K index" ;
                Kind_sfc:units = "degK" ;
                Kind_sfc:_FillValue = -9999.f ;
                Kind_sfc:navigation = "nav" ;

        //float reserved(record, level, lat, lon ) ;
                //reserved:long_name = "" ;
                //reserved:_FillValue = -9999.f ;
                //reserved:navigation = "nav" ;

        //float reserved_lbls(record, soil_lpdg, lat, lon ) ;
                //reserved_lbls:long_name = "Volumetric soil moisture content" ;
                //reserved_lbls:_FillValue = -9999.f ;
                //reserved_lbls:navigation = "nav" ;

        //float reserved_atm(record, lat, lon ) ;
                //reserved_atm:long_name = "Cloud workfunction" ;
                //reserved_atm:_FillValue = -9999.f ;
                //reserved_atm:navigation = "nav" ;

        //float reserved_sfc(record, lat, lon ) ;
                //reserved_sfc:long_name = "Meridional flux of gravity wave 
stress" ;
                //reserved_sfc:_FillValue = -9999.f ;
                //reserved_sfc:navigation = "nav" ;

// global attributes:
                :history = "created by gribtonc from HRS broadcast" ;
                :title = "NMC Global Product Set" ;
                :Conventions = "NUWG" ;
                :version = 0.0 ;                // still just a draft

data:

 level = 1000, 975, 950, 925, 900, 850, 800, 750, 700, 650, 600, 550, 500, 450,
         400, 350, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 ;
 soil_lpdg_top = 0, 0, 5, 10, 60, 150 ;
 soil_lpdg_bot = 5, 10, 30, 200, 90, 180 ;
 lpdg_bot =  0, 0 ;
 lpdg_top = 30, 180 ;
 fhg = 2, 10 ;
 fh = 1829, 2743, 3658 ;
 ls_all_top = 0.0, 0.33, 0.44, 0.44, 0.47, 0.84, 0.72 ;
 ls_all_bot = 1.0, 1.0, 1.0, 0.72, 1.0, 0.98, 0.94 ;
 sigma = 0.9950 ;
 model_id = 58, 63, 187;

 // Navigation
 nav_model = "GRIB1" ;
 grid_type_code = 0 ;
 grid_type  = "Latitude/Longitude" ;
 grid_name = "Global 1.0 x 1.0 degree grid" ;
 grid_center = 58 ;   // US Navy  - Fleet Numerical Oceanography Center
 grid_number = 240 ;   
 i_dim = "lon" ;
 j_dim = "lat" ;
 Ni = 360 ;
 Nj = 181 ;
 La1 = -90.0 ;
 Lo1 = 0.0 ;
 La2 = 90.0 ;
 Lo2 = 359.0 ;
 Di = 1.0 ;
 Dj = 1.0 ;
 ResCompFlag = 0x80 ;

 lon =   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
        10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
        20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
        30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
        40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
        50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
        60,   61,   62,   63,   64,   65,   66,   67,   68,   69,
        70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
        80,   81,   82,   83,   84,   85,   86,   87,   88,   89,
        90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
       100,  101,  102,  103,  104,  105,  106,  107,  108,  109,
       110,  111,  112,  113,  114,  115,  116,  117,  118,  119,
       120,  121,  122,  123,  124,  125,  126,  127,  128,  129,
       130,  131,  132,  133,  134,  135,  136,  137,  138,  139,
       140,  141,  142,  143,  144,  145,  146,  147,  148,  149,
       150,  151,  152,  153,  154,  155,  156,  157,  158,  159,
       160,  161,  162,  163,  164,  165,  166,  167,  168,  169,
       170,  171,  172,  173,  174,  175,  176,  177,  178,  179,
       180,  181,  182,  183,  184,  185,  186,  187,  188,  189,
       190,  191,  192,  193,  194,  195,  196,  197,  198,  199,
       200,  201,  202,  203,  204,  205,  206,  207,  208,  209,
       210,  211,  212,  213,  214,  215,  216,  217,  218,  219,
       220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
       230,  231,  232,  233,  234,  235,  236,  237,  238,  239,
       240,  241,  242,  243,  244,  245,  246,  247,  248,  249,
       250,  251,  252,  253,  254,  255,  256,  257,  258,  259,
       260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
       270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
       280,  281,  282,  283,  284,  285,  286,  287,  288,  289,
       290,  291,  292,  293,  294,  295,  296,  297,  298,  299,
       300,  301,  302,  303,  304,  305,  306,  307,  308,  309,
       310,  311,  312,  313,  314,  315,  316,  317,  318,  319,
       320,  321,  322,  323,  324,  325,  326,  327,  328,  329,
       330,  331,  332,  333,  334,  335,  336,  337,  338,  339,
       340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
       350,  351,  352,  353,  354,  355,  356,  357,  358,  359 ;

 lat = -90,  -89,  -88,  -87,  -86,  -85,  -84,  -83,  -82,  -81,
       -80,  -79,  -78,  -77,  -76,  -75,  -74,  -73,  -72,  -71,
       -70,  -69,  -68,  -67,  -66,  -65,  -64,  -63,  -62,  -61,
       -60,  -59,  -58,  -57,  -56,  -55,  -54,  -53,  -52,  -51,
       -50,  -49,  -48,  -47,  -46,  -45,  -44,  -43,  -42,  -41,
       -40,  -39,  -38,  -37,  -36,  -35,  -34,  -33,  -32,  -31,
       -30,  -29,  -28,  -27,  -26,  -25,  -24,  -23,  -22,  -21,
       -20,  -19,  -18,  -17,  -16,  -15,  -14,  -13,  -12,  -11,
       -10,   -9,   -8,   -7,   -6,   -5,   -4,   -3,   -2,   -1,
         0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
        10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
        20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
        30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
        40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
        50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
        60,   61,   62,   63,   64,   65,   66,   67,   68,   69,
        70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
        80,   81,   82,   83,   84,   85,   86,   87,   88,   89,
        90 ; 

}