The Harwell-Boeing Compact Storage Scheme

The Harwell-Boeing format,
* (aa,ja,ia); * is a compact storage mechanism whereby the
* nz * nonzero
elements of a matrix are stored
contiguously in a one dimensional real*8 array
called * aa. *
In this array, the nonzero elements of any row * k * come
before those of row * k+1 *
and after those of row * k-1. * Nonzero
elements within a given row are not necessarily in order.
The column position of each nonzero element in * aa * is stored in
the corresponding position of the integer array * ja. * Finally,
row boundaries are determined from values stored in the integer
array * ia; ia(k) * denoted the first position in
* aa * (and *ja*) at which
an element of row * k * is to be found.
Additionally, * ia(n+1) = nz. *

For matrices generated in the MARCA_Models collection, the
* nz * elements of * aa * are stored in the real*8 work
array, * dwork, * beginning at position * j1. *
The * nz * elements of * ja * and the * n+1 *
elements of * ia * are both stored in the integer work array,
* iwork, * the first beginning at position * k1 * and
the second at position * k2. *

Consider, for example, the following matrix of order 4:

| -2.1 1.7 0.0 0.4 | | 0.8 -0.8 0.0 0.0 | | 0.6 0.0 -0.6 0.0 | | 0.0 0.3 0.2 -0.5 |One possible way to store this in the Harwell-Boeing compact storage scheme is as follows:

aa: 1.7 0.4 -2.1 -0.8 0.8 0.6 -0.6 0.2 0.3 -0.5 ja: 2 4 1 2 1 1 3 3 2 4 ia: 1 4 6 8 11

The reader may be interested in looking at the subroutine
* writeToFile, * which is the final subroutine
in the file * generate.f. * This subroutine extracts, one at a
time, the elements of a matrix generated by the MARCA_Models software,
and writes each element's row position, column position and
numerical value to a data file.