MODULE LIBRARY_BLAS ! ! -- Standard BLAS INTERFACEs for use with Fortran 90 -- ! E. Anderson ! May 5, 1999 ! ! Purpose ! ======= ! ! The LIBRARY_BLAS module defines INTERFACE blocks for the FORTRAN 77 ! standard BLAS. The name of the INTERFACE block is ! ! LIBRARY_XYYZZZ ! ! where XYYZZZ is the name of the BLAS subroutine or function. Library ! developers can replace LIBRARY with a specific library name, such as ! NETLIB, in order to allow users to choose only those routines they ! want from a particular library. ! ! To use these INTERFACE blocks for compile-time argument checking, ! place the following statement before any declarations in any program ! block that uses one of the standard BLAS: ! ! USE LIBRARY_BLAS ! ! If only a small number of BLAS are used, it may be desired to include ! only their interfaces in the calling subprogram, for example, ! ! USE LIBRARY_BLAS, ONLY: LIBRARY_SAXPY, LIBRARY_ISAMAX ! ! In this implementation, the generic name LIBRARY_XYYZZZ is an alias ! to the standard BLAS XYYZZZ, so one could also say ! ! USE LIBRARY_BLAS, ONLY: SAXPY, ISAMAX ! ! The list below is sorted by Level 1, Level 2, and Level 3 BLAS, and ! alphabetized by the REAL BLAS name within those groups. In the case ! of Level 2 and 3 BLAS, the Hermitian types are grouped with their ! corresponding symmetric types. ! !----------------------------------------------------------------------- !!!!!!!!!!!! ============ !!!!!!!!!!!! !!!!!!!!!!!! Level 1 BLAS !!!!!!!!!!!! !!!!!!!!!!!! ============ !!!!!!!!!!!! ! !-----Interface for ISAMAX and ICAMAX----- ! INTERFACE LIBRARY_ISAMAX FUNCTION ISAMAX( N, X, INCX ) INTEGER :: ISAMAX INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: X(*) END FUNCTION ISAMAX END INTERFACE INTERFACE LIBRARY_ICAMAX FUNCTION ICAMAX( N, X, INCX ) INTEGER :: ICAMAX INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: X(*) END FUNCTION ICAMAX END INTERFACE ! !-----Interface for SASUM and SCASUM----- ! INTERFACE LIBRARY_SASUM FUNCTION SASUM( N, X, INCX ) REAL :: SASUM INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: X(*) END FUNCTION SASUM END INTERFACE INTERFACE LIBRARY_SCASUM FUNCTION SCASUM( N, X, INCX ) REAL :: SCASUM INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: X(*) END FUNCTION SCASUM END INTERFACE ! !-----Interface for SAXPY and CAXPY----- ! INTERFACE LIBRARY_SAXPY SUBROUTINE SAXPY( N, ALPHA, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: ALPHA, X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SAXPY END INTERFACE INTERFACE LIBRARY_CAXPY SUBROUTINE CAXPY( N, ALPHA, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA, X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CAXPY END INTERFACE ! !-----Interface for SCOPY and CCOPY----- ! INTERFACE LIBRARY_SCOPY SUBROUTINE SCOPY( N, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: X(*) REAL, INTENT(OUT) :: Y(*) END SUBROUTINE SCOPY END INTERFACE INTERFACE LIBRARY_CCOPY SUBROUTINE CCOPY( N, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: X(*) COMPLEX, INTENT(OUT) :: Y(*) END SUBROUTINE CCOPY END INTERFACE ! !-----Interface for SDOT, CDOTC, and CDOTU----- ! INTERFACE LIBRARY_SDOT FUNCTION SDOT( N, X, INCX, Y, INCY ) REAL :: SDOT INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: X(*), Y(*) END FUNCTION SDOT END INTERFACE INTERFACE LIBRARY_CDOTC FUNCTION CDOTC( N, X, INCX, Y, INCY ) COMPLEX :: CDOTC INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: X(*), Y(*) END FUNCTION CDOTC END INTERFACE INTERFACE LIBRARY_CDOTU FUNCTION CDOTU( N, X, INCX, Y, INCY ) COMPLEX :: CDOTU INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: X(*), Y(*) END FUNCTION CDOTU END INTERFACE ! !-----Interface for SNRM2 and SCNRM2----- ! INTERFACE LIBRARY_SNRM2 FUNCTION SNRM2( N, X, INCX ) REAL :: SNRM2 INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: X(*) END FUNCTION SNRM2 END INTERFACE INTERFACE LIBRARY_SCNRM2 FUNCTION SCNRM2( N, X, INCX ) REAL :: SCNRM2 INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: X(*) END FUNCTION SCNRM2 END INTERFACE ! !-----Interface for SROT and CROT----- ! (CROT is an LAPACK extension) ! INTERFACE LIBRARY_SROT SUBROUTINE SROT( N, X, INCX, Y, INCY, C, S ) INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(INOUT) :: X(*), Y(*) REAL, INTENT(IN) :: C, S END SUBROUTINE SROT END INTERFACE INTERFACE LIBRARY_CROT SUBROUTINE CROT( N, X, INCX, Y, INCY, C, S ) INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(INOUT) :: X(*), Y(*) REAL, INTENT(IN) :: C COMPLEX, INTENT(IN) :: S END SUBROUTINE CROT END INTERFACE ! !-----Interface for SROTG and CROTG----- ! (CROTG is an LAPACK extension) ! INTERFACE LIBRARY_SROTG SUBROUTINE SROTG( A, B, C, S ) REAL, INTENT(INOUT) :: A, B REAL, INTENT(OUT) :: C, S END SUBROUTINE SROTG END INTERFACE INTERFACE LIBRARY_CROTG SUBROUTINE CROTG( A, B, C, S ) COMPLEX, INTENT(INOUT) :: A COMPLEX, INTENT(IN) :: B REAL, INTENT(OUT) :: C COMPLEX, INTENT(OUT) :: S END SUBROUTINE CROTG END INTERFACE ! !-----Interface for SROTM----- ! INTERFACE LIBRARY_SROTM SUBROUTINE SROTM( N, X, INCX, Y, INCY, PARAM ) INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(INOUT) :: X(*), Y(*) REAL, INTENT(IN) :: PARAM(5) END SUBROUTINE SROTM END INTERFACE ! !-----Interface for SROTMG----- ! INTERFACE LIBRARY_SROTMG SUBROUTINE SROTMG( D1, D2, A, B, PARAM ) REAL, INTENT(INOUT) :: A, D1, D2 REAL, INTENT(IN) :: B REAL, INTENT(OUT) :: PARAM END SUBROUTINE SROTMG END INTERFACE ! !-----Interface for SSCAL, CSCAL, and CSSCAL----- ! INTERFACE LIBRARY_SSCAL SUBROUTINE SSCAL( N, ALPHA, X, INCX ) INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(INOUT) :: X(*) END SUBROUTINE SSCAL END INTERFACE INTERFACE LIBRARY_CSCAL SUBROUTINE CSCAL( N, ALPHA, X, INCX ) INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CSCAL END INTERFACE INTERFACE LIBRARY_CSSCAL SUBROUTINE CSSCAL( N, ALPHA, X, INCX ) INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: ALPHA COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CSSCAL END INTERFACE ! !-----Interface for SSWAP and CSWAP----- ! INTERFACE LIBRARY_SSWAP SUBROUTINE SSWAP( N, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(INOUT) :: X(*), Y(*) END SUBROUTINE SSWAP END INTERFACE INTERFACE LIBRARY_CSWAP SUBROUTINE CSWAP( N, X, INCX, Y, INCY ) INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(INOUT) :: X(*), Y(*) END SUBROUTINE CSWAP END INTERFACE !!!!!!!!!!!! ============ !!!!!!!!!!!! !!!!!!!!!!!! Level 2 BLAS !!!!!!!!!!!! !!!!!!!!!!!! ============ !!!!!!!!!!!! ! !-----Interface for SGBMV and CGBMV----- ! INTERFACE LIBRARY_SGBMV SUBROUTINE SGBMV( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: TRANS INTEGER, INTENT(IN) :: INCX, INCY, LDA, KL, KU, M, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SGBMV END INTERFACE INTERFACE LIBRARY_CGBMV SUBROUTINE CGBMV( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: TRANS INTEGER, INTENT(IN) :: INCX, INCY, LDA, KL, KU, M, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CGBMV END INTERFACE ! !-----Interface for SGEMV and CGEMV----- ! INTERFACE LIBRARY_SGEMV SUBROUTINE SGEMV( TRANS, M, N, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: TRANS INTEGER, INTENT(IN) :: INCX, INCY, LDA, M, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SGEMV END INTERFACE INTERFACE LIBRARY_CGEMV SUBROUTINE CGEMV( TRANS, M, N, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: TRANS INTEGER, INTENT(IN) :: INCX, INCY, LDA, M, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CGEMV END INTERFACE ! !-----Interface for SGER, CGERC, and CGERU----- ! INTERFACE LIBRARY_SGER SUBROUTINE SGER( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) INTEGER, INTENT(IN) :: INCX, INCY, M, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: X(*), Y(*) REAL, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE SGER END INTERFACE INTERFACE LIBRARY_CGERC SUBROUTINE CGERC( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) INTEGER, INTENT(IN) :: INCX, INCY, M, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*), Y(*) COMPLEX, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE CGERC END INTERFACE INTERFACE LIBRARY_CGERU SUBROUTINE CGERU( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) INTEGER, INTENT(IN) :: INCX, INCY, M, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*), Y(*) COMPLEX, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE CGERU END INTERFACE ! !-----Interface for SSBMV, CHBMV, and CSBMV----- ! (CSBMV is an LAPACK extension) ! INTERFACE LIBRARY_SSBMV SUBROUTINE SSBMV( UPLO, N, K, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, K, LDA, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SSBMV END INTERFACE INTERFACE LIBRARY_CHBMV SUBROUTINE CHBMV( UPLO, N, K, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, K, LDA, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CHBMV END INTERFACE INTERFACE LIBRARY_CSBMV SUBROUTINE CSBMV( UPLO, N, K, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, K, LDA, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CSBMV END INTERFACE ! !-----Interface for SSPMV, CHPMV, and CSPMV----- ! (CSPMV is an LAPACK extension) ! INTERFACE LIBRARY_SSPMV SUBROUTINE SSPMV( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: AP(*), X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SSPMV END INTERFACE INTERFACE LIBRARY_CHPMV SUBROUTINE CHPMV( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: AP(*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CHPMV END INTERFACE INTERFACE LIBRARY_CSPMV SUBROUTINE CSPMV( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: AP(*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CSPMV END INTERFACE ! !-----Interface for SSPR, CHPR, and CSPR----- ! (CSPR is an LAPACK extension) ! INTERFACE LIBRARY_SSPR SUBROUTINE SSPR( UPLO, N, ALPHA, X, INCX, AP ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: X(*) REAL, INTENT(INOUT) :: AP(*) END SUBROUTINE SSPR END INTERFACE INTERFACE LIBRARY_CHPR SUBROUTINE CHPR( UPLO, N, ALPHA, X, INCX, AP ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*) COMPLEX, INTENT(INOUT) :: AP(*) END SUBROUTINE CHPR END INTERFACE INTERFACE LIBRARY_CSPR SUBROUTINE CSPR( UPLO, N, ALPHA, X, INCX, AP ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*) COMPLEX, INTENT(INOUT) :: AP(*) END SUBROUTINE CSPR END INTERFACE ! !-----Interface for SSPR2 and CHPR2----- ! INTERFACE LIBRARY_SSPR2 SUBROUTINE SSPR2( UPLO, N, ALPHA, X, INCX, Y, INCY, AP ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: X(*), Y(*) REAL, INTENT(INOUT) :: AP(*) END SUBROUTINE SSPR2 END INTERFACE INTERFACE LIBRARY_CHPR2 SUBROUTINE CHPR2( UPLO, N, ALPHA, X, INCX, Y, INCY, AP ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*), Y(*) COMPLEX, INTENT(INOUT) :: AP(*) END SUBROUTINE CHPR2 END INTERFACE ! !-----Interface for SSYMV, CHEMV, and CSYMV----- ! (CSYMV is an LAPACK extension) ! INTERFACE LIBRARY_SSYMV SUBROUTINE SSYMV( UPLO, N, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), X(*) REAL, INTENT(INOUT) :: Y(*) END SUBROUTINE SSYMV END INTERFACE INTERFACE LIBRARY_CHEMV SUBROUTINE CHEMV( UPLO, N, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CHEMV END INTERFACE INTERFACE LIBRARY_CSYMV SUBROUTINE CSYMV( UPLO, N, ALPHA, A, LDA, X, INCX, & & BETA, Y, INCY ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), X(*) COMPLEX, INTENT(INOUT) :: Y(*) END SUBROUTINE CSYMV END INTERFACE ! !-----Interface for SSYR, CHER, and CSYR----- ! (CSYR is an LAPACK extension) ! INTERFACE LIBRARY_SSYR SUBROUTINE SSYR( UPLO, N, ALPHA, X, INCX, A, LDA ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, LDA, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: X(*) REAL, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE SSYR END INTERFACE INTERFACE LIBRARY_CHER SUBROUTINE CHER( UPLO, N, ALPHA, X, INCX, A, LDA ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, LDA, N REAL, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*) COMPLEX, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE CHER END INTERFACE INTERFACE LIBRARY_CSYR SUBROUTINE CSYR( UPLO, N, ALPHA, X, INCX, A, LDA ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, LDA, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*) COMPLEX, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE CSYR END INTERFACE ! !-----Interface for SSYR2 and CHER2----- ! INTERFACE LIBRARY_SSYR2 SUBROUTINE SSYR2( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, LDA, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: X(*), Y(*) REAL, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE SSYR2 END INTERFACE INTERFACE LIBRARY_CHER2 SUBROUTINE CHER2( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA ) CHARACTER(LEN=1), INTENT(IN) :: UPLO INTEGER, INTENT(IN) :: INCX, INCY, LDA, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: X(*), Y(*) COMPLEX, INTENT(INOUT) :: A(LDA,*) END SUBROUTINE CHER2 END INTERFACE ! !-----Interface for STBMV and CTBMV----- ! INTERFACE LIBRARY_STBMV SUBROUTINE STBMV( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, K, LDA, N REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STBMV END INTERFACE INTERFACE LIBRARY_CTBMV SUBROUTINE CTBMV( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, K, LDA, N COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTBMV END INTERFACE ! !-----Interface for STPMV and CTPMV----- ! INTERFACE LIBRARY_STPMV SUBROUTINE STPMV( UPLO, TRANS, DIAG, N, AP, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: AP(*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STPMV END INTERFACE INTERFACE LIBRARY_CTPMV SUBROUTINE CTPMV( UPLO, TRANS, DIAG, N, AP, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: AP(*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTPMV END INTERFACE ! !-----Interface for STRMV and CTRMV----- ! INTERFACE LIBRARY_STRMV SUBROUTINE STRMV( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, LDA, N REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STRMV END INTERFACE INTERFACE LIBRARY_CTRMV SUBROUTINE CTRMV( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, LDA, N COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTRMV END INTERFACE ! !-----Interface for STBSV and CTBSV----- ! INTERFACE LIBRARY_STBSV SUBROUTINE STBSV( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, K, LDA, N REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STBSV END INTERFACE INTERFACE LIBRARY_CTBSV SUBROUTINE CTBSV( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, K, LDA, N COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTBSV END INTERFACE ! !-----Interface for STPSV and CTPSV----- ! INTERFACE LIBRARY_STPSV SUBROUTINE STPSV( UPLO, TRANS, DIAG, N, AP, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, N REAL, INTENT(IN) :: AP(*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STPSV END INTERFACE INTERFACE LIBRARY_CTPSV SUBROUTINE CTPSV( UPLO, TRANS, DIAG, N, AP, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, N COMPLEX, INTENT(IN) :: AP(*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTPSV END INTERFACE ! !-----Interface for STRSV and CTRSV----- ! INTERFACE LIBRARY_STRSV SUBROUTINE STRSV( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, LDA, N REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: X(*) END SUBROUTINE STRSV END INTERFACE INTERFACE LIBRARY_CTRSV SUBROUTINE CTRSV( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) CHARACTER(LEN=1), INTENT(IN) :: UPLO, TRANS, DIAG INTEGER, INTENT(IN) :: INCX, LDA, N COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: X(*) END SUBROUTINE CTRSV END INTERFACE !!!!!!!!!!!! ============ !!!!!!!!!!!! !!!!!!!!!!!! Level 3 BLAS !!!!!!!!!!!! !!!!!!!!!!!! ============ !!!!!!!!!!!! ! !-----Interface for SGEMM and CGEMM----- ! INTERFACE LIBRARY_SGEMM SUBROUTINE SGEMM( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANSA, TRANSB INTEGER, INTENT(IN) :: K, LDA, LDB, LDC, M, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), B(LDB,*) REAL, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE SGEMM END INTERFACE INTERFACE LIBRARY_CGEMM SUBROUTINE CGEMM( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANSA, TRANSB INTEGER, INTENT(IN) :: K, LDA, LDB, LDC, M, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), B(LDB,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CGEMM END INTERFACE ! !-----Interface for SSYMM, CHEMM, and CSYMM----- ! INTERFACE LIBRARY_SSYMM SUBROUTINE SSYMM( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: SIDE, UPLO INTEGER, INTENT(IN) :: LDA, LDB, LDC, M, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), B(LDB,*) REAL, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE SSYMM END INTERFACE INTERFACE LIBRARY_CHEMM SUBROUTINE CHEMM( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: SIDE, UPLO INTEGER, INTENT(IN) :: LDA, LDB, LDC, M, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), B(LDB,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CHEMM END INTERFACE INTERFACE LIBRARY_CSYMM SUBROUTINE CSYMM( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: SIDE, UPLO INTEGER, INTENT(IN) :: LDA, LDB, LDC, M, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), B(LDB,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CSYMM END INTERFACE ! !-----Interface for SSYRK, CHERK, and CSYRK----- ! INTERFACE LIBRARY_SSYRK SUBROUTINE SSYRK( UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDC, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE SSYRK END INTERFACE INTERFACE LIBRARY_CHERK SUBROUTINE CHERK( UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDC, N REAL, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CHERK END INTERFACE INTERFACE LIBRARY_CSYRK SUBROUTINE CSYRK( UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDC, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CSYRK END INTERFACE ! !-----Interface for SSYR2K, CHER2K, and CSYR2K----- ! INTERFACE LIBRARY_SSYR2K SUBROUTINE SSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDB, LDC, N REAL, INTENT(IN) :: ALPHA, BETA REAL, INTENT(IN) :: A(LDA,*), B(LDB,*) REAL, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE SSYR2K END INTERFACE INTERFACE LIBRARY_CHER2K SUBROUTINE CHER2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDB, LDC, N COMPLEX, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: BETA COMPLEX, INTENT(IN) :: A(LDA,*), B(LDB,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CHER2K END INTERFACE INTERFACE LIBRARY_CSYR2K SUBROUTINE CSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, & & BETA, C, LDC ) CHARACTER(LEN=1), INTENT(IN) :: TRANS, UPLO INTEGER, INTENT(IN) :: K, LDA, LDB, LDC, N COMPLEX, INTENT(IN) :: ALPHA, BETA COMPLEX, INTENT(IN) :: A(LDA,*), B(LDB,*) COMPLEX, INTENT(INOUT) :: C(LDC,*) END SUBROUTINE CSYR2K END INTERFACE ! !-----Interface for STRMM and CTRMM----- ! INTERFACE LIBRARY_STRMM SUBROUTINE STRMM( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, & & B, LDB ) CHARACTER(LEN=1), INTENT(IN) :: DIAG, SIDE, TRANSA, UPLO INTEGER, INTENT(IN) :: LDA, LDB, M, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: B(LDB,*) END SUBROUTINE STRMM END INTERFACE INTERFACE LIBRARY_CTRMM SUBROUTINE CTRMM( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, & & B, LDB ) CHARACTER(LEN=1), INTENT(IN) :: DIAG, SIDE, TRANSA, UPLO INTEGER, INTENT(IN) :: LDA, LDB, M, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: B(LDB,*) END SUBROUTINE CTRMM END INTERFACE ! !-----Interface for STRSM and CTRSM----- ! INTERFACE LIBRARY_STRSM SUBROUTINE STRSM( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, & & B, LDB ) CHARACTER(LEN=1), INTENT(IN) :: DIAG, SIDE, TRANSA, UPLO INTEGER, INTENT(IN) :: LDA, LDB, M, N REAL, INTENT(IN) :: ALPHA REAL, INTENT(IN) :: A(LDA,*) REAL, INTENT(INOUT) :: B(LDB,*) END SUBROUTINE STRSM END INTERFACE INTERFACE LIBRARY_CTRSM SUBROUTINE CTRSM( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, & & B, LDB ) CHARACTER(LEN=1), INTENT(IN) :: DIAG, SIDE, TRANSA, UPLO INTEGER, INTENT(IN) :: LDA, LDB, M, N COMPLEX, INTENT(IN) :: ALPHA COMPLEX, INTENT(IN) :: A(LDA,*) COMPLEX, INTENT(INOUT) :: B(LDB,*) END SUBROUTINE CTRSM END INTERFACE END MODULE LIBRARY_BLAS