// ---------------------------------------------------------------------- int zgemm(cpx alpha, const CpxNumMat& A, const CpxNumMat& B, cpx beta, CpxNumMat& C) { assert( A.m() == C.m() ); assert( A.n() == B.m() ); assert( B.n() == C.n() ); char transa = 'N'; char transb = 'N'; int m = C.m(); int n = C.n(); int k = A.n(); zgemm_(&transa, &transb, &m, &n, &k, &alpha, A.data(), &m, B.data(), &k, &beta, C.data(), &m); return 0; }
inline float energy(CpxNumMat& m) { float val=0; cpx* data = m.data(); for(int i=0; i<m.m()*m.n(); i++) { //val += data[i].re*data[i].re + data[i].im*data[i].im; val += norm(data[i]); } return val; }
//Y <- a M X + b Y // ---------------------------------------------------------------------- int zgemv(cpx alpha, const CpxNumMat& A, const CpxNumVec& X, cpx beta, CpxNumVec& Y) { assert(Y.m() == A.m()); assert(A.n() == X.m()); char trans = 'N'; int m = A.m(); int n = A.n(); int incx = 1; int incy = 1; zgemv_(&trans, &m, &n, &alpha, A.data(), &m, X.data(), &incx, &beta, Y.data(), &incy); return 0; }