1161 lines
33 KiB
HTML
1161 lines
33 KiB
HTML
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type"
|
|
content="text/html; charset=iso-8859-1">
|
|
<meta name="GENERATOR"
|
|
content="Mozilla/4.78 [en] (X11; U; Linux 2.4.9-13smp i686) [Netscape]">
|
|
<title>ifpServer netCDF Format</title>
|
|
</head>
|
|
<body text="#000000" bgcolor="#ffffff" link="#0000ee" vlink="#551a8b"
|
|
alink="#ff0000">
|
|
<h1>
|
|
ifpServer D2D netCDF File Format</h1>
|
|
October 6, 2002
|
|
<br>
|
|
|
|
<br>
|
|
This document describes the format of the netCDF file that is:
|
|
<ul>
|
|
<li>
|
|
read by the ifpServer as a D2D database</li>
|
|
</ul>
|
|
If you are interested in the format of the netCDF files generated from
|
|
the <a href="ifpnetCDF.html">ifpnetCDF product formatter<!-- Leave this comment in for formatting purposes--></a> or<!-- Leave this comment in for formatting purposes-->
|
|
read
|
|
by the <a href="iscMosaic.html">iscMosaic program<!-- Leave this comment in for formatting purposes--></a> , then refer to<!-- Leave this comment in for formatting purposes-->
|
|
the
|
|
<a href="netCDFFormat.html">netCDF File Format Document<!-- Leave this comment in for formatting purposes--></a>.
|
|
<p>Table of Contents
|
|
<br>
|
|
<a href="#dimensions">netCDF Required Dimensions</a>
|
|
<br>
|
|
<a href="#netCDFVariableNames">netCDF Variable Names</a>
|
|
<br>
|
|
<a href="#attributes">netCDF Variable Attributes</a>
|
|
<br>
|
|
<a href="#attributes">netCDF Global Attributes</a>
|
|
<br>
|
|
<a href="#DiagnosingModelProblems">Diagnosing Model Problems</a>
|
|
<br>
|
|
<a href="#ncdump">Example of ncdump</a>
|
|
</p>
|
|
<p></p>
|
|
<hr width="100%">
|
|
<h2><a name="dimensions"></a>netCDF Required Dimensions</h2>
|
|
Each netCDF file is required to contain the following set of
|
|
dimensions:
|
|
<br>
|
|
|
|
<table border="1" width="100%" nosave="">
|
|
<tbody>
|
|
<tr>
|
|
<td><b>Dimension</b></td>
|
|
<td><b>Description</b></td>
|
|
<td><b>Required by GFESuite?</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>x</td>
|
|
<td>X-dimension of all grids</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>y</td>
|
|
<td>Y-dimension of all grids</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>
|
|
</p>
|
|
<hr width="100%"><br>
|
|
|
|
<h2><a name="netCDFVariableNames"></a>netCDF Variable Names</h2>
|
|
Each netCDF variable name represents a set of grids, plus additional
|
|
information:
|
|
<br>
|
|
|
|
<table border="1" width="100%" nosave="">
|
|
<caption> </caption>
|
|
<tbody>
|
|
<tr nosave="">
|
|
<td nosave=""><b>Variable Name Format<br>
|
|
</b></td>
|
|
<td><b>Example</b></td>
|
|
<td><b>Data Type</b></td>
|
|
<td><b>Dimensions</b></td>
|
|
<td><b>Description</b></td>
|
|
<td><b>Required by GFESuite?</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>name</td>
|
|
<td>gh</td>
|
|
<td>4-D cube of data, float</td>
|
|
<td>(#grids, #levels, y,x)</td>
|
|
<td>The actual gridded data is contained in these variables.
|
|
Attributes
|
|
are associated with this variable.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>nameLevels</td>
|
|
<td>ghLevels</td>
|
|
<td>2-D array of charaters</td>
|
|
<td>(#levels, charsPerLevel)</td>
|
|
<td>The names of each of the vertical levels is in this variable,
|
|
such
|
|
as 500MB.</td>
|
|
<td>Yes, if there are more than 1 level in the data. If not
|
|
specified,
|
|
then the level name is assigned "Dflt".</td>
|
|
</tr>
|
|
<tr>
|
|
<td>nameInventory</td>
|
|
<td>ghInventory</td>
|
|
<td>2-D array of characters</td>
|
|
<td>(#grids, #levels)</td>
|
|
<td>An indicator 0 or 1 is used to denote whether that grid is
|
|
present
|
|
in the "name" variable. These bits change as model data arrives.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>_tp12, _tp6</td>
|
|
<td>_tp12, _tp6</td>
|
|
<td>array of numbers, int</td>
|
|
<td>#grids</td>
|
|
<td>Indicates whether total precipitation is for a 6 hour period
|
|
or for
|
|
a 12 hour period. Some models provide QPF grids every 6 hours,
|
|
but
|
|
the durations of each grid alternates between QPF for the last 6 hours,
|
|
and the last 12 hours.</td>
|
|
<td>No. If not specified, then it assumed that Total
|
|
Precipitation
|
|
(_tp) valid accumulation time is the time between grids.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>valtimeMINUSreftime</td>
|
|
<td>valtimeMINUSreftime</td>
|
|
<td>array of numbers, int</td>
|
|
<td># grids</td>
|
|
<td>indicates the offset in seconds between the model reference
|
|
(base)
|
|
time, and the grid.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>reftime</td>
|
|
<td>reftime</td>
|
|
<td>single number, float</td>
|
|
<td>n/a</td>
|
|
<td>indicates the number of seconds between Jan 1, 1970 at 0000z
|
|
and the
|
|
model base time (analysis time)</td>
|
|
<td>No. The D2D convention is to use the file name as the base
|
|
model time.
|
|
The "reftime" variable is not used.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>model</td>
|
|
<td>model</td>
|
|
<td>array of characters</td>
|
|
<td>namelen</td>
|
|
<td>defines the model name as it appears in the GFE GUI and
|
|
ifpServer databases.
|
|
There can be only ONE netCDF file valid for the same time that has the
|
|
same model definition, or the ifpServer/GFE will not see all of them.</td>
|
|
<td>Yes. The model specified will be modified by eliminating
|
|
spaces and
|
|
non-alphanumeric characters. Note that the model name may be overridden
|
|
using the <a href="serverConfig.html#D2DModelFileDirectories">D2DDIRS
|
|
in serverConfig.py</a> and
|
|
<a
|
|
href="localConfig.html#ModifyingthelistofD2DDirectoriesformodelaccess">
|
|
localConfig.py.</a> Thus if the "model" variable in the netCDF file
|
|
isn't to your liking or there is a conflict with other netCDF files,
|
|
you
|
|
can effectively change it using the syntax in the D2DDIRS definition.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>staticTopo</td>
|
|
<td>staticTopo</td>
|
|
<td>2-D grid, float</td>
|
|
<td>(y, x)</td>
|
|
<td>Contains the topography in meters for the model. </td>
|
|
<td>No. This field is recommended, but not required.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<hr width="100%">
|
|
<h2><a name="attributes"></a>netCDF variable Attributes</h2>
|
|
<div style="margin-bottom: 0in;">Every "name" variable in the netCDF
|
|
file
|
|
has a collection of attributes. In the table below, we briefly
|
|
describe
|
|
each attribute and its meaning. For more information about a
|
|
particular
|
|
attribute, click on the link.
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<table border="1" width="100%" nosave="">
|
|
<tbody>
|
|
<tr>
|
|
<td><b>Attribute Name</b></td>
|
|
<td><b>Attribute Description</b></td>
|
|
<td><b>Required by GFESuite?</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>long_name</td>
|
|
<td>Contains a descriptive name that describes the variable.</td>
|
|
<td>No. If long_name is not specified, GFESuite will use the
|
|
variable name
|
|
instead.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>units</td>
|
|
<td>Units for the variable. This is used by the GFE to
|
|
display units
|
|
in the legend, ifpIMAGE for the units in its legend, and for copy/paste
|
|
operations within the GFE to determine how to convert units to the Fcst
|
|
database units.</td>
|
|
<td>Yes.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>valid_range</td>
|
|
<td>Minimum and maximum range of the variable. This is used
|
|
by the
|
|
ifpServer to limit the data, and by the GFE to assign color tables to
|
|
the
|
|
data. (ifpServer also looks for valid_min and valid_max if valid_range
|
|
does not exist)</td>
|
|
<td>No. If not specified, then the minimum is assigned as 0 and
|
|
the maximum
|
|
assigned as 5000.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>_FillValue</td>
|
|
<td>Fill Value, indicating no data at the point.</td>
|
|
<td>No. If not specified, then the fill value is assumed to
|
|
be MAXFLOAT.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<h2>
|
|
<a name="global"></a>netCDF Global Attributes</h2>
|
|
<div style="margin-bottom: 0in;">
|
|
<br>
|
|
The following netCDF global attributes are required in order for the
|
|
ifpServer to recognize the netCDF file as valid:
|
|
<table border="1" width="100%" nosave="">
|
|
<caption> </caption>
|
|
<tbody>
|
|
<tr>
|
|
<td><b>Attribute</b></td>
|
|
<td><b>Description</b></td>
|
|
<td><b>Required by GFESuite?</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>projName</td>
|
|
<td>Contains the projection name. Must be one of the
|
|
following: LAMBERT_CONFORMAL,
|
|
MERCATOR, STEREOGRAPHIC, LATLON, CYLINDRICAL_EQUIDISTANT</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>lon00</td>
|
|
<td>Longitude in degrees of lower-left grid point (0, 0)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>lat00</td>
|
|
<td>Latitude in degrees of lower-left grid point (0, 0)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>latNxNy</td>
|
|
<td>Latitude in degrees of upper-right grid point (maxX, maxY)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>lonNxNy</td>
|
|
<td>Longitude in degrees of upper-right grid point (maxX, maxY)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>centralLon</td>
|
|
<td>Center longitude for the mercator projection, where the
|
|
mercator projection
|
|
is parallel to the Earth's surface. Center longitude for the polar
|
|
stereographic
|
|
and Lambert Conformal projections, where the projection has north as
|
|
straight
|
|
up.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>centralLat</td>
|
|
<td>Center latitude for the polar stereographic and Lambert
|
|
Conformal projections,
|
|
where the plane intersects the Earth's surface.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<hr width="100%">
|
|
<br>
|
|
|
|
<h2><a name="DiagnosingModelProblems"></a>Diagnosing Model Problems</h2>
|
|
If you point the ifpServer to a D2D directory and the model is not
|
|
appearing,
|
|
verify that:
|
|
<ul>
|
|
<li>
|
|
the file name is in the standard format of yyyymmdd_hhmm, which is the
|
|
model base time</li>
|
|
<li>
|
|
that the file contains all of the required variables, dimensions, and
|
|
attributes
|
|
as outlined above</li>
|
|
<li>
|
|
that there isn't more than ONE directory in the <a
|
|
href="localConfig.html#ModifyingthelistofD2DDirectoriesformodelaccess">D2DDIRS</a>
|
|
configuration containing files that have an variable called "model"
|
|
with
|
|
the same name</li>
|
|
</ul>
|
|
If all else fails, you can turn on the debugging logging option in the
|
|
ifpServer. In this mode the ifpServer will log all problems it
|
|
finds
|
|
with model data files. To turn on this feature, perform the
|
|
following
|
|
steps:
|
|
<ol>
|
|
<li>
|
|
Edit the file <i>release</i>/etc/BASE/logPref/ifpServer.logPref, where <i>release</i>
|
|
is the installation directory. On AWIPS-baseline equipment this file is
|
|
located at /awips/GFESuite/primary/etc/BASE/logPref/ifpServer.logPref. Add the
|
|
following
|
|
line in the middle of the file (before the prefix section). Refer
|
|
to the <a href="logFiles.html">log files document</a> for details. Add
|
|
an entry: all D2DFile.C file debug
|
|
= on</li>
|
|
<li>
|
|
Stop and restart the ifpServer.</li>
|
|
<li>
|
|
Look in the server log files. It will show the problems for all
|
|
files
|
|
it finds. If it doesn't identify your file or directory, recheck
|
|
your <a
|
|
href="localConfig.html#ModifyingthelistofD2DDirectoriesformodelaccess">D2DDIRS</a>
|
|
to be sure you have set it up correctly.</li>
|
|
</ol>
|
|
<p><br>
|
|
</p>
|
|
<hr width="100%">
|
|
<h2><a name="ncdump"></a>Example of ncdump</h2>
|
|
<a href="#header">Header dump of netcdf file</a>
|
|
<br>
|
|
<a href="#valtime">Valid Time dump</a>
|
|
<br>
|
|
<a href="#model">model dump</a>
|
|
<br>
|
|
<a href="#inventory">inventory dump</a>
|
|
<br>
|
|
<a href="#levels">levels dump</a></div>
|
|
<a name="header"></a>This is an example of an ncdump -h of an NAM
|
|
model,
|
|
showing all of the correct fields:
|
|
<p><tt>ncdump -h 20020327_1200</tt>
|
|
</p>
|
|
<p><tt>netcdf 20020327_1200 {</tt>
|
|
<br>
|
|
<tt>dimensions:</tt>
|
|
<br>
|
|
<tt> record = UNLIMITED ; // (11 currently)</tt>
|
|
<br>
|
|
<tt> n_valtimes = 15 ;</tt>
|
|
<br>
|
|
<tt> data_variables = 20 ;</tt>
|
|
<br>
|
|
<tt> charsPerLevel = 10 ;</tt>
|
|
<br>
|
|
<tt> namelen = 132 ;</tt>
|
|
<br>
|
|
<tt> x = 93 ;</tt>
|
|
<br>
|
|
<tt> y = 65 ;</tt>
|
|
<br>
|
|
<tt> levels_1 = 1 ;</tt>
|
|
<br>
|
|
<tt> levels_2 = 2 ;</tt>
|
|
<br>
|
|
<tt> levels_5 = 5 ;</tt>
|
|
<br>
|
|
<tt> levels_19 = 19 ;</tt>
|
|
<br>
|
|
<tt> levels_25 = 25 ;</tt>
|
|
<br>
|
|
<tt>variables:</tt>
|
|
<br>
|
|
<tt> float gh(record, levels_19, y, x) ;</tt>
|
|
<br>
|
|
<tt> gh:long_name =
|
|
"Geopotential
|
|
height" ;</tt>
|
|
<br>
|
|
<tt> gh:units = "m" ;</tt>
|
|
<br>
|
|
<tt> gh:udunits = "meters"
|
|
;</tt>
|
|
<br>
|
|
<tt> gh:uiname = "geoPotHt"
|
|
;</tt>
|
|
<br>
|
|
<tt> gh:valid_range = 0.f,
|
|
20000.f ;</tt>
|
|
<br>
|
|
<tt> gh:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> gh:_n3D = 19 ;</tt>
|
|
<br>
|
|
<tt> gh:levels = "MB 1000-100
|
|
by 50" ;</tt>
|
|
<br>
|
|
<tt> char ghLevels(levels_19, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char ghInventory(n_valtimes, levels_19) ;</tt>
|
|
<br>
|
|
<tt> float rh(record, levels_25, y, x) ;</tt>
|
|
<br>
|
|
<tt> rh:long_name = "Relative
|
|
Humidity" ;</tt>
|
|
<br>
|
|
<tt> rh:units = "%" ;</tt>
|
|
<br>
|
|
<tt> rh:udunits = "percent"
|
|
;</tt>
|
|
<br>
|
|
<tt> rh:uiname = "rh" ;</tt>
|
|
<br>
|
|
<tt> rh:valid_range = 0.f,
|
|
100.f ;</tt>
|
|
<br>
|
|
<tt> rh:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> rh:_n3D = 20 ;</tt>
|
|
<br>
|
|
<tt> rh:levels = "FHAG
|
|
2
|
|
MB 1000-100 by 50 BL 0>30 30>60 60>90 90>120
|
|
120>150" ;</tt>
|
|
<br>
|
|
<tt> char rhLevels(levels_25, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char rhInventory(n_valtimes, levels_25) ;</tt>
|
|
<br>
|
|
<tt> float t(record, levels_25, y, x) ;</tt>
|
|
<br>
|
|
<tt> t:long_name =
|
|
"Temperature"
|
|
;</tt>
|
|
<br>
|
|
<tt> t:units = "K" ;</tt>
|
|
<br>
|
|
<tt> t:udunits =
|
|
"degree_Kelvin"
|
|
;</tt>
|
|
<br>
|
|
<tt> t:uiname = "T" ;</tt>
|
|
<br>
|
|
<tt> t:valid_range = 180.f,
|
|
330.f ;</tt>
|
|
<br>
|
|
<tt> t:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> t:_n3D = 20 ;</tt>
|
|
<br>
|
|
<tt> t:levels = "FHAG 2
|
|
MB 1000-100 by 50 BL 0>30 30>60 60>90 90>120
|
|
120>150" ;</tt>
|
|
<br>
|
|
<tt> char tLevels(levels_25, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char tInventory(n_valtimes, levels_25) ;</tt>
|
|
<br>
|
|
<tt> float uw(record, levels_25, y, x) ;</tt>
|
|
<br>
|
|
<tt> uw:long_name = "u wind
|
|
component" ;</tt>
|
|
<br>
|
|
<tt> uw:units = "m/s" ;</tt>
|
|
<br>
|
|
<tt> uw:udunits = "meter/sec"
|
|
;</tt>
|
|
<br>
|
|
<tt> uw:uiname = "uWind"
|
|
;</tt>
|
|
<br>
|
|
<tt> uw:valid_range = -150.f,
|
|
150.f ;</tt>
|
|
<br>
|
|
<tt> uw:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> uw:_n3D = 20 ;</tt>
|
|
<br>
|
|
<tt> uw:levels = "FHAG 10
|
|
MB 1000-100 by 50 BL 0>30 30>60 60>90 90>120
|
|
120>150" ;</tt>
|
|
<br>
|
|
<tt> char uwLevels(levels_25, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char uwInventory(n_valtimes, levels_25) ;</tt>
|
|
<br>
|
|
<tt> float vw(record, levels_25, y, x) ;</tt>
|
|
<br>
|
|
<tt> vw:long_name = "v wind
|
|
component" ;</tt>
|
|
<br>
|
|
<tt> vw:units = "m/s" ;</tt>
|
|
<br>
|
|
<tt> vw:udunits = "meter/sec"
|
|
;</tt>
|
|
<br>
|
|
<tt> vw:uiname = "vWind"
|
|
;</tt>
|
|
<br>
|
|
<tt> vw:valid_range = -150.f,
|
|
150.f ;</tt>
|
|
<br>
|
|
<tt> vw:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> vw:_n3D = 20 ;</tt>
|
|
<br>
|
|
<tt> vw:levels = "FHAG 10
|
|
MB 1000-100 by 50 BL 0>30 30>60 60>90 90>120
|
|
120>150" ;</tt>
|
|
<br>
|
|
<tt> char vwInventory(n_valtimes, levels_25) ;</tt>
|
|
<br>
|
|
<tt> float av(record, levels_5, y, x) ;</tt>
|
|
<br>
|
|
<tt> av:long_name = "absolute
|
|
vorticity" ;</tt>
|
|
<br>
|
|
<tt> av:units = "1/s" ;</tt>
|
|
<br>
|
|
<tt> av:udunits = "1/second"
|
|
;</tt>
|
|
<br>
|
|
<tt> av:uiname = "absVort"
|
|
;</tt>
|
|
<br>
|
|
<tt> av:valid_range = -0.01f,
|
|
0.01f ;</tt>
|
|
<br>
|
|
<tt> av:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> av:_n3D = 4 ;</tt>
|
|
<br>
|
|
<tt> av:levels = "MB 1000
|
|
850 700 500 250" ;</tt>
|
|
<br>
|
|
<tt> char avLevels(levels_5, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char avInventory(n_valtimes, levels_5) ;</tt>
|
|
<br>
|
|
<tt> float pvv(record, levels_19, y, x) ;</tt>
|
|
<br>
|
|
<tt> pvv:long_name =
|
|
"Pressure
|
|
vertical velocity" ;</tt>
|
|
<br>
|
|
<tt> pvv:units = "Pa/s" ;</tt>
|
|
<br>
|
|
<tt> pvv:udunits =
|
|
"pascal/second"
|
|
;</tt>
|
|
<br>
|
|
<tt> pvv:uiname = "Pvv" ;</tt>
|
|
<br>
|
|
<tt> pvv:valid_range = -2.5f,
|
|
2.5f ;</tt>
|
|
<br>
|
|
<tt> pvv:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> pvv:_n3D = 19 ;</tt>
|
|
<br>
|
|
<tt> pvv:levels = "MB
|
|
1000-100
|
|
by 50" ;</tt>
|
|
<br>
|
|
<tt> char pvvLevels(levels_19, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char pvvInventory(n_valtimes, levels_19) ;</tt>
|
|
<br>
|
|
<tt> float p(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> p:long_name = "pressure"
|
|
;</tt>
|
|
<br>
|
|
<tt> p:units = "Pa" ;</tt>
|
|
<br>
|
|
<tt> p:udunits = "pascal"
|
|
;</tt>
|
|
<br>
|
|
<tt> p:uiname = "atmP" ;</tt>
|
|
<br>
|
|
<tt> p:valid_range = 0.f,
|
|
110000.f ;</tt>
|
|
<br>
|
|
<tt> p:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> p:_n3D = 1 ;</tt>
|
|
<br>
|
|
<tt> p:levels = "SFC" ;</tt>
|
|
<br>
|
|
<tt> char pLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char pInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float heli(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> heli:long_name =
|
|
"helicity"
|
|
;</tt>
|
|
<br>
|
|
<tt> heli:units = "m/s2"
|
|
;</tt>
|
|
<br>
|
|
<tt> heli:udunits =
|
|
"meter/second2"
|
|
;</tt>
|
|
<br>
|
|
<tt> heli:uiname = "hel"
|
|
;</tt>
|
|
<br>
|
|
<tt> heli:valid_range = 0.f,
|
|
1000.f ;</tt>
|
|
<br>
|
|
<tt> heli:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> heli:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> heli:levels = "FHAG
|
|
0>30" ;</tt>
|
|
<br>
|
|
<tt> char heliLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char heliInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float cape(record, levels_2, y, x) ;</tt>
|
|
<br>
|
|
<tt> cape:long_name =
|
|
"Convective
|
|
Available Potential Energy" ;</tt>
|
|
<br>
|
|
<tt> cape:units = "J/kg"
|
|
;</tt>
|
|
<br>
|
|
<tt> cape:udunits =
|
|
"joule/Kilogram"
|
|
;</tt>
|
|
<br>
|
|
<tt> cape:uiname = "CAPE"
|
|
;</tt>
|
|
<br>
|
|
<tt> cape:valid_range = 0.f,
|
|
6000.f ;</tt>
|
|
<br>
|
|
<tt> cape:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> cape:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> cape:levels = "SFC BL
|
|
0>180" ;</tt>
|
|
<br>
|
|
<tt> char capeLevels(levels_2, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char capeInventory(n_valtimes, levels_2) ;</tt>
|
|
<br>
|
|
<tt> float cin(record, levels_2, y, x) ;</tt>
|
|
<br>
|
|
<tt> cin:long_name =
|
|
"Convective
|
|
Inhibition" ;</tt>
|
|
<br>
|
|
<tt> cin:units = "J/kg" ;</tt>
|
|
<br>
|
|
<tt> cin:udunits =
|
|
"joule/Kilogram"
|
|
;</tt>
|
|
<br>
|
|
<tt> cin:uiname = "convInhib"
|
|
;</tt>
|
|
<br>
|
|
<tt> cin:valid_range = 0.f,
|
|
400.f ;</tt>
|
|
<br>
|
|
<tt> cin:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> cin:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> cin:levels = "SFC BL
|
|
0>180" ;</tt>
|
|
<br>
|
|
<tt> char cinLevels(levels_2, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char cinInventory(n_valtimes, levels_2) ;</tt>
|
|
<br>
|
|
<tt> float bli(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> bli:long_name = "Best
|
|
lifted index" ;</tt>
|
|
<br>
|
|
<tt> bli:units = "K" ;</tt>
|
|
<br>
|
|
<tt> bli:udunits =
|
|
"degree_Kelvin"
|
|
;</tt>
|
|
<br>
|
|
<tt> bli:uiname =
|
|
"bestLftInd"
|
|
;</tt>
|
|
<br>
|
|
<tt> bli:valid_range = -20.f,
|
|
50.f ;</tt>
|
|
<br>
|
|
<tt> bli:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> bli:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> bli:levels = "BL
|
|
0>180"
|
|
;</tt>
|
|
<br>
|
|
<tt> char bliLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char bliInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float pli(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> pli:long_name = "Parcel
|
|
lifted index" ;</tt>
|
|
<br>
|
|
<tt> pli:units = "K" ;</tt>
|
|
<br>
|
|
<tt> pli:udunits =
|
|
"degree_Kelvin"
|
|
;</tt>
|
|
<br>
|
|
<tt> pli:uiname =
|
|
"parcLftInd"
|
|
;</tt>
|
|
<br>
|
|
<tt> pli:valid_range = -20.f,
|
|
50.f ;</tt>
|
|
<br>
|
|
<tt> pli:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> pli:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> pli:levels = "BL
|
|
0>30"
|
|
;</tt>
|
|
<br>
|
|
<tt> char pliLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char pliInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float pw(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> pw:long_name =
|
|
"precipitable
|
|
water" ;</tt>
|
|
<br>
|
|
<tt> pw:units = "mm" ;</tt>
|
|
<br>
|
|
<tt> pw:udunits =
|
|
"millimeter"
|
|
;</tt>
|
|
<br>
|
|
<tt> pw:uiname = "precipH2O"
|
|
;</tt>
|
|
<br>
|
|
<tt> pw:valid_range = 0.f,
|
|
300.f ;</tt>
|
|
<br>
|
|
<tt> pw:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> pw:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> pw:levels = "EA" ;</tt>
|
|
<br>
|
|
<tt> char pwLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char pwInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float emsp(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> emsp:long_name = "ETA
|
|
Mean Sea Level Pressure" ;</tt>
|
|
<br>
|
|
<tt> emsp:units = "Pa" ;</tt>
|
|
<br>
|
|
<tt> emsp:udunits = "pascal"
|
|
;</tt>
|
|
<br>
|
|
<tt> emsp:uiname = "ETAMSL"
|
|
;</tt>
|
|
<br>
|
|
<tt> emsp:valid_range =
|
|
80000.f,
|
|
110000.f ;</tt>
|
|
<br>
|
|
<tt> emsp:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> emsp:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> emsp:levels = "MSL"
|
|
;</tt>
|
|
<br>
|
|
<tt> char emspLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char emspInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float pmsl(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> pmsl:long_name =
|
|
"pressure
|
|
at mean sea level" ;</tt>
|
|
<br>
|
|
<tt> pmsl:units = "Pa" ;</tt>
|
|
<br>
|
|
<tt> pmsl:udunits = "pascal"
|
|
;</tt>
|
|
<br>
|
|
<tt> pmsl:uiname = "PMSL"
|
|
;</tt>
|
|
<br>
|
|
<tt> pmsl:valid_range =
|
|
80000.f,
|
|
110000.f ;</tt>
|
|
<br>
|
|
<tt> pmsl:_FillValue =
|
|
-99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> pmsl:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> pmsl:levels = "MSL"
|
|
;</tt>
|
|
<br>
|
|
<tt> char pmslLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char pmslInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float cp(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> cp:long_name =
|
|
"convective
|
|
precipitation" ;</tt>
|
|
<br>
|
|
<tt> cp:units = "mm" ;</tt>
|
|
<br>
|
|
<tt> cp:udunits =
|
|
"millimeter"
|
|
;</tt>
|
|
<br>
|
|
<tt> cp:uiname = "convPrecip"
|
|
;</tt>
|
|
<br>
|
|
<tt> cp:valid_range = 0.f,
|
|
1000.f ;</tt>
|
|
<br>
|
|
<tt> cp:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> cp:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> cp:levels = "SFC" ;</tt>
|
|
<br>
|
|
<tt> char cpLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char cpInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float tp(record, levels_1, y, x) ;</tt>
|
|
<br>
|
|
<tt> tp:long_name = "total
|
|
precipitation" ;</tt>
|
|
<br>
|
|
<tt> tp:units = "mm" ;</tt>
|
|
<br>
|
|
<tt> tp:udunits =
|
|
"millimeter"
|
|
;</tt>
|
|
<br>
|
|
<tt> tp:uiname = "totPrecip"
|
|
;</tt>
|
|
<br>
|
|
<tt> tp:valid_range = 0.f,
|
|
1000.f ;</tt>
|
|
<br>
|
|
<tt> tp:_FillValue = -99999.f
|
|
;</tt>
|
|
<br>
|
|
<tt> tp:_n3D = 0 ;</tt>
|
|
<br>
|
|
<tt> tp:levels = "SFC" ;</tt>
|
|
<br>
|
|
<tt> char tpLevels(levels_1, charsPerLevel) ;</tt>
|
|
<br>
|
|
<tt> char tpInventory(n_valtimes, levels_1) ;</tt>
|
|
<br>
|
|
<tt> float _tp12(n_valtimes) ;</tt>
|
|
<br>
|
|
<tt> float _tp6(n_valtimes) ;</tt>
|
|
<br>
|
|
<tt> int valtimeMINUSreftime(n_valtimes) ;</tt>
|
|
<br>
|
|
<tt>
|
|
valtimeMINUSreftime:units
|
|
= "seconds" ;</tt>
|
|
<br>
|
|
<tt> double reftime ;</tt>
|
|
<br>
|
|
<tt> reftime:long_name =
|
|
"reference time" ;</tt>
|
|
<br>
|
|
<tt> reftime:units = "seconds
|
|
since (1970-1-1 00:00:00.0)" ;</tt>
|
|
<br>
|
|
<tt> char origin(namelen) ;</tt>
|
|
<br>
|
|
<tt> char model(namelen) ;</tt>
|
|
<br>
|
|
<tt> float staticTopo(y, x) ;</tt>
|
|
<br>
|
|
<tt> staticTopo:units =
|
|
"meters"
|
|
;</tt>
|
|
<br>
|
|
<tt> staticTopo:long_name
|
|
= "Topography" ;</tt>
|
|
<br>
|
|
<tt> staticTopo:_FillValue
|
|
= -99999.f ;</tt>
|
|
<br>
|
|
<tt> float staticCoriolis(y, x) ;</tt>
|
|
<br>
|
|
<tt> staticCoriolis:units
|
|
= "/second" ;</tt>
|
|
<br>
|
|
<tt> staticCoriolis:long_name
|
|
= "Coriolis parameter" ;</tt>
|
|
<br>
|
|
<tt>
|
|
staticCoriolis:_FillValue
|
|
= -99999.f ;</tt>
|
|
<br>
|
|
<tt> float staticSpacing(y, x) ;</tt>
|
|
<br>
|
|
<tt> staticSpacing:units
|
|
= "meters" ;</tt>
|
|
<br>
|
|
<tt> staticSpacing:long_name
|
|
= "Grid spacing" ;</tt>
|
|
<br>
|
|
<tt> staticSpacing:_FillValue
|
|
= -99999.f ;</tt>
|
|
</p>
|
|
<p><tt>// global attributes:</tt>
|
|
<br>
|
|
<tt> :cdlDate = "20010328"
|
|
;</tt>
|
|
<br>
|
|
<tt> :depictorName =
|
|
"grid211@16944264"
|
|
;</tt>
|
|
<br>
|
|
<tt> :projIndex = 3 ;</tt>
|
|
<br>
|
|
<tt> :projName =
|
|
"LAMBERT_CONFORMAL"
|
|
;</tt>
|
|
<br>
|
|
<tt> :centralLat = 25.f ;</tt>
|
|
<br>
|
|
<tt> :centralLon = -95.f
|
|
;</tt>
|
|
<br>
|
|
<tt> :rotation = 25.f ;</tt>
|
|
<br>
|
|
<tt> :xMin = -0.255644f ;</tt>
|
|
<br>
|
|
<tt> :xMax = 0.196647f ;</tt>
|
|
<br>
|
|
<tt> :yMax = -0.562235f ;</tt>
|
|
<br>
|
|
<tt> :yMin = -0.876877f ;</tt>
|
|
<br>
|
|
<tt> :lat00 = 12.19004f ;</tt>
|
|
<br>
|
|
<tt> :lon00 = -133.459f ;</tt>
|
|
<br>
|
|
<tt> :latNxNy = 57.28995f
|
|
;</tt>
|
|
<br>
|
|
<tt> :lonNxNy = -49.38491f
|
|
;</tt>
|
|
<br>
|
|
<tt> :dxKm = 78.04174f ;</tt>
|
|
<br>
|
|
<tt> :dyKm = 78.04293f ;</tt>
|
|
<br>
|
|
<tt> :latDxDy = 40.60606f
|
|
;</tt>
|
|
<br>
|
|
<tt> :lonDxDy = -100.5548f
|
|
;</tt>
|
|
</p>
|
|
<p><a name="valtime"></a>Looking at specifics for the
|
|
valtimeMINUSreftime:
|
|
</p>
|
|
<p><tt>ncdump -v valtimeMINUSreftime 20020327_1200</tt>
|
|
</p>
|
|
<p><tt>data:</tt>
|
|
</p>
|
|
<p><tt> valtimeMINUSreftime = 0, 21600, 43200, 64800, 86400,
|
|
108000,
|
|
129600, 151200,</tt>
|
|
<br>
|
|
<tt> 172800, 194400, 216000, 237600, 259200, 280800,
|
|
302400 ;</tt>
|
|
<br>
|
|
|
|
</p>
|
|
<p><a name="model"></a>Looking at specifics for the model:
|
|
</p>
|
|
<p><tt>ncdump -v model 20020327_1200</tt>
|
|
</p>
|
|
<p><tt>data:</tt>
|
|
</p>
|
|
<p><tt> model = "ETA" ;</tt>
|
|
</p>
|
|
<p><a name="inventory"></a>Looking at specifics for the inventory bits:
|
|
</p>
|
|
<p><tt>ncdump -v ghInventory 20020327_1200</tt>
|
|
</p>
|
|
<p><tt>data:</tt>
|
|
</p>
|
|
<p><tt> ghInventory =</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "1111111111111111111",</tt>
|
|
<br>
|
|
<tt> "",</tt>
|
|
<br>
|
|
<tt> "",</tt>
|
|
<br>
|
|
<tt> "",</tt>
|
|
<br>
|
|
<tt> "" ;</tt>
|
|
<br>
|
|
|
|
</p>
|
|
<p><a name="levels"></a>Looking at the specifics for the levels:
|
|
</p>
|
|
<p><tt>ncdump -v ghLevels 20020327_1200</tt>
|
|
</p>
|
|
<p><tt>data:</tt>
|
|
</p>
|
|
<p><tt> ghLevels =</tt>
|
|
<br>
|
|
<tt> "MB 1000 ",</tt>
|
|
<br>
|
|
<tt> "MB 950 ",</tt>
|
|
<br>
|
|
<tt> "MB 900 ",</tt>
|
|
<br>
|
|
<tt> "MB 850 ",</tt>
|
|
<br>
|
|
<tt> "MB 800 ",</tt>
|
|
<br>
|
|
<tt> "MB 750 ",</tt>
|
|
<br>
|
|
<tt> "MB 700 ",</tt>
|
|
<br>
|
|
<tt> "MB 650 ",</tt>
|
|
<br>
|
|
<tt> "MB 600 ",</tt>
|
|
<br>
|
|
<tt> "MB 550 ",</tt>
|
|
<br>
|
|
<tt> "MB 500 ",</tt>
|
|
<br>
|
|
<tt> "MB 450 ",</tt>
|
|
<br>
|
|
<tt> "MB 400 ",</tt>
|
|
<br>
|
|
<tt> "MB 350 ",</tt>
|
|
<br>
|
|
<tt> "MB 300 ",</tt>
|
|
<br>
|
|
<tt> "MB 250 ",</tt>
|
|
<br>
|
|
<tt> "MB 200 ",</tt>
|
|
<br>
|
|
<tt> "MB 150 ",</tt>
|
|
<br>
|
|
<tt> "MB 100 " ;</tt>
|
|
<br>
|
|
|
|
<br>
|
|
|
|
</p>
|
|
</body>
|
|
</html>
|