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