SVDLIBC: Sparse Text Harwell-Boeing Matrix File Format

## SVD_F_STH

### Sparse Text Harwell-Boeing Matrix File Format

This is the format used by SVDPACKC and many other matrix algebra systems, included here for backward compatibility. SVDLIBC does not support the full Harwell-Boeing format specification. In particular, it only supports rra (real, rectangular, assembled) formats without right-hand sides. Files output by SVDLIBC do not use fixed width columns but use single-space-separated values to reduce wasted space, and therefore may not be compatible with other systems.

### Format:

    header[72] key[8]
    totalLines[14] pointerLines[14] rowIndexLines[14] valueLines[14] rightHandSideLines[14]
    matrixType[14] numRows[14] numCols[14] totalNonZeroValues[14] 0
    pointerFormat[16] rowIndexFormat[16] valueFormat[16] rightHandSideFormat[16]
    for each column plus one:
      firstValueIndex
    for each non-zero value:
      rowIndex
    for each non-zero value:
      value

The header must be 72 characters long, as indicated by the number in square brackets. It is ignored, as is the key. The line counts on header line 2 are not used by SVDLIBC.

The matrixType on line 3 must be "rra", since that's the only one supported. The final item on row 3 is the number of elemental matrixes, it must be 0 for an assembled matrix.

The fourth header line contains format specifications. They aren't used by SVDLIBC.

The firstValueIndex is the cumulative number of values in the columns to the left of the current column, plus one. The final one of these should be equivalent to the total number of non-zero values plus one. The rows are indexed starting with 1. Newlines and spaces are equivalent.

### Example:

Dense Text Format:

    4 3
    2.3  0  4.2
    0   1.3 2.2
    3.8  0  0.5
    0    0   0

Sparse Text Harwell-Boeing Format:

    SVDLIBC v. 1.32
                 3             1             1             1             0
    rra                        4             3             6             0
                (8i)            (8i)            (8e)            (8e)
    1 3 4 7
    1 3 2 1 2 3
    2.3 3.8 1.3 4.2 2.2 0.5