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.
On Mon, 26 Jan 2004, Unidata Support wrote: > > ------- Forwarded Message > > >To: "'address@hidden'" <address@hidden> > >From: "Hanson, Kurt" <address@hidden> > >Subject: bug in gribtonc? > >Organization: UCAR/Unidata > >Keywords: 200401261539.i0QFdEp2018354 > > This message is in MIME format. Since your mail reader does not understand > this format, some or all of this message may not be legible. > > ------_=_NextPart_001_01C3E422.880DC290 > Content-Type: text/plain; > charset="windows-1252" > > Hello -- > > The following concerns the gribtonc utility, as contained in version 3.0.1 > of the decoders package. > > The getrec(...) function in recs.c contains the following block: > /* get dimension and value of valtime_offset */ > dimvaloffsetsid = nuwg_getdim(ncid, DIM_VALOFFSETS ); > if (ncdiminq(ncid, dimvaloffsetsid, (char *)0, &dimvaloffsets) == > -1) { > uerror("%s: can't get dimvaloffsets", nc->ncname); > nerrs++; > } > > Also, nuwg.h contains these definitions: > DIM_VALOFFSETS, /* number of offsets times in this model */ > VAR_VALOFFSET, /* valid time offset for humans */ > > And nuwg.c contains a function nuwg_name(...) which returns "valtime_offset" > for both DIM_VALOFFSETS and VAR_VALOFFSET. > > What's surprising to me is that there is code for considering the notion of > "valid time offsets" as a dimension and also code for considering it a > variable. Is this appropriate? In my experience, I've seen it only as a > variable, but my experience is far from comprehensive! If it does appear as > a dimension in certain contexts, could you provide an example? Kurt, The problem is that I never really had a chance to make an official decoders release that explains your concerns. Everything you mention has been done to make the data monotonically increasing in the netCDF file. To make that happen, I had to enter the valtime_offsets into the cdl so gribtonc would know where to enter the data in the file. For the eta model, the valtime_offset = 6, 12, 18, 24, 30, 36, 42, 48, 54, 60 ; In the old gribtonc/cdls the data was packed into the file as it appeared on the datastream, many times the 24 hr data came in before the 12 hr data so that's the order it was in the file. Now, the code looks for the valtime_offset to figure out where to place the data. I'm attaching the eta.cdl as an working example. Actually it's been used at Unidata for the last couple of months. Also, you might note the inclusion of a new variable called: char forecasttime(record, time_len) ; // derived from valtime forecasttime:long_name = "forecast date and time" ; // units YYYY-MM-DD hh:mm:ssZ (ISO 8601) I'm planning on making a decoders release with the new cdls to match the new code very soon, hopefully this week. Robb... > > If it is a bug, and should always be considered a variable, it seems the > following could replace the block quoted above in recs.c: > > int valoffsets_dim_count; > int valoffsets_dims[MAX_VAR_DIMS]; > > // Get the dimensions of the VALOFFSET variable > int status = ncvarinq(ncid, > nuwg_getvar(ncid, VAR_VALOFFSET), > (char *)0, > (nc_type *)0, > &valoffsets_dim_count, > valoffsets_dims, > (int *)0); > if (status == -1) > { > uerror("%s: can't get dimensions of variable '%s' (status: %d)", > nc->ncname, > nuwg_name(VAR_VALOFFSET), > status); > nerrs++; > return -1; > } > else if (valoffsets_dim_count > 1) > { > uerror("%s: variable '%s' has %d dimensions but 1 is expected", > nc->ncname, > nuwg_name(VAR_VALOFFSET), > valoffsets_dim_count); > nerrs++; > return -1; > } > > // Get the size of the VALOFFSET variable > dimvaloffsets = valoffsets_dims[0]; > > and, for completeness, DIM_VALOFFSETS could be eliminated from nuwg.h and > nuwg.c. > > However, if whether the valid time offsets is a dimension or variable > depends on context, then it seems we'd need code to handle both > possibilities. > > What do you think? > > Thanks -- > > Kurt Hanson > Scientific Software Engineer > WSI Corporation > 400 Minuteman Rd. > Andover, MA 01810 > > > ------_=_NextPart_001_01C3E422.880DC290 > Content-Type: text/html; > charset="windows-1252" > Content-Transfer-Encoding: quoted-printable > > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> > <HTML> > <HEAD> > <META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; = > charset=3Dwindows-1252"> > <META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version = > 5.5.2653.12"> > <TITLE>bug in gribtonc?</TITLE> > </HEAD> > <BODY> > > <P><FONT SIZE=3D2 FACE=3D"Arial">Hello --</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">The following concerns the gribtonc = > utility, as contained in version 3.0.1 of the decoders package.</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">The getrec(...) function in recs.c = > contains the following block:</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New">/* get dimension and value of valtime_offset = > */</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New">dimvaloffsetsid =3D nuwg_getdim(ncid, = > DIM_VALOFFSETS );</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New">if (ncdiminq(ncid, dimvaloffsetsid, (char *)0, = > &dimvaloffsets) =3D=3D -1) {</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New"> uerror("%s: can't get = > dimvaloffsets", nc->ncname);</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New"> nerrs++;</FONT> > <BR> <FONT SIZE=3D2 = > FACE=3D"Courier New">}</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">Also, nuwg.h contains these = > definitions:</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier New"> = > DIM_VALOFFSETS, = > /* number of offsets times = > in this model */</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier New"> = > VAR_VALOFFSET, = > /* valid time offset for = > humans */</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">And nuwg.c contains a function = > nuwg_name(...) which returns "valtime_offset" for both = > DIM_VALOFFSETS and VAR_VALOFFSET.</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">What's surprising to me is that there = > is code for considering the notion of "valid time offsets" as = > a dimension and also code for considering it a variable. Is this = > appropriate? In my experience, I've seen it only as a variable, but my = > experience is far from comprehensive! If it does appear as a dimension = > in certain contexts, could you provide an example?</FONT></P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">If it is a bug, and should always be = > considered a variable, it seems the following could replace the block = > quoted above in recs.c:</FONT></P> > > <P><FONT SIZE=3D2 FACE=3D"Courier = > New"> int = > valoffsets_dim_count;</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> int = > valoffsets_dims[MAX_VAR_DIMS];</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Courier = > New"> // Get the dimensions = > of the VALOFFSET variable</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> int status =3D = > ncvarinq(ncid,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; nuwg_getvar(ncid, = > VAR_VALOFFSET),</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; (char *)0,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; (nc_type *)0,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; &valoffsets_dim_count,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; valoffsets_dims,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; &= > nbsp; (int *)0);</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> if (status =3D=3D = > -1)</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> {</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > uerror("%s: can't get dimensions of variable '%s' (status: = > %d)",</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; nc->ncname,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; = > nuwg_name(VAR_VALOFFSET),</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; status);</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > nerrs++;</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > return -1;</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> }</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> else if = > (valoffsets_dim_count > 1)</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> {</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > uerror("%s: variable '%s' has %d dimensions but 1 is = > expected",</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; nc->ncname,</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; = > nuwg_name(VAR_VALOFFSET),</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> &= > nbsp; valoffsets_dim_count);</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > nerrs++;</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> = > return -1;</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> }</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Courier = > New"> // Get the size of the = > VALOFFSET variable</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Courier = > New"> dimvaloffsets =3D = > valoffsets_dims[0];</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">and, for completeness, DIM_VALOFFSETS = > could be eliminated from nuwg.h and nuwg.c.</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">However, if whether the valid time = > offsets is a dimension or variable depends on context, then it seems = > we'd need code to handle both possibilities.</FONT></P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">What do you think?</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">Thanks --</FONT> > </P> > > <P><FONT SIZE=3D2 FACE=3D"Arial">Kurt Hanson</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Arial">Scientific Software Engineer</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Arial">WSI Corporation</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Arial">400 Minuteman Rd.</FONT> > <BR><FONT SIZE=3D2 FACE=3D"Arial">Andover, MA 01810</FONT> > </P> > > </BODY> > </HTML> > ------_=_NextPart_001_01C3E422.880DC290-- > > NOTE: All email exchanges with Unidata User Support are recorded in the > Unidata inquiry tracking system and then made publically available > through the web. If you do not want to have your interactions made > available in this way, you must let us know in each email you send to us. > -- > > ------- End of Forwarded Message > > =============================================================================== Robb Kambic Unidata Program Center Software Engineer III Univ. Corp for Atmospheric Research address@hidden WWW: http://www.unidata.ucar.edu/ ===============================================================================
netcdf eta{ // Early Terrain Analysis model 48km and 80km dimensions: record = UNLIMITED ; // (reference time, forecast time) x = 93 ; y = 65 ; level = 19 ; // isobaric levels lpdg = 6 ; // layer between levels at specif. pressure diffs from ground fhg = 2 ; // fixed height above ground lfhg = 1 ; // layer between 2 height levels above ground time_len = 21 ; // string length for datetime strings valtime_offset = 10 ; // number of offset times nmodels = 1 ; // number of models ngrids = 1 ; // number of grids nav = 1 ; // for navigation nav_len = 100 ; // max string length for navigation strings variables: double reftime(record) ; // reference time of the model reftime:long_name = "reference time" ; reftime:units = "hours since 1992-1-1" ; double valtime(record) ; // forecast time ("valid" time) valtime:long_name = "valid time" ; valtime:units = "hours since 1992-1-1" ; :record = "reftime, valtime" ; // "dimension attribute" -- means // (reftime, valtime) uniquely // determine record char datetime(record, time_len) ; // derived from reftime datetime:long_name = "reference date and time" ; // units YYYY-MM-DD hh:mm:ssZ (ISO 8601) double valtime_offset(valtime_offset) ; // valtime - reftime valtime_offset:long_name = "hours from reference time" ; valtime_offset:units = "hours" ; char forecasttime(record, time_len) ; // derived from valtime forecasttime:long_name = "forecast date and time" ; // units YYYY-MM-DD hh:mm:ssZ (ISO 8601) float level(level) ; level:long_name = "isobaric level" ; level: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 layer between levels at specif. pressure diffs from ground " ; lpdg_bot:units = "hPa" ; float lpdg_top(lpdg) ; lpdg_top:long_name = "top level of layer between levels at specif. pressure diffs from ground " ; lpdg_top:units = "hPa" ; float fhg(fhg) ; fhg:long_name = "fixed height above ground" ; fhg:units = "meters" ; :lfhg = "lfhg_bot, lfhg_top" ; // ("lfhg_bot, lfhg_top") uniquely // determines lfhg float lfhg_bot(lfhg) ; lfhg_bot:long_name = "bottom level of layer between 2 height levels above ground " ; lfhg_bot:units = "hm" ; float lfhg_top(lfhg) ; lfhg_top:long_name = "top level of layer between 2 height levels above ground " ; lfhg_top:units = "hm" ; long model_id(nmodels) ; model_id:long_name = "generating process ID number" ; // navigation variables all use nav dimension char nav_model(nav, nav_len) ; // navigation parameterization nav_model:long_name = "navigation model name" ; int grid_type_code(nav) ; grid_type_code:long_name = "GRIB-1 GDS data representation type" ; char grid_type(nav, nav_len) ; grid_type:long_name = "GRIB-1 grid type" ; char grid_name(nav, nav_len) ; grid_name:long_name = "grid name" ; int grid_center(nav) ; grid_center:long_name = "GRIB-1 originating center ID" ; int grid_number(nav, ngrids) ; grid_number:long_name = "GRIB-1 catalogued grid numbers" ; grid_number:_FillValue = -9999 ; char x_dim(nav, nav_len) ; x_dim:long_name = "x dimension name" ; char y_dim(nav, nav_len) ; y_dim:long_name = "y dimension name" ; long Nx(nav) ; Nx:long_name = "number of points along x-axis" ; long Ny(nav) ; Ny:long_name = "number of points along y-axis" ; float La1(nav) ; La1:long_name = "latitude of first grid point" ; La1:units = "degrees_north" ; float Lo1(nav) ; Lo1:long_name = "longitude of first grid point" ; Lo1:units = "degrees_east" ; float Lov(nav) ; Lov:long_name = "orientation of the grid" ; Lov:units = "degrees_east" ; float Dx(nav) ; Dx:long_name = "x-direction grid length" ; Dx:units = "km" ; float Dy(nav) ; Dy:long_name = "y-direction grid length" ; Dy:units = "km" ; byte ProjFlag(nav) ; ProjFlag:long_name = "projection center flag" ; float Latin1(nav) ; Latin1:long_name = "first intersecting latitude" ; Latin1:units = "degrees_north" ; float Latin2(nav) ; Latin2:long_name = "second intersecting latitude" ; Latin2:units = "degrees_north" ; float SpLat(nav) ; SpLat:long_name = "latitude of the southern pole" ; SpLat:units = "degrees_north" ; float SpLon(nav) ; SpLon:long_name = "longitude of the southern pole" ; SpLon:units = "degrees_east" ; byte ResCompFlag(nav) ; ResCompFlag:long_name = "resolution and component flags" ; // end of navigation variables float omega(record,level,y,x) ; omega:long_name = "Pressure vertical velocity at isobaric levels" ; omega:standard_name = "omega" ; omega:units = "Pa/s" ; omega:GRIB_parameter_number = 39 ; omega:GRIB_level_flag = 100 ; omega:_FillValue = -9999.f ; omega:navigation = "nav" ; float Z(record,level,y,x) ; Z:long_name = "Geopotential height at isobaric levels" ; Z:standard_name = "geopotential_height" ; Z:units = "gp m" ; Z:GRIB_parameter_number = 7 ; Z:GRIB_level_flag = 100 ; Z:_FillValue = -9999.f ; Z:navigation = "nav" ; float Z_sfc(y,x) ; Z_sfc:long_name = "Geopotential height at surface of the earth" ; Z_sfc:standard_name = "geopotential_height" ; Z_sfc:units = "gp m" ; Z_sfc:GRIB_parameter_number = 7 ; Z_sfc:GRIB_level_flag = 1 ; Z_sfc:_FillValue = -9999.f ; Z_sfc:navigation = "nav" ; float v(record,level,y,x) ; v:long_name = "v-component of wind at isobaric levels" ; v:standard_name = "northward_wind" ; v:units = "m/s" ; v:GRIB_parameter_number = 34 ; v:GRIB_level_flag = 100 ; v:_FillValue = -9999.f ; v:navigation = "nav" ; float v_fhg(record,fhg,y,x) ; v_fhg:long_name = "v-component of wind at fixed height above ground" ; v_fhg:standard_name = "northward_wind" ; v_fhg:units = "m/s" ; v_fhg:GRIB_parameter_number = 34 ; v_fhg:GRIB_level_flag = 105 ; v_fhg:_FillValue = -9999.f ; v_fhg:navigation = "nav" ; float v_lpdg(record,lpdg,y,x) ; v_lpdg:long_name = "v-component of wind at layer between levels at specif. pressure diffs from ground" ; v_lpdg:standard_name = "northward_wind" ; v_lpdg:units = "m/s" ; v_lpdg:GRIB_parameter_number = 34 ; v_lpdg:GRIB_level_flag = 116 ; v_lpdg:_FillValue = -9999.f ; v_lpdg:navigation = "nav" ; float T(record,level,y,x) ; T:long_name = "Temperature at isobaric levels" ; T:standard_name = "air_temperature" ; T:units = "degK" ; T:GRIB_parameter_number = 11 ; T:GRIB_level_flag = 100 ; T:_FillValue = -9999.f ; T:navigation = "nav" ; float T_fhg(record,fhg,y,x) ; T_fhg:long_name = "Temperature at fixed height above ground" ; T_fhg:standard_name = "air_temperature" ; T_fhg:units = "degK" ; T_fhg:GRIB_parameter_number = 11 ; T_fhg:GRIB_level_flag = 105 ; T_fhg:_FillValue = -9999.f ; T_fhg:navigation = "nav" ; float T_lpdg(record,lpdg,y,x) ; T_lpdg:long_name = "Temperature at layer between levels at specif. pressure diffs from ground" ; T_lpdg:standard_name = "air_temperature" ; T_lpdg:units = "degK" ; T_lpdg:GRIB_parameter_number = 11 ; T_lpdg:GRIB_level_flag = 116 ; T_lpdg:_FillValue = -9999.f ; T_lpdg:navigation = "nav" ; float u(record,level,y,x) ; u:long_name = "u-component of wind at isobaric levels" ; u:standard_name = "eastward_wind" ; u:units = "m/s" ; u:GRIB_parameter_number = 33 ; u:GRIB_level_flag = 100 ; u:_FillValue = -9999.f ; u:navigation = "nav" ; float u_fhg(record,fhg,y,x) ; u_fhg:long_name = "u-component of wind at fixed height above ground" ; u_fhg:standard_name = "eastward_wind" ; u_fhg:units = "m/s" ; u_fhg:GRIB_parameter_number = 33 ; u_fhg:GRIB_level_flag = 105 ; u_fhg:_FillValue = -9999.f ; u_fhg:navigation = "nav" ; float u_lpdg(record,lpdg,y,x) ; u_lpdg:long_name = "u-component of wind at layer between levels at specif. pressure diffs from ground" ; u_lpdg:standard_name = "eastward_wind" ; u_lpdg:units = "m/s" ; u_lpdg:GRIB_parameter_number = 33 ; u_lpdg:GRIB_level_flag = 116 ; u_lpdg:_FillValue = -9999.f ; u_lpdg:navigation = "nav" ; float RH(record,level,y,x) ; RH:long_name = "Relative humidity at isobaric levels" ; RH:standard_name = "relative_humidity" ; RH:units = "percent" ; RH:GRIB_parameter_number = 52 ; RH:GRIB_level_flag = 100 ; RH:_FillValue = -9999.f ; RH:navigation = "nav" ; float RH_fhg(record,fhg,y,x) ; RH_fhg:long_name = "Relative humidity at fixed height above ground" ; RH_fhg:standard_name = "relative_humidity" ; RH_fhg:units = "percent" ; RH_fhg:GRIB_parameter_number = 52 ; RH_fhg:GRIB_level_flag = 105 ; RH_fhg:_FillValue = -9999.f ; RH_fhg:navigation = "nav" ; float RH_lpdg(record,lpdg,y,x) ; RH_lpdg:long_name = "Relative humidity at layer between levels at specif. pressure diffs from ground" ; RH_lpdg:standard_name = "relative_humidity" ; RH_lpdg:units = "percent" ; RH_lpdg:GRIB_parameter_number = 52 ; RH_lpdg:GRIB_level_flag = 116 ; RH_lpdg:_FillValue = -9999.f ; RH_lpdg:navigation = "nav" ; float P_sfc(record,y,x) ; P_sfc:long_name = "Pressure at surface of the earth" ; P_sfc:standard_name = "air_pressure" ; P_sfc:units = "Pa" ; P_sfc:GRIB_parameter_number = 1 ; P_sfc:GRIB_level_flag = 1 ; P_sfc:_FillValue = -9999.f ; P_sfc:navigation = "nav" ; float PRECIP(record,y,x) ; PRECIP:long_name = "Total precipitation at surface of the earth" ; PRECIP:standard_name = "precipitation_amount" ; PRECIP:units = "kg/m2" ; PRECIP:GRIB_parameter_number = 61 ; PRECIP:GRIB_level_flag = 1 ; PRECIP:_FillValue = -9999.f ; PRECIP:navigation = "nav" ; float precip_cn(record,y,x) ; precip_cn:long_name = "Convective precipitation at surface of the earth" ; precip_cn:standard_name = "convective_precipitation_amount" ; precip_cn:units = "kg/m2" ; precip_cn:GRIB_parameter_number = 63 ; precip_cn:GRIB_level_flag = 1 ; precip_cn:_FillValue = -9999.f ; precip_cn:navigation = "nav" ; float Psl_et(record,y,x) ; Psl_et:long_name = "Mean sea level pressure (ETA model reduction) at mean sea level" ; Psl_et:standard_name = "-" ; Psl_et:units = "Pa" ; Psl_et:GRIB_parameter_number = 130 ; Psl_et:GRIB_level_flag = 102 ; Psl_et:_FillValue = -9999.f ; Psl_et:navigation = "nav" ; float absvor(record,level,y,x) ; absvor:long_name = "Absolute vorticity at isobaric levels" ; absvor:standard_name = "atmosphere_absolute_vorticity" ; absvor:units = "1/s" ; absvor:GRIB_parameter_number = 41 ; absvor:GRIB_level_flag = 100 ; absvor:_FillValue = -9999.f ; absvor:navigation = "nav" ; float pli_lpdg(record,lpdg,y,x) ; pli_lpdg:long_name = "Parcel lifted index (to 500 hPa) at layer between levels at specif. pressure diffs from ground" ; pli_lpdg:standard_name = "-" ; pli_lpdg:units = "K" ; pli_lpdg:GRIB_parameter_number = 24 ; pli_lpdg:GRIB_level_flag = 116 ; pli_lpdg:_FillValue = -9999.f ; pli_lpdg:navigation = "nav" ; float LI4_lpdg(record,lpdg,y,x) ; LI4_lpdg:long_name = "Best (4 layer) lifted index at layer between levels at specif. pressure diffs from ground" ; LI4_lpdg:standard_name = "-" ; LI4_lpdg:units = "degK" ; LI4_lpdg:GRIB_parameter_number = 132 ; LI4_lpdg:GRIB_level_flag = 116 ; LI4_lpdg:_FillValue = -9999.f ; LI4_lpdg:navigation = "nav" ; float pr_water_atm(record,y,x) ; pr_water_atm:long_name = "Precipitable water at entire atmosphere considered as a single layer" ; pr_water_atm:standard_name = "atmosphere_water_vapour_content" ; pr_water_atm:units = "kg/m2" ; pr_water_atm:GRIB_parameter_number = 54 ; pr_water_atm:GRIB_level_flag = 200 ; pr_water_atm:_FillValue = -9999.f ; pr_water_atm:navigation = "nav" ; float cape_sfc(record,y,x) ; cape_sfc:long_name = "Convective available potential energy at surface of the earth" ; cape_sfc:standard_name = "-" ; cape_sfc:units = "J/kg" ; cape_sfc:GRIB_parameter_number = 157 ; cape_sfc:GRIB_level_flag = 1 ; cape_sfc:_FillValue = -9999.f ; cape_sfc:navigation = "nav" ; float cape_lpdg(record,lpdg,y,x) ; cape_lpdg:long_name = "Convective available potential energy at layer between levels at specif. pressure diffs from ground" ; cape_lpdg:standard_name = "-" ; cape_lpdg:units = "J/kg" ; cape_lpdg:GRIB_parameter_number = 157 ; cape_lpdg:GRIB_level_flag = 116 ; cape_lpdg:_FillValue = -9999.f ; cape_lpdg:navigation = "nav" ; float cin_lpdg(record,lpdg,y,x) ; cin_lpdg:long_name = "Convective inhibition at layer between levels at specif. pressure diffs from ground" ; cin_lpdg:standard_name = "-" ; cin_lpdg:units = "J/kg" ; cin_lpdg:GRIB_parameter_number = 156 ; cin_lpdg:GRIB_level_flag = 116 ; cin_lpdg:_FillValue = -9999.f ; cin_lpdg:navigation = "nav" ; float cin_sfc(record,y,x) ; cin_sfc:long_name = "Convective inhibition at surface of the earth" ; cin_sfc:standard_name = "-" ; cin_sfc:units = "J/kg" ; cin_sfc:GRIB_parameter_number = 156 ; cin_sfc:GRIB_level_flag = 1 ; cin_sfc:_FillValue = -9999.f ; cin_sfc:navigation = "nav" ; float helc_lfhg(record,lfhg,y,x) ; helc_lfhg:long_name = "Storm relative helicity at layer between 2 height levels above ground" ; helc_lfhg:standard_name = "-" ; helc_lfhg:units = "m2/s2" ; helc_lfhg:GRIB_parameter_number = 190 ; helc_lfhg:GRIB_level_flag = 106 ; helc_lfhg:_FillValue = -9999.f ; helc_lfhg:navigation = "nav" ; // global attributes :history = "2003-03-28 11:00:39 - created by gribtocdl" ; :title = " Early Terrain Analysis model 48km and 80km" ; :Conventions = "NUWG" ; :GRIB_reference = "Office Note 388 GRIB" ; :GRIB_URL = "http://www.nco.ncep.noaa.gov/pmb/docs/on388/" ; :version = 0.0 ; data: level = 1000.0, 950.0, 900.0, 850.0, 800.0, 750.0, 700.0, 650.0, 600.0, 550.0, 500.0, 450.0, 400.0, 350.0, 300.0, 250.0, 200.0, 150.0, 100.0 ; lpdg_bot = 0.0, 0.0, 30.0, 60.0, 90.0, 120.0 ; lpdg_top = 30.0, 180.0, 60.0, 90.0, 120.0, 150.0 ; fhg = 2.0, 10.0 ; lfhg_bot = 0.0 ; lfhg_top = 30.0 ; model_id = 84 ; valtime_offset = 6, 12, 18, 24, 30, 36, 42, 48, 54, 60 ; // Navigation nav_model = "GRIB1" ; grid_type_code = 3 ; grid_type = "Lambert conformal projection" ; grid_name = "grid 211: Regional CONUS" ; grid_center = 7 ; grid_number = 211 ; x_dim = "x" ; y_dim = "y" ; Nx = 93 ; Ny = 65 ; La1 = 12.190000 ; Lo1 = -133.459000 ; Lov = -95.000000 ; Dx = 81271.000000 ; Dy = 81271.000000 ; Latin1 = 25.000000 ; Latin2 = 25.000000 ; SpLat = 0.000000 ; SpLon = 0.000000 ; // Pole in proj. plane = North ; ProjFlag = 0 ; ResCompFlag = 8 ; }