#ifndef GRID_LATTICE_LOCALREDUCTION_H #define GRID_LATTICE_LOCALREDUCTION_H /////////////////////////////////////////////// // localInner, localNorm, outerProduct /////////////////////////////////////////////// namespace Grid { ///////////////////////////////////////////////////// // Non site, reduced locally reduced routines ///////////////////////////////////////////////////// // localNorm2, template inline auto localNorm2 (const Lattice &rhs)-> Lattice { Lattice ret(rhs._grid); #pragma omp parallel for for(int ss=0;ssoSites(); ss++){ ret._odata[ss]=innerProduct(rhs._odata[ss],rhs._odata[ss]); } return ret; } // localInnerProduct template inline auto localInnerProduct (const Lattice &lhs,const Lattice &rhs) -> Lattice { Lattice ret(rhs._grid); #pragma omp parallel for for(int ss=0;ssoSites(); ss++){ ret._odata[ss]=innerProduct(lhs._odata[ss],rhs._odata[ss]); } return ret; } // outerProduct Scalar x Scalar -> Scalar // Vector x Vector -> Matrix template inline auto outerProduct (const Lattice &lhs,const Lattice &rhs) -> Lattice { Lattice ret(rhs._grid); #pragma omp parallel for for(int ss=0;ssoSites(); ss++){ ret._odata[ss]=outerProduct(lhs._odata[ss],rhs._odata[ss]); } return ret; } } #endif