Intel® oneAPI Math Kernel Library Developer Reference - C

DSS Structurally Symmetric Matrix Storage

Direct sparse solvers can also solve symmetrically structured systems of equations. A symmetrically structured system of equations is one where the pattern of non-zero elements is symmetric. That is, a matrix has a symmetric structure if aj,i is not zero if and only if ai, j is not zero. From the point of view of the solver software, a "non-zero" element of a matrix is any element stored in the values array, even if its value is equal to 0. In that sense, any non-symmetric matrix can be turned into a symmetrically structured matrix by carefully adding zeros to the values array. For example, the above matrix B can be turned into a symmetrically structured matrix by adding two non-zero entries:



The matrix B can be considered to be symmetrically structured with 15 non-zero elements and represented as:

Storage Arrays for a Symmetrically Structured Matrix
one-based indexing                                
values = (1 -1 -3 -2 5 0 4 6 4 -4 2 7 8 0 -5)
columns = (1 2 4 1 2 5 3 4 5 1 3 4 2 3 5)
rowIndex = (1 4 7 10 13 16)                  
zero-based indexing                                
values = (1 -1 -3 -2 5 0 4 6 4 -4 2 7 8 0 -5)
columns = (0 1 3 0 1 4 2 3 4 0 2 3 1 2 4)
rowIndex = (0 3 6 9 12 15)                  

Storage Format Restrictions

The storage format for the sparse solver must conform to two important restrictions:

The second restriction implies that if symmetric or structurally symmetric matrices have zero diagonal elements, then they must be explicitly represented in the values array.