SUBROUTINE SVBRMM( TRANSA, MB, N, KB, ALPHA, DESCRA, * VAL, INDX, BINDX, RPNTR, CPNTR, BPNTRB, BPNTRE, * B, LDB, BETA, C, LDC, WORK, LWORK ) INTEGER*4 TRANSA, MB, N, KB, DESCRA(5), LDB, LDC, LWORK INTEGER*4 INDX(*), BINDX(*), RPNTR(MB+1), CPNTR(KB+1), * BPNTRB(MB), BPNTRE(MB) REAL*4 ALPHA, BETA REAL*4 VAL(*), B(LDB,*), C(LDC,*), WORK(LWORK) SUBROUTINE DVBRMM( TRANSA, MB, N, KB, ALPHA, DESCRA, * VAL, INDX, BINDX, RPNTR, CPNTR, BPNTRB, BPNTRE, * B, LDB, BETA, C, LDC, WORK, LWORK) INTEGER*4 TRANSA, MB, N, KB, DESCRA(5), LDB, LDC, LWORK INTEGER*4 INDX(*), BINDX(*), RPNTR(MB+1), CPNTR(KB+1), * BPNTRB(MB), BPNTRE(MB) REAL*8 ALPHA, BETA REAL*8 VAL(*), B(LDB,*), C(LDC,*), WORK(LWORK)
C <- alpha A B + beta C C <- alpha A'B + beta C ( ' indicates matrix transpose)
TRANSA Indicates how to operate with the sparse matrix 0 : operate with matrix 1 : operate with transpose matrix MB Number of block rows in matrix A N Number of columns in matrix C KB Number of block columns in matrix A ALPHA Scalar parameter DESCRA() Descriptor argument. Five element integer array DESCRA(1) matrix structure 0 : general 1 : symmetric 2 : Hermitian 3 : Triangular 4 : Skew(Anti)-Symmetric 5 : Diagonal DESCRA(2) upper/lower triangular indicator (NOT IMPLEMENTED) 1 : lower 2 : upper DESCRA(3) main diagonal type (NOT IMPLEMENTED) 0 : non-unit 1 : unit DESCRA(4) Array base (NOT IMPLEMENTED) 0 : C/C++ compatible 1 : Fortran compatible DESCRA(5) repeated indices? (NOT IMPLEMENTED) 0 : unknown 1 : no repeated indices VAL() scalar array of length NNZ containing matrix entries where NNZ is the number of nonzero point entries of a matrix A. INDX() integer array of length BNNZ+1 where BNNZ is the number of block entries of a matrix A such that the I-th element of INDX[] points to the location in VAL of the (1,1) element of the I-th block entry. BINDX() integer array of length BNNZ where BNNZ is the number of block entries of a matrix A consisting of the block column indices of the entries of A. RPNTR() integer array of length MB+1 such that RPNTR(I)-RPNTR(1)+1 is the row index of the first point row in the I-th block row. RPNTR(MB+1) is set to M+RPNTR(1). 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)-CPNTR(1)+1 is the column index of the first point column in the J-th block column. CPNTR(KB+1) is set to K+CPNTR(1). Thus, the number of point columns in the J-th block column is CPNTR(J+1)-CPNTR(J). BPNTRB() integer array of length MB such that BPNTRB(I)-BPNTRB(1)+1 points to location in BINDX of the first block entry of the I-th row of A. BPNTRE() integer array of length MB such that BPNTRE(I)-BPNTRB(1) points to location in BINDX of the last block entry of the I-th row of A. B() rectangular array with first dimension LDB. LDB leading dimension of B BETA Scalar parameter C() rectangular array with first dimension LDC. LDC leading dimension of C WORK() scratch array of length LWORK. LWORK should be at least MAX(M,N). LWORK length of WORK array
http://math.nist.gov/mcsd/Staff/KRemington/fspblas/