From 16be6d378c6922f97f7dcdb2176b534526992ff3 Mon Sep 17 00:00:00 2001 From: Guido Cossu Date: Mon, 30 Jan 2017 14:22:41 +0000 Subject: [PATCH] Now action factory support different Fields (templated) --- lib/qcd/hmc/HMCResourceManager.h | 5 +---- lib/qcd/modules/ActionModules.h | 25 ++++++++++++------------- lib/qcd/modules/Registration.h | 30 ++++++++++++++++-------------- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/lib/qcd/hmc/HMCResourceManager.h b/lib/qcd/hmc/HMCResourceManager.h index a169fdcb..b535ed03 100644 --- a/lib/qcd/hmc/HMCResourceManager.h +++ b/lib/qcd/hmc/HMCResourceManager.h @@ -269,10 +269,7 @@ private: // here gauge Read.push("Action"); do{ - // I need to modify the Factory generator depending on the Implementation - // Solution: pass the field as a template parameter - //auto &ActionFactory = HMC_ScalarActionModuleFactory::getInstance(); - auto &ActionFactory = HMC_LGTActionModuleFactory::getInstance(); + auto &ActionFactory = HMC_ActionModuleFactory::getInstance(); std::string action_type; Read.readDefault("name", action_type); std::cout << ActionFactory.getBuilderList() << std::endl; // temporary diff --git a/lib/qcd/modules/ActionModules.h b/lib/qcd/modules/ActionModules.h index 67b1a7cd..cf7f4c07 100644 --- a/lib/qcd/modules/ActionModules.h +++ b/lib/qcd/modules/ActionModules.h @@ -486,31 +486,31 @@ class OneFlavourRatioEOFModule: // Registar must be changed because I do not want to use the ModuleFactory // explicit ref to LatticeGaugeField must be changed or put in the factory -typedef ActionModuleBase< QCD::Action< QCD::LatticeGaugeField >, QCD::GridModule > HMC_LGTActionModBase; -typedef ActionModuleBase< QCD::Action< QCD::LatticeReal >, QCD::GridModule > HMC_ScalarActionModBase; +//typedef ActionModuleBase< QCD::Action< QCD::LatticeGaugeField >, QCD::GridModule > HMC_LGTActionModBase; +//typedef ActionModuleBase< QCD::Action< QCD::LatticeReal >, QCD::GridModule > HMC_ScalarActionModBase; -template -class HMC_LGTActionModuleFactory - : public Factory < HMC_LGTActionModBase , Reader > { +template +class HMC_ActionModuleFactory + : public Factory < ActionModuleBase< QCD::Action< Field >, QCD::GridModule > , Reader > { public: typedef Reader TheReader; // use SINGLETON FUNCTOR MACRO HERE - HMC_LGTActionModuleFactory(const HMC_LGTActionModuleFactory& e) = delete; - void operator=(const HMC_LGTActionModuleFactory& e) = delete; - static HMC_LGTActionModuleFactory& getInstance(void) { - static HMC_LGTActionModuleFactory e; + HMC_ActionModuleFactory(const HMC_ActionModuleFactory& e) = delete; + void operator=(const HMC_ActionModuleFactory& e) = delete; + static HMC_ActionModuleFactory& getInstance(void) { + static HMC_ActionModuleFactory e; return e; } private: - HMC_LGTActionModuleFactory(void) = default; + HMC_ActionModuleFactory(void) = default; std::string obj_type() const { return std::string(str); } }; - +/* template class HMC_ScalarActionModuleFactory : public Factory < HMC_ScalarActionModBase , Reader > { @@ -530,8 +530,7 @@ class HMC_ScalarActionModuleFactory return std::string(str); } }; - - +*/ extern char gauge_string[]; } // Grid diff --git a/lib/qcd/modules/Registration.h b/lib/qcd/modules/Registration.h index 5b77bdf9..d31ee22b 100644 --- a/lib/qcd/modules/Registration.h +++ b/lib/qcd/modules/Registration.h @@ -30,6 +30,8 @@ directory #ifndef MODULES_REGISTRATION_H #define MODULES_REGISTRATION_H +// simplify with macros + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Actions /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -40,31 +42,31 @@ typedef QCD::DBW2GModule DBW2GMod; typedef QCD::RBCGModule RBCGMod; typedef QCD::PlaqPlusRectangleGModule PlaqPlusRectangleGMod; -static Registrar > __WGmodXMLInit("Wilson"); -static Registrar > __SymGmodXMLInit("Symanzik"); -static Registrar > __IwGmodXMLInit("Iwasaki"); -static Registrar > __DBW2GmodXMLInit("DBW2"); -static Registrar > __RBCGmodXMLInit("RBC"); -static Registrar > __PPRectGmodXMLInit("PlaqPlusRect"); +static Registrar > __WGmodXMLInit("Wilson"); +static Registrar > __SymGmodXMLInit("Symanzik"); +static Registrar > __IwGmodXMLInit("Iwasaki"); +static Registrar > __DBW2GmodXMLInit("DBW2"); +static Registrar > __RBCGmodXMLInit("RBC"); +static Registrar > __PPRectGmodXMLInit("PlaqPlusRect"); // FIXME more general implementation static Registrar , - HMC_LGTActionModuleFactory > __TwoFlavourFmodXMLInit("TwoFlavours"); + HMC_ActionModuleFactory > __TwoFlavourFmodXMLInit("TwoFlavours"); static Registrar , - HMC_LGTActionModuleFactory > __TwoFlavourRatioFmodXMLInit("TwoFlavoursRatio"); + HMC_ActionModuleFactory > __TwoFlavourRatioFmodXMLInit("TwoFlavoursRatio"); static Registrar , - HMC_LGTActionModuleFactory > __TwoFlavourEOFmodXMLInit("TwoFlavoursEvenOdd"); + HMC_ActionModuleFactory > __TwoFlavourEOFmodXMLInit("TwoFlavoursEvenOdd"); static Registrar, - HMC_LGTActionModuleFactory > __TwoFlavourRatioEOFmodXMLInit("TwoFlavoursEvenOddRatio"); + HMC_ActionModuleFactory > __TwoFlavourRatioEOFmodXMLInit("TwoFlavoursEvenOddRatio"); static Registrar , - HMC_LGTActionModuleFactory > __OneFlavourFmodXMLInit("OneFlavour"); + HMC_ActionModuleFactory > __OneFlavourFmodXMLInit("OneFlavour"); static Registrar , - HMC_LGTActionModuleFactory > __OneFlavourEOFmodXMLInit("OneFlavourEvenOdd"); + HMC_ActionModuleFactory > __OneFlavourEOFmodXMLInit("OneFlavourEvenOdd"); static Registrar , - HMC_LGTActionModuleFactory > __OneFlavourRatioFmodXMLInit("OneFlavourRatio"); + HMC_ActionModuleFactory > __OneFlavourRatioFmodXMLInit("OneFlavourRatio"); static Registrar, - HMC_LGTActionModuleFactory > __OneFlavourRatioEOFmodXMLInit("OneFlavourEvenOddRatio"); + HMC_ActionModuleFactory > __OneFlavourRatioEOFmodXMLInit("OneFlavourEvenOddRatio");