[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 ; 

}