diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index af4592ea..f882d86c 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include diff --git a/extras/Hadrons/Modules/MAction/ScaledDWF.cc b/extras/Hadrons/Modules/MAction/ScaledDWF.cc new file mode 100644 index 00000000..19e7cf4c --- /dev/null +++ b/extras/Hadrons/Modules/MAction/ScaledDWF.cc @@ -0,0 +1,7 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MAction; + +template class Grid::Hadrons::MAction::TScaledDWF; diff --git a/extras/Hadrons/Modules/MAction/ScaledDWF.hpp b/extras/Hadrons/Modules/MAction/ScaledDWF.hpp new file mode 100644 index 00000000..78127f6f --- /dev/null +++ b/extras/Hadrons/Modules/MAction/ScaledDWF.hpp @@ -0,0 +1,108 @@ +#ifndef Hadrons_MAction_ScaledDWF_hpp_ +#define Hadrons_MAction_ScaledDWF_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Scaled domain wall fermion * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MAction) + +class ScaledDWFPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(ScaledDWFPar, + std::string , gauge, + unsigned int, Ls, + double , mass, + double , M5, + double , scale, + std::string , boundary); +}; + +template +class TScaledDWF: public Module +{ +public: + FG_TYPE_ALIASES(FImpl,); +public: + // constructor + TScaledDWF(const std::string name); + // destructor + virtual ~TScaledDWF(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(ScaledDWF, TScaledDWF, MAction); + +/****************************************************************************** + * TScaledDWF implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TScaledDWF::TScaledDWF(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TScaledDWF::getInput(void) +{ + std::vector in = {par().gauge}; + + return in; +} + +template +std::vector TScaledDWF::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TScaledDWF::setup(void) +{ + LOG(Message) << "Setting up scaled domain wall fermion matrix with m= " + << par().mass << ", M5= " << par().M5 << ", Ls= " << par().Ls + << ", scale= " << par().scale + << " using gauge field '" << par().gauge << "'" + << 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); + std::vector boundary = strToVec(par().boundary); + typename MobiusFermion::ImplParams implParams(boundary); + envCreateDerived(FMat, ScaledShamirFermion, getName(), par().Ls, U, g5, + grb5, g4, grb4, par().mass, par().M5, par().scale, + implParams); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TScaledDWF::execute(void) +{} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MAction_ScaledDWF_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index ebf5c9cb..37477d79 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -35,6 +35,7 @@ modules_cc =\ Modules/MAction/ZMobiusDWF.cc \ Modules/MAction/WilsonClover.cc \ Modules/MAction/DWF.cc \ + Modules/MAction/ScaledDWF.cc \ Modules/MScalarSUN/TrPhi.cc \ Modules/MScalarSUN/Grad.cc \ Modules/MScalarSUN/TimeMomProbe.cc \ @@ -91,6 +92,7 @@ modules_hpp =\ Modules/MAction/Wilson.hpp \ Modules/MAction/WilsonClover.hpp \ Modules/MAction/ZMobiusDWF.hpp \ + Modules/MAction/ScaledDWF.hpp \ Modules/MScalarSUN/StochFreeField.hpp \ Modules/MScalarSUN/TwoPointNPR.hpp \ Modules/MScalarSUN/ShiftProbe.hpp \