diff --git a/programs/Hadrons/Modules/ADWF.cc b/programs/Hadrons/Modules/ADWF.cc new file mode 100644 index 00000000..f579c0b7 --- /dev/null +++ b/programs/Hadrons/Modules/ADWF.cc @@ -0,0 +1,83 @@ +/******************************************************************************* +Grid physics library, www.github.com/paboyle/Grid + +Source file: programs/Hadrons/ADWF.cc + +Copyright (C) 2016 + +Author: Antonin Portelli + +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. +*******************************************************************************/ + +#include + +using namespace Grid; +using namespace Hadrons; + +/****************************************************************************** +* ADWF implementation * +******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +ADWF::ADWF(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +std::vector ADWF::getInput(void) +{ + std::vector in = {par().gauge}; + + return in; +} + +std::vector ADWF::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +void ADWF::setup(void) +{ + unsigned int size; + + size = 3*env().lattice4dSize(); + env().registerObject(getName(), size, par().Ls); +} + +// execution /////////////////////////////////////////////////////////////////// +void ADWF::execute(void) +{ + env().createGrid(par().Ls); + + auto &U = *env().get(par().gauge); + auto &g4 = *env().getGrid(); + auto &grb4 = *env().getRbGrid(); + auto &g5 = *env().getGrid(par().Ls); + auto &grb5 = *env().getRbGrid(par().Ls); + auto fMatPt = new DomainWallFermionR(U, g5, grb5, g4, grb4, + par().mass, par().M5); + + LOG(Message) << "Setting up domain wall fermion matrix with m= " + << par().mass << ", M5= " << par().M5 << " and Ls= " + << par().Ls << " using gauge field '" << par().gauge << "'" + << std::endl; + env().addFermionMatrix(getName(), fMatPt); +} diff --git a/programs/Hadrons/Modules/ADWF.hpp b/programs/Hadrons/Modules/ADWF.hpp new file mode 100644 index 00000000..0f4f5402 --- /dev/null +++ b/programs/Hadrons/Modules/ADWF.hpp @@ -0,0 +1,70 @@ +/******************************************************************************* +Grid physics library, www.github.com/paboyle/Grid + +Source file: programs/Hadrons/ADWF.hpp + +Copyright (C) 2016 + +Author: Antonin Portelli + +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. +*******************************************************************************/ + +#ifndef Hadrons_ADWF_hpp_ +#define Hadrons_ADWF_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Domain wall quark action * + ******************************************************************************/ +class ADWFPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(ADWFPar, + std::string, gauge, + unsigned int, Ls, + double , mass, + double , M5); +}; + +class ADWF: public Module +{ +public: + // constructor + ADWF(const std::string name); + // destructor + virtual ~ADWF(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(ADWF); + +END_HADRONS_NAMESPACE + +#endif // Hadrons_ADWF_hpp_ diff --git a/programs/Hadrons/modules.inc b/programs/Hadrons/modules.inc index c0da727a..6ca8329e 100644 --- a/programs/Hadrons/modules.inc +++ b/programs/Hadrons/modules.inc @@ -1,4 +1,5 @@ modules =\ + Modules/ADWF.cc \ Modules/AWilson.cc \ Modules/CMeson.cc \ Modules/GLoad.cc \