An matrix is stored in BCSR format using six arrays, . The triplet stores rows 1 through using uniformly aligned blocks, and the triplet stores any remaining rows using uniformly aligned blocks.
Define block-row to be rows through of , where . For each such that , is the column index entry of an explicitly stored non-zero block whose values are laid out in row-major order in the subarray .
These blocks are uniformly aligned, meaning that . However, there is one exception: if does not divide , then each block row may contain one block with . If such a block overlaps with another block starting at column index , then the initial columns of the block at are set to zero.
If does not divide , then the remaining rows are stored in as a single block row with blocks. These arrays follow the same conventions as .
|1 <==> Diagonal == 1 and is implicitly stored |
|Row block size. |
|Column block size. |
|# of full block rows |
|# of full block columns |
|Block row pointers. |
|Block column indices. |
|Non-zero blocks. |
|Number of "leftover" rows (i.e., ). |
|Stores leftover rows, if any. |
|Module name containing this rxc implementation. |
|Cached module pointer. |
Stores leftover rows, if any.