## 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