From abb7d4d2f5026c348342e2d19c2f479a8a5b0755 Mon Sep 17 00:00:00 2001 From: Antonin Portelli Date: Tue, 27 Feb 2018 19:32:19 +0000 Subject: [PATCH] Hadrons: z-Mobius action --- extras/Hadrons/Global.hpp | 3 + extras/Hadrons/Modules.hpp | 31 +---- extras/Hadrons/Modules/MAction/ZMobiusDWF.hpp | 116 ++++++++++++++++++ .../Modules/MSolver/LocalCoherenceLanczos.hpp | 3 + extras/Hadrons/Modules/MSolver/RBPrecCG.hpp | 3 +- extras/Hadrons/modules.inc | 1 + 6 files changed, 126 insertions(+), 31 deletions(-) create mode 100644 extras/Hadrons/Modules/MAction/ZMobiusDWF.hpp diff --git a/extras/Hadrons/Global.hpp b/extras/Hadrons/Global.hpp index 675a97c2..ed8f4f32 100644 --- a/extras/Hadrons/Global.hpp +++ b/extras/Hadrons/Global.hpp @@ -58,6 +58,9 @@ using Grid::operator<<; #ifndef FIMPL #define FIMPL WilsonImplR #endif +#ifndef ZFIMPL +#define ZFIMPL ZWilsonImplR +#endif #ifndef SIMPL #define SIMPL ScalarImplCR #endif diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index 1334a9b4..1b78a85d 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -1,33 +1,3 @@ -/************************************************************************************* - -Grid physics library, www.github.com/paboyle/Grid - -Source file: extras/Hadrons/Modules.hpp - -Copyright (C) 2015-2018 - -Author: Antonin Portelli -Author: Guido Cossu -Author: Lanny91 -Author: pretidav - -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 */ #include #include #include @@ -60,6 +30,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/MAction/ZMobiusDWF.hpp b/extras/Hadrons/Modules/MAction/ZMobiusDWF.hpp new file mode 100644 index 00000000..b0c614df --- /dev/null +++ b/extras/Hadrons/Modules/MAction/ZMobiusDWF.hpp @@ -0,0 +1,116 @@ +#ifndef Hadrons_MAction_ZMobiusDWF_hpp_ +#define Hadrons_MAction_ZMobiusDWF_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * ZMobiusDWF * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MAction) + +class ZMobiusDWFPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(ZMobiusDWFPar, + std::string , gauge, + unsigned int , Ls, + double , mass, + double , M5, + double , b, + double , c, + std::vector>, omega, + std::string , boundary); +}; + +template +class TZMobiusDWF: public Module +{ +public: + FGS_TYPE_ALIASES(FImpl,); +public: + // constructor + TZMobiusDWF(const std::string name); + // destructor + virtual ~TZMobiusDWF(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(ZMobiusDWF, TZMobiusDWF, MAction); + +/****************************************************************************** + * TZMobiusDWF implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TZMobiusDWF::TZMobiusDWF(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TZMobiusDWF::getInput(void) +{ + std::vector in = {par().gauge}; + + return in; +} + +template +std::vector TZMobiusDWF::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TZMobiusDWF::setup(void) +{ + LOG(Message) << "Setting up z-Mobius domain wall fermion matrix with m= " + << par().mass << ", M5= " << par().M5 << ", Ls= " + << ", b= " << par().b << ", c= " << par().c + << par().Ls << " using gauge field '" << par().gauge << "'" + << std::endl; + LOG(Message) << "Omegas: " << std::endl; + for (unsigned int i = 0; i < par().omega.size(); ++i) + { + LOG(Message) << " omega[" << i << "]= " << par().omega[i] << std::endl; + } + LOG(Message) << "Fermion boundary conditions: " << par().boundary + << std::endl; + + env().createGrid(par().Ls); + auto &U = envGet(LatticeGaugeField, par().gauge); + auto &g4 = *env().getGrid(); + auto &grb4 = *env().getRbGrid(); + auto &g5 = *env().getGrid(par().Ls); + auto &grb5 = *env().getRbGrid(par().Ls); + auto omega = par().omega; + std::vector boundary = strToVec(par().boundary); + typename ZMobiusFermion::ImplParams implParams(boundary); + envCreateDerived(FMat, ZMobiusFermion, getName(), par().Ls, U, g5, + grb5, g4, grb4, par().mass, par().M5, omega, + par().b, par().c, implParams); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TZMobiusDWF::execute(void) +{} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MAction_ZMobiusDWF_hpp_ diff --git a/extras/Hadrons/Modules/MSolver/LocalCoherenceLanczos.hpp b/extras/Hadrons/Modules/MSolver/LocalCoherenceLanczos.hpp index 387b9455..feb1d0be 100644 --- a/extras/Hadrons/Modules/MSolver/LocalCoherenceLanczos.hpp +++ b/extras/Hadrons/Modules/MSolver/LocalCoherenceLanczos.hpp @@ -91,6 +91,9 @@ private: MODULE_REGISTER_NS(LocalCoherenceLanczos, ARG(TLocalCoherenceLanczos), MSolver); +MODULE_REGISTER_NS(ZLocalCoherenceLanczos, + ARG(TLocalCoherenceLanczos), + MSolver); /****************************************************************************** * TLocalCoherenceLanczos implementation * diff --git a/extras/Hadrons/Modules/MSolver/RBPrecCG.hpp b/extras/Hadrons/Modules/MSolver/RBPrecCG.hpp index 77ce6cd4..2b914625 100644 --- a/extras/Hadrons/Modules/MSolver/RBPrecCG.hpp +++ b/extras/Hadrons/Modules/MSolver/RBPrecCG.hpp @@ -70,7 +70,8 @@ protected: virtual void execute(void); }; -MODULE_REGISTER_NS(RBPrecCG, TRBPrecCG, MSolver); +MODULE_REGISTER_NS(RBPrecCG, TRBPrecCG, MSolver); +MODULE_REGISTER_NS(ZRBPrecCG, TRBPrecCG, MSolver); /****************************************************************************** * TRBPrecCG template implementation * diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index 4a9b2630..79db9396 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -43,6 +43,7 @@ modules_hpp =\ Modules/MAction/DWF.hpp \ Modules/MAction/Wilson.hpp \ Modules/MAction/WilsonClover.hpp \ + Modules/MAction/ZMobiusDWF.hpp \ Modules/MScalarSUN/Div.hpp \ Modules/MScalarSUN/TrMag.hpp \ Modules/MScalarSUN/TwoPoint.hpp \