From 9aafa8ee60a1830c5a630c8738c8ee1a6f14d3b0 Mon Sep 17 00:00:00 2001 From: Antonin Portelli Date: Tue, 2 Oct 2018 13:34:17 +0100 Subject: [PATCH] Hadrons: eigenpack converter generalised for RB/5d grids --- Hadrons/Utilities/EigenPackCast.cc | 89 +++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/Hadrons/Utilities/EigenPackCast.cc b/Hadrons/Utilities/EigenPackCast.cc index c35a3321..07c37a7c 100644 --- a/Hadrons/Utilities/EigenPackCast.cc +++ b/Hadrons/Utilities/EigenPackCast.cc @@ -7,7 +7,8 @@ using namespace Hadrons; template void convert(const std::string outFilename, const std::string inFilename, - const unsigned int size, const bool multiFile) + const unsigned int Ls, const bool rb, const unsigned int size, + const bool multiFile) { assert(outFilename != inFilename); @@ -16,28 +17,60 @@ void convert(const std::string outFilename, const std::string inFilename, typedef typename FOut::vector_type VTypeOut; typedef typename FIn::vector_type VTypeIn; - std::shared_ptr fgIn, fgOut; - std::shared_ptr gIn, gOut; + std::shared_ptr gInBase, gOutBase, gIn5, gOut5; + std::shared_ptr rbgIn, rbgOut; + GridBase *gIn, *gOut; - auto dim = GridDefaultLatt(); - unsigned int nd = dim.size(); - auto simdOut = GridDefaultSimd(nd, VTypeOut::Nsimd()); - auto simdIn = GridDefaultSimd(nd, VTypeIn::Nsimd()); + auto dim = GridDefaultLatt(); + unsigned int nd = dim.size(); + auto simdOut = GridDefaultSimd(nd, VTypeOut::Nsimd()); + auto simdIn = GridDefaultSimd(nd, VTypeIn::Nsimd()); - fgOut.reset(SpaceTimeGrid::makeFourDimGrid(dim, simdOut, GridDefaultMpi())); - gOut.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(fgOut.get())); - fgIn.reset(SpaceTimeGrid::makeFourDimGrid(dim, simdIn, GridDefaultMpi())); - gIn.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(fgIn.get())); + gOutBase.reset(SpaceTimeGrid::makeFourDimGrid(dim, simdOut, GridDefaultMpi())); + gInBase.reset(SpaceTimeGrid::makeFourDimGrid(dim, simdIn, GridDefaultMpi())); + if (rb) + { + if (Ls > 1) + { + rbgOut.reset(SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls, gOutBase.get())); + rbgIn.reset(SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls, gInBase.get())); + } + else + { + rbgOut.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(gOutBase.get())); + rbgIn.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(gInBase.get())); + } + gOut = rbgOut.get(); + gIn = rbgIn.get(); + } + else + { + if (Ls > 1) + { + gOut5.reset(SpaceTimeGrid::makeFiveDimGrid(Ls, gOutBase.get())); + gIn5.reset(SpaceTimeGrid::makeFiveDimGrid(Ls, gInBase.get())); + gOut = gOut5.get(); + gIn = gIn5.get(); + } + else + { + gOut = gOutBase.get(); + gIn = gInBase.get(); + } + } - FOut bufOut(gOut.get()); - FIn bufIn(gIn.get()), testIn(gIn.get()); + FOut bufOut(gOut); + FIn bufIn(gIn), testIn(gIn); LOG(Message) << "==== EIGENPACK CONVERSION" << std::endl; - LOG(Message) << "In path : " << inFilename << std::endl; - LOG(Message) << "In type : " << typeName() << std::endl; - LOG(Message) << "Out path : " << outFilename << std::endl; - LOG(Message) << "Out type : " << typeName() << std::endl; - LOG(Message) << "Multifile: " << (multiFile ? "yes" : "no") << std::endl; + LOG(Message) << "Lattice : " << gIn->GlobalDimensions() << std::endl; + LOG(Message) << "Checkerboarded: " << (rb ? "yes" : "no") << std::endl; + LOG(Message) << "In path : " << inFilename << std::endl; + LOG(Message) << "In type : " << typeName() << std::endl; + LOG(Message) << "Out path : " << outFilename << std::endl; + LOG(Message) << "Out type : " << typeName() << std::endl; + LOG(Message) << "#vectors : " << size << std::endl; + LOG(Message) << "Multifile : " << (multiFile ? "yes" : "no") << std::endl; if (multiFile) { for(unsigned int k = 0; k < size; ++k) @@ -52,7 +85,7 @@ void convert(const std::string outFilename, const std::string inFilename, LOG(Message) << "==== Converting vector " << k << std::endl; LOG(Message) << "In : " << inV << std::endl; LOG(Message) << "Out: " << outV << std::endl; - makeFileDir(outV, gOut.get()); + makeFileDir(outV, gOut); binWriter.open(outV); binReader.open(inV); EPIn::readHeader(record, binReader); @@ -73,7 +106,7 @@ void convert(const std::string outFilename, const std::string inFilename, ScidacReader binReader; PackRecord record; - makeFileDir(outFilename, gOut.get()); + makeFileDir(outFilename, gOut); binWriter.open(outFilename); binReader.open(inFilename); EPIn::readHeader(record, binReader); @@ -108,19 +141,21 @@ int main(int argc, char *argv[]) { // parse command line std::string outFilename, inFilename; - unsigned int size; - bool multiFile; + unsigned int size, Ls; + bool rb, multiFile; - if (argc < 5) + if (argc < 7) { - std::cerr << "usage: " << argv[0] << " [Grid options]"; + std::cerr << "usage: " << argv[0] << " <#vector> [Grid options]"; std::cerr << std::endl; std::exit(EXIT_FAILURE); } outFilename = argv[1]; inFilename = argv[2]; - size = std::stoi(std::string(argv[3])); - multiFile = (std::string(argv[4]) != "0"); + Ls = std::stoi(std::string(argv[3])); + rb = (std::string(argv[4]) != "0"); + size = std::stoi(std::string(argv[5])); + multiFile = (std::string(argv[6]) != "0"); // initialization Grid_init(&argc, &argv); @@ -128,7 +163,7 @@ int main(int argc, char *argv[]) // execution try { - convert(outFilename, inFilename, size, multiFile); + convert(outFilename, inFilename, Ls, rb, size, multiFile); } catch (const std::exception& e) {