Purpose
To perform one of the skew-symmetric rank 2k operations C := alpha*A*B' - alpha*B*A' + beta*C, or C := alpha*A'*B - alpha*B'*A + beta*C, where alpha and beta are scalars, C is a real N-by-N skew- symmetric matrix and A, B are N-by-K matrices in the first case and K-by-N matrices in the second case. This is a modified version of the vanilla implemented BLAS routine DSYR2K written by Jack Dongarra, Iain Duff, Jeremy Du Croz and Sven Hammarling.Specification
SUBROUTINE MB01KD( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, $ C, LDC, INFO ) C .. Scalar Arguments .. CHARACTER UPLO, TRANS INTEGER INFO, K, LDA, LDB, LDC, N DOUBLE PRECISION ALPHA, BETA C .. Array Arguments .. DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*)Arguments
Mode Parameters
UPLO CHARACTER*1 Specifies whether the upper or lower triangular part of the array C is to be referenced, as follows: = 'U': only the strictly upper triangular part of C is to be referenced; = 'L': only the striclty lower triangular part of C is to be referenced. TRANS CHARACTER*1 Specifies the operation to be performed, as follows: = 'N': C := alpha*A*B' - alpha*B*A' + beta*C; = 'T' or 'C': C := alpha*A'*B - alpha*B'*A + beta*C.Input/Output Parameters
N (input) INTEGER The order of the matrix C. N >= 0. K (input) INTEGER If TRANS = 'N' the number of columns of A and B; and if TRANS = 'T' or TRANS = 'C' the number of rows of A and B. K >= 0. ALPHA (input) DOUBLE PRECISION The scalar alpha. If alpha is zero, or N <= 1, or K = 0, A and B are not referenced. A (input) DOUBLE PRECISION array, dimension (LDA,KA), where KA is K when TRANS = 'N', and is N otherwise. On entry with TRANS = 'N', the leading N-by-K part of of this array must contain the matrix A. On entry with TRANS = 'T' or TRANS = 'C', the leading K-by-N part of this array must contain the matrix A. LDA INTEGER The leading dimension of the array A. LDA >= MAX(1,N), if TRANS = 'N'; LDA >= MAX(1,K), if TRANS = 'T' or TRANS = 'C'. B (input) DOUBLE PRECISION array, dimension (LDB,KB), where KB is K when TRANS = 'N', and is N otherwise. On entry with TRANS = 'N', the leading N-by-K part of of this array must contain the matrix B. On entry with TRANS = 'T' or TRANS = 'C', the leading K-by-N part of this array must contain the matrix B. LDB INTEGER The leading dimension of the array B. LDB >= MAX(1,N), if TRANS = 'N'; LDB >= MAX(1,K), if TRANS = 'T' or TRANS = 'C'. BETA (input) DOUBLE PRECISION The scalar beta. If beta is zero C need not be set before entry. C (input/output) DOUBLE PRECISION array, dimension (LDC,N) On entry with UPLO = 'U', the leading N-by-N part of this array must contain the strictly upper triangular part of the matrix C. The lower triangular part of this array is not referenced. On entry with UPLO = 'L', the leading N-by-N part of this array must contain the strictly lower triangular part of the matrix C. The upper triangular part of this array is not referenced. On exit with UPLO = 'U', the leading N-by-N part of this array contains the strictly upper triangular part of the updated matrix C. On exit with UPLO = 'L', the leading N-by-N part of this array contains the strictly lower triangular part of the updated matrix C. LDC INTEGER The leading dimension of the array C. LDC >= MAX(1,N)Error Indicator
INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.Numerical Aspects
Though being almost identical with the vanilla implementation of the BLAS routine DSYR2K the performance of this routine could be significantly lower in the case of vendor supplied, highly optimized BLAS.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None