From c9dc22efa17cb1f76db10a362005a4e66e0a2641 Mon Sep 17 00:00:00 2001 From: Lanny91 Date: Thu, 30 Mar 2017 10:33:18 +0100 Subject: [PATCH] HADRONS: Standalone disconnected loop contraction. --- extras/Hadrons/Modules.hpp | 1 + .../Hadrons/Modules/MContraction/DiscLoop.hpp | 144 ++++++++++++++++++ extras/Hadrons/modules.inc | 1 + 3 files changed, 146 insertions(+) create mode 100644 extras/Hadrons/Modules/MContraction/DiscLoop.hpp diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index b98d5625..1ab53a56 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -29,6 +29,7 @@ See the full license in the file "LICENSE" in the top level distribution directo #include #include #include +#include #include #include #include diff --git a/extras/Hadrons/Modules/MContraction/DiscLoop.hpp b/extras/Hadrons/Modules/MContraction/DiscLoop.hpp new file mode 100644 index 00000000..4ad12e90 --- /dev/null +++ b/extras/Hadrons/Modules/MContraction/DiscLoop.hpp @@ -0,0 +1,144 @@ +/************************************************************************************* + +Grid physics library, www.github.com/paboyle/Grid + +Source file: extras/Hadrons/Modules/MContraction/DiscLoop.hpp + +Copyright (C) 2017 + +Author: Andrew Lawson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +See the full license in the file "LICENSE" in the top level distribution directory +*************************************************************************************/ +/* END LEGAL */ + +#ifndef Hadrons_DiscLoop_hpp_ +#define Hadrons_DiscLoop_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * DiscLoop * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MContraction) + +class DiscLoopPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(DiscLoopPar, + std::string, q_loop, + Gamma::Algebra, gamma, + std::string, output); +}; + +template +class TDiscLoop: public Module +{ + TYPE_ALIASES(FImpl,); + class Result: Serializable + { + public: + GRID_SERIALIZABLE_CLASS_MEMBERS(Result, + Gamma::Algebra, gamma, + std::vector, corr); + }; +public: + // constructor + TDiscLoop(const std::string name); + // destructor + virtual ~TDiscLoop(void) = default; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // setup + virtual void setup(void); + // execution + virtual void execute(void); +}; + +MODULE_REGISTER_NS(DiscLoop, TDiscLoop, MContraction); + +/****************************************************************************** + * TDiscLoop implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TDiscLoop::TDiscLoop(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TDiscLoop::getInput(void) +{ + std::vector in = {par().q_loop}; + + return in; +} + +template +std::vector TDiscLoop::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TDiscLoop::setup(void) +{ + +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TDiscLoop::execute(void) +{ + LOG(Message) << "Computing disconnected loop contraction '" << getName() + << "' using '" << par().q_loop << "' with " << par().gamma + << " insertion." << std::endl; + + CorrWriter writer(par().output); + PropagatorField &q_loop = *env().template getObject(par().q_loop); + LatticeComplex c(env().getGrid()); + Gamma gamma(par().gamma); + std::vector buf; + Result result; + + c = trace(gamma*q_loop); + sliceSum(c, buf, Tp); + + result.gamma = par().gamma; + result.corr.resize(buf.size()); + for (unsigned int t = 0; t < buf.size(); ++t) + { + result.corr[t] = TensorRemove(buf[t]); + } + + write(writer, "disc", result); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_DiscLoop_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index 0a142626..911e20cd 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -9,6 +9,7 @@ modules_hpp =\ Modules/MAction/DWF.hpp \ Modules/MAction/Wilson.hpp \ Modules/MContraction/Baryon.hpp \ + Modules/MContraction/DiscLoop.hpp \ Modules/MContraction/Gamma3pt.hpp \ Modules/MContraction/Meson.hpp \ Modules/MContraction/WeakHamiltonian.hpp \