diff --git a/Hadrons/Modules.hpp b/Hadrons/Modules.hpp index 0dc5fda9..3fc1dd81 100644 --- a/Hadrons/Modules.hpp +++ b/Hadrons/Modules.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include diff --git a/Hadrons/Modules/MContraction/WeakNonEye3pt.cc b/Hadrons/Modules/MContraction/WeakNonEye3pt.cc new file mode 100644 index 00000000..84560710 --- /dev/null +++ b/Hadrons/Modules/MContraction/WeakNonEye3pt.cc @@ -0,0 +1,7 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MContraction; + +template class Grid::Hadrons::MContraction::TWeakNonEye3pt; diff --git a/Hadrons/Modules/MContraction/WeakNonEye3pt.hpp b/Hadrons/Modules/MContraction/WeakNonEye3pt.hpp new file mode 100644 index 00000000..dc74192b --- /dev/null +++ b/Hadrons/Modules/MContraction/WeakNonEye3pt.hpp @@ -0,0 +1,169 @@ +#ifndef Hadrons_MContraction_WeakNonEye3pt_hpp_ +#define Hadrons_MContraction_WeakNonEye3pt_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/* + * Weak Hamiltonian meson 3-pt diagrams, non-eye-topologies. + * + * + * Schematic: + * qbl qbr | qbl qbr + * /--<--¬ /--<--¬ | /--<--¬ /--<--¬ + * / \ / \ | / \ / \ + * / \ / \ | / \ / \ + * / \ / \ | / \ / \ + * gIn * * G * gOut | gIn * G * * G * gOut + * \ * G | | \ / \ / + * \ / \ / | \ / \ / + * \ / \ / | \ / \ / + * \ / \ / | \-->--/ \-->--/ + * \-->--/ \-->--/ | ql qr + * ql qr | + * One trace | Two traces + * + * One trace : tr(ql*adj(gIn)*g5*adj(qbl)*g5*G*qbr*gOut*g5*adj(qr)*g5*G) + * Two traces: tr(ql*adj(gIn)*g5*adj(qbl)*g5*G)*tr(qbr*gOut*g5*adj(qr)*g5*G) + * + */ + +BEGIN_MODULE_NAMESPACE(MContraction) + +class WeakNonEye3ptPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(WeakNonEye3ptPar, + std::string, qLeft, + std::string, qBarLeft, + std::string, qRight, + std::string, qBarRight, + Gamma::Algebra, gammaIn, + Gamma::Algebra, gammaOut, + std::string, output); +}; + +template +class TWeakNonEye3pt: public Module +{ +public: + FERM_TYPE_ALIASES(FImpl,); + class Metadata: Serializable + { + public: + GRID_SERIALIZABLE_CLASS_MEMBERS(Metadata, + Gamma::Algebra, in, + Gamma::Algebra, out, + Gamma::Algebra, op, + unsigned int, trace); + }; + typedef Correlator Result; +public: + // constructor + TWeakNonEye3pt(const std::string name); + // destructor + virtual ~TWeakNonEye3pt(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(WeakNonEye3pt, TWeakNonEye3pt, MContraction); + +/****************************************************************************** + * TWeakNonEye3pt implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TWeakNonEye3pt::TWeakNonEye3pt(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TWeakNonEye3pt::getInput(void) +{ + std::vector in = {par().qLeft, par().qBarLeft, + par().qRight, par().qBarRight}; + + return in; +} + +template +std::vector TWeakNonEye3pt::getOutput(void) +{ + std::vector out = {}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TWeakNonEye3pt::setup(void) +{ + envTmpLat(ComplexField, "corr"); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TWeakNonEye3pt::execute(void) +{ + LOG(Message) << "Computing mesonic weak 3pt contractions, non-eye topologies" << std::endl; + LOG(Message) << "gIn : " << par().gammaIn << std::endl; + LOG(Message) << "gOut: " << par().gammaIn << std::endl; + LOG(Message) << "ql : " << par().qLeft << std::endl; + LOG(Message) << "qbl : " << par().qBarLeft << std::endl; + LOG(Message) << "qr : " << par().qRight << std::endl; + LOG(Message) << "qbr : " << par().qBarRight << std::endl; + + std::vector result; + Result r; + auto &ql = envGet(PropagatorField, par().qLeft); + auto &qbl = envGet(PropagatorField, par().qBarLeft); + auto &qr = envGet(PropagatorField, par().qRight); + auto &qbr = envGet(PropagatorField, par().qBarRight); + Gamma gIn(par().gammaIn), gOut(par().gammaOut); + Gamma g5(Gamma::Algebra::Gamma5); + + envGetTmp(ComplexField, corr); + r.info.in = par().gammaIn; + r.info.out = par().gammaOut; + for (auto &G: Gamma::gall) + { + SlicedComplex buf; + + r.info.op = G.g; + // one trace + corr = trace(ql*adj(gIn)*g5*adj(qbl)*g5*G*qbr*gOut*g5*adj(qr)*g5*G); + sliceSum(corr, buf, Tp); + for (unsigned int t = 0; t < buf.size(); ++t) + { + r.corr.push_back(TensorRemove(buf[t])); + } + r.info.trace = 1; + result.push_back(r); + // two traces + corr = trace(ql*adj(gIn)*g5*adj(qbl)*g5*G)*trace(qbr*gOut*g5*adj(qr)*g5*G); + sliceSum(corr, buf, Tp); + for (unsigned int t = 0; t < buf.size(); ++t) + { + r.corr.push_back(TensorRemove(buf[t])); + } + r.info.trace = 2; + result.push_back(r); + } + saveResult(par().output, "weakNonEye3pt", result); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MContraction_WeakNonEye3pt_hpp_ diff --git a/Hadrons/modules.inc b/Hadrons/modules.inc index c620302f..c307a5de 100644 --- a/Hadrons/modules.inc +++ b/Hadrons/modules.inc @@ -1,6 +1,7 @@ modules_cc =\ Modules/MContraction/Baryon.cc \ Modules/MContraction/Meson.cc \ + Modules/MContraction/WeakNonEye3pt.cc \ Modules/MContraction/A2AAslashField.cc \ Modules/MContraction/A2AMesonField.cc \ Modules/MContraction/DiscLoop.cc \