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" <Dan.Swank@xxxxxxxx>
To: Glenn Rutledge <Glenn.Rutledge@xxxxxxxx>
cc: Russ Rew <russ@xxxxxxxxxxxxxxxx>, ben@xxxxxxxxxxxxxxxx
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 <dan.swank@xxxxxxxx>
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
rkambic@xxxxxxxxxxxxxxxx WWW: http://www.unidata.ucar.edu/
==============================================================================