! Replaces DGEMV 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 ! . Procedures with op_a of type "blas_conj_trans" are not needed ! . but have been added for consistency with the complex case ! . (203, 204, 209, 210) ! . Some of the operations could be replaced by Fortran 90 Intrinsics ! . For example 212 == MATMUL(a,b) ! . 206 == alpha * MATMUL(a,b) MODULE dgemv_01 CONTAINS SUBROUTINE dgemv_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 .. REAL (wp), INTENT (IN) :: alpha, beta TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('T',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_201 END MODULE dgemv_01 MODULE dgemv_02 CONTAINS SUBROUTINE dgemv_202(alpha,a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('T',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE dgemv_202 END MODULE dgemv_02 MODULE dgemv_03 CONTAINS SUBROUTINE dgemv_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 .. REAL (wp), INTENT (IN) :: alpha, beta TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('C',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_203 END MODULE dgemv_03 MODULE dgemv_04 CONTAINS SUBROUTINE dgemv_204(alpha,a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('C',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE dgemv_204 END MODULE dgemv_04 MODULE dgemv_05 CONTAINS SUBROUTINE dgemv_205(alpha,a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha, beta ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('N',m,n,alpha,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_205 END MODULE dgemv_05 MODULE dgemv_06 CONTAINS SUBROUTINE dgemv_206(alpha,a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('N',m,n,alpha,a,m,b,1,zero,c,1) END SUBROUTINE dgemv_206 END MODULE dgemv_06 MODULE dgemv_07 CONTAINS SUBROUTINE dgemv_207(a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: beta TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('T',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_207 END MODULE dgemv_07 MODULE dgemv_08 CONTAINS SUBROUTINE dgemv_208(a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Scalar Arguments .. TYPE (blas_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('T',m,n,one,a,m,b,1,zero,c,1) END SUBROUTINE dgemv_208 END MODULE dgemv_08 MODULE dgemv_09 CONTAINS SUBROUTINE dgemv_209(a,op_a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: beta TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('C',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_209 END MODULE dgemv_09 MODULE dgemv_10 CONTAINS SUBROUTINE dgemv_210(a,op_a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_conj_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Scalar Arguments .. TYPE (blas_conj_trans_type), INTENT (IN) :: op_a ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('C',m,n,one,a,m,b,1,zero,c,1) END SUBROUTINE dgemv_210 END MODULE dgemv_10 MODULE dgemv_11 CONTAINS SUBROUTINE dgemv_211(a,b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: beta ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (INOUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('N',m,n,one,a,m,b,1,beta,c,1) END SUBROUTINE dgemv_211 END MODULE dgemv_11 MODULE dgemv_12 CONTAINS SUBROUTINE dgemv_212(a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. REAL (wp), PARAMETER :: one = 1.0_wp REAL (wp), PARAMETER :: zero = 0.0_wp ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:) REAL (wp), INTENT (OUT) :: c(:) ! .. Local Scalar .. INTEGER :: m, n ! .. External Procedures .. EXTERNAL dgemv m = SIZE(a,1) n = SIZE(a,2) CALL dgemv('N',m,n,one,a,m,b,1,zero,c,1) ! ! c = MATMUL(a,b) END SUBROUTINE dgemv_212 END MODULE dgemv_12