[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Sample GFS 1x1 deg cdl (fwd)
- Subject: Sample GFS 1x1 deg cdl (fwd)
- Date: Fri, 23 Jan 2004 10:58:01 -0700 (MST)
===============================================================================
Robb Kambic Unidata Program Center
Software Engineer III Univ. Corp for Atmospheric Research
address@hidden WWW: http://www.unidata.ucar.edu/
===============================================================================
---------- Forwarded message ----------
Date: Fri, 23 Jan 2004 10:33:25 -0700
From: Jim Cowie <address@hidden>
To: address@hidden
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
address@hidden
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: address@hidden
[mailto:address@hidden]On Behalf Of Robb Kambic
Sent: Thursday, January 22, 2004 5:53 PM
To: Rorik Peterson
Cc: address@hidden; 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.789
Rorik,
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
============================================================================
===
Robb Kambic Unidata Program Center
Software Engineer III Univ. Corp for Atmospheric
Research
address@hidden WWW: http://www.unidata.ucar.edu/
============================================================================
===
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 ;
}