/************************************************************************************* Grid physics library, www.github.com/paboyle/Grid Source file: ./lib/qcd/utils/SpaceTimeGrid.cc Copyright (C) 2015 Author: Peter Boyle This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. See the full license in the file "LICENSE" in the top level distribution directory *************************************************************************************/ /* END LEGAL */ #include #include namespace Grid { namespace QCD { ///////////////////////////////////////////////////////////////// // Public interface ///////////////////////////////////////////////////////////////// GridCartesian *SpaceTimeGrid::makeFourDimGrid(const std::vector & latt,const std::vector &simd,const std::vector &mpi) { return new GridCartesian(latt,simd,mpi); } GridRedBlackCartesian *SpaceTimeGrid::makeFourDimRedBlackGrid(const GridCartesian *FourDimGrid) { return new GridRedBlackCartesian(FourDimGrid); } GridCartesian *SpaceTimeGrid::makeFourDimDWFGrid(const std::vector & latt,const std::vector &mpi) { std::vector simd(4,1); return makeFourDimGrid(latt,simd,mpi); } GridCartesian *SpaceTimeGrid::makeFiveDimGrid(int Ls,const GridCartesian *FourDimGrid) { int N4=FourDimGrid->_ndimension; std::vector latt5(1,Ls); std::vector simd5(1,1); std::vector mpi5(1,1); for(int d=0;d_fdimensions[d]); simd5.push_back(FourDimGrid->_simd_layout[d]); mpi5.push_back(FourDimGrid->_processors[d]); } return new GridCartesian(latt5,simd5,mpi5); } GridRedBlackCartesian *SpaceTimeGrid::makeFiveDimRedBlackGrid(int Ls,const GridCartesian *FourDimGrid) { int N4=FourDimGrid->_ndimension; int cbd=1; // std::vector latt5(1,Ls); // std::vector simd5(1,1); // std::vector mpi5(1,1); std::vector cb5(1,0); for(int d=0;d_fdimensions[d]); // simd5.push_back(FourDimGrid->_simd_layout[d]); // mpi5.push_back(FourDimGrid->_processors[d]); cb5.push_back( 1); } GridCartesian *tmp = makeFiveDimGrid(Ls,FourDimGrid); GridRedBlackCartesian *ret = new GridRedBlackCartesian(tmp,cb5,cbd); delete tmp; return ret; } GridCartesian *SpaceTimeGrid::makeFiveDimDWFGrid(int Ls,const GridCartesian *FourDimGrid) { int N4 = FourDimGrid->_ndimension; int nsimd = FourDimGrid->Nsimd(); std::vector latt5(1,Ls); std::vector simd5(1,nsimd); std::vector mpi5(1,1); for(int d=0;d_fdimensions[d]); simd5.push_back(1); mpi5.push_back(FourDimGrid->_processors[d]); } return new GridCartesian(latt5,simd5,mpi5); } /////////////////////////////////////////////////// // Interface is inefficient and forces the deletion // Pass in the non-redblack grid /////////////////////////////////////////////////// GridRedBlackCartesian *SpaceTimeGrid::makeFiveDimDWFRedBlackGrid(int Ls,const GridCartesian *FourDimGrid) { int N4=FourDimGrid->_ndimension; int cbd=1; std::vector cb5(1,0); // int nsimd = FourDimGrid->Nsimd(); // std::vector latt5(1,Ls); // std::vector simd5(1,nsimd); // std::vector mpi5(1,1); for(int d=0;d_fdimensions[d]); // simd5.push_back(1); // mpi5.push_back(FourDimGrid->_processors[d]); cb5.push_back(1); } GridCartesian *tmp = makeFiveDimDWFGrid(Ls,FourDimGrid); GridRedBlackCartesian *ret = new GridRedBlackCartesian(tmp,cb5,cbd); delete tmp; return ret; } }}