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.