Purpose
To compute one of the matrix products T : = alpha*op( T ) * A, or T : = alpha*A * op( T ), where alpha is a scalar, A is an M-by-N matrix, T is a triangular matrix, and op( T ) is one of op( T ) = T or op( T ) = T', the transpose of T. A block-row/column algorithm is used, if possible. The result overwrites the array T.Specification
SUBROUTINE MB01UY( SIDE, UPLO, TRANS, M, N, ALPHA, T, LDT, A, LDA, $ DWORK, LDWORK, INFO ) C .. Scalar Arguments .. CHARACTER SIDE, TRANS, UPLO INTEGER INFO, LDA, LDT, LDWORK, M, N DOUBLE PRECISION ALPHA C .. Array Arguments .. DOUBLE PRECISION A(LDA,*), DWORK(*), T(LDT,*)Arguments
Mode Parameters
SIDE CHARACTER*1 Specifies whether the triangular matrix T appears on the left or right in the matrix product, as follows: = 'L': T := alpha*op( T ) * A; = 'R': T := alpha*A * op( T ). UPLO CHARACTER*1. Specifies whether the matrix T is an upper or lower triangular matrix, as follows: = 'U': T is an upper triangular matrix; = 'L': T is a lower triangular matrix. TRANS CHARACTER*1 Specifies the form of op( T ) to be used in the matrix multiplication as follows: = 'N': op( T ) = T; = 'T': op( T ) = T'; = 'C': op( T ) = T'.Input/Output Parameters
M (input) INTEGER The number of rows of the matrix A. M >= 0. N (input) INTEGER The number of columns of the matrix A. N >= 0. ALPHA (input) DOUBLE PRECISION The scalar alpha. When alpha is zero then T and A need not be set before entry. T (input/output) DOUBLE PRECISION array, dimension (LDT,max(K,N)), when SIDE = 'L', and (LDT,K), when SIDE = 'R', where K is M if SIDE = 'L' and is N if SIDE = 'R'. On entry with UPLO = 'U', the leading K-by-K upper triangular part of this array must contain the upper triangular matrix T. The elements below the diagonal do not need to be zero. On entry with UPLO = 'L', the leading K-by-K lower triangular part of this array must contain the lower triangular matrix T. The elements above the diagonal do not need to be zero. On exit, the leading M-by-N part of this array contains the corresponding product defined by SIDE, UPLO, and TRANS. LDT INTEGER The leading dimension of the array T. LDT >= max(1,M), if SIDE = 'L'; LDT >= max(1,M,N), if SIDE = 'R'. A (input) DOUBLE PRECISION array, dimension (LDA,N) The leading M-by-N part of this array must contain the matrix A. LDA INTEGER The leading dimension of the array A. LDA >= max(1,M).Workspace
DWORK DOUBLE PRECISION array, dimension (LDWORK) On exit, if INFO = 0, DWORK(1) returns the optimal value of LDWORK. On exit, if INFO = -12, DWORK(1) returns the minimum value of LDWORK. LDWORK The length of the array DWORK. LDWORK >= 1, if alpha = 0 or MIN(M,N) = 0; LDWORK >= M, if SIDE = 'L'; LDWORK >= N, if SIDE = 'R'. For good performance, LDWORK should be larger. If LDWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the DWORK array, returns this value as the first entry of the DWORK array, and no error message related to LDWORK is issued by XERBLA.Error Indicator
INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.Method
A block-row/column size is found based on the available workspace. BLAS 3 gemm and trmm are used if possible.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None