diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index e90d0313..b08a7468 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/extras/Hadrons/Modules/MContraction/Baryon.hpp b/extras/Hadrons/Modules/MContraction/Baryon.hpp new file mode 100644 index 00000000..e8191793 --- /dev/null +++ b/extras/Hadrons/Modules/MContraction/Baryon.hpp @@ -0,0 +1,104 @@ +#ifndef Hadrons_Baryon_hpp_ +#define Hadrons_Baryon_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Baryon * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MContraction) + +class BaryonPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(BaryonPar, + std::string, q1, + std::string, q2, + std::string, q3, + std::string, output); +}; + +template +class TBaryon: public Module +{ +public: + TYPE_ALIASES(FImpl1, 1); + TYPE_ALIASES(FImpl2, 2); + TYPE_ALIASES(FImpl3, 3); + class Result: Serializable + { + public: + GRID_SERIALIZABLE_CLASS_MEMBERS(Result, + std::vector>>, corr); + }; +public: + // constructor + TBaryon(const std::string name); + // destructor + virtual ~TBaryon(void) = default; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // execution + virtual void execute(void); +}; + +typedef TBaryon Baryon; + +/****************************************************************************** + * TBaryon implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TBaryon::TBaryon(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TBaryon::getInput(void) +{ + std::vector input = {par().q1, par().q2, par().q3}; + + return input; +} + +template +std::vector TBaryon::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TBaryon::execute(void) +{ + LOG(Message) << "Computing baryon contractions '" << getName() << "' using" + << " quarks '" << par().q1 << "', '" << par().q2 << "', and '" + << par().q3 << "'" << std::endl; + + XmlWriter writer(par().output); + PropagatorField1 &q1 = *env().template getObject(par().q1); + PropagatorField2 &q2 = *env().template getObject(par().q2); + PropagatorField3 &q3 = *env().template getObject(par().q2); + LatticeComplex c(env().getGrid()); + Result result; + + // FIXME: do contractions + + write(writer, "meson", result); +} + +END_MODULE_NAMESPACE + +MODULE_REGISTER_NS(Baryon, MContraction); + +END_HADRONS_NAMESPACE + +#endif // Hadrons_Baryon_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index aacbbf14..aad6c73b 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -6,6 +6,7 @@ modules_cc =\ modules_hpp =\ Modules/MAction/DWF.hpp \ Modules/MAction/Wilson.hpp \ + Modules/MContraction/Baryon.hpp \ Modules/MContraction/Meson.hpp \ Modules/MGauge/Load.hpp \ Modules/MGauge/Random.hpp \ diff --git a/tests/hadrons/Test_hadrons_mesons.cc b/tests/hadrons/Test_hadrons_mesons.cc index 75d752b2..620e6ba8 100644 --- a/tests/hadrons/Test_hadrons_mesons.cc +++ b/tests/hadrons/Test_hadrons_mesons.cc @@ -87,8 +87,8 @@ int main(int argc, char *argv[]) quarkPar.source = (flavour[i][0] == 'c') ? "z2" : "pt"; application.createModule("Q_" + flavour[i], quarkPar); } - for (unsigned int i = 0; i < flavour.size(); ++i) - for (unsigned int j = i + 1; j < flavour.size(); ++j) + for (unsigned int i = 0; i < flavour.size(); ++i) + for (unsigned int j = i; j < flavour.size(); ++j) { MContraction::Meson::Par mesPar; @@ -99,6 +99,19 @@ int main(int argc, char *argv[]) + flavour[i] + flavour[j], mesPar); } + for (unsigned int i = 0; i < flavour.size(); ++i) + for (unsigned int j = i; j < flavour.size(); ++j) + for (unsigned int k = j; k < flavour.size(); ++k) + { + MContraction::Baryon::Par barPar; + + barPar.output = "baryons/" + flavour[i] + flavour[j] + flavour[k]; + barPar.q1 = "Q_" + flavour[i]; + barPar.q2 = "Q_" + flavour[j]; + barPar.q3 = "Q_" + flavour[k]; + application.createModule( + "baryon_" + flavour[i] + flavour[j] + flavour[k], barPar); + } // execution application.run();