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
bounds
to the appropriate coordinate variable(s). The
value of
bounds
is the name of the variable that
contains the vertices of the cell boundaries. We
refer to this type of variable as a "boundary
variable."
A boundary variable will have one more
dimension than its associated coordinate
or auxiliary coordinate variable.
The additional
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
such as
long_name
and
units
.
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 lat(lat)
with associated boundary variable latbnd(x,2)
, the
interval endpoints must be ordered consistently with
the associated coordinate, e.g., for an increasing
coordinate, lat(1)
> lat(0)
implies latbnd(i,1)
>= latbnd(i,0)
for all i
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)
and lat(i+1)
are contiguous,
then latbnd(i+1,0)
= latbnd(i,1)
.
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
latbnd(n,m,4)
and lonbnd(n,m,4)
, where the trailing
index runs over the four vertices of the cells. Let
us call the side of cell (j,i)
facing cell (j,i-1)
the "i-1
" side, the side facing cell
(j,i+1)
the "i+1
" side, and similarly for "j-1
" and
"j+1
". Then we can refer to the vertex formed by
sides i-1
and j-1
as (j-1,i-1)
. With this notation,
the four vertices are indexed as follows:
0=(j-1,i-1)
,
1=(j-1,i+1)
,
2=(j+1,i+1)
,
3=(j+1,i-1)
.
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,p)
, where
(...,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,0)
and
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 lat_bnds
and lon_bnds
associate a
gridpoint (j,i)
with the cell
determined by the vertices
(lat_bnds(j,i,n),lon_bnds(j,i,n))
,
n=0,..,3
. The gridpoint location,
(lat(j,i),lon(j,i))
, should be
contained within this region.