NOTE: The decoders
mailing list is no longer active. The list archives are made available for historical reasons.
============================================================================== Robb Kambic Unidata Program Center Software Engineer III Univ. Corp for Atmospheric Research rkambic@xxxxxxxxxxxxxxxx WWW: http://www.unidata.ucar.edu/ ============================================================================== ---------- Forwarded message ---------- Date: Fri, 23 Jan 2004 10:33:25 -0700 From: Jim Cowie <cowie@xxxxxxxx> To: decoders@xxxxxxxxxxxxxxxx Subject: Sample GFS 1x1 deg cdl Brian, I've attached a sample CDL for the NCEP GFS 1x1 deg grid (AKA grid 3) which we get off the NCEP ftp server. I don't know if it will work with what comes through AWIPS but it is a start. I also have CDLs for the GFS 2.5x2.5 grid (grid 2) and the Eta 211 grid if you want them. The gfs_003.cdl has most or all of the fields defined but many commented out since we don't use them. Also note that though we use gribtonc, we had to make a few changes to it to handle some of the time averaged or time accumulated variables better. gribtonc doesn't handle these very well. (We're hoping that the new gribtonc, currently under development at Unidata, will.) Hope this is usefull to you, -jim -- Jim Cowie NCAR/RAP cowie@xxxxxxxx 303-497-2831 ---------------------------------------------------------------------- HOETH, BRIAN R. (JSC-ZS) (LM) wrote:
Hello, I would be interested in seeing the wrf249.cdl file also. For that matter, I would like to see any cdl files that people have created in their experiences with using gribtonc, other than the default cdl files that come with the package. I am especially interested in finding out if anyone has tried creating AWIPS displayable netCDF files for GFS 1x1 degree data using gribtonc. Example GFS 1x1 degree data from today can be found at: ftp://tgftp.nws.noaa.gov/SL.us008001/ST.opnl/MT.avn_CY.00/RD.20040123/PT.gri d_DF.gr1/ Thanks, Brian Hoeth Spaceflight Meteorology Group Johnson Space Center, Houston, TX Office: 281-483-3246 Operations: 281-483-1051 -----Original Message----- From: owner-decoders@xxxxxxxxxxxxxxxx [mailto:owner-decoders@xxxxxxxxxxxxxxxx]On Behalf Of Robb Kambic Sent: Thursday, January 22, 2004 5:53 PM To: Rorik Peterson Cc: decoders@xxxxxxxxxxxxxxxx; decoders Subject: Re: confusion with record dimension using gribtonc On Thu, 22 Jan 2004, Rorik Peterson wrote:I have been having some problems with the record dimension when decoding Alaska-region GRIB data obtained via ftp from NCEP at: ftp://ftpprd.ncep.noaa.gov/pub/emc/mmb/mmbpll/alaska10.t00z/ The GRIB files available here are updated daily, each one corresponding to a forecast time (0-48 hours). I sequentially process them with 'gribtonc' into a single netCDF file [/user2/ldm/AWIPS]$ perl -e 'foreach(glob "A*"){ `gribtonc wrf249.cdl out.nc < $_`;} However, I always have a complete record of missing data somewhere in the middle. Using today's data, I narrowed it down to when I added the 15-hour forecast file; at which point two records were added instead of one, and the last one was completely empty. Here I decode just one GRIB file: [/user2/ldm/AWIPS]> rm out.nc;gribtonc wrf249.cdl out.nc < AWPREG15.tm00 Then dump the pertient information of what is in there [/user2/ldm/AWIPS]$ ncdump -v valtime_offset out.nc | egrep "record UNLIMITED|valtime_offset =" record = UNLIMITED ; // (2 currently) valtime_offset = 15, 15 ; and then look at the data [/user2/ldm/AWIPS]$ ncks -H -v u -d x,100,100 -d y,100,100 -d level,4,4 out.nc level[4]=500 record[0] level[4]=500 y[100]=986.789 x[100]=986.789 u[540324]=2.17085 record[1] level[4]=500 y[100]=986.789 x[100]=986.789 u[1673253]=-9999 x[100]=986.789 y[100]=986.789Rorik, You already narrowed the problem down to either a bad data product or an error in gribtonc. First test would be to run gribtonc with the -v and -l - flags, ie gribtonc -v -l - ..... Hopefully this should shed some light on the error. Next test would be to use gribdump to check if there is an unusual header in the grib products. In my recent work, I've found a wrong header on only one product in a group of 2000 files. The projection was wrong on the product. ie gribdump -h <gribfile> Can you send me the wrf249.cdl file you are using so I can use it. I downloaded the AWPREG15.tm00 file and will let you know the results. Robb...You can trust me that the entire second record is full of -9999, which is missing_value. Is this a problem with the GRIB data, or gribtonc? All the GRIB files are the same size, more or less, so I don't know where the second set of (missing) data is coming from. Any insight in what to look at next is appreciated. rorik
netcdf gfs_003 { dimensions: record = UNLIMITED ; // (reference time, forecast time) // level = 26 ; // isobaric levels level = 19 ; // isobaric levels o3level = 6 ; // isobaric levels for o3mr gpt5level = 1; // isobaric level for 5-wave gp height zalevel = 2; // isobaric level for geopotential height anomoly lat = 181 ; // latitude lon = 360 ; // longitude lpdg = 1 ; // boundary layer levels RH, u, v, T, q lpdg2 = 1 ; // boundary layer levels for cin, cape lbls = 2 ; // layers below surface ls = 4 ; // layer between sigma levels fh = 3; // fixed height levels fhg2m = 1 ; // fixed height (2m) above ground level fhg10m = 1 ; // fixed height (10m) above ground level sigma = 1 ; // sigma level datetime_len = 21 ; // string length for datetime strings nmodels = 2 ; // GFS 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" ; float o3level(o3level) ; o3level:long_name = "o3level" ; o3level:units = "hectopascals" ; float gpt5level(gpt5level) ; gpt5level:long_name = "gpt5level" ; gpt5level:units = "hectopascals" ; float zalevel(zalevel) ; zalevel:long_name = "zalevel" ; zalevel:units = "hectopascals" ; :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" ; :lpdg2 = "lpdg2_bot, lpdg2_top" ; // (lpdg_bot, lpdg_top) uniquely // determines lpdg float lpdg2_bot(lpdg2) ; lpdg2_bot:long_name = "bottom level of boundary layer between 2 levels at specified pressure differences from ground to levels" ; lpdg2_bot:units = "hectopascals" ; float lpdg2_top(lpdg2) ; lpdg2_top:long_name = "top level of boundary layer between 2 levels at specified pressure differences from ground to levels" ; lpdg2_top:units = "hectopascals" ; :lbls = "lbls_top, lbls_bot" ; // (lbls_top, lbls_bot) uniquely // determines lbls float lbls_top(lbls) ; lbls_top:long_name = "top level of layer below surface from ground to level" ; lbls_top:units = "cm" ; float lbls_bot(lbls) ; lbls_bot:long_name = "bottom level of layer below surface from ground to level" ; lbls_bot:units = "cm" ; :ls = "ls_bot, ls_top" ; // (ls_bot, ls_top) uniquely // determines ls float ls_bot(ls) ; ls_bot:long_name = "bottom level of layer between 2 sigma levels" ; ls_bot:units = "" ; float ls_top(ls) ; ls_top:long_name = "top level of layer between 2 sigma levels" ; ls_top:units = "" ; float fh(fh) ; // fixed height level fh:long_name = "fixed height level" ; fh:units = "meters" ; float fhg2m(fhg2m) ; // 2m above ground fhg2m:long_name = "fixed height above ground" ; fhg2m:units = "meters" ; float fhg10m(fhg10m) ; // 10m above ground fhg10m:long_name = "fixed height above ground" ; fhg10m:units = "meters" ; float sigma(sigma) ; // sigma level 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 // Start of grid variables // float absvor(record, level, lat, lon) ; // absvor:long_name = "absolute vorticity" ; // absvor:units = "1/s" ; // absvor:_FillValue = -9999.f ; // absvor:navigation = "nav" ; float albedo_sfc(record, lat, lon) ; albedo_sfc:long_name = "albedo at surface" ; albedo_sfc:units = "percent" ; albedo_sfc:_FillValue = -9999.f ; albedo_sfc:navigation = "nav" ; float cape_lpdg(record, lpdg2, lat, lon) ; cape_lpdg:long_name = "convective available potential energy in boundary layer" ; cape_lpdg:units = "J/kg" ; cape_lpdg:_FillValue = -9999.f ; cape_lpdg:navigation = "nav" ; // float cape_sfc(record, lat, lon) ; // cape_sfc:long_name = "convective available potential energy at surface" ; // cape_sfc:units = "J/kg" ; // cape_sfc:_FillValue = -9999.f ; // cape_sfc:navigation = "nav" ; float cfrzrn(record, lat, lon) ; cfrzrn:long_name = "categorical freezing rain" ; cfrzrn:units = "bit" ; cfrzrn:_FillValue = -9999.f ; cfrzrn:navigation = "nav" ; float cicepl(record, lat, lon) ; cicepl:long_name = "categorical ice pellets" ; cicepl:units = "bit" ; cicepl:_FillValue = -9999.f ; cicepl:navigation = "nav" ; float cin_lpdg(record, lpdg2, lat, lon) ; cin_lpdg:long_name = "convective inhibition in boundary layer" ; cin_lpdg:units = "J/kg" ; cin_lpdg:_FillValue = -9999.f ; cin_lpdg:navigation = "nav" ; // float cin_sfc(record, lat, lon) ; // cin_sfc:long_name = "convective inhibition at surface" ; // cin_sfc:units = "J/kg" ; // cin_sfc:_FillValue = -9999.f ; // cin_sfc:navigation = "nav" ; // float cloud_wat_atm(record, lat, lon) ; // cloud_wat_atm:long_name = "cloud water entire atmosphere" ; // cloud_wat_atm:units = "kg/m2" ; // cloud_wat_atm:_FillValue = -9999.f ; // cloud_wat_atm:navigation = "nav" ; // float clwmr(record, level, lat, lon) ; // clwmr:long_name = "cloud water mixing ratio" ; // clwmr:units = "kg/kg" ; // clwmr:_FillValue = -9999.f ; // clwmr:navigation = "nav" ; // float cprat(record, lat, lon) ; // cprat:long_name = "convective precipitation rate" ; // cprat:units = "kg/m2/s" ; // cprat:_FillValue = -9999.f ; // cprat:navigation = "nav" ; float crain(record, lat, lon) ; crain:long_name = "categorical rain" ; crain:units = "bit" ; crain:_FillValue = -9999.f ; crain:navigation = "nav" ; float csnow(record, lat, lon) ; csnow:long_name = "categorical snow" ; csnow:units = "bit" ; csnow:_FillValue = -9999.f ; csnow: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 dlwrf_sfc(record, lat, lon) ; dlwrf_sfc:long_name = "downward long wave radiation flux at surface" ; dlwrf_sfc:units = "W/m2" ; dlwrf_sfc:_FillValue = -9999.f ; dlwrf_sfc:navigation = "nav" ; float dswrf_sfc(record, lat, lon) ; dswrf_sfc:long_name = "downward short wave radiation flux at surface" ; dswrf_sfc:units = "W/m2" ; dswrf_sfc:_FillValue = -9999.f ; dswrf_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 gpt_hgt5(record, gpt5level, lat, lon) ; // gpt_hgt5:long_name = "5-wave geopotential height" ; // gpt_hgt5:units = "gp m" ; // gpt_hgt5:_FillValue = -9999.f ; // gpt_hgt5:navigation = "nav" ; // float gpt_hgt5_anom(record, gpt5level, lat, lon) ; // gpt_hgt5_anom:long_name = "5-wave geopotential height anomoly" ; // gpt_hgt5_anom:units = "gp m" ; // gpt_hgt5_anom:_FillValue = -9999.f ; // gpt_hgt5_anom:navigation = "nav" ; float hpbl_sfc(record, lat, lon) ; hpbl_sfc:long_name = "planetary boundary layer height" ; hpbl_sfc:units = "m" ; hpbl_sfc:_FillValue = -9999.f ; hpbl_sfc:navigation = "nav" ; // float ice_conc(record, lat, lon) ; // ice_conc:long_name = "ice cover" ; // ice_conc:units = "bit" ; // ice_conc:_FillValue = -9999.f ; // ice_conc:navigation = "nav" ; float lat_ht_sfc(record, lat, lon) ; lat_ht_sfc:long_name = "surface latent heat net flux" ; lat_ht_sfc:units = "W/m2" ; lat_ht_sfc:_FillValue = -9999.f ; lat_ht_sfc:navigation = "nav" ; // float land_mask_sfc(lat, lon) ; // land_mask_sfc:long_name = "land cover" ; // land_mask_sfc:units = "bit" ; // land_mask_sfc:_FillValue = -9999.f ; // land_mask_sfc:navigation = "nav" ; // float LI(record, lat, lon) ; // LI:long_name = "surface lifted index" ; // LI:units = "degK" ; // LI:_FillValue = -9999.f ; // LI:navigation = "nav" ; float LI4_sfc(record, lat, lon) ; LI4_sfc:long_name = "best (4 layer) lifted index" ; LI4_sfc:units = "degK" ; LI4_sfc:_FillValue = -9999.f ; LI4_sfc:navigation = "nav" ; float N_atm(record, lat, lon) ; N_atm:long_name = "total cloud cover entire atmosphere" ; N_atm:units = "percent" ; N_atm:_FillValue = -9999.f ; N_atm:navigation = "nav" ; // float N_bcy(record, lat, lon) ; // N_bcy:long_name = "total cloud cover at boundary layer cloud layer" ; // N_bcy:units = "percent" ; // N_bcy:_FillValue = -9999.f ; // N_bcy:navigation = "nav" ; // float N_ccy(record, lat, lon) ; // N_ccy:long_name = "total cloud cover at convective cloud layer" ; // N_ccy:units = "percent" ; // N_ccy:_FillValue = -9999.f ; // N_ccy:navigation = "nav" ; float N_hcy(record, lat, lon) ; N_hcy:long_name = "total cloud cover at high cloud layer" ; N_hcy:units = "percent" ; N_hcy:_FillValue = -9999.f ; N_hcy:navigation = "nav" ; float N_lcy(record, lat, lon) ; N_lcy:long_name = "total cloud cover at low cloud layer" ; N_lcy:units = "percent" ; N_lcy:_FillValue = -9999.f ; N_lcy:navigation = "nav" ; float N_mcy(record, lat, lon) ; N_mcy:long_name = "total cloud cover at middle cloud layer" ; N_mcy:units = "percent" ; N_mcy:_FillValue = -9999.f ; N_mcy: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" ; // float omega_sigma(record, sigma, lat, lon) ; // omega_sigma:long_name = "pressure vertical velocity at sigma level" ; // omega_sigma:units = "Pa/s" ; // omega_sigma:_FillValue = -9999.f ; // omega_sigma:navigation = "nav" ; // float o3mr(record, o3level, lat, lon) ; // o3mr:long_name = "ozone mixing ratio" ; // o3mr:units = "kg/kg" ; // o3mr:_FillValue = -9999.f ; // o3mr:navigation = "nav" ; // float P_ccbl(record, lat, lon) ; // P_ccbl:long_name = "pressure at convective cloud bottom level" ; // P_ccbl:units = "Pa" ; // P_ccbl:_FillValue = -9999.f ; // P_ccbl:navigation = "nav" ; // float P_cctl(record, lat, lon) ; // P_cctl:long_name = "pressure at convective cloud top level" ; // P_cctl:units = "Pa" ; // P_cctl:_FillValue = -9999.f ; // P_cctl:navigation = "nav" ; // float P_hcbl(record, lat, lon) ; // P_hcbl:long_name = "pressure at high cloud base level" ; // P_hcbl:units = "Pa" ; // P_hcbl:_FillValue = -9999.f ; // P_hcbl: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 P_lcbl(record, lat, lon) ; // P_lcbl:long_name = "pressure at low cloud base level" ; // P_lcbl:units = "Pa" ; // P_lcbl:_FillValue = -9999.f ; // P_lcbl: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_maxwind(record, lat, lon) ; // P_maxwind:long_name = "pressure at max wind level" ; // P_maxwind:units = "Pa" ; // P_maxwind:_FillValue = -9999.f ; // P_maxwind:navigation = "nav" ; // float P_mcbl(record, lat, lon) ; // P_mcbl:long_name = "pressure at medium cloud base level" ; // P_mcbl:units = "Pa" ; // P_mcbl:_FillValue = -9999.f ; // P_mcbl:navigation = "nav" ; // float P_mctl(record, lat, lon) ; // P_mctl:long_name = "pressure at medium cloud top level" ; // P_mctl:units = "Pa" ; // P_mctl:_FillValue = -9999.f ; // P_mctl: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 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 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 pr_water_atm(record, lat, lon) ; pr_water_atm:long_name = "precipitable water entire atmosphere" ; pr_water_atm:units = "kg/m2" ; pr_water_atm:_FillValue = -9999.f ; pr_water_atm:navigation = "nav" ; float precip_cn3(record, lat, lon) ; precip_cn3:long_name = "convective precipitation over accumulation interval" ; precip_cn3:units = "kg/m2" ; precip_cn3:_FillValue = -9999.f ; precip_cn3:navigation = "nav" ; float precip_cn6(record, lat, lon) ; precip_cn6:long_name = "convective precipitation over accumulation interval" ; precip_cn6:units = "kg/m2" ; precip_cn6:_FillValue = -9999.f ; precip_cn6:navigation = "nav" ; // float precip_cn3_accum_times(record, accum) ; // precip_cn3_accum_times:long_name = "convective precipitation over accumulation interval" ; // precip_cn3_accum_times:units = "hours" ; // precip_cn3_accum_times:_FillValue = -9999.f ; // float precip_cn6_accum_times(record, accum) ; // precip_cn6_accum_times:long_name = "convective precipitation over accumulation interval" ; // precip_cn6_accum_times:units = "hours" ; // precip_cn6_accum_times:_FillValue = -9999.f ; // This next variable is here to satisfy regCalc. It will be empty. float precip_cn12(record, lat, lon) ; precip_cn12:long_name = "convective precipitation over accumulation interval" ; precip_cn12:units = "kg/m2" ; precip_cn12:_FillValue = -9999.f ; precip_cn12:navigation = "nav" ; // float precip_rt(record, lat, lon) ; // precip_rt:long_name = "precipitation rate" ; // precip_rt:units = "kg/m2/s" ; // precip_rt:_FillValue = -9999.f ; // precip_rt:navigation = "nav" ; float PRECIP3(record, lat, lon) ; PRECIP3:long_name = "total precipitation over accumulation interval" ; PRECIP3:units = "kg/m2" ; PRECIP3:_FillValue = -9999.f ; PRECIP3:navigation = "nav" ; float PRECIP6(record, lat, lon) ; PRECIP6:long_name = "total precipitation over accumulation interval" ; PRECIP6:units = "kg/m2" ; PRECIP6:_FillValue = -9999.f ; PRECIP6:navigation = "nav" ; // float PRECIP3_accum_times(record, accum) ; // PRECIP3_accum_times:long_name = "precipitation accumulation interval" ; // PRECIP3_accum_times:units = "hours" ; // PRECIP3_accum_times:_FillValue = -9999.f ; // float PRECIP6_accum_times(record, accum) ; // PRECIP6_accum_times:long_name = "precipitation accumulation interval" ; // PRECIP6_accum_times:units = "hours" ; // PRECIP6_accum_times:_FillValue = -9999.f ; // This next variable is here to satisfy regCalc. It will be empty. float PRECIP12(record, lat, lon) ; PRECIP12:long_name = "total precipitation over accumulation interval" ; PRECIP12:units = "kg/m2" ; PRECIP12:_FillValue = -9999.f ; PRECIP12:navigation = "nav" ; float RH(record, level, lat, lon) ; RH:long_name = "relative humidity" ; RH:units = "percent" ; RH:_FillValue = -9999.f ; RH: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 RH_fhg(record, fhg2m, 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 RH_frzlvl(record, lat, lon) ; // RH_frzlvl:long_name = "relative humidity at freezing level" ; // RH_frzlvl:units = "percent" ; // RH_frzlvl:_FillValue = -9999.f ; // RH_frzlvl:navigation = "nav" ; // float RH_htfl(record, lat, lon) ; // RH_htfl:long_name = "relative humidity at highest tropospheric freezing level" ; // RH_htfl:units = "percent" ; // RH_htfl:_FillValue = -9999.f ; // RH_htfl: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 RH_ls(record, ls, lat, lon) ; // RH_ls:long_name = "relative humidity in layer" ; // RH_ls:units = "percent" ; // RH_ls:_FillValue = -9999.f ; // RH_ls: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 sen_ht_sfc(record, lat, lon) ; sen_ht_sfc:long_name = "surface sensible heat net flux" ; sen_ht_sfc:units = "W/m2" ; sen_ht_sfc:_FillValue = -9999.f ; sen_ht_sfc:navigation = "nav" ; float snow_wat(record, lat, lon) ; snow_wat:long_name = "water equivalent of accumulated snow depth" ; snow_wat:units = "kg/m2" ; snow_wat:_FillValue = -9999.f ; snow_wat:navigation = "nav" ; float soilw_lbls(record, lbls, lat, lon) ; soilw_lbls:long_name = "volumetric soil moisture content" ; soilw_lbls:units = "percent/hundred" ; soilw_lbls:_FillValue = -9999.f ; soilw_lbls:navigation = "nav" ; // float spec_hum_fhg(record, fhg2m, 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 spec_hum_lpdg(record, lpdg, lat, lon) ; // spec_hum_lpdg:long_name = "specific humidity in boundary layer" ; // spec_hum_lpdg:units = "kg/kg" ; // spec_hum_lpdg:_FillValue = -9999.f ; // spec_hum_lpdg:navigation = "nav" ; float T(record, level, lat, lon) ; T:long_name = "temperature" ; T:units = "degK" ; T:_FillValue = -9999.f ; T:navigation = "nav" ; // float T_fh(record, fh, lat, lon) ; // T_fh:long_name = "temperature at fixed height level" ; // T_fh:units = "degK" ; // T_fh:_FillValue = -9999.f ; // T_fh:navigation = "nav" ; float T_fhg(record, fhg2m, 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 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 T_lbls(record, lbls, lat, lon) ; T_lbls:long_name = "temperature in layer below surface" ; T_lbls:units = "degK" ; T_lbls:_FillValue = -9999.f ; T_lbls: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 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 T_maxwind(record, lat, lon) ; // T_maxwind:long_name = "temperature at max wind level" ; // T_maxwind:units = "degK" ; // T_maxwind:_FillValue = -9999.f ; // T_maxwind:navigation = "nav" ; // float T_mctl(record, lat, lon) ; // T_mctl:long_name = "temperature at medium cloud top level" ; // T_mctl:units = "degK" ; // T_mctl:_FillValue = -9999.f ; // T_mctl:navigation = "nav" ; // float T_sfc(record, lat, lon) ; // T_sfc:long_name = "temperature at surface" ; // T_sfc:units = "degK" ; // T_sfc:_FillValue = -9999.f ; // T_sfc:navigation = "nav" ; float T_sigma(record, sigma, lat, lon) ; T_sigma:long_name = "temperature at sigma level" ; T_sigma:units = "degK" ; T_sigma:_FillValue = -9999.f ; T_sigma: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 theta_sigma(record, sigma, lat, lon) ; // theta_sigma:long_name = "potential temperature at sigma level" ; // theta_sigma:units = "degK" ; // theta_sigma:_FillValue = -9999.f ; // theta_sigma:navigation = "nav" ; float Tmax_fhg(record, fhg2m, lat, lon) ; Tmax_fhg:long_name = "max temp at fixed height above ground" ; Tmax_fhg:units = "degK" ; Tmax_fhg:_FillValue = -9999.f ; Tmax_fhg:navigation = "nav" ; float Tmin_fhg(record, fhg2m, lat, lon) ; Tmin_fhg:long_name = "min temp at fixed height above ground" ; Tmin_fhg:units = "degK" ; Tmin_fhg:_FillValue = -9999.f ; Tmin_fhg:navigation = "nav" ; // float totoz_atm(record, lat, lon) ; // totoz_atm:long_name = "total ozone in atmosphere" ; // totoz_atm:units = "Dobson" ; // totoz_atm:_FillValue = -9999.f ; // totoz_atm: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_fh(record, fh, lat, lon) ; // u_fh:long_name = "u-component of wind at fixed height" ; // u_fh:units = "meters/second" ; // u_fh:_FillValue = -9999.f ; // u_fh:navigation = "nav" ; float u_fhg(record, fhg10m, 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 u_flx_sfc(record, lat, lon) ; // u_flx_sfc:long_name = "u-component of momentum flux at surface" ; // u_flx_sfc:units = "N/m2" ; // u_flx_sfc:_FillValue = -9999.f ; // u_flx_sfc:navigation = "nav" ; // float u_gwd_sfc(record, lat, lon) ; // u_gwd_sfc:long_name = "u-component of gravity wave stress flux at surface" ; // u_gwd_sfc:units = "N/m2" ; // u_gwd_sfc:_FillValue = -9999.f ; // u_gwd_sfc: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 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_sigma(record, sigma, lat, lon) ; u_sigma:long_name = "u-component of wind at sigma level" ; u_sigma:units = "meters/second" ; u_sigma:_FillValue = -9999.f ; u_sigma: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 ulwrf_sfc(record, lat, lon) ; ulwrf_sfc:long_name = "upward long wave radiation flux at surface" ; 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 radiation flux at top of atmosphere" ; // ulwrf_topa:units = "W/m2" ; // ulwrf_topa:_FillValue = -9999.f ; // ulwrf_topa:navigation = "nav" ; float uswrf_sfc(record, lat, lon) ; uswrf_sfc:long_name = "upward short wave radiation flux at surface" ; uswrf_sfc:units = "W/m2" ; uswrf_sfc:_FillValue = -9999.f ; uswrf_sfc:navigation = "nav" ; // float uswrf_topa(record, lat, lon) ; // uswrf_topa:long_name = "upward short wave radiation flux at top of atmosphere" ; // uswrf_topa:units = "W/m2" ; // uswrf_topa:_FillValue = -9999.f ; // uswrf_topa: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_fh(record, fh, lat, lon) ; // v_fh:long_name = "v-component of wind at fixed height" ; // v_fh:units = "meters/second" ; // v_fh:_FillValue = -9999.f ; // v_fh:navigation = "nav" ; float v_fhg(record, fhg10m, 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 v_flx_sfc(record, lat, lon) ; // v_flx_sfc:long_name = "v-component of momentum flux at surface" ; // v_flx_sfc:units = "N/m2" ; // v_flx_sfc:_FillValue = -9999.f ; // v_flx_sfc:navigation = "nav" ; // float v_gwd_sfc(record, lat, lon) ; // v_gwd_sfc:long_name = "v-component of gravity wave stress flux at surface" ; // v_gwd_sfc:units = "N/m2" ; // v_gwd_sfc:_FillValue = -9999.f ; // v_gwd_sfc: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 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_sigma(record, sigma, lat, lon) ; v_sigma:long_name = "v-component of wind at sigma level" ; v_sigma:units = "meters/second" ; v_sigma:_FillValue = -9999.f ; v_sigma: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 vert_sshr_trop(record, lat, lon) ; // vert_sshr_trop:long_name = "vertical speed sheer at tropopause" ; // vert_sshr_trop:units = "1/s" ; // vert_sshr_trop:_FillValue = -9999.f ; // vert_sshr_trop:navigation = "nav" ; // float watr3(record, lat, lon) ; // watr3:long_name = "water runoff" ; // watr3:units = "kg/m2" ; // watr3:_FillValue = -9999.f ; // watr3:navigation = "nav" ; // float watr6(record, lat, lon) ; // watr6:long_name = "water runoff" ; // watr6:units = "kg/m2" ; // watr6:_FillValue = -9999.f ; // watr6:navigation = "nav" ; float Z(record, level, lat, lon) ; Z:long_name = "geopotential height" ; Z:units = "gp m" ; Z:_FillValue = -9999.f ; Z:navigation = "nav" ; // float Z_frzlvl(record, lat, lon) ; // Z_frzlvl:long_name = "geopotential height at freezing level" ; // Z_frzlvl:units = "gp m" ; // Z_frzlvl:_FillValue = -9999.f ; // Z_frzlvl:navigation = "nav" ; // float Z_htfl(record, lat, lon) ; // Z_htfl:long_name = "geopotential height at highest tropospheric freezing level" ; // Z_htfl:units = "gp m" ; // Z_htfl:_FillValue = -9999.f ; // Z_htfl:navigation = "nav" ; // float Z_maxwind(record, lat, lon) ; // Z_maxwind:long_name = "geopotential height at max wind level" ; // Z_maxwind:units = "gp m" ; // Z_maxwind:_FillValue = -9999.f ; // Z_maxwind:navigation = "nav" ; float Z_sfc(lat, lon) ; Z_sfc:long_name = "geopotential height at surface" ; Z_sfc:units = "gp m" ; Z_sfc:_FillValue = -9999.f ; Z_sfc: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 Zdev(record, zalevel, lat, lon) ; // Zdev:long_name = "geopotential height anomoly" ; // Zdev:units = "gp m" ; // Zdev:_FillValue = -9999.f ; // Zdev:navigation = "nav" ; // global attributes: :history = "created by gribtonc" ; :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; level = 1000, 975, 950, 925, 900, 850, 800, 750, 700, 650, 600, 550, 500, 450, 400, 350, 300, 250, 200; o3level = 100, 70, 50, 30, 20, 10; gpt5level = 500; zalevel = 1000, 500; lpdg_bot = 0; lpdg_top = 30; lpdg2_bot = 0 ; lpdg2_top = 180 ; lbls_top = 0, 10 ; lbls_bot = 10, 200 ; ls_top = .44, .72, .44, .33 ; ls_bot = 1, .94, .72, 1; fh = 1829, 2743, 3658 ; fhg2m = 2 ; fhg10m = 10 ; sigma = 0.9950 ; model_id = 81, 96 ; // Navigation nav_model = "GRIB1" ; grid_type_code = 0 ; grid_type = "Latitude/Longitude" ; grid_name = "Global 1 x 1 degree grid" ; grid_center = 7 ; // NCEP grid_number = 3 ; i_dim = "lon" ; j_dim = "lat" ; Ni = 360 ; Nj = 181 ; La1 = -90.0 ; Lo1 = 0.0 ; La2 = 90.0 ; Lo2 = -1.0 ; Di = 1.0 ; Dj = 1.0 ; ResCompFlag = 128 ; 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, -179, -178, -177, -176, -175, -174, -173, -172, -171, -170, -169, -168, -167, -166, -165, -164, -163, -162, -161, -160, -159, -158, -157, -156, -155, -154, -153, -152, -151, -150, -149, -148, -147, -146, -145, -144, -143, -142, -141, -140, -139, -138, -137, -136, -135, -134, -133, -132, -131, -130, -129, -128, -127, -126, -125, -124, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114, -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -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; 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 ; }
decoders
archives: