From 2458a11d1da4c06254d242de4550a178287b4bb4 Mon Sep 17 00:00:00 2001 From: Antonin Portelli Date: Sat, 29 Sep 2018 17:59:09 +0100 Subject: [PATCH] Hadrons: precision cast module --- Hadrons/Modules.hpp | 28 +---- Hadrons/Modules/MUtilities/PrecisionCast.cc | 35 ++++++ Hadrons/Modules/MUtilities/PrecisionCast.hpp | 124 +++++++++++++++++++ Hadrons/modules.inc | 2 + 4 files changed, 162 insertions(+), 27 deletions(-) create mode 100644 Hadrons/Modules/MUtilities/PrecisionCast.cc create mode 100644 Hadrons/Modules/MUtilities/PrecisionCast.hpp diff --git a/Hadrons/Modules.hpp b/Hadrons/Modules.hpp index bb3a9b87..5dcb2483 100644 --- a/Hadrons/Modules.hpp +++ b/Hadrons/Modules.hpp @@ -1,30 +1,3 @@ -/************************************************************************************* - -Grid physics library, www.github.com/paboyle/Grid - -Source file: Hadrons/Modules.hpp - -Copyright (C) 2015-2018 - -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 -*************************************************************************************/ -/* END LEGAL */ #include #include #include @@ -57,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/Hadrons/Modules/MUtilities/PrecisionCast.cc b/Hadrons/Modules/MUtilities/PrecisionCast.cc new file mode 100644 index 00000000..556ededc --- /dev/null +++ b/Hadrons/Modules/MUtilities/PrecisionCast.cc @@ -0,0 +1,35 @@ +/************************************************************************************* + +Grid physics library, www.github.com/paboyle/Grid + +Source file: Hadrons/Modules/MUtilities/PrecisionCast.cc + +Copyright (C) 2015-2018 + +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 +*************************************************************************************/ +/* END LEGAL */ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MUtilities; + +template class Grid::Hadrons::MUtilities::TPrecisionCast; +template class Grid::Hadrons::MUtilities::TPrecisionCast; diff --git a/Hadrons/Modules/MUtilities/PrecisionCast.hpp b/Hadrons/Modules/MUtilities/PrecisionCast.hpp new file mode 100644 index 00000000..39a5ff73 --- /dev/null +++ b/Hadrons/Modules/MUtilities/PrecisionCast.hpp @@ -0,0 +1,124 @@ +/************************************************************************************* + +Grid physics library, www.github.com/paboyle/Grid + +Source file: Hadrons/Modules/MUtilities/PrecisionCast.hpp + +Copyright (C) 2015-2018 + +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 +*************************************************************************************/ +/* END LEGAL */ +#ifndef Hadrons_MUtilities_PrecisionCast_hpp_ +#define Hadrons_MUtilities_PrecisionCast_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Precision cast module * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MUtilities) + +class PrecisionCastPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(PrecisionCastPar, + std::string, field); +}; + +template +class TPrecisionCast: public Module +{ +public: + // constructor + TPrecisionCast(const std::string name); + // destructor + virtual ~TPrecisionCast(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(GaugeSinglePrecisionCast, + ARG(TPrecisionCast), + MUtilities); +MODULE_REGISTER_TMP(FermionSinglePrecisionCast, + ARG(TPrecisionCast), + MUtilities); + +/****************************************************************************** + * TPrecisionCast implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TPrecisionCast::TPrecisionCast(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TPrecisionCast::getInput(void) +{ + std::vector in = {par().field}; + + return in; +} + +template +std::vector TPrecisionCast::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TPrecisionCast::setup(void) +{ + envCreateLat(FieldOut, getName()); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TPrecisionCast::execute(void) +{ + LOG(Message) << "Casting field '" << par().field << "'" << std::endl; + LOG(Message) << "In type: " << typeName() << std::endl; + LOG(Message) << "Out type: " << typeName() << std::endl; + + auto &in = envGet(FieldIn, par().field); + auto &out = envGet(FieldOut, getName()); + + precisionChange(out, in); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MUtilities_PrecisionCast_hpp_ diff --git a/Hadrons/modules.inc b/Hadrons/modules.inc index 7a7645f5..69637a68 100644 --- a/Hadrons/modules.inc +++ b/Hadrons/modules.inc @@ -30,6 +30,7 @@ modules_cc =\ Modules/MNoise/TimeDilutedSpinColorDiagonal.cc \ Modules/MUtilities/RandomVectors.cc \ Modules/MUtilities/TestSeqGamma.cc \ + Modules/MUtilities/PrecisionCast.cc \ Modules/MUtilities/TestSeqConserved.cc \ Modules/MLoop/NoiseLoop.cc \ Modules/MScalar/FreeProp.cc \ @@ -93,6 +94,7 @@ modules_hpp =\ Modules/MGauge/FundtoHirep.hpp \ Modules/MGauge/StochEm.hpp \ Modules/MNoise/TimeDilutedSpinColorDiagonal.hpp \ + Modules/MUtilities/PrecisionCast.hpp \ Modules/MUtilities/RandomVectors.hpp \ Modules/MUtilities/TestSeqGamma.hpp \ Modules/MUtilities/TestSeqConserved.hpp \