MB01UY

Computation of matrix expressions alpha T A or alpha A T, over T, T upper triangular

[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.

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

Program Text

  None
Program Data
  None
Program Results
  None

Return to index