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, or op( T ) = conj(T'), the conjugate transpose of T. A block-row/column algorithm is used, if possible. The result overwrites the array T.Specification
SUBROUTINE MB01UZ( SIDE, UPLO, TRANS, M, N, ALPHA, T, LDT, A, LDA, $ ZWORK, LZWORK, INFO ) C .. Scalar Arguments .. CHARACTER SIDE, TRANS, UPLO INTEGER INFO, LDA, LDT, LZWORK, M, N COMPLEX*16 ALPHA C .. Array Arguments .. COMPLEX*16 A(LDA,*), T(LDT,*), ZWORK(*)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 ) = conj(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) COMPLEX*16 The scalar alpha. When alpha is zero then T and A need not be set before entry. T (input/output) COMPLEX*16 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) COMPLEX*16 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
ZWORK COMPLEX*16 array, dimension (LZWORK) On exit, if INFO = 0, ZWORK(1) returns the optimal value of LZWORK. On exit, if INFO = -12, ZWORK(1) returns the minimum value of LZWORK. LZWORK The length of the array ZWORK. LZWORK >= 1, if alpha = 0 or MIN(M,N) = 0; LZWORK >= M, if SIDE = 'L'; LZWORK >= N, if SIDE = 'R'. For good performance, LZWORK should be larger. If LZWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the ZWORK array, returns this value as the first entry of the ZWORK array, and no error message related to LZWORK 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