QDPIO::cout << "BJ: innerProduct all" << endl;
QDPIO::cout << "BJ: multi1d innerProduct s" << endl;
innerProduct(const QDPType< TVec, OLattice<TVec> > &v1,	     const QDPType< TVec, OLattice<TVec> > &v2){#ifdef DEBUG_BLAS  QDPIO::cout << "BJ: innerProduct all" << endl;#endif  // This BinaryReturn has Type_t  // OScalar<OScalar<OScalar<RComplex<PScalar<REAL> > > > >  BinaryReturn< OLattice<TVec>, OLattice<TVec>, FnInnerProduct>::Type_t lprod;  // Inner product is accumulated internally in DOUBLE  DOUBLE ip[2];  ip[0]=0;  ip[1]=0;  // Length of subset   unsigned long n_3vec = (all.end() - all.start() + 1)*Ns;      // Call My CDOT  local_vcdot(&(ip[0]), &(ip[1]),	      (REAL *)&(v1.elem(all.start()).elem(0).elem(0).real()),	      (REAL *)&(v2.elem(all.start()).elem(0).elem(0).real()),	      n_3vec);  // Global sum -- still on a vector of doubles  Internal::globalSumArray(ip,2);  // Downcast (and possibly lose precision) here   lprod.elem().elem().elem().real() = (REAL)ip[0];  lprod.elem().elem().elem().imag() = (REAL)ip[1];  // Return  return lprod;}