trmm(3F)

dtrmm, strmm, ztrmm, ctrmm - BLAS level three Matrix Product

As shipped in IRIX 6.5. First release of IRIX 6.5.

NAME
     dtrmm, strmm, ztrmm, ctrmm - BLAS level three Matrix Product


FORTRAN 77 SYNOPSIS
     subroutine dtrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           character*1        side,uplo,transa,diag
           integer            m, n, lda, ldb
           double precision   alpha
           double precision   a( lda,*), b(ldb,*)

     subroutine strmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           character*1        side,uplo,transa,diag
           integer            m, n, lda, ldb
           real               alpha
           real               a( lda,*), b(ldb,*)

     subroutine ztrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           character*1        side,uplo,transa,diag
           integer            m, n, lda, ldb
           double complex     alpha
           double complex     a( lda,*), b(ldb,*)

     subroutine ctrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           character*1        side,uplo,transa,diag
           integer            m, n, lda, ldb
           complex            alpha
           complex            a( lda,*), b(ldb,*)


C SYNOPSIS
     void dtrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           OperationSide         side;
           MatrixTriangle        uplo;
           MatrixTranspose       transa;
           MatrixUnitTriangular  diag;
           Integer               m, n, lda, ldb;
           double                alpha;
           double                (*a)[lda*k], (*b)[lda*n];

     void strmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           OperationSide         side;
           MatrixTriangle        uplo;
           MatrixTranspose       transa;
           MatrixUnitTriangular  diag;
           Integer               m, n, lda, ldb;
           float                 alpha;
           float                 (*a)[lda*k], (*b)[lda*n];

     void ztrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           OperationSide         side;
           MatrixTriangle        uplo;
           MatrixTranspose       transa;
           MatrixUnitTriangular  diag;
           Integer               m, n, lda, ldb;
           Zomplex               alpha;
           Zomplex               (*a)[lda*k], (*b)[lda*n];

     void ctrmm( side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb )
           OperationSide         side;
           MatrixTriangle        uplo;
           MatrixTranspose       transa;
           MatrixUnitTriangular  diag;
           Integer               m, n, lda, ldb;
           Complex               alpha;
           Complex               (*a)[lda*k], (*b)[lda*n];



DESCRIPTION
     dtrmm, strmm, ztrmm and ctrmm perform one of the matrix-matrix operations

          B := alpha*op( A )*B,   or   B := alpha*B*op( A )

     where alpha is a scalar, B is an m by n matrix, A is a unit, or non-unit,
     upper or lower triangular matrix and op( A ) is one of

          op( A ) = A   or   op( A ) = A'   or   op( A ) = conjg( A' ).


PARAMETERS
     side    On entry, side specifies whether op( A ) multiplies B from the
             left or right as follows:


                  FORTRAN
                  side = 'L' or 'l'   B := alpha*op( A )*B.
                  side = 'R' or 'r'   B := alpha*B*op( A ).

                  C
                  side = LeftSide     B := alpha*op( A )*B.
                  side = RightSide    B := alpha*B*op( A ).

             Unchanged on exit.

     uplo    On entry, uplo specifies whether the matrix A is an upper or
             lower triangular matrix as follows:


                  FORTRAN
                  uplo = 'U' or 'u'   A is an upper triangular matrix.
                  uplo = 'L' or 'l'   A is a lower triangular matrix.

                  C
                 uplo = UpperTriangle A is an upper triangular matrix.
                  uplo = LowerTriangle     A is a lower triangular matrix.

             Unchanged on exit.

     transa  On entry, transa specifies the form of op( A ) to be used in the
             matrix multiplication as follows:

                  FORTRAN
                  transa = 'N' or 'n'           op( A ) = A.
                  transa = 'T' or 't'           op( A ) = A'.
                  transa = 'C' or 'c'           op( A ) = conjg( A' ).

                  C
                  transa = NoTranspose          op( A ) = A.
                  transa = Transpose            op( A ) = A'.
                  transa = ConjugateTranspose   op( A ) = conjg( A' ).

             Unchanged on exit.

     diag    On entry, diag specifies whether or not A is unit triangular as
             follows:

                  FORTRAN
                  diag = 'U' or 'u'   A is assumed to be unit triangular.
                  diag = 'N' or 'n'   A is not assumed to be unit triangular.

                  C
                  diag = UnitTriangular         A is assumed to be unit
                                                triangular.
                  diag = NotUnitTriangular      A is not assumed to be unit
                                                triangular.

             Unchanged on exit.

     m       On entry, m specifies the number of rows of B. m must be at least
             zero.
             Unchanged on exit.

     n       On entry, n specifies the number of columns of B.  n must be at
             least zero.
             Unchanged on exit.

     alpha   On entry, alpha specifies the scalar alpha. When alpha is zero
             then a is not referenced and b need not be set before entry.

             Unchanged on exit.

     a       An array containing the matrix A.

             FORTRAN
             Array of dimension (lda, k).

             C
             A pointer to an array of size lda*k.
             See note below about array storage convention for C.

             k is m when side = 'L' or 'l' or LeftSide and is n when  side =
             'R' or 'r' or RightSide.

             Before entry with uplo = 'U' or 'u' or , the elements
             corresponding to the leading  k by k upper triangular elements of
             the matrix A must contain the upper triangular matrix and the
             corresponding strictly lower triangular part of the matrix A is
             not referenced.

             Before entry with uplo = 'L' or 'l' or , the elements
             corresponding to the leading k by k lower triangular elements of
             the matrix A  must contain the lower triangular matrix and the
             corresponding strictly upper triangular part of the matrix A is
             not referenced.

             Note that when diag = 'U' or 'u' or , the elements of a
             corresponding to the diagonal elements of the matrix A are not
             referenced either, but are assumed to be unity.

             Unchanged on exit.

     lda     On entry, lda specifies the first dimension of A as declared in
             the calling (sub) program. When side = 'L' or 'l' or LeftSide,
             then lda must be at least max( 1, m ). When side = 'R' or 'r' or
             RightSide, then lda must be at least max( 1, n ).
             Unchanged on exit.

     B       An array containing the matrix B.

             FORTRAN
             An array of dimension ( ldb, n ).

             C
             A pointer to an array of size ldb*n.
             See note below about array storage convention for C.

             Before entry, the leading m by n part of the array b should
             contain the elements corresponding to the m by n matrix B. On
             exit it is overwritten by the transformed matrix.

     ldb     On entry, ldb specifies the first dimension of B as declared in
             the calling (sub)program. ldb  must be at least max( 1, m ).
             Unchanged on exit.


C ARRAY STORAGE CONVENTION
       The matrices  are assumed  to be stored in a  one dimensional C array
       in an analogous fashion as a Fortran array (column major). Therefore,
       the element  A(i+1,j)  of matrix A  is stored  immediately  after the
       element  A(i,j), while  A(i,j+1) is lda  elements apart from  A(i,j).
       The element A(i,j) of the matrix can be accessed directly by reference
       to  a[ (j-1)*lda + (i-1) ].



AUTHORS
          Jack Dongarra, Argonne National Laboratory.
          Iain Duff, AERE Harwell.
          Jeremy Du Croz, Numerical Algorithms Group Ltd.
          Sven Hammarling, Numerical Algorithms Group Ltd.


TUNING
          Optimized and parallelized for SGI R3000, R4x00 and R8000 platforms.