What you need to know to use these subprograms

ibdiag(*) - Integer array of length nbdiag consisting of the corresponding block diagonal offsets ibdiag(i) of the nonzero block diagonal of A stored in the column val(:, :, :, i).

val(lb, lb, lda, *) - Scalar matrix of dimension lb-by-lb-by-lda-by-nbdiag where lda is greater or equal to min( mb, kb). Column val(:, : , :, i) consists of blocks on block diagonal ibdiag(i).

BEL- Block Ellpack-Itpack. Given a sparse block matrix A formed by mb-by-kbsquare blocks of size lb-by-lbeach and with maxbnz nonzero block entries in any block row, the block Ellpack-Itpack format represents the nonzero block entries of A using the same variables as in the ELL format. Each nonzero dense block is stored in column major order. Two arrays are required for the BEL representation:

val(lb, lb, lda,*) - Scalar matrix of dimension lb-by-lb-by-lda-by-maxbnz where lda is greater or equal to mb. The first block entries in the block row val(:, :, i, :) consist of nonzero blocks in block row i of A.

bindx(*) - Two dimensional lda-by-maxbnzinteger array where row indx(i, :) stores block column indices for block row i of A.

VBR- Variable block row. The variable block row format is a generalization of the BSR format. Given a sparse block matrix A formed by mb-by-kbblocks of size lb-by-lbeach, the bnnz nonzero block of varible sizes are represented by adding arrays rpntr( ) and cpntr( ) which store the sparsity structure of the blocks. Each nonzero dense block is stored in column major order. Seven arrays are required for the VBR representation:

val(*) - Scalar array storing nonzero blocks of A in row major order.

indx(*) - Integer array of length bnnz+1 such that indx(i) points to the location in val( ) of the (1,1) element of the i-th block entry. indx(bnnz+1) points to the last used position in val( ) plus one.

bindx(*) - Integer array of length bnnz containing block row indices such that bindx(i) corresponds to the block row index of the i-th block entry.

rpntr(*) -Integer array of length mb+1 such that rpntr(i) and rpntr(i+1), respectively, are the row index of the first point row and row index of the last point row in the i-th block row. Thus, the number of point rows in the i-th block row is rpntr(i+1)-rpntr(i).

cpntr(*) - Integer array of length kb+1 such that cpntr(j) and cpntr(j+1), respectively, are the column index of the first point column and the column index of the last point column in the j-th block column. Thus, the number of point columns in the j-th block column is cpntr(j+1)-cpntr(j).

436HP MLIB User’s Guide