














































module blas
  implicit none
  
  integer, parameter :: izero = 0
  integer, parameter :: blas_integer_kind = kind(izero)
  
  interface gemm
     SUBROUTINE SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
       IMPLICIT NONE
       REAL ALPHA,BETA
       INTEGER   K,LDA,LDB,LDC,M,N
       CHARACTER TRANSA,TRANSB
       REAL A(LDA,*),B(LDB,*),C(LDC,*)
     END SUBROUTINE SGEMM
     
     SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
       IMPLICIT NONE
       DOUBLE PRECISION ALPHA,BETA
       INTEGER   K,LDA,LDB,LDC,M,N
       CHARACTER TRANSA,TRANSB
       DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
     END SUBROUTINE DGEMM
     
     SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
       IMPLICIT NONE
       COMPLEX ALPHA,BETA
       INTEGER   K,LDA,LDB,LDC,M,N
       CHARACTER TRANSA,TRANSB
       COMPLEX A(LDA,*),B(LDB,*),C(LDC,*)
     END SUBROUTINE CGEMM
     
     SUBROUTINE ZGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
       COMPLEX*16 ALPHA,BETA
       INTEGER   K,LDA,LDB,LDC,M,N
       CHARACTER TRANSA,TRANSB
       COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*)
     END SUBROUTINE ZGEMM
  end interface gemm
  
end module blas
