From 7dd2764bb26da9bf1c14929c058d71f5df0fe467 Mon Sep 17 00:00:00 2001 From: Lanny91 Date: Mon, 23 Jan 2017 15:17:54 +0000 Subject: [PATCH] Wall sink smearing --- extras/Hadrons/Modules.hpp | 1 + extras/Hadrons/Modules/MSink/Wall.hpp | 144 ++++++++++++++++++++++++++ extras/Hadrons/modules.inc | 1 + 3 files changed, 146 insertions(+) create mode 100644 extras/Hadrons/Modules/MSink/Wall.hpp diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index bb5fba39..e379bd77 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -34,6 +34,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/MSink/Wall.hpp b/extras/Hadrons/Modules/MSink/Wall.hpp new file mode 100644 index 00000000..324afa3a --- /dev/null +++ b/extras/Hadrons/Modules/MSink/Wall.hpp @@ -0,0 +1,144 @@ +/************************************************************************************* + +Grid physics library, www.github.com/paboyle/Grid + +Source file: extras/Hadrons/Modules/MSink/Wall.hpp + +Copyright (C) 2016 + +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_Wall_hpp_ +#define Hadrons_Wall_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/* + + Wall sink smearing + ----------------------------- + * prop_x_3 = sum_x_i (prop_x * exp(-i x.mom)) + + * options: + - q: input propagator + - mom: momentum insertion, space-separated float sequence (e.g ".1 .2 1. 0.") + + */ + +/****************************************************************************** + * Wall * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MSink) + +class WallPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(WallPar, + std::string, q, + std::string, mom); +}; + +template +class TWall: public Module +{ +public: + TYPE_ALIASES(FImpl,); +public: + // constructor + TWall(const std::string name); + // destructor + virtual ~TWall(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(Wall, TWall, MSink); + +/****************************************************************************** + * TWall implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TWall::TWall(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TWall::getInput(void) +{ + std::vector in = {par().q}; + + return in; +} + +template +std::vector TWall::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TWall::setup(void) +{ + +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TWall::execute(void) +{ + LOG(Message) << "Wall smearing " << par().q << std::endl; + + PropagatorField &q = *env().template getObject(par().q); + std::vector prop; + LatticeComplex ph(env().getGrid()), coor(env().getGrid()); + std::vector p; + Complex i(0.0,1.0); + + p = strToVec(par().mom); + ph = zero; + for(unsigned int mu = 0; mu < Nd; mu++) + { + LatticeCoordinate(coor, mu); + ph = ph + p[mu]*coor; + } + ph = exp(-i*ph); + sliceSum(ph*q, prop, Tp); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_Wall_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index ab46cbef..b2494236 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -12,6 +12,7 @@ modules_hpp =\ Modules/MGauge/Random.hpp \ Modules/MGauge/Unit.hpp \ Modules/MLoop/NoiseLoop.hpp \ + Modules/MSink/Wall.hpp \ Modules/MSolver/RBPrecCG.hpp \ Modules/MSource/Point.hpp \ Modules/MSource/SeqGamma.hpp \