An index range is specified by a member of the `Range' class.
A ``primitive range'' is either collapsed (sequential),
or distributed over a particular dimension of a particular process array.
Range x = new Range(100) ;
Range y = new Range(50, BLK, p.dim(0)) ;
Range z = new Range(50, BLK, p.dim(1)) ;
x is collapsed. y is distributed blockwise over the
first dimension of process array p, z over the second.
Two distributed primitive ranges are ``orthogonal'' if they are
distributed over different dimensions of the same process array. A
collapsed primitive range is orthogonal to any primitive range
except itself.