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