! Replaces DGEMM 36 procedures (only 16 are needed) ! Level 3 REAL (DGEMM) ! . alpha op_a op_b beta c ! 301 any T T any c < alpha a(T) b(T) + beta c ! 302 any T T 0.0 c < alpha a(T) b(T) ! 303* any T H any c < alpha a(T) b(H) + beta c ! 304* any T H 0.0 c < alpha a(T) b(H) ! 305 any T any c < alpha a(T) b + beta c ! 306 any T 0.0 c < alpha a(T) b ! 307* any H T any c < alpha a(H) b(T) + beta c ! 308* any H T 0.0 c < alpha a(H) b(T) ! 309* any H H any c < alpha a(H) b(H) + beta c ! 310* any H H 0.0 c < alpha a(H) b(H) ! 311* any H any c < alpha a(H) b + beta c ! 312* any H 0.0 c < alpha a(H) b ! 313 any T any c < alpha a b(T) + beta c ! 314 any T 0.0 c < alpha a b(T) ! 315* any H any c < alpha a b(H) + beta c ! 316* any H 0.0 c < alpha a b(H) ! 317 any any c < alpha a b + beta c ! 318 any 0.0 c < alpha a b ! 319 1.0 T T any c < a(T) b(T) + beta c ! 320 1.0 T T 0.0 c < a(T) b(T) ! 321* 1.0 T H any c < a(T) b(H) + beta c ! 322* 1.0 T H 0.0 c < a(T) b(H) ! 323 1.0 T any c < a(T) b + beta c ! 324 1.0 T 0.0 c < a(T) b ! 325* 1.0 H T any c < a(H) b(T) + beta c ! 326* 1.0 H T 0.0 c < a(H) b(T) ! 327* 1.0 H H any c < a(H) b(H) + beta c ! 328* 1.0 H H 0.0 c < a(H) b(H) ! 329* 1.0 H any c < a(H) b + beta c ! 330* 1.0 H 0.0 c < a(H) b ! 331 1.0 T any c < a b(T) + beta c ! 332 1.0 T 0.0 c < a b(T) ! 333* 1.0 H any c < a b(H) + beta c ! 334* 1.0 H 0.0 c < a b(H) ! 335 1.0 any c < a b + beta c ! 336 1.0 0.0 c < a b ! * means not needed for the REAL case ! . all procedures with op_a or op_b of type "blas_conj_trans" ! . are not needed but have been added for consistency ! . with the complex case ! . (303, 304, 307, 308, 309, 310, 311, 312, 315, 316, ! . 321, 322, 325, 326, 327, 328, 329, 330, 333, 334) ! . Some of the operations could be replaced by Fortran 90 Intrinsics ! . For example 336 == MATMUL(a,b) ! . 318 == alpha * MATMUL(a,b) MODULE dgemm_01 CONTAINS SUBROUTINE dgemm_301(alpha,a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_301 END MODULE dgemm_01 MODULE dgemm_02 CONTAINS SUBROUTINE dgemm_302(alpha,a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_302 END MODULE dgemm_02 MODULE dgemm_03 CONTAINS SUBROUTINE dgemm_303(alpha,a,op_a,b,op_b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_trans_type ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha, beta TYPE (blas_trans_type), INTENT (IN) :: op_a TYPE (blas_conj_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_303 END MODULE dgemm_03 MODULE dgemm_04 CONTAINS SUBROUTINE dgemm_304(alpha,a,op_a,b,op_b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_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 TYPE (blas_conj_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_304 END MODULE dgemm_04 MODULE dgemm_05 CONTAINS SUBROUTINE dgemm_305(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,alpha,a,k,b,k,beta,c,m) END SUBROUTINE dgemm_305 END MODULE dgemm_05 MODULE dgemm_06 CONTAINS SUBROUTINE dgemm_306(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,alpha,a,k,b,k,zero,c,m) END SUBROUTINE dgemm_306 END MODULE dgemm_06 MODULE dgemm_07 CONTAINS SUBROUTINE dgemm_307(alpha,a,op_a,b,op_b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_trans_type ! .. Scalar Arguments .. REAL (wp), INTENT (IN) :: alpha, beta TYPE (blas_conj_trans_type), INTENT (IN) :: op_a TYPE (blas_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_307 END MODULE dgemm_07 MODULE dgemm_08 CONTAINS SUBROUTINE dgemm_308(alpha,a,op_a,b,op_b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, 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 TYPE (blas_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_308 END MODULE dgemm_08 MODULE dgemm_09 CONTAINS SUBROUTINE dgemm_309(alpha,a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_309 END MODULE dgemm_09 MODULE dgemm_10 CONTAINS SUBROUTINE dgemm_310(alpha,a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,alpha,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_310 END MODULE dgemm_10 MODULE dgemm_11 CONTAINS SUBROUTINE dgemm_311(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,alpha,a,k,b,k,beta,c,m) END SUBROUTINE dgemm_311 END MODULE dgemm_11 MODULE dgemm_12 CONTAINS SUBROUTINE dgemm_312(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,alpha,a,k,b,k,zero,c,m) END SUBROUTINE dgemm_312 END MODULE dgemm_12 MODULE dgemm_13 CONTAINS SUBROUTINE dgemm_313(alpha,a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,alpha,a,m,b,n,beta,c,m) END SUBROUTINE dgemm_313 END MODULE dgemm_13 MODULE dgemm_14 CONTAINS SUBROUTINE dgemm_314(alpha,a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,alpha,a,m,b,n,zero,c,m) END SUBROUTINE dgemm_314 END MODULE dgemm_14 MODULE dgemm_15 CONTAINS SUBROUTINE dgemm_315(alpha,a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,alpha,a,m,b,n,beta,c,m) END SUBROUTINE dgemm_315 END MODULE dgemm_15 MODULE dgemm_16 CONTAINS SUBROUTINE dgemm_316(alpha,a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,alpha,a,m,b,n,zero,c,m) END SUBROUTINE dgemm_316 END MODULE dgemm_16 MODULE dgemm_17 CONTAINS SUBROUTINE dgemm_317(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','N',m,n,k,alpha,a,m,b,k,beta,c,m) END SUBROUTINE dgemm_317 END MODULE dgemm_17 MODULE dgemm_18 CONTAINS SUBROUTINE dgemm_318(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','N',m,n,k,alpha,a,m,b,k,zero,c,m) END SUBROUTINE dgemm_318 END MODULE dgemm_18 MODULE dgemm_19 CONTAINS SUBROUTINE dgemm_319(a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_319 END MODULE dgemm_19 MODULE dgemm_20 CONTAINS SUBROUTINE dgemm_320(a,op_a,b,op_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 REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_trans_type), INTENT (IN) :: op_a, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_320 END MODULE dgemm_20 MODULE dgemm_21 CONTAINS SUBROUTINE dgemm_321(a,op_a,b,op_b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_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 TYPE (blas_conj_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_321 END MODULE dgemm_21 MODULE dgemm_22 CONTAINS SUBROUTINE dgemm_322(a,op_a,b,op_b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_trans_type), INTENT (IN) :: op_a TYPE (blas_conj_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_322 END MODULE dgemm_22 MODULE dgemm_23 CONTAINS SUBROUTINE dgemm_323(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,one,a,k,b,k,beta,c,m) END SUBROUTINE dgemm_323 END MODULE dgemm_23 MODULE dgemm_24 CONTAINS SUBROUTINE dgemm_324(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 REAL (wp), PARAMETER :: one = 1.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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,one,a,k,b,k,zero,c,m) END SUBROUTINE dgemm_324 END MODULE dgemm_24 MODULE dgemm_25 CONTAINS SUBROUTINE dgemm_325(a,op_a,b,op_b,beta,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, 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 TYPE (blas_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_325 END MODULE dgemm_25 MODULE dgemm_26 CONTAINS SUBROUTINE dgemm_326(a,op_a,b,op_b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp USE blas_keywords, ONLY : blas_trans_type, blas_conj_trans_type ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_conj_trans_type), INTENT (IN) :: op_a TYPE (blas_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_326 END MODULE dgemm_26 MODULE dgemm_27 CONTAINS SUBROUTINE dgemm_327(a,op_a,b,op_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, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,beta,c,m) END SUBROUTINE dgemm_327 END MODULE dgemm_27 MODULE dgemm_28 CONTAINS SUBROUTINE dgemm_328(a,op_a,b,op_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 REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_conj_trans_type), INTENT (IN) :: op_a, op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','T',m,n,k,one,a,k,b,n,zero,c,m) END SUBROUTINE dgemm_328 END MODULE dgemm_28 MODULE dgemm_29 CONTAINS SUBROUTINE dgemm_329(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,one,a,k,b,k,beta,c,m) END SUBROUTINE dgemm_329 END MODULE dgemm_29 MODULE dgemm_30 CONTAINS SUBROUTINE dgemm_330(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 REAL (wp), PARAMETER :: one = 1.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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,1) CALL dgemm('T','N',m,n,k,one,a,k,b,k,zero,c,m) END SUBROUTINE dgemm_330 END MODULE dgemm_30 MODULE dgemm_31 CONTAINS SUBROUTINE dgemm_331(a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,one,a,m,b,n,beta,c,m) END SUBROUTINE dgemm_331 END MODULE dgemm_31 MODULE dgemm_32 CONTAINS SUBROUTINE dgemm_332(a,b,op_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 REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,one,a,m,b,n,zero,c,m) END SUBROUTINE dgemm_332 END MODULE dgemm_32 MODULE dgemm_33 CONTAINS SUBROUTINE dgemm_333(a,b,op_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_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (INOUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,one,a,m,b,n,beta,c,m) END SUBROUTINE dgemm_333 END MODULE dgemm_33 MODULE dgemm_34 CONTAINS SUBROUTINE dgemm_334(a,b,op_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 REAL (wp), PARAMETER :: one = 1.0_wp ! .. Scalar Arguments .. TYPE (blas_conj_trans_type), INTENT (IN) :: op_b ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','T',m,n,k,one,a,m,b,n,zero,c,m) END SUBROUTINE dgemm_334 END MODULE dgemm_34 MODULE dgemm_35 CONTAINS SUBROUTINE dgemm_335(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 :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','N',m,n,k,one,a,m,b,k,beta,c,m) END SUBROUTINE dgemm_335 END MODULE dgemm_35 MODULE dgemm_36 CONTAINS SUBROUTINE dgemm_336(a,b,c) ! .. Use Statements .. USE blas_kinds, ONLY : wp => dp ! .. Parameters .. REAL (wp), PARAMETER :: zero = 0.0_wp REAL (wp), PARAMETER :: one = 1.0_wp ! .. Array Arguments .. REAL (wp), INTENT (IN) :: a(:,:), b(:,:) REAL (wp), INTENT (OUT) :: c(:,:) ! .. Local Scalar .. INTEGER :: k, m, n ! .. External Procedures .. EXTERNAL dgemm m = SIZE(c,1) n = SIZE(c,2) k = SIZE(a,2) CALL dgemm('N','N',m,n,k,one,a,m,b,k,zero,c,m) END SUBROUTINE dgemm_336 END MODULE dgemm_36