! Replaces ZGEMV 12 procedures ! . alpha op_a beta c ! 201 any T any c < alpha a(T) b + beta c ! 202 any T 0.0 c < alpha a(T) b ! 203* any H any c < alpha a(H) b + beta c ! 204* any H 0.0 c < alpha a(H) b ! 205 any any c < alpha a b + beta c ! 206 any 0.0 c < alpha a b ! 207 1.0 T any c < a(T) b + beta c ! 208 1.0 T 0.0 c < a(T) b ! 209* 1.0 H any c < a(H) b + beta c ! 210* 1.0 H 0.0 c < a(H) b ! 211 1.0 any c < a b + beta c ! 212 1.0 0.0 c < a b ! * means not needed for the REAL case ! Some of the operations could be replaced by Fortran 90 Intrinsics ! For example 212 == MATMUL(a,b) ! . 206 == alpha * MATMUL(a,b) MODULE zgemv_01 CONTAINS SUBROUTINE zgemv_201(alpha,a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha, beta TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('T',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_201 END MODULE zgemv_01 MODULE zgemv_02 CONTAINS SUBROUTINE zgemv_202(alpha,a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('T',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE zgemv_202 END MODULE zgemv_02 MODULE zgemv_03 CONTAINS SUBROUTINE zgemv_203(alpha,a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha, beta TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('C',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_203 END MODULE zgemv_03 MODULE zgemv_04 CONTAINS SUBROUTINE zgemv_204(alpha,a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('C',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE zgemv_204 END MODULE zgemv_04 MODULE zgemv_05 CONTAINS SUBROUTINE zgemv_205(alpha,a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha, beta ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('N',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_205 END MODULE zgemv_05 MODULE zgemv_06 CONTAINS SUBROUTINE zgemv_206(alpha,a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: alpha ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('N',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE zgemv_206 END MODULE zgemv_06 MODULE zgemv_07 CONTAINS SUBROUTINE zgemv_207(a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: beta TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('T',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_207 END MODULE zgemv_07 MODULE zgemv_08 CONTAINS SUBROUTINE zgemv_208(a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Scalar Arguments .. TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('T',m,n,one,a,m,b,1,zero,c,1) END SUBROUTINE zgemv_208 END MODULE zgemv_08 MODULE zgemv_09 CONTAINS SUBROUTINE zgemv_209(a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: beta TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('C',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_209 END MODULE zgemv_09 MODULE zgemv_10 CONTAINS SUBROUTINE zgemv_210(a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Scalar Arguments .. TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('C',m,n,one,a,m,b,1,zero,c,1) END SUBROUTINE zgemv_210 END MODULE zgemv_10 MODULE zgemv_11 CONTAINS SUBROUTINE zgemv_211(a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) ! .. Scalar Arguments .. COMPLEX (wp), INTENT (IN) :: beta ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('N',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE zgemv_211 END MODULE zgemv_11 MODULE zgemv_12 CONTAINS SUBROUTINE zgemv_212(a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. COMPLEX (wp), PARAMETER :: one = (1.0_wp,0.0_wp) COMPLEX (wp), PARAMETER :: zero = (0.0_wp,0.0_wp) ! .. Array Arguments .. COMPLEX (wp), INTENT (IN) :: a(:,:), b(:) COMPLEX (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL zgemv m = SIZE(a,1) n = SIZE(a,2) CALL zgemv('N',m,n,one,a,m,b,1,zero,c,1) ! ! c = MATMUL(a,b) END SUBROUTINE zgemv_212 END MODULE zgemv_12