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

Re: FW: Re: NCEP North American Reanalysis (fwd)



hiya,

i downloaded the file from the last message, created a cdl, and decoded
the grb file. there might be something wrong with Dan's  decoders build or
it could be a platform issue. this was done on a solaris box 5.9  The
narr.cdl file is attached and the files narr.cdl, narr.grb, and narr.nc are
in the Unidata's ftp dir at

ftp unidata.ucar.edu

% cd pub/contrib
% mget narr*

robb....

cdl:

netcdf narr{


dimensions:
        record = UNLIMITED ;   // (reference time, forecast time)
        x = 349 ;
        y = 277 ;
        time_len = 21 ;        // string length for datetime strings
        valtime_offset = 1 ;   // number of offset times
        nmodels = 1 ;          // number of models
        ngrids = 1 ;           // number of grids
        nav = 1 ;              // for navigation
        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, time_len) ; // derived from reftime
               datetime:long_name = "reference date and time" ;
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)

        double valtime_offset(valtime_offset) ; // valtime - reftime
               valtime_offset:long_name = "hours from reference time" ;
               valtime_offset:units = "hours" ;

        char   forecasttime(record, time_len) ; // derived from valtime
               forecasttime:long_name = "forecast date and time" ;
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)


        long   model_id(nmodels) ;
               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" ;

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

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

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

        // end of navigation variables

        float  snow_wat(record,y,x) ;
               snow_wat:long_name = "Water equivalent of accumulated snow depth 
at surface of the earth" ;
               snow_wat:GRIB_parameter_number = 65 ;
               snow_wat:GRIB_level_flag = 1 ;
               snow_wat:units = "kg/m2" ;
               snow_wat:_FillValue = -9999.f ;
               snow_wat:navigation = "nav" ;

        float  sen_ht_sfc(record,y,x) ;
               sen_ht_sfc:long_name = "Sensible heat flux at surface of the 
earth" ;
               sen_ht_sfc:GRIB_parameter_number = 122 ;
               sen_ht_sfc:GRIB_level_flag = 1 ;
               sen_ht_sfc:units = "W/m2" ;
               sen_ht_sfc:_FillValue = -9999.f ;
               sen_ht_sfc:navigation = "nav" ;

        float  lat_ht_sfc(record,y,x) ;
               lat_ht_sfc:long_name = "Latent heat flux at surface of the 
earth" ;
               lat_ht_sfc:GRIB_parameter_number = 121 ;
               lat_ht_sfc:GRIB_level_flag = 1 ;
               lat_ht_sfc:units = "W/m2" ;
               lat_ht_sfc:_FillValue = -9999.f ;
               lat_ht_sfc:navigation = "nav" ;

        float  gflux(record,y,x) ;
               gflux:long_name = "Ground heat flux at surface of the earth" ;
               gflux:GRIB_parameter_number = 155 ;
               gflux:GRIB_level_flag = 1 ;
               gflux:units = "W/m2" ;
               gflux:_FillValue = -9999.f ;
               gflux:navigation = "nav" ;

        float  pr_water_atm(record,y,x) ;
               pr_water_atm:long_name = "Precipitable water at entire 
atmosphere considered as a single layer" ;
               pr_water_atm:GRIB_parameter_number = 54 ;
               pr_water_atm:GRIB_level_flag = 200 ;
               pr_water_atm:units = "kg/m2" ;
               pr_water_atm:_FillValue = -9999.f ;
               pr_water_atm:navigation = "nav" ;

        float  dswrf_sfc(record,y,x) ;
               dswrf_sfc:long_name = "Downward short wave rad. flux at surface 
of the earth" ;
               dswrf_sfc:GRIB_parameter_number = 204 ;
               dswrf_sfc:GRIB_level_flag = 1 ;
               dswrf_sfc:units = "W/m2" ;
               dswrf_sfc:_FillValue = -9999.f ;
               dswrf_sfc:navigation = "nav" ;

        float  dlwrf_sfc(record,y,x) ;
               dlwrf_sfc:long_name = "Downward long wave rad. flux at surface 
of the earth" ;
               dlwrf_sfc:GRIB_parameter_number = 205 ;
               dlwrf_sfc:GRIB_level_flag = 1 ;
               dlwrf_sfc:units = "W/m2" ;
               dlwrf_sfc:_FillValue = -9999.f ;
               dlwrf_sfc:navigation = "nav" ;

        float  uswrf_sfc(record,y,x) ;
               uswrf_sfc:long_name = "Upward short wave rad. flux at surface of 
the earth" ;
               uswrf_sfc:GRIB_parameter_number = 211 ;
               uswrf_sfc:GRIB_level_flag = 1 ;
               uswrf_sfc:units = "W/m2" ;
               uswrf_sfc:_FillValue = -9999.f ;
               uswrf_sfc:navigation = "nav" ;

        float  ulwrf_sfc(record,y,x) ;
               ulwrf_sfc:long_name = "Upward long wave rad. flux at surface of 
the earth" ;
               ulwrf_sfc:GRIB_parameter_number = 212 ;
               ulwrf_sfc:GRIB_level_flag = 1 ;
               ulwrf_sfc:units = "W/m2" ;
               ulwrf_sfc:_FillValue = -9999.f ;
               ulwrf_sfc:navigation = "nav" ;


// global attributes
               :history = "2004-10-19 13:25:56 - created by gribtocdl" ;
               :title = "Enter model definition here" ;
               :Conventions = "NUWG" ;
               :GRIB_reference = "Office Note 388 GRIB" ;
               :GRIB_URL = "http://www.nco.ncep.noaa.gov/pmb/docs/on388/"; ;
               :version = 0.0 ;

data:

 model_id = 140 ;
 valtime_offset = 3 ;


 // Navigation
 nav_model = "GRIB1" ;
 grid_type_code = 3 ;
 grid_type = "Lambert conformal projection" ;
 grid_name = " " ;
 grid_center = 7 ;
 grid_number = 221 ;
 x_dim = "x" ;
 y_dim = "y" ;
 Nx = 349 ;
 Ny = 277 ;
 La1 = 1.000000 ;
 Lo1 = -145.500000 ;
 Lov = -107.000000 ;
 Dx = 32463.000000 ;
 Dy = 32463.000000 ;
 Latin1 = 50.000000 ;
 Latin2 = 50.000000 ;
 SpLat = 0.000000 ;
 SpLon = 0.000000 ;
 // Pole in proj. plane = North ;
 ProjFlag = 0 ;
 ResCompFlag = 0 ;

}



>
> Date:    Tue, 19 Oct 2004 12:29:26 -0400
> From:    "Dan Swank" <address@hidden>
> To:      Glenn Rutledge <address@hidden>
> cc:      Russ Rew <address@hidden>, address@hidden
> Subject: Re: FW: Re: NCEP North American Reanalysis (fwd)
>
> More info,
> gribtocdl continuously appends a never ending stream of the number
> -16777216.00
> To the end of the file!  Any ideas?
> To see what i mean you can download the cdl file (227 mb)  i killed
> gribtocdl process before the file got any larger, which it would have
> http://nomads.ncdc.noaa.gov/tmp/narr-b_221_20010101_0000_000.cdl
>
> And the source NARR file (1.5Mb)
> http://nomads.ncdc.noaa.gov/tmp/narr-b_221_20010101_0000_000.grb
>
> -Dan
>
>
> Glenn Rutledge wrote:
>
> > Dan-
> > Please provide some background on our conversion of the grib to NetCDF
> > files and the intermediate file that was generated from a meg to a
> > gig. See Russ' note below.  Thanks.  Glenn
> >
> > Russ Rew wrote:
> >
> >>Jon,
> >>
> >>
> >>
> >>>We are working with the NCDC to convert NARR reanalysis data from Grib to
> >>>netCDF.  They reported that initial attempts to convert a 1mb NARR file in
> >>>grib resulted in a 1gb NetCDF file.  Dr. Madment wanted me check with you 
> >>>to
> >>>see if this sounds right.  I'm sure it depends on the specifics of the
> >>>conversion routine, which Glenn Rutledge would know.  We want to use netCDF
> >>>to store the NARR data, but can not justify a factor of 1,000 storage
> >>>increase.
> >>>
> >>>
> >>
> >>No, that sounds like there's a bug in the conversion or the structure
> >>for the netCDF file is wrong.  We have never seen more than a 4-fold
> >>increase in size from GRIB to netCDF, and if proper use is made of
> >>packing conventions, a netCDF file need not be much bigger than the
> >>corresponding GRIB file.
> >>
> >>I can't even imagine how you could increase the size by a factor of
> >>10, let alone 1,000.  If you used double precision arrays in netCDF to
> >>hold 8-bit GRIB values, that still only increases the size by a factor
> >>of 8.  There is very little overhead in netCDF data storage for most
> >>kinds of scientific data.
> >>
> >>I would like to see the CDL of the 1 GByte netCDF file to determine
> >>how the data is being structured to account for this huge size
> >>inflation ...
> >>
> >>--Russ
> >>
> >>
> >>
>
> --
> Dan Swank <address@hidden>
> NOMADS programmer
> STG, Incorporated - Government Contractor
> 151 Patton Avenue, Room 514
> Asheville, NC 28801
> Phone: 828-271-4007
>
>
> ------- End of Forwarded Message
>

===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
address@hidden             WWW: http://www.unidata.ucar.edu/
===============================================================================
netcdf narr{ 


dimensions:
        record = UNLIMITED ;   // (reference time, forecast time)
        x = 349 ;
        y = 277 ;
        time_len = 21 ;        // string length for datetime strings
        valtime_offset = 1 ;   // number of offset times
        nmodels = 1 ;          // number of models
        ngrids = 1 ;           // number of grids
        nav = 1 ;              // for navigation
        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, time_len) ; // derived from reftime
               datetime:long_name = "reference date and time" ;
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)

        double valtime_offset(valtime_offset) ; // valtime - reftime
               valtime_offset:long_name = "hours from reference time" ;
               valtime_offset:units = "hours" ;

        char   forecasttime(record, time_len) ; // derived from valtime
               forecasttime:long_name = "forecast date and time" ;
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)


        long   model_id(nmodels) ;
               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" ;

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

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

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

        // end of navigation variables

        float  snow_wat(record,y,x) ;
               snow_wat:long_name = "Water equivalent of accumulated snow depth 
at surface of the earth" ;
               snow_wat:GRIB_parameter_number = 65 ;
               snow_wat:GRIB_level_flag = 1 ;
               snow_wat:units = "kg/m2" ;
               snow_wat:_FillValue = -9999.f ;
               snow_wat:navigation = "nav" ;

        float  sen_ht_sfc(record,y,x) ;
               sen_ht_sfc:long_name = "Sensible heat flux at surface of the 
earth" ;
               sen_ht_sfc:GRIB_parameter_number = 122 ;
               sen_ht_sfc:GRIB_level_flag = 1 ;
               sen_ht_sfc:units = "W/m2" ;
               sen_ht_sfc:_FillValue = -9999.f ;
               sen_ht_sfc:navigation = "nav" ;

        float  lat_ht_sfc(record,y,x) ;
               lat_ht_sfc:long_name = "Latent heat flux at surface of the 
earth" ;
               lat_ht_sfc:GRIB_parameter_number = 121 ;
               lat_ht_sfc:GRIB_level_flag = 1 ;
               lat_ht_sfc:units = "W/m2" ;
               lat_ht_sfc:_FillValue = -9999.f ;
               lat_ht_sfc:navigation = "nav" ;

        float  gflux(record,y,x) ;
               gflux:long_name = "Ground heat flux at surface of the earth" ;
               gflux:GRIB_parameter_number = 155 ;
               gflux:GRIB_level_flag = 1 ;
               gflux:units = "W/m2" ;
               gflux:_FillValue = -9999.f ;
               gflux:navigation = "nav" ;

        float  pr_water_atm(record,y,x) ;
               pr_water_atm:long_name = "Precipitable water at entire 
atmosphere considered as a single layer" ;
               pr_water_atm:GRIB_parameter_number = 54 ;
               pr_water_atm:GRIB_level_flag = 200 ;
               pr_water_atm:units = "kg/m2" ;
               pr_water_atm:_FillValue = -9999.f ;
               pr_water_atm:navigation = "nav" ;

        float  dswrf_sfc(record,y,x) ;
               dswrf_sfc:long_name = "Downward short wave rad. flux at surface 
of the earth" ;
               dswrf_sfc:GRIB_parameter_number = 204 ;
               dswrf_sfc:GRIB_level_flag = 1 ;
               dswrf_sfc:units = "W/m2" ;
               dswrf_sfc:_FillValue = -9999.f ;
               dswrf_sfc:navigation = "nav" ;

        float  dlwrf_sfc(record,y,x) ;
               dlwrf_sfc:long_name = "Downward long wave rad. flux at surface 
of the earth" ;
               dlwrf_sfc:GRIB_parameter_number = 205 ;
               dlwrf_sfc:GRIB_level_flag = 1 ;
               dlwrf_sfc:units = "W/m2" ;
               dlwrf_sfc:_FillValue = -9999.f ;
               dlwrf_sfc:navigation = "nav" ;

        float  uswrf_sfc(record,y,x) ;
               uswrf_sfc:long_name = "Upward short wave rad. flux at surface of 
the earth" ;
               uswrf_sfc:GRIB_parameter_number = 211 ;
               uswrf_sfc:GRIB_level_flag = 1 ;
               uswrf_sfc:units = "W/m2" ;
               uswrf_sfc:_FillValue = -9999.f ;
               uswrf_sfc:navigation = "nav" ;

        float  ulwrf_sfc(record,y,x) ;
               ulwrf_sfc:long_name = "Upward long wave rad. flux at surface of 
the earth" ;
               ulwrf_sfc:GRIB_parameter_number = 212 ;
               ulwrf_sfc:GRIB_level_flag = 1 ;
               ulwrf_sfc:units = "W/m2" ;
               ulwrf_sfc:_FillValue = -9999.f ;
               ulwrf_sfc:navigation = "nav" ;


// global attributes
               :history = "2004-10-19 13:25:56 - created by gribtocdl" ; 
               :title = "Enter model definition here" ;
               :Conventions = "NUWG" ;
               :GRIB_reference = "Office Note 388 GRIB" ;
               :GRIB_URL = "http://www.nco.ncep.noaa.gov/pmb/docs/on388/"; ;
               :version = 0.0 ;

data:

 model_id = 140 ;
 valtime_offset = 3 ;


 // Navigation
 nav_model = "GRIB1" ;
 grid_type_code = 3 ;
 grid_type = "Lambert conformal projection" ;
 grid_name = " " ;
 grid_center = 7 ;
 grid_number = 221 ;
 x_dim = "x" ;
 y_dim = "y" ;
 Nx = 349 ;
 Ny = 277 ;
 La1 = 1.000000 ;
 Lo1 = -145.500000 ;
 Lov = -107.000000 ;
 Dx = 32463.000000 ;
 Dy = 32463.000000 ;
 Latin1 = 50.000000 ;
 Latin2 = 50.000000 ;
 SpLat = 0.000000 ;
 SpLon = 0.000000 ;
 // Pole in proj. plane = North ;
 ProjFlag = 0 ;
 ResCompFlag = 0 ;

}