void Num_gemm_zprimme(char *transa, char *transb, int m, int n, int k, Complex_Z alpha, Complex_Z *a, int lda, Complex_Z *b, int ldb, Complex_Z beta, Complex_Z *c, int ldc) { #ifdef NUM_CRAY _fcd transa_fcd, transb_fcd; transa_fcd = _cptofcd(transa, strlen(transa)); transb_fcd = _cptofcd(transb, strlen(transb)); ZGEMM(transa_fcd, transb_fcd, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); #else ZGEMM(transa, transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); #endif }
//--------------------------------------------------------- void umAxB(const ZMat& A, const ZMat& B, ZMat& C) //--------------------------------------------------------- { //------------------------- // C = A * B //------------------------- // A = op(A) is (M,K) // B = op(B) is (K,N) // C is (M,N) //------------------------- int M=A.num_rows(), K=A.num_cols(), N=B.num_cols(); int LDA=M, LDB=K, LDC=M; std::complex<double> one=1.0, zero=0.0; if (B.num_rows() != K) { umERROR("umAxB(A,B,C)", "wrong dimensions"); } C.resize(M,N); ZGEMM ('N','N',M,N,K, one,A.data(),LDA, B.data(),LDB, zero,C.data(),LDC); }