如果稀疏矩阵 A 由一些规则模式中的非零密集块组成,我们可以修改CRS(或CCS)格式以利用这种块模式。块矩阵通常来自偏微分方程的离散化,其中每个网格点关联有多个自由度。然后,我们将矩阵分割成小块,每个块的大小等于自由度的数量,并将每个块视为密集矩阵,即使它可能包含一些零元素。
如果 n_b 是每个块的维度,nnzb 是 n \times n 矩阵 A 中非零块的数量,那么所需的存储总量为 nnz = nnzb \times n_b^2。矩阵 A 的块维度 n_d 则由 n_d = n / n_b 定义。
与CRS格式类似,BCRS格式需要三个数组:一个用于浮点数的矩形数组(\mathrm{val}(1:nnzb, 1:n_b, 1:n_b)),用于按块行方式存储非零块;一个整数数组(\mathrm{col_ind}(1:nnzb)),用于存储原始矩阵 A 中非零块的(1,1)元素的实际列索引;以及一个指针数组(\mathrm{row_blk}(1:n_d+1)),其条目指向val(:,:,:)和col_ind(:)中每个块行的开头。对于具有较大 n_b 的矩阵,块压缩行存储(BCRS)相对于CRS在存储位置的节省和间接寻址时间的减少可以非常显著。