HP MLIB User's Guide Vol. 1 7th Ed.
436 HP MLIB User’s Guide
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-kb square blocks of size lb-by-lb each 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-maxbnz integer 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-kb blocks of
size lb-by-lb each, 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).