MB01UZ

Computation of matrix expressions alpha T A or alpha A T, over T, T upper triangular (complex version)

[Specification] [Arguments] [Method] [References] [Comments] [Example]

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
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to index