Table of Contents
When gridded data does not represent the point values of a field but instead represents some characteristic of the field within cells of finite "volume," a complete description of the variable should include metadata that describes the domain or extent of each cell, and the characteristic of the field that the cell values represent. It is possible for a single data value to be the result of an operation whose domain is a disjoint set of cells. This is true for many types of climatological averages, for example, the mean January temperature for the years 1970-2000. The methods that we present below for describing cells only provides an association of a grid point with a single cell, not with a collection of cells. However, climatological statistics are of such importance that we provide special methods for describing their associated computational domains in Section 7.4, “Climatological Statistics”.
To represent cells we add the attribute
to the appropriate coordinate variable(s). The
is the name of the variable that
contains the vertices of the cell boundaries. We
refer to this type of variable as a "boundary
A boundary variable will have one more
dimension than its associated coordinate
or auxiliary coordinate variable.
dimension should be the most rapidly varying
one, and its size is the maximum number of cell
vertices. Since a boundary variable is considered
to be part of a coordinate variable's metadata,
it is not necessary to provide it with attributes
Note that the boundary variable for a set of N contiguous intervals is an array of shape (N,2). Although in this case there will be a duplication of the boundary coordinates between adjacent intervals, this representation has the advantage that it is general enough to handle, without modification, non-contiguous intervals, as well as intervals on an axis using the unlimited dimension.
Applications that process cell boundary data often times need to determine whether or not adjacent cells share an edge. In order to facilitate this type of processing the following restrictions are placed on the data in boundary variables.
For a coordinate variable such as
with associated boundary variable
interval endpoints must be ordered consistently with
the associated coordinate, e.g., for an increasing
If adjacent intervals are contiguous,
the shared endpoint must be represented
indentically in each instance where it occurs
in the boundary variable. For example, if the
intervals that contain grid points
lat(i+1) are contiguous,
In the case where the horizontal grid is described
by two-dimensional auxiliary coordinate
variables in latitude
lat(n,m) and longitude
lon(n,m), and the associated cells are four-sided,
then the boundary variables are given in the form
lonbnd(n,m,4), where the trailing
index runs over the four vertices of the cells. Let
us call the side of cell
i-1" side, the side facing cell
i+1" side, and similarly for "
j+1". Then we can refer to the vertex formed by
(j-1,i-1). With this notation,
the four vertices are indexed as follows:
If i-j-upward is a right-handed coordinate system (like lon-lat-upward), this ordering means the vertices will be traversed anticlockwise on the lon-lat surface seen from above. If i-j-upward is left-handed, they will be traversed clockwise on the lon-lat surface.
The bounds can be used to decide whether cells are contiguous
via the following relationships. In these equations the variable
bnd is used generically to represent either the latitude
or longitude boundary variable.
For 0 < j < n and 0 < i < m, If cells (j,i) and (j,i+1) are contiguous, then bnd(j,i,1)=bnd(j,i+1,0) bnd(j,i,2)=bnd(j,i+1,3) If cells (j,i) and (j+1,i) are contiguous, then bnd(j,i,3)=bnd(j+1,i,0) and bnd(j,i,2)=bnd(j+1,i,1)
In all other cases, the bounds should be dimensioned
(...,n) are the dimensions of the auxiliary coordinate variables, and
p the number of vertices of the cells. The vertices must be traversed
anticlockwise in the lon-lat plane as viewed from above. The starting vertex
is not specified.
Example 7.1. Cells on a latitude axis
dimensions: lat = 64; nv = 2; // number of vertices variables: float lat(lat); lat:long_name = "latitude"; lat:units = "degrees_north"; lat:bounds = "lat_bnds"; float lat_bnds(lat,nv);
The boundary variable
lat_bnds associates a latitude gridpoint
i with the interval whose boundaries are
lat_bnds(i,1). The gridpoint location,
lat(i), should be
contained within this interval.
For rectangular grids, two-dimensional cells can be expressed as Cartesian products of one-dimensional cells of the type in the preceding example. However for non-rectangular grids a "rectangular" cell will in general require specifying all four vertices for each cell.
Example 7.2. Cells in a non-rectangular grid
dimensions: imax = 128; jmax = 64; nv = 4; variables: float lat(jmax,imax); lat:long_name = "latitude"; lat:units = "degrees_north"; lat:bounds = "lat_bnds"; float lon(jmax,imax); lon:long_name = "longitude"; lon:units = "degrees_east"; lon:bounds = "lon_bnds"; float lat_bnds(jmax,imax,nv); float lon_bnds(jmax,imax,nv);
The boundary variables
lon_bnds associate a
(j,i) with the cell
determined by the vertices
n=0,..,3. The gridpoint location,
(lat(j,i),lon(j,i)), should be
contained within this region.