diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index aa8a3aa1..5cce335a 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include diff --git a/extras/Hadrons/Modules/MUtilities/RandomVectors.cc b/extras/Hadrons/Modules/MUtilities/RandomVectors.cc new file mode 100644 index 00000000..cc122c90 --- /dev/null +++ b/extras/Hadrons/Modules/MUtilities/RandomVectors.cc @@ -0,0 +1,7 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MUtilities; + +template class Grid::Hadrons::MUtilities::TRandomVectors; diff --git a/extras/Hadrons/Modules/MUtilities/RandomVectors.hpp b/extras/Hadrons/Modules/MUtilities/RandomVectors.hpp new file mode 100644 index 00000000..2a5fc9e7 --- /dev/null +++ b/extras/Hadrons/Modules/MUtilities/RandomVectors.hpp @@ -0,0 +1,94 @@ +#ifndef Hadrons_MUtilities_RandomVectors_hpp_ +#define Hadrons_MUtilities_RandomVectors_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Module generating random lattices for testing purposes * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MUtilities) + +class RandomVectorsPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(RandomVectorsPar, + unsigned int, size, + unsigned int, Ls); +}; + +template +class TRandomVectors: public Module +{ +public: + // constructor + TRandomVectors(const std::string name); + // destructor + virtual ~TRandomVectors(void) {}; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // setup + virtual void setup(void); + // execution + virtual void execute(void); +}; + +MODULE_REGISTER_TMP(RandomFermions, TRandomVectors, MUtilities); + +/****************************************************************************** + * TRandomVectors implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TRandomVectors::TRandomVectors(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TRandomVectors::getInput(void) +{ + std::vector in; + + return in; +} + +template +std::vector TRandomVectors::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TRandomVectors::setup(void) +{ + envCreate(std::vector, getName(), par().Ls, par().size, + env().getGrid(par().Ls)); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TRandomVectors::execute(void) +{ + LOG(Message) << "Generating " << par().size << " random vectors" << std::endl; + + auto &vec = envGet(std::vector, getName()); + + for (unsigned int i = 0; i < vec.size(); ++i) + { + random(*env().get4dRng(), vec[i]); + } +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MUtilities_RandomVectors_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index 7933cb97..6bc07618 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -27,6 +27,7 @@ modules_cc =\ Modules/MGauge/Random.cc \ Modules/MGauge/FundtoHirep.cc \ Modules/MNoise/TimeDilutedSpinColorDiagonal.cc \ + Modules/MUtilities/RandomVectors.cc \ Modules/MUtilities/TestSeqGamma.cc \ Modules/MUtilities/TestSeqConserved.cc \ Modules/MLoop/NoiseLoop.cc \ @@ -87,6 +88,7 @@ modules_hpp =\ Modules/MGauge/FundtoHirep.hpp \ Modules/MGauge/StochEm.hpp \ Modules/MNoise/TimeDilutedSpinColorDiagonal.hpp \ + Modules/MUtilities/RandomVectors.hpp \ Modules/MUtilities/TestSeqGamma.hpp \ Modules/MUtilities/TestSeqConserved.hpp \ Modules/MLoop/NoiseLoop.hpp \