mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Hadrons: A2A vectors I/O
This commit is contained in:
		@@ -36,7 +36,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
 | 
				
			|||||||
BEGIN_HADRONS_NAMESPACE
 | 
					BEGIN_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/******************************************************************************
 | 
					/******************************************************************************
 | 
				
			||||||
 *               Classes to generate V & W all-to-all vectors                 *
 | 
					 *                 Class to generate V & W all-to-all vectors                 *
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
template <typename FImpl>
 | 
					template <typename FImpl>
 | 
				
			||||||
class A2AVectorsSchurDiagTwo
 | 
					class A2AVectorsSchurDiagTwo
 | 
				
			||||||
@@ -70,6 +70,42 @@ private:
 | 
				
			|||||||
    SchurDiagTwoOperator<FMat, FermionField> op_;
 | 
					    SchurDiagTwoOperator<FMat, FermionField> op_;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                  Methods for V & W all-to-all vectors I/O                  *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					class A2AVectorsIo
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    struct Record: Serializable
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        GRID_SERIALIZABLE_CLASS_MEMBERS(Record,
 | 
				
			||||||
 | 
					                                        unsigned int, index);
 | 
				
			||||||
 | 
					        Record(void): index(0) {}
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    template <typename Field>
 | 
				
			||||||
 | 
					    static void write(const std::string fileStem, std::vector<Field> &vec, 
 | 
				
			||||||
 | 
					                      const bool multiFile, const int trajectory = -1);
 | 
				
			||||||
 | 
					    template <typename Field>
 | 
				
			||||||
 | 
					    static void read(std::vector<Field> &vec, const std::string fileStem,
 | 
				
			||||||
 | 
					                     const bool multiFile, const int trajectory = -1);
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    static inline std::string vecFilename(const std::string stem, const int traj, 
 | 
				
			||||||
 | 
					                                          const bool multiFile)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::string t = (traj < 0) ? "" : ("." + std::to_string(traj));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (multiFile)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return stem + t;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return stem + t + ".bin";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/******************************************************************************
 | 
					/******************************************************************************
 | 
				
			||||||
 *               A2AVectorsSchurDiagTwo template implementation               *
 | 
					 *               A2AVectorsSchurDiagTwo template implementation               *
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
@@ -217,6 +253,90 @@ void A2AVectorsSchurDiagTwo<FImpl>::makeHighModeW5D(FermionField &wout_4d,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *               all-to-all vectors I/O template implementation               *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					template <typename Field>
 | 
				
			||||||
 | 
					void A2AVectorsIo::write(const std::string fileStem, std::vector<Field> &vec, 
 | 
				
			||||||
 | 
					                         const bool multiFile, const int trajectory)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Record       record;
 | 
				
			||||||
 | 
					    GridBase     *grid = vec[0]._grid;
 | 
				
			||||||
 | 
					    ScidacWriter binWriter(grid->IsBoss());
 | 
				
			||||||
 | 
					    std::string  filename = vecFilename(fileStem, multiFile, trajectory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (multiFile)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::string fullFilename;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (unsigned int i = 0; i < vec.size(); ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fullFilename = filename + "/elem" + std::to_string(i) + ".bin";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG(Message) << "Writing vector " << i << std::endl;
 | 
				
			||||||
 | 
					            makeFileDir(fullFilename, grid);
 | 
				
			||||||
 | 
					            binWriter.open(fullFilename);
 | 
				
			||||||
 | 
					            record.index = i;
 | 
				
			||||||
 | 
					            binWriter.writeScidacFieldRecord(vec[i], record);
 | 
				
			||||||
 | 
					            binWriter.close();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        makeFileDir(filename, grid);
 | 
				
			||||||
 | 
					        binWriter.open(filename);
 | 
				
			||||||
 | 
					        for (unsigned int i = 0; i < vec.size(); ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            LOG(Message) << "Writing vector " << i << std::endl;
 | 
				
			||||||
 | 
					            record.index = i;
 | 
				
			||||||
 | 
					            binWriter.writeScidacFieldRecord(vec[i], record);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        binWriter.close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template <typename Field>
 | 
				
			||||||
 | 
					void A2AVectorsIo::read(std::vector<Field> &vec, const std::string fileStem, 
 | 
				
			||||||
 | 
					                        const bool multiFile, const int trajectory)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Record       record;
 | 
				
			||||||
 | 
					    ScidacReader binReader;
 | 
				
			||||||
 | 
					    std::string  filename = vecFilename(fileStem, multiFile, trajectory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (multiFile)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::string fullFilename;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (unsigned int i = 0; i < vec.size(); ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fullFilename = filename + "/elem" + std::to_string(i) + ".bin";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG(Message) << "Reading vector " << i << std::endl;
 | 
				
			||||||
 | 
					            binReader.open(fullFilename);
 | 
				
			||||||
 | 
					            binReader.readScidacFieldRecord(vec[i], record);
 | 
				
			||||||
 | 
					            binReader.close();
 | 
				
			||||||
 | 
					            if (record.index != i)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                HADRONS_ERROR(Io, "vector index mismatch");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        binReader.open(filename);
 | 
				
			||||||
 | 
					        for (unsigned int i = 0; i < vec.size(); ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            LOG(Message) << "Reading vector " << i << std::endl;
 | 
				
			||||||
 | 
					            binReader.readScidacFieldRecord(vec[i], record);
 | 
				
			||||||
 | 
					            if (record.index != i)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                HADRONS_ERROR(Io, "vector index mismatch");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        binReader.close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
END_HADRONS_NAMESPACE
 | 
					END_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // A2A_Vectors_hpp_
 | 
					#endif // A2A_Vectors_hpp_
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,6 +65,7 @@
 | 
				
			|||||||
#include <Hadrons/Modules/MScalarSUN/TrKinetic.hpp>
 | 
					#include <Hadrons/Modules/MScalarSUN/TrKinetic.hpp>
 | 
				
			||||||
#include <Hadrons/Modules/MIO/LoadEigenPack.hpp>
 | 
					#include <Hadrons/Modules/MIO/LoadEigenPack.hpp>
 | 
				
			||||||
#include <Hadrons/Modules/MIO/LoadNersc.hpp>
 | 
					#include <Hadrons/Modules/MIO/LoadNersc.hpp>
 | 
				
			||||||
 | 
					#include <Hadrons/Modules/MIO/LoadA2AVectors.hpp>
 | 
				
			||||||
#include <Hadrons/Modules/MIO/LoadCosmHol.hpp>
 | 
					#include <Hadrons/Modules/MIO/LoadCosmHol.hpp>
 | 
				
			||||||
#include <Hadrons/Modules/MIO/LoadCoarseEigenPack.hpp>
 | 
					#include <Hadrons/Modules/MIO/LoadCoarseEigenPack.hpp>
 | 
				
			||||||
#include <Hadrons/Modules/MIO/LoadBinary.hpp>
 | 
					#include <Hadrons/Modules/MIO/LoadBinary.hpp>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								Hadrons/Modules/MIO/LoadA2AVectors.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Hadrons/Modules/MIO/LoadA2AVectors.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#include <Hadrons/Modules/MIO/LoadA2AVectors.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace Grid;
 | 
				
			||||||
 | 
					using namespace Hadrons;
 | 
				
			||||||
 | 
					using namespace MIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template class Grid::Hadrons::MIO::TLoadA2AVectors<FIMPL>;
 | 
				
			||||||
							
								
								
									
										93
									
								
								Hadrons/Modules/MIO/LoadA2AVectors.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Hadrons/Modules/MIO/LoadA2AVectors.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					#ifndef Hadrons_MIO_LoadA2AVectors_hpp_
 | 
				
			||||||
 | 
					#define Hadrons_MIO_LoadA2AVectors_hpp_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Hadrons/Global.hpp>
 | 
				
			||||||
 | 
					#include <Hadrons/Module.hpp>
 | 
				
			||||||
 | 
					#include <Hadrons/ModuleFactory.hpp>
 | 
				
			||||||
 | 
					#include <Hadrons/A2AVectors.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                    Module to load all-to-all vectors                       *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					BEGIN_MODULE_NAMESPACE(MIO)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LoadA2AVectorsPar: Serializable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(LoadA2AVectorsPar,
 | 
				
			||||||
 | 
					                                    std::string,  filestem,
 | 
				
			||||||
 | 
					                                    bool,         multiFile,
 | 
				
			||||||
 | 
					                                    unsigned int, size);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					class TLoadA2AVectors: public Module<LoadA2AVectorsPar>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    FERM_TYPE_ALIASES(FImpl,);
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    // constructor
 | 
				
			||||||
 | 
					    TLoadA2AVectors(const std::string name);
 | 
				
			||||||
 | 
					    // destructor
 | 
				
			||||||
 | 
					    virtual ~TLoadA2AVectors(void) {};
 | 
				
			||||||
 | 
					    // dependency relation
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getInput(void);
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getOutput(void);
 | 
				
			||||||
 | 
					    // setup
 | 
				
			||||||
 | 
					    virtual void setup(void);
 | 
				
			||||||
 | 
					    // execution
 | 
				
			||||||
 | 
					    virtual void execute(void);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODULE_REGISTER_TMP(LoadA2AVectors, TLoadA2AVectors<FIMPL>, MIO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                      TLoadA2AVectors implementation                        *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					// constructor /////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					TLoadA2AVectors<FImpl>::TLoadA2AVectors(const std::string name)
 | 
				
			||||||
 | 
					: Module<LoadA2AVectorsPar>(name)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dependencies/products ///////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					std::vector<std::string> TLoadA2AVectors<FImpl>::getInput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> in;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return in;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					std::vector<std::string> TLoadA2AVectors<FImpl>::getOutput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> out = {getName()};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// setup ///////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					void TLoadA2AVectors<FImpl>::setup(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    envCreate(std::vector<FermionField>, getName(), 1, par().size, 
 | 
				
			||||||
 | 
					              envGetGrid(FermionField));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// execution ///////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					template <typename FImpl>
 | 
				
			||||||
 | 
					void TLoadA2AVectors<FImpl>::execute(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    auto &vec = envGet(std::vector<FermionField>, getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    A2AVectorsIo::read(vec, par().filestem, par().multiFile, vm().getTrajectory());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_MODULE_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // Hadrons_MIO_LoadA2AVectors_hpp_
 | 
				
			||||||
@@ -51,7 +51,9 @@ public:
 | 
				
			|||||||
                                  std::string, noise,
 | 
					                                  std::string, noise,
 | 
				
			||||||
                                  std::string, action,
 | 
					                                  std::string, action,
 | 
				
			||||||
                                  std::string, eigenPack,
 | 
					                                  std::string, eigenPack,
 | 
				
			||||||
                                  std::string, solver);
 | 
					                                  std::string, solver,
 | 
				
			||||||
 | 
					                                  std::string, output,
 | 
				
			||||||
 | 
					                                  bool,        multiFile);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename FImpl, typename Pack>
 | 
					template <typename FImpl, typename Pack>
 | 
				
			||||||
@@ -236,6 +238,13 @@ void TA2AVectors<FImpl, Pack>::execute(void)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        stopTimer("W high mode");
 | 
					        stopTimer("W high mode");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // I/O if necessary
 | 
				
			||||||
 | 
					    if (!par().output.empty())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        A2AVectorsIo::write(par().output + "_w", w, par().multiFile, vm().getTrajectory());
 | 
				
			||||||
 | 
					        A2AVectorsIo::write(par().output + "_v", v, par().multiFile, vm().getTrajectory());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
END_MODULE_NAMESPACE
 | 
					END_MODULE_NAMESPACE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,8 @@ modules_cc =\
 | 
				
			|||||||
  Modules/MIO/LoadBinary.cc \
 | 
					  Modules/MIO/LoadBinary.cc \
 | 
				
			||||||
  Modules/MIO/LoadNersc.cc \
 | 
					  Modules/MIO/LoadNersc.cc \
 | 
				
			||||||
  Modules/MIO/LoadCoarseEigenPack.cc \
 | 
					  Modules/MIO/LoadCoarseEigenPack.cc \
 | 
				
			||||||
  Modules/MIO/LoadCosmHol.cc
 | 
					  Modules/MIO/LoadCosmHol.cc \
 | 
				
			||||||
 | 
					  Modules/MIO/LoadA2AVectors.cc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
modules_hpp =\
 | 
					modules_hpp =\
 | 
				
			||||||
  Modules/MContraction/Baryon.hpp \
 | 
					  Modules/MContraction/Baryon.hpp \
 | 
				
			||||||
@@ -134,6 +135,7 @@ modules_hpp =\
 | 
				
			|||||||
  Modules/MScalarSUN/TrKinetic.hpp \
 | 
					  Modules/MScalarSUN/TrKinetic.hpp \
 | 
				
			||||||
  Modules/MIO/LoadEigenPack.hpp \
 | 
					  Modules/MIO/LoadEigenPack.hpp \
 | 
				
			||||||
  Modules/MIO/LoadNersc.hpp \
 | 
					  Modules/MIO/LoadNersc.hpp \
 | 
				
			||||||
 | 
					  Modules/MIO/LoadA2AVectors.hpp \
 | 
				
			||||||
  Modules/MIO/LoadCosmHol.hpp \
 | 
					  Modules/MIO/LoadCosmHol.hpp \
 | 
				
			||||||
  Modules/MIO/LoadCoarseEigenPack.hpp \
 | 
					  Modules/MIO/LoadCoarseEigenPack.hpp \
 | 
				
			||||||
  Modules/MIO/LoadBinary.hpp
 | 
					  Modules/MIO/LoadBinary.hpp
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user