Most routines in the present ScaLAPACK
library have *alignment restrictions*.
Alignment restrictions are constraints
in the type of distributions and the
indexing into the matrix that the user
may utilize when calling a particular
routine. For example, some routines
will not accept submatrices whose
starting index is not a multiple of
the physical blocking factor.

More commonly, routines require that
their various operand matrices have
certain alignment commonalities.
For instance, the solver routines
generally require that row *i* of
the matrix A be distributed across
the same process row as row *i* of
the right hand side matrix B.

Because of their idiosyncratic nature, it is almost impossible to give a full description of the alignment restrictions inherit in the present library without doing so on a routine-specific basis. All ScaLAPACK routines provide a description of the assumed alignment restrictions in the leading comments to the routine, and at this time the user must consult the actual code to find out what restrictions exist, if any.

We are working to remove the alignment restrictions, (with the exceptions noted below) so that the user will not have to worry about alignment, save as a performance issue.

Certain fundamental restrictions about data distributions are not currently being removed the library. Examples include the fact that the operands should be block-cyclicly distributed for the dense codes and one-dimensional block distributed for the banded codes. Also included here is the restriction that all operands be distributed across the same context (process grid).

Note that the ScaLAPACK library includes a redistribution/copy routine which allows the user to explicitly move matrices across contexts. Similar routines could be provided for distributions that do not match the ones presently employed in ScaLAPACK.

Finally, we note that the current
*descriptor* structure does
not accommodate the definition of
replicated vectors. A *replicated*
vector is a vector that is distributed
across a row or column within the
process grid and duplicated across
subsequent process rows or columns,
respectively. Such vectors occur,
for example, as the `IPIV`
vector in the LU factorization and
the `TAU`
vector in QR factorizations.

Tue May 13 09:21:01 EDT 1997