Variables representing dimensional height or depth axes must always
explicitly include the units
attribute; there is
no default value.
The direction of positive (i.e., the direction in which the coordinate
values are increasing), whether up or down, cannot in all cases be
inferred from the units. The direction of positive is useful for
applications displaying the data. For this reason the attribute
positive
as defined in the COARDS standard is
required if the vertical axis units are not a valid unit of pressure
(a determination which can be made using the udunits routine, utScan)
-- otherwise its inclusion is optional. The positive
attribute may have the value up
or
down
(case insensitive). This attribute may be
applied to either coordinate variables or auxillary coordinate
variables that contain vertical coordinate data.
For example, if an oceanographic netCDF file encodes the depth of the surface as 0 and the depth of 1000 meters as 1000 then the axis would use attributes as follows:
axis_name:units = "meters" ; axis_name:positive = "down" ;
If, on the other hand, the depth of 1000 meters were represented
as -1000 then the value of the positive
attribute
would have been up
. If the units
attribute value is a valid pressure unit the default value of the
positive
attribute is down
.
A vertical coordinate will be identifiable by:
units of pressure; or
the presence of the positive attribute with a value of
up
or down
(case insensitive).
Optionally, the vertical type may be indicated additionally by
providing the standard_name
attribute with an
appropriate value, and/or the axis
attribute
with the value Z
.
The units
attribute for dimensional coordinates will
be a string formatted as per the
udunits.dat
file.
The acceptable units for vertical (depth or height) coordinate variables are:
units of pressure as listed in the file udunits.dat
.
For vertical axes the most commonly used of these include
include bar
, millibar
,
decibar
, atmosphere (atm)
,
pascal (Pa)
, and hPa
.
units of length as listed in the file udunits.dat. For vertical axes the most commonly used of these include meter (metre, m)
, and kilometer (km)
.
other units listed in the file udunits.dat that may under certain circumstances reference vertical position such as units of density or temperature.
Plural forms are also acceptable.
The units
attribute is not required for dimensionless coordinates. For backwards compatibility with COARDS we continue to allow the units
attribute to take one of the values: level
, layer
, or sigma_level
. These values are not recognized by the Udunits package, and are considered a deprecated feature in the CF standard.
For dimensionless vertical coordinates we extend the COARDS standard by making use of the standard_name
attribute to associate a coordinate with its definition from Appendix D, Dimensionless Vertical Coordinates. The definition provides a mapping between the dimensionless coordinate values and dimensional values that can positively and uniquely indicate the location of the data. A new attribute, formula_terms
, is used to associate terms in the definitions with variables in a netCDF file. To maintain backwards compatibility with COARDS the use of these attributes is not required, but is strongly recommended.
Example 4.3. Atmosphere sigma coordinate
float lev(lev) ; lev:long_name = "sigma at layer midpoints" ; lev:positive = "down" ; lev:standard_name = "atmosphere_sigma_coordinate" ; lev:formula_terms = "sigma: lev ps: PS ptop: PTOP" ;
In this example the standard_name
value
atmosphere_sigma_coordinate
identifies the following
definition from Appendix D, Dimensionless Vertical Coordinates which specifies
how to compute pressure at gridpoint (n,k,j,i)
where
j
and i
are horizontal indices,
k
is a vertical index, and n
is a time index:
p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i)-ptop)
The formula_terms
attribute associates the variable lev
with the term sigma
, the variable PS
with the term ps
, and the variable PTOP
with the term ptop
. Thus the pressure at gridpoint (n,k,j,i)
would be calculated by
p(n,k,j,i) = PTOP + lev(k)*(PS(n,j,i)-PTOP)