This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Yan, Thanks for pointing out the bug and including the grib file. I believed that the bugs are now fixed for the Gausian lat/lon grid. I created a new cdl file by: % gribtocdl -v test.grib > rtest.cdl I'm also including the cdl as a reference. I made a decoders release in the ftp dir pub/decoders/decoders-2.4.1.tar.Z that has all the changes. Get via ftp: % ftp www.unidata.ucar.edu Let me know if any problems occur. Robb... On Wed, 29 Jan 2003, Yan Gu wrote: > Hello Mr. Kambic, > > I have some questions about "gribtonc". I have downloaded it from ucar. It > has been sucefully installed. However, when I used it to transfer a grib > file to netCDF file, I got a "Bus error". I checked the log file. It gave > me such message: > > Jan 29 16:29:36 gribtonc[724504]: Starting Up > Jan 29 16:29:36 gribtonc[724504]: test.nc: no variable for N > Jan 29 16:29:36 gribtonc[724504]: test.nc: can't get navigation > information > Jan 29 16:29:36 gribtonc[724504]: make_ncfile failed > > I checked my cdl file. The line related to this is: > > float n(nav) ; > n:long_name = "XXX" ; > n:units = "" ; > > When I used gribdump -h to get the header of my grib file, it said: > > Parameter : 71 (N) > Units : percent > > After I changed the units of n to "persent", I still got error message in > the log file. > > Jan 29 16:41:36 gribtonc[711032]: Starting Up > Jan 29 16:41:36 gribtonc[711032]: Error parsing units: persent > Jan 29 16:41:36 gribtonc[711032]: test.nc: can't get units attribute for > variable n > Jan 29 16:41:36 gribtonc[711032]: test.nc: no variable for N > Jan 29 16:41:36 gribtonc[711032]: test.nc: can't get navigation > information > Jan 29 16:41:36 gribtonc[711032]: make_ncfile failed > > Attached is the cdl file I am using and the grib file I used to test. Do > you have some clue about this and would you please help me out? > > Yan > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Yan Gu > > Sr. Computer Program Analyst > Center For Ocean-Atmospheric Prediction Studies > Florida State University > > Express Mail: 2035 E. Paul Dirac Drive > R. M. Johnson Bldg. -Suite 233 > Tallahassee, FL32310 > > Tel: (850)644-6935 (OFFICE) (850)574-9877 (HOME) > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > =============================================================================== Robb Kambic Unidata Program Center Software Engineer III Univ. Corp for Atmospheric Research address@hidden WWW: http://www.unidata.ucar.edu/ ===============================================================================
netcdf test.grib{ dimensions: record = UNLIMITED ; // (reference time, forecast time) lat = 94 ; lon = 192 ; lbls = 2 ; fhg = 2 ; datetime_len = 21 ; nmodels = 1 ; ngrids = 1 ; nav = 1 ; nav_len = 100 ; 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" ; :lbls = "lbls_bot, lbls_top" ; // ("lbls_bot, lbls_top") uniquely // determines lbls float lbls_bot(lbls) ; lbls_bot:long_name = "bottom level of Layer between 2 depths below land surface " ; lbls_bot:units = "cm" ; float lbls_top(lbls) ; lbls_top:long_name = "top level of Layer between 2 depths below land surface " ; lbls_top:units = "cm" ; float fhg(fhg) ; fhg:long_name = "fixed height above ground" ; fhg:units = "meters" ; // 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" ; 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 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 N(nav) ; N:long_name = "# of parallels between a pole and equator" ; N:units = "" ; byte ResCompFlag(nav) ; ResCompFlag:long_name = "resolution and component flags" ; // end of navigation variables float u_flx_sfc(record,lat,lon) ; u_flx_sfc:long_name = "Momentum flux, u component, N/m2" ; 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 component, N/m2" ; v_flx_sfc:units = "N/m2" ; v_flx_sfc:_FillValue = -9999.f ; v_flx_sfc:navigation = "nav" ; float sen_ht_sfc(record,lat,lon) ; sen_ht_sfc:long_name = "Sensible heat flux, W/m2" ; sen_ht_sfc:units = "W/m2" ; sen_ht_sfc:_FillValue = -9999.f ; sen_ht_sfc:navigation = "nav" ; float lat_ht_sfc(record,lat,lon) ; lat_ht_sfc:long_name = "Latent heat flux, W/m2" ; lat_ht_sfc:units = "W/m2" ; lat_ht_sfc:_FillValue = -9999.f ; lat_ht_sfc:navigation = "nav" ; float T_sfc(record,lat,lon) ; T_sfc:long_name = "Temperature, deg. K" ; T_sfc:units = "degK" ; T_sfc:_FillValue = -9999.f ; T_sfc:navigation = "nav" ; float T_lbls(record,lbls,lat,lon) ; T_lbls:long_name = "Temperature, deg. K" ; T_lbls:units = "degK" ; T_lbls:_FillValue = -9999.f ; T_lbls:navigation = "nav" ; float T_hctl(record,lat,lon) ; T_hctl:long_name = "Temperature, deg. K" ; T_hctl:units = "degK" ; T_hctl:_FillValue = -9999.f ; T_hctl:navigation = "nav" ; float T_mctl(record,lat,lon) ; T_mctl:long_name = "Temperature, deg. K" ; T_mctl:units = "degK" ; T_mctl:_FillValue = -9999.f ; T_mctl:navigation = "nav" ; float T_lctl(record,lat,lon) ; T_lctl:long_name = "Temperature, deg. K" ; T_lctl:units = "degK" ; T_lctl:_FillValue = -9999.f ; T_lctl:navigation = "nav" ; float T_fhg(record,fhg,lat,lon) ; T_fhg:long_name = "Temperature, deg. K" ; T_fhg:units = "degK" ; T_fhg:_FillValue = -9999.f ; T_fhg:navigation = "nav" ; float soilw_lbls(record,lbls,lat,lon) ; soilw_lbls:long_name = "Volumetric soil moisture content" ; soilw_lbls:units = "" ; soilw_lbls:_FillValue = -9999.f ; soilw_lbls:navigation = "nav" ; float snow_wat(record,lat,lon) ; snow_wat:long_name = "Water equiv. of accum. snow depth, kg/m2" ; snow_wat:units = "kg/m2" ; snow_wat:_FillValue = -9999.f ; snow_wat:navigation = "nav" ; float dlwrf_sfc(record,lat,lon) ; dlwrf_sfc:long_name = "downward long wave rad. flux, W/m2" ; dlwrf_sfc:units = "W/m2" ; dlwrf_sfc:_FillValue = -9999.f ; dlwrf_sfc:navigation = "nav" ; float ulwrf_sfc(record,lat,lon) ; ulwrf_sfc:long_name = "upward long wave rad. flux, W/m2" ; ulwrf_sfc:units = "W/m2" ; ulwrf_sfc:_FillValue = -9999.f ; ulwrf_sfc:navigation = "nav" ; float ulwrf_topa(record,lat,lon) ; ulwrf_topa:long_name = "upward long wave rad. flux, W/m2" ; ulwrf_topa:units = "W/m2" ; ulwrf_topa:_FillValue = -9999.f ; ulwrf_topa:navigation = "nav" ; float uswrf_topa(record,lat,lon) ; uswrf_topa:long_name = "upward short wave rad. flux, W/m2" ; uswrf_topa:units = "W/m2" ; uswrf_topa:_FillValue = -9999.f ; uswrf_topa:navigation = "nav" ; float uswrf_sfc(record,lat,lon) ; uswrf_sfc:long_name = "upward short wave rad. flux, W/m2" ; uswrf_sfc:units = "W/m2" ; uswrf_sfc:_FillValue = -9999.f ; uswrf_sfc:navigation = "nav" ; float dswrf_sfc(record,lat,lon) ; dswrf_sfc:long_name = "downward short wave rad. flux, W/m2" ; dswrf_sfc:units = "W/m2" ; dswrf_sfc:_FillValue = -9999.f ; dswrf_sfc:navigation = "nav" ; float dswrf_topa(record,lat,lon) ; dswrf_topa:long_name = "downward short wave rad. flux, W/m2" ; dswrf_topa:units = "W/m2" ; dswrf_topa:_FillValue = -9999.f ; dswrf_topa:navigation = "nav" ; float N_hcy(record,lat,lon) ; N_hcy:long_name = "Total cloud cover, %" ; N_hcy:units = "percent" ; N_hcy:_FillValue = -9999.f ; N_hcy:navigation = "nav" ; float N_mcy(record,lat,lon) ; N_mcy:long_name = "Total cloud cover, %" ; N_mcy:units = "percent" ; N_mcy:_FillValue = -9999.f ; N_mcy:navigation = "nav" ; float N_lcy(record,lat,lon) ; N_lcy:long_name = "Total cloud cover, %" ; N_lcy:units = "percent" ; N_lcy:_FillValue = -9999.f ; N_lcy:navigation = "nav" ; float N_atm(record,lat,lon) ; N_atm:long_name = "Total cloud cover, %" ; N_atm:units = "percent" ; N_atm:_FillValue = -9999.f ; N_atm:navigation = "nav" ; float P_hctl(record,lat,lon) ; P_hctl:long_name = "Pressure, Pa" ; P_hctl:units = "Pa" ; P_hctl:_FillValue = -9999.f ; P_hctl:navigation = "nav" ; float P_hcbl(record,lat,lon) ; P_hcbl:long_name = "Pressure, Pa" ; P_hcbl:units = "Pa" ; P_hcbl:_FillValue = -9999.f ; P_hcbl:navigation = "nav" ; float P_mctl(record,lat,lon) ; P_mctl:long_name = "Pressure, Pa" ; P_mctl:units = "Pa" ; P_mctl:_FillValue = -9999.f ; P_mctl:navigation = "nav" ; float P_mcbl(record,lat,lon) ; P_mcbl:long_name = "Pressure, Pa" ; P_mcbl:units = "Pa" ; P_mcbl:_FillValue = -9999.f ; P_mcbl:navigation = "nav" ; float P_lctl(record,lat,lon) ; P_lctl:long_name = "Pressure, Pa" ; P_lctl:units = "Pa" ; P_lctl:_FillValue = -9999.f ; P_lctl:navigation = "nav" ; float P_lcbl(record,lat,lon) ; P_lcbl:long_name = "Pressure, Pa" ; P_lcbl:units = "Pa" ; P_lcbl:_FillValue = -9999.f ; P_lcbl:navigation = "nav" ; float P_sfc(record,lat,lon) ; P_sfc:long_name = "Pressure, Pa" ; P_sfc:units = "Pa" ; P_sfc:_FillValue = -9999.f ; P_sfc:navigation = "nav" ; float precip_rt(record,lat,lon) ; precip_rt:long_name = "Precipitation rate, kg/m2/s" ; precip_rt:units = "kg/(m2 s)" ; precip_rt:_FillValue = -9999.f ; precip_rt:navigation = "nav" ; float cprat(record,lat,lon) ; cprat:long_name = "Convective Precipitation rate, kg/m2/s" ; cprat:units = "kg/m2/s" ; cprat:_FillValue = -9999.f ; cprat:navigation = "nav" ; float gflux(record,lat,lon) ; gflux:long_name = "Ground Heat Flux, W/m2" ; gflux:units = "W/m2" ; gflux:_FillValue = -9999.f ; gflux:navigation = "nav" ; float land_mask_sfc(record,lat,lon) ; land_mask_sfc:long_name = "Land-sea mask (1=land; 0=sea), 1/0" ; land_mask_sfc:units = "bit" ; land_mask_sfc:_FillValue = -9999.f ; land_mask_sfc:navigation = "nav" ; float ice_conc(record,lat,lon) ; ice_conc:long_name = "Ice concentration (ice=l; no ice=O), 1/0" ; ice_conc:units = "bit" ; ice_conc:_FillValue = -9999.f ; ice_conc:navigation = "nav" ; float u_fhg(record,fhg,lat,lon) ; u_fhg:long_name = "u-component of wind, m/s" ; u_fhg:units = "m/s" ; u_fhg:_FillValue = -9999.f ; u_fhg:navigation = "nav" ; float v_fhg(record,fhg,lat,lon) ; v_fhg:long_name = "v-component of wind, m/s" ; v_fhg:units = "m/s" ; v_fhg:_FillValue = -9999.f ; v_fhg:navigation = "nav" ; float spec_hum_fhg(record,fhg,lat,lon) ; spec_hum_fhg:long_name = "Specific humidity, kg/kg" ; spec_hum_fhg:units = "kg/kg" ; spec_hum_fhg:_FillValue = -9999.f ; spec_hum_fhg:navigation = "nav" ; float Tmax_fhg(record,fhg,lat,lon) ; Tmax_fhg:long_name = "Maximum temperature, deg. K" ; 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, deg. K" ; Tmin_fhg:units = "degK" ; Tmin_fhg:_FillValue = -9999.f ; Tmin_fhg:navigation = "nav" ; float watr(record,lat,lon) ; watr:long_name = "Water runoff, kg/m2" ; watr:units = "kg/m2" ; watr:_FillValue = -9999.f ; watr:navigation = "nav" ; float pevpr_sfc(record,lat,lon) ; pevpr_sfc:long_name = "Potential evaporation rate" ; pevpr_sfc:units = "W/m2" ; pevpr_sfc:_FillValue = -9999.f ; pevpr_sfc:navigation = "nav" ; float cwork_atm(record,lat,lon) ; cwork_atm:long_name = "Cloud workfunction" ; cwork_atm:units = "J/kg" ; cwork_atm:_FillValue = -9999.f ; cwork_atm:navigation = "nav" ; float u-gwd_sfc(record,lat,lon) ; u-gwd_sfc:long_name = "Zonal flux of gravity wave stress" ; u-gwd_sfc:units = "N/m2" ; u-gwd_sfc:_FillValue = -9999.f ; u-gwd_sfc:navigation = "nav" ; float v-gwd_sfc(record,lat,lon) ; v-gwd_sfc:long_name = "Meridional flux of gravity wave stress" ; v-gwd_sfc:units = "N/m2" ; v-gwd_sfc:_FillValue = -9999.f ; v-gwd_sfc:navigation = "nav" ; float hpbl_sfc(record,lat,lon) ; hpbl_sfc:long_name = "Planetary boundary layer height, m" ; hpbl_sfc:units = "m" ; hpbl_sfc:_FillValue = -9999.f ; hpbl_sfc:navigation = "nav" ; float pr_water_atm(record,lat,lon) ; pr_water_atm:long_name = "Precipitable water, kg/m2" ; pr_water_atm:units = "kg/m2" ; pr_water_atm:_FillValue = -9999.f ; pr_water_atm:navigation = "nav" ; float snow_rt(record,lat,lon) ; snow_rt:long_name = "Snowfall rate water equivalent, kg/m2s" ; snow_rt:units = "kg/m2/s" ; snow_rt:_FillValue = -9999.f ; snow_rt:navigation = "nav" ; float gpt_hgta5_sfc(record,lat,lon) ; gpt_hgta5_sfc:long_name = "5-wave geopotential height anomaly" ; gpt_hgta5_sfc:units = "gp m" ; gpt_hgta5_sfc:_FillValue = -9999.f ; gpt_hgta5_sfc:navigation = "nav" ; float snohf(record,lat,lon) ; snohf:long_name = "Snow phase-change heat flux, W/m2" ; snohf:units = "W/m2" ; snohf:_FillValue = -9999.f ; snohf:navigation = "nav" ; // global attributes :history = "2003-01-30 13:01:21 - created by gribtocdl 1.4 - 12.12.2002" ; :title = "test.grib" ; :Conventions = "NUWG" ; :version = 0.0 ; data: lbls_bot = 10.0, 200.0 ; lbls_top = 0.0, 10.0 ; fhg = 2.0, 10.0 ; model_id = 80 ; // Navigation nav_model = "GRIB1" ; grid_type_code = 4 ; grid_type = "Gaussian latitude/longitude" ; grid_name = " " ; grid_center = 7 ; grid_number = 98 ; Ni = 192 ; Nj = 94 ; La1 = -88.542000 ; Lo1 = 0.000000 ; La2 = 88.542000 ; Lo2 = -1.875000 ; Di = 1.875000 ; N = 47 ; ResCompFlag = 128 ; lon = 0.00, 1.88, 3.75, 5.62, 7.50, 9.38, 11.25, 13.12, 15.00, 16.88, 18.75, 20.62, 22.50, 24.38, 26.25, 28.12, 30.00, 31.88, 33.75, 35.62, 37.50, 39.38, 41.25, 43.12, 45.00, 46.88, 48.75, 50.62, 52.50, 54.38, 56.25, 58.12, 60.00, 61.88, 63.75, 65.62, 67.50, 69.38, 71.25, 73.12, 75.00, 76.88, 78.75, 80.62, 82.50, 84.38, 86.25, 88.12, 90.00, 91.88, 93.75, 95.62, 97.50, 99.38,101.25,103.12, 105.00,106.88,108.75,110.62,112.50,114.38,116.25,118.12, 120.00,121.88,123.75,125.62,127.50,129.38,131.25,133.12, 135.00,136.88,138.75,140.62,142.50,144.38,146.25,148.12, 150.00,151.88,153.75,155.62,157.50,159.38,161.25,163.12, 165.00,166.88,168.75,170.62,172.50,174.38,176.25,178.12, 180.00,181.88,183.75,185.62,187.50,189.38,191.25,193.12, 195.00,196.88,198.75,200.62,202.50,204.38,206.25,208.12, 210.00,211.88,213.75,215.62,217.50,219.38,221.25,223.12, 225.00,226.88,228.75,230.62,232.50,234.38,236.25,238.12, 240.00,241.88,243.75,245.62,247.50,249.38,251.25,253.12, 255.00,256.88,258.75,260.62,262.50,264.38,266.25,268.12, 270.00,271.88,273.75,275.62,277.50,279.38,281.25,283.12, 285.00,286.88,288.75,290.62,292.50,294.38,296.25,298.12, 300.00,301.88,303.75,305.62,307.50,309.38,311.25,313.12, 315.00,316.88,318.75,320.62,322.50,324.38,326.25,328.12, 330.00,331.88,333.75,335.62,337.50,339.38,341.25,343.12, 345.00,346.88,348.75,350.62,352.50,354.38,356.25,358.12 ; lat =-88.54,-86.63,-84.72,-82.80,-80.89,-78.98,-77.06,-75.15, -73.24,-71.32,-69.41,-67.50,-65.59,-63.67,-61.76,-59.85, -57.93,-56.02,-54.11,-52.19,-50.28,-48.37,-46.46,-44.54, -42.63,-40.72,-38.80,-36.89,-34.98,-33.06,-31.15,-29.24, -27.32,-25.41,-23.50,-21.59,-19.67,-17.76,-15.85,-13.93, -12.02,-10.11, -8.19, -6.28, -4.37, -2.46, -0.54, 1.37, 3.28, 5.20, 7.11, 9.02, 10.94, 12.85, 14.76, 16.68, 18.59, 20.50, 22.41, 24.33, 26.24, 28.15, 30.07, 31.98, 33.89, 35.81, 37.72, 39.63, 41.54, 43.46, 45.37, 47.28, 49.20, 51.11, 53.02, 54.94, 56.85, 58.76, 60.68, 62.59, 64.50, 66.41, 68.33, 70.24, 72.15, 74.07, 75.98, 77.89, 79.81, 81.72, 83.63, 85.54, 87.46, 89.37 ; }