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

Re: grid_number in netCDF file



On Mon, 5 Apr 1999, Tom Whittaker wrote:

> Hi Robb:
> 
> Don suggested I send this along to you.
> 
> He had kindly sent me a netCDF file with ruc2 data in it so I
> could test an application I'm writing.  When I opened the file,
> my code failed when trying to reference the "grid_number".  What
> I found was the file defined:
> 
>  int grid_number(nav, ngrids) ;
>    grid_number:long_name = "GRIB-1 catalogued grid numbers" ;
>    grid_number:_FillValue = -9999 ;
> 
> where "ngrids" dimension is two.  What's strange is that 'ngrids'
> doesn't seem to appear anywhere else in the CDL.

Tom,

ngrids is a dimension only, the grid_number should be at the bottom of the
cdl file:

grid_number = 236, 255 ;

I  attached  ruc2.cdl in case your copy was somehow corrupted.  I used
ncdump on a ruc2.nc file today and located grid_number ok, maybe the file
Don sent was corrupted.  This happens once in a while when there is no
disk space to write the ruc2.nc file.  These files are large:
48478444 Apr  5 12:42 99040518_ruc2.nc


Robb...


> 
> I wondered what the story was with this, and what I needed to be
> prepared for in my application...it almost looks like two
> different grid formats/types might appear in one netCDF file?  Or
> am I missing something else?
> 
> Words of wisdom appreciated...thanks...
> 
> tom
> 
> -- 
> Tom Whittaker (address@hidden)
> University of Wisconsin-Madison
> Space Science and Engineering Center
> Phone/VoiceMail: 608/262-2759
> Fax: 608/263-6738
> 

===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
address@hidden             WWW: http://www.unidata.ucar.edu/
===============================================================================
netcdf ruc2 {           // RUC/MAPS model on Lambert conformal CONUS grid
                        // (isentropic; scale: 40km at 40N)
dimensions:

        record = UNLIMITED ;    // (reference time, forecast time)
        level = 40 ;            // isobaric levels
        hybridlevel = 40 ;      // hybrid levels
        soillevel = 5 ;         // soil levels in centimeters
        soil_lpdg = 4 ;         // soil boundary layer levels
        lpdg = 6 ;              // boundary layer levels
        fhg = 2 ;               // fixed height above ground levels
        x =  151 ;
        y =  113 ;
        datetime_len = 21 ;     // string length for datetime strings
        accum = 2 ;             // time range for accumulations
        nav = 1 ;               // For navigation.  Variables that use
                                // this dimension define a mapping between
                                // (x,y) indices and (lat, lon) coords.
        nav_len = 100 ;         // max length for navigation character strings
        ngrids = 2;             // number of grids

variables:

        :record = "reftime, valtime" ;  // "dimension attribute" -- means
                                        // (reftime, valtime) uniquely 
                                        // determines 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" ;

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

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

        float   hybridlevel(hybridlevel) ;
                hybridlevel:long_name = "Hybrid level" ;

        float   soillevel(soillevel) ;
                soillevel:long_name = "Soil level" ;

        :soil_lpdg = "soil_lpdg_bot, soil_lpdg_top" ;  
        // (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" ;

        // fixed height above ground

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

        long    model_id ;
                model_id:long_name = "generating process ID number" ;

        // navigation variables all use nav dimension

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

        long    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" ;

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

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

        char    x_dim(nav, nav_len) ;
                x_dim:long_name = "x dimension name" ;

        char    y_dim(nav, nav_len) ;
                y_dim:long_name = "y dimension name" ;

        long    Nx(nav) ;
                Nx:long_name = "number of points along x-axis" ;

        long    Ny(nav) ;
                Ny:long_name =  "number of points along y-axis" ;

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

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

        float   Lov(nav) ;
                Lov:long_name = "orientation of the grid" ;
                Lov:units = "degrees_east" ;

        float   Dx(nav) ;
                Dx:long_name = "x-direction grid length" ;
                Dx:units = "km" ;

        float   Dy(nav) ;
                Dy:long_name = "y-direction grid length" ;
                Dy:units = "km" ;

        byte    ProjFlag(nav) ;
                ProjFlag:long_name = "projection center flag" ;

        float   Latin1(nav) ;
                Latin1:long_name = "first intersecting latitude" ;
                Latin1:units = "degrees_north" ;

        float   Latin2(nav) ;
                Latin2:long_name = "second intersecting latitude" ;
                Latin2:units = "degrees_north" ;

        float   SpLat(nav) ;
                SpLat:long_name = "Latitude of the southern pole" ;
                SpLat:units = "degrees_north" ;

        float   SpLon(nav) ;
                SpLon:long_name = "Longitude of the southern pole" ;
                SpLon:units = "degrees_east" ;

        // end of navigation variables

// global attributes:
                :history = "created by gribtonc from HDS broadcast" ;
                :title = "RUC/MAPS model, from Forecast Systems Lab" ;
                :Conventions = "NUWG" ;
                :version = 0.0 ;        // still just a draft

        //      ruc2 hybrid vars

        //      turbulent kinetic energy

        float   tke_hybr(record, hybridlevel, y, x) ;
                tke_hybr:long_name = "turbulent kinetic energy" ;
                tke_hybr:units = "J/kg" ;
                tke_hybr:_FillValue = -9999.f ;
                tke_hybr:navigation = "nav" ;

        //      atmospheric pressure

        float   P_hybr(record, hybridlevel, y, x) ;
                P_hybr:long_name = "Presure" ;
                P_hybr:units = "Pa" ;
                P_hybr:_FillValue = -9999.f ;
                P_hybr:navigation = "nav" ;

        //      geopotential height

        float   Z_hybr(record, hybridlevel, y, x) ;
                Z_hybr:long_name = "Geopotential Height" ;
                Z_hybr:units = "gp m" ;
                Z_hybr:_FillValue = -9999.f ;
                Z_hybr:navigation = "nav" ;

        //      virtual potential temperature

        float   vptmp_hybr(record, hybridlevel, y, x) ;
                vptmp_hybr:long_name = "Virtual potential temperature" ;
                vptmp_hybr:units = "K" ;
                vptmp_hybr:_FillValue = -9999.f ;
                vptmp_hybr:navigation = "nav" ;

        //      turbulence SIGMET/AIRMET

        float   reserved_hybr(record, hybridlevel, y, x) ;
                reserved_hybr:long_name = "Turbulence SIGMET/AIRMET" ;
                reserved_hybr:_FillValue = -9999.f ;
                reserved_hybr:navigation = "nav" ;

        //      u-componet of wind

        float   u_hybr(record, hybridlevel, y, x) ;
                u_hybr:long_name = "u-componet of wind" ;
                u_hybr:units = "m/s" ;
                u_hybr:_FillValue = -9999.f ;
                u_hybr:navigation = "nav" ;

        //      v-componet of wind

        float   v_hybr(record, hybridlevel, y, x) ;
                v_hybr:long_name = "v-componet of wind" ;
                v_hybr:units = "m/s" ;
                v_hybr:_FillValue = -9999.f ;
                v_hybr:navigation = "nav" ;

        //      Vertical velocity (presure)

        float   omega_hybr(record, hybridlevel, y, x) ;
                omega_hybr:long_name = "Vertical velocity (presure)" ;
                omega_hybr:units = "Pa/s" ;
                omega_hybr:_FillValue = -9999.f ;
                omega_hybr:navigation = "nav" ;

        //      Cloud water 

        float   clwmr_hybr(record, hybridlevel, y, x) ;
                clwmr_hybr:long_name = "Cloud water" ;
                clwmr_hybr:units = "kg / kg" ;
                clwmr_hybr:_FillValue = -9999.f ;
                clwmr_hybr:navigation = "nav" ;

        //      Soil temperature

        float   T_soil(record, y, x) ;
                T_soil:long_name = "Soil temperature" ;
                T_soil:units = "K" ;
                T_soil:_FillValue = -9999.f ;
                T_soil:navigation = "nav" ;

        //      Sensible heat net flux

        float   sen_ht_sfc(record, y, x) ;
                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" ;

        //      Latent heat net flux

        float   lat_ht_sfc(record, y, x) ;
                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" ;

        //      Net long wave radiation (surface)

        float   rdn_lwsrf_sfc(record, y, x) ;
                rdn_lwsrf_sfc:long_name = "Net long wave radiation (surface)" ;
                rdn_lwsrf_sfc:units = "W / m2" ;
                rdn_lwsrf_sfc:_FillValue = -9999.f ;
                rdn_lwsrf_sfc:navigation = "nav" ;

        //      Soil moisture content

        float   soil_mst(record, y, x) ;
                soil_mst:long_name = "Soil moisture content" ;
                soil_mst:units = "kg / m2" ;
                soil_mst:_FillValue = -9999.f ;
                soil_mst:navigation = "nav" ;

        //      Soil type

        float   reserved_sfc(record, y, x) ;
                reserved_sfc:long_name = "Soil type" ;
                reserved_sfc:_FillValue = -9999.f ;
                reserved_sfc:navigation = "nav" ;

        //      Net short wave radiation (surface)

        float   rdn_swsrf_sfc(record, y, x) ;
                rdn_swsrf_sfc:long_name = "Net short wave radiation (surface)" ;
                rdn_swsrf_sfc:units = "W / m2" ;
                rdn_swsrf_sfc:_FillValue = -9999.f ;
                rdn_swsrf_sfc:navigation = "nav" ;

        //      Soil temperature

        float   T_soil_bls(record, soillevel, y, x) ;
                T_soil_bls:long_name = "Soil temperature" ;
                T_soil_bls:units = "K" ;
                T_soil_bls:_FillValue = -9999.f ;
                T_soil_bls:navigation = "nav" ;

        //      Soil moisture content

        float   soil_mst_bls(record, soillevel, y, x) ;
                soil_mst_bls:long_name = "Soil moisture content" ;
                soil_mst_bls:units = "kg / m2" ;
                soil_mst_bls:_FillValue = -9999.f ;
                soil_mst_bls:navigation = "nav" ;

        //      Number concentration for ice particles

        float   reserved_bls(record, soillevel, y, x) ;
                reserved_bls:long_name = "Number concentration for ice 
particles" ;
                reserved_bls:_FillValue = -9999.f ;
                reserved_bls:navigation = "nav" ;

        //      Plant canopy surface water 

        float   c_wat(record, y, x) ;
                c_wat:long_name = "Plant canopy surface water" ;
                c_wat:units = "kg / m2" ;
                c_wat:_FillValue = -9999.f ;
                c_wat:navigation = "nav" ;

        // Snow temperature

        float   sno_t_lpdg(record, soil_lpdg, y, x) ;
                sno_t_lpdg:long_name = "Snow temperature" ;
                sno_t_lpdg:units = "K" ;
                sno_t_lpdg:_FillValue = -9999.f ;
                sno_t_lpdg:navigation = "nav" ;

        //      Water equivalent of accumulated snow depth

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

        //      ruc2 pressure vars

        float   Z(record, level, y, x) ;
                Z:long_name = "geopotential height" ;
                Z:units = "gp m" ;
                Z:_FillValue = -9999.f ;
                Z:navigation = "nav" ;

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

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

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

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

        //      Vertical velocity (presure)

        float   omega(record, level, y, x) ;
                omega:long_name = "Vertical velocity (presure)" ;
                omega:units = "Pa/s" ;
                omega:_FillValue = -9999.f ;
                omega:navigation = "nav" ;

        float   Psl_sa_sfc(record, y, x) ;
                Psl_sa_sfc:long_name = "pressure at mean sea level (STD 
reduction)" ;
                Psl_sa_sfc:units = "Pa" ;
                Psl_sa_sfc:_FillValue = -9999.f ;
                Psl_sa_sfc:navigation = "nav" ;

        float   P_frzlvl(record, y, x) ;
                P_frzlvl:long_name = "pressure at 0 isotherm" ;
                P_frzlvl:units = "Pa" ;
                P_frzlvl:_FillValue = -9999.f ;
                P_frzlvl:navigation = "nav" ;

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

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

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

        float   theta_trop(record, y, x) ;
                theta_trop:long_name = "potential temperature at tropopause" ;
                theta_trop:units = "degK" ;
                theta_trop:_FillValue = -9999.f ;
                theta_trop:navigation = "nav" ;

        float   u_trop(record, y, x) ;
                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_trop(record, y, x) ;
                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   P_maxwind(record, y, x) ;
                P_maxwind:long_name = "pressure at maximum wind" ;
                P_maxwind:units = "Pa" ;
                P_maxwind:_FillValue = -9999.f ;
                P_maxwind:navigation = "nav" ;

        float   u_maxwind(record, y, x) ;
                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   v_maxwind(record, y, x) ;
                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   precip_rt(record, y, x) ;
                precip_rt:long_name = "precipitation rate" ;
                precip_rt:units = "kg/m2/s" ;
                precip_rt:_FillValue = -9999.f ;
                precip_rt:navigation = "nav" ;

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

        float   u_lpdg(record, lpdg, y, x) ;
                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, y, x) ;
                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   T_lpdg(record, lpdg, y, x) ;
                T_lpdg:long_name = "temperature in boundary layer" ;
                T_lpdg:units = "degK" ;
                T_lpdg:_FillValue = -9999.f ;
                T_lpdg:navigation = "nav" ;

        //      Vertical velocity (presure)

        float   omega_lpdg(record, lpdg, y, x) ;
                omega_lpdg:long_name = "Vertical velocity (presure)" ;
                omega_lpdg:units = "Pa/s" ;
                omega_lpdg:_FillValue = -9999.f ;
                omega_lpdg:navigation = "nav" ;

        float   bgrun(record, y, x) ;
                bgrun:long_name = "baseflow-groundwater runoff" ;
                bgrun:units = "kg / m2" ;
                bgrun:_FillValue = -9999.f ;
                bgrun:navigation = "nav" ;

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

        float   Z_sfc(y, x) ;
                Z_sfc:long_name = "terrain" ;
                Z_sfc:units = "gp m" ;
                Z_sfc:_FillValue = -9999.f ;
                Z_sfc:navigation = "nav" ;

        float   P_htfl(record, y, x) ;
                P_htfl:long_name = "pressure" ;
                P_htfl:units = "Pa" ;
                P_htfl:_FillValue = -9999.f ;
                P_htfl:navigation = "nav" ;

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

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

        //      snow depth

        float   snow(record, y, x) ;
                snow:long_name = "Snow depth" ;
                snow:units = "m" ;
                snow:_FillValue = -9999.f ;
                snow:navigation = "nav" ;

        float   pr_water_atm(record, y, x) ; // 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   helc_sfc(record, y, x) ;
                helc_sfc:long_name = "Storm relative helicity" ;
                helc_sfc:units = "m2 / s2" ;
                helc_sfc:_FillValue = -9999.f ;
                helc_sfc:navigation = "nav" ;

        //      u-componet of storm

        float   ustm_sfc(record, y, x) ;
                ustm_sfc:long_name = "u-componet of storm" ;
                ustm_sfc:units = "m/s" ;
                ustm_sfc:_FillValue = -9999.f ;
                ustm_sfc:navigation = "nav" ;

        //      v-componet of storm

        float   vstm_sfc(record, y, x) ;
                vstm_sfc:long_name = "v-componet of storm" ;
                vstm_sfc:units = "m/s" ;
                vstm_sfc:_FillValue = -9999.f ;
                vstm_sfc:navigation = "nav" ;

        float   Pm_msl(record, y, x) ;
                Pm_msl:long_name = "pressure at mean sea level (MAPS 
reduction)" ;
                Pm_msl:units = "Pa" ;
                Pm_msl:_FillValue = -9999.f ;
                Pm_msl:navigation = "nav" ;

        float   Ptend_sfc(record, y, x) ;
                Ptend_sfc:long_name = "pressure tendency at surface" ;
                Ptend_sfc:units = "Pa / s" ;
                Ptend_sfc:_FillValue = -9999.f ;
                Ptend_sfc:navigation = "nav" ;

        float   theta_fhg(record, fhg, y, x) ;
                theta_fhg:long_name = "potential temperature at fhg" ;
                theta_fhg:units = "degK" ;
                theta_fhg:_FillValue = -9999.f ;
                theta_fhg:navigation = "nav" ;

        float   TD_fhg(record, fhg, y, x) ;
                TD_fhg:long_name = "Dew point temperature at fhg" ;
                TD_fhg:units = "degK" ;
                TD_fhg:_FillValue = -9999.f ;
                TD_fhg:navigation = "nav" ;

        float   T_TD_fhg(record, fhg, y, x) ;
                T_TD_fhg:long_name = "Dew point depressionat fhg" ;
                T_TD_fhg:units = "degK" ;
                T_TD_fhg:_FillValue = -9999.f ;
                T_TD_fhg:navigation = "nav" ;

        float   u_fhg(record, fhg, y, x) ;
                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, y, x) ;
                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   T_fhg(record, fhg, y, x) ;
                T_fhg:long_name = "temperature at fixed height above ground" ;
                T_fhg:units = "degK" ;
                T_fhg:_FillValue = -9999.f ;
                T_fhg:navigation = "nav" ;

        float   RH_fhg(record, fhg, y, x) ;
                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, y, x) ;
                spec_hum_fhg:long_name = "Specific humidity at fixed height 
above ground" ;
                spec_hum_fhg:units = "percent" ;
                spec_hum_fhg:_FillValue = -9999.f ;
                spec_hum_fhg:navigation = "nav" ;

        float   thpa_sfc(record, y, x) ;
                thpa_sfc:long_name = "equivalent potential temperature" ;
                thpa_sfc:units = "K" ;
                thpa_sfc:_FillValue = -9999.f ;
                thpa_sfc:navigation = "nav" ;

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

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

                // Lifted index between two levels

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

        float   bli_sfc(record, y, x) ; // Best Lifted index 
                bli_sfc:long_name = "Best lifted index" ;
                bli_sfc:units = "degK" ;
                bli_sfc:_FillValue = -9999.f ;       // To fill grid corners
                bli_sfc:navigation = "nav" ;

        float   precip_ls(record, y, x) ;
                precip_ls:long_name = "large scale precipitation over 
accumulation interval" ;
                precip_ls:units = "kg/m2" ;
                precip_ls:_FillValue = -9999.f ;
                precip_ls:navigation = "nav" ;

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

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

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

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

        float   csnow(record, y, x) ;
                csnow:long_name = "Categorical snow" ;
                csnow:_FillValue = -9999.f ;
                csnow:navigation = "nav" ;

data:

 level = 1000, 975, 950, 925, 900, 875, 850, 825, 800, 775, 750, 725,
        700, 675, 650, 625, 600, 575, 550, 525, 500, 475, 450, 425, 400, 
        375, 350, 325, 300, 275, 250, 225, 200, 175, 150, 125, 100, 75,
        50, 25 ;
 hybridlevel = 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 ;
 soillevel = 5, 20, 40, 160, 300 ;

 soil_lpdg_top = 0, 5, 60, 150 ;
 soil_lpdg_bot = 5, 30, 90, 180 ;
 lpdg_bot =  0, 30, 60, 90, 120, 150 ;
 lpdg_top = 30, 60, 90, 120, 150, 180 ;
 fhg = 2, 10 ;
 model_id = 105 ;

 // Navigation
 nav_model = "GRIB1" ;
 grid_type_code = 3 ;
 grid_type  = "Lambert conformal" ;
 grid_name = "AWIPS grid 255: Regional CONUS" ;
 grid_center = 7 ;
 grid_number = 236, 255 ;
 x_dim = "x" ;
 y_dim = "y" ;
 Nx = 151 ;
 Ny = 113 ;
 La1 = 16.281 ;
 Lo1 = 233.862 ;
 ResCompFlag = 8 ;
 Lov = 265.0 ;
 Dx = 40635 ;
 Dy = 40635 ;
 ProjFlag = 0 ;
 Latin1 = 25.0 ;
 Latin2 = 25.0 ;
 SpLat = 0.0 ;
 SpLon = 0.0 ;
}