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.