From 0bade717bf9b18104270cb263951e5aa7fcb136b Mon Sep 17 00:00:00 2001 From: Peter Boyle Date: Tue, 11 May 2021 13:50:38 -0400 Subject: [PATCH] Added the momentum filter to resources --- Grid/qcd/hmc/HMCResourceManager.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Grid/qcd/hmc/HMCResourceManager.h b/Grid/qcd/hmc/HMCResourceManager.h index c088cd41..19bee923 100644 --- a/Grid/qcd/hmc/HMCResourceManager.h +++ b/Grid/qcd/hmc/HMCResourceManager.h @@ -72,6 +72,8 @@ class HMCResourceManager { typedef HMCModuleBase< BaseHmcCheckpointer > CheckpointerBaseModule; typedef HMCModuleBase< HmcObservable > ObservableBaseModule; typedef ActionModuleBase< Action, GridModule > ActionBaseModule; + typedef typename ImplementationPolicy::Field MomentaField; + typedef typename ImplementationPolicy::Field Field; // Named storage for grid pairs (std + red-black) std::unordered_map Grids; @@ -80,6 +82,9 @@ class HMCResourceManager { // SmearingModule Smearing; std::unique_ptr CP; + // Momentum filter + std::unique_ptr > Filter; + // A vector of HmcObservable modules std::vector > ObservablesList; @@ -90,6 +95,7 @@ class HMCResourceManager { bool have_RNG; bool have_CheckPointer; + bool have_Filter; // NOTE: operator << is not overloaded for std::vector // so this function is necessary @@ -101,7 +107,7 @@ class HMCResourceManager { public: - HMCResourceManager() : have_RNG(false), have_CheckPointer(false) {} + HMCResourceManager() : have_RNG(false), have_CheckPointer(false), have_Filter(false) {} template void initialize(ReaderClass &Read){ @@ -129,6 +135,7 @@ public: RNGModuleParameters RNGpar(Read); SetRNGSeeds(RNGpar); + // Observables auto &ObsFactory = HMC_ObservablesModuleFactory::getInstance(); Read.push(observable_string);// here must check if existing... @@ -208,6 +215,16 @@ public: AddGrid(s, Mod); } + void SetMomentumFilter( MomentumFilterBase * MomFilter) { + assert(have_Filter==false); + Filter = std::unique_ptr >(MomFilter); + have_Filter = true; + } + MomentumFilterBase *GetMomentumFilter(void) { + if ( !have_Filter) + SetMomentumFilter(new MomentumFilterNone()); + return Filter.get(); + } GridCartesian* GetCartesian(std::string s = "") { if (s.empty()) s = Grids.begin()->first;