#ifndef Benchmark_IO_hpp_ #define Benchmark_IO_hpp_ #include #ifdef HAVE_LIME #define MSG std::cout << GridLogMessage #define SEP \ "=============================================================================" namespace Grid { template using WriterFn = std::function ; template using ReaderFn = std::function; template void limeWrite(const std::string filestem, Field &vec) { emptyUserRecord record; ScidacWriter binWriter(vec.Grid()->IsBoss()); binWriter.open(filestem + ".bin"); binWriter.writeScidacFieldRecord(vec, record); binWriter.close(); } template void limeRead(Field &vec, const std::string filestem) { emptyUserRecord record; ScidacReader binReader; binReader.open(filestem + ".bin"); binReader.readScidacFieldRecord(vec, record); binReader.close(); } inline void makeGrid(std::shared_ptr &gPt, const std::shared_ptr &gBasePt, const unsigned int Ls = 1, const bool rb = false) { if (rb) { if (Ls > 1) { gPt.reset(SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls, gBasePt.get())); } else { gPt.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(gBasePt.get())); } } else { if (Ls > 1) { gPt.reset(SpaceTimeGrid::makeFiveDimGrid(Ls, gBasePt.get())); } else { gPt = gBasePt; } } } template void writeBenchmark(const Coordinate &latt, const std::string filename, const WriterFn &write, const unsigned int Ls = 1, const bool rb = false) { auto mpi = GridDefaultMpi(); auto simd = GridDefaultSimd(latt.size(), Field::vector_type::Nsimd()); std::shared_ptr gBasePt(SpaceTimeGrid::makeFourDimGrid(latt, simd, mpi)); std::shared_ptr gPt; makeGrid(gPt, gBasePt, Ls, rb); GridBase *g = gPt.get(); GridParallelRNG rng(g); Field vec(g); random(rng, vec); write(filename, vec); } template void readBenchmark(const Coordinate &latt, const std::string filename, const ReaderFn &read, const unsigned int Ls = 1, const bool rb = false) { auto mpi = GridDefaultMpi(); auto simd = GridDefaultSimd(latt.size(), Field::vector_type::Nsimd()); std::shared_ptr gBasePt(SpaceTimeGrid::makeFourDimGrid(latt, simd, mpi)); std::shared_ptr gPt; makeGrid(gPt, gBasePt, Ls, rb); GridBase *g = gPt.get(); Field vec(g); read(vec, filename); } } #endif //LIME #endif // Benchmark_IO_hpp_