The final storage scheme we consider is for skyline matrices, which
are also called variable band or profile matrices (see Duff, Erisman
and Reid [80]). It is mostly of importance in direct solution
methods, but it can be used for handling the diagonal blocks in block
matrix factorization methods. A major advantage of solving linear
systems having skyline coefficient matrices is that when pivoting is
not necessary, the skyline structure is preserved during Gaussian
elimination. If the matrix is symmetric, we only store its lower
triangular part. A straightforward approach in storing the elements
of a skyline matrix is to place all the rows (in order) into a
floating-point array (`val(:)`), and then keep an integer array
(`row_ptr(:)`) whose elements point to the beginning of each row.
The column indices of the nonzeros stored in `val(:)` are easily
derived and are not stored.

For a nonsymmetric skyline matrix such as the one illustrated in
Figure , we store the lower
triangular elements in SKS format, and store the upper triangular
elements in a column-oriented SKS format (transpose stored in row-wise
SKS format). These two separated *substructures* can be linked in
a variety of ways. One approach, discussed by Saad
in [186], is to store each row of the lower triangular
part and each column of the upper triangular part contiguously into
the floating-point array (`val(:)`). An additional pointer is
then needed to determine where the diagonal elements, which separate
the lower triangular elements from the upper triangular elements, are
located.

**Figure:** Profile of a nonsymmetric skyline or variable-band
matrix.

Mon Nov 20 08:52:54 EST 1995