mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-10-27 18:19:34 +00:00 
			
		
		
		
	Fixed seg fault for observable modules
This commit is contained in:
		| @@ -64,7 +64,7 @@ SOFTWARE. | |||||||
|     #endif |     #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
|     #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) |     #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) | ||||||
|     #if GCC_VERSION < 40900 |     #if GCC_VERSION < 40800 | ||||||
|         #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" |         #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" | ||||||
|     #endif |     #endif | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -68,6 +68,7 @@ class HMCResourceManager { | |||||||
|   // A vector of HmcObservable modules |   // A vector of HmcObservable modules | ||||||
|   std::vector<std::unique_ptr<ObservableBaseModule> > ObservablesList; |   std::vector<std::unique_ptr<ObservableBaseModule> > ObservablesList; | ||||||
|  |  | ||||||
|  |  | ||||||
|   // A vector of HmcObservable modules |   // A vector of HmcObservable modules | ||||||
|   std::multimap<int, std::unique_ptr<ActionBaseModule> > ActionsList; |   std::multimap<int, std::unique_ptr<ActionBaseModule> > ActionsList; | ||||||
|   std::vector<int> multipliers; |   std::vector<int> multipliers; | ||||||
| @@ -249,9 +250,9 @@ class HMCResourceManager { | |||||||
|   // Observables |   // Observables | ||||||
|   //////////////////////////////////////////////////////// |   //////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   void AddObservable(ObservableBaseModule *O){ |   template<class T, class... Types> | ||||||
|     // acquire resource |   void AddObservable(Types&&... Args){ | ||||||
|     ObservablesList.push_back(std::unique_ptr<ObservableBaseModule>(std::move(O))); |     ObservablesList.push_back(std::unique_ptr<T>(new T(std::forward<Types>(Args)...))); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   std::vector<HmcObservable<typename ImplementationPolicy::Field>* > GetObservables(){ |   std::vector<HmcObservable<typename ImplementationPolicy::Field>* > GetObservables(){ | ||||||
|   | |||||||
| @@ -41,13 +41,14 @@ class ObservableModule | |||||||
|  public: |  public: | ||||||
|   typedef HMCModuleBase< QCD::HmcObservable< typename ObservableType::Field> > Base; |   typedef HMCModuleBase< QCD::HmcObservable< typename ObservableType::Field> > Base; | ||||||
|   typedef typename Base::Product Product; |   typedef typename Base::Product Product; | ||||||
|  |   typedef OPar Parameters; | ||||||
|  |  | ||||||
|   std::unique_ptr<ObservableType> ObservablePtr; |   std::unique_ptr<ObservableType> ObservablePtr; | ||||||
|  |  | ||||||
|   ObservableModule(OPar Par) : Parametrized<OPar>(Par) {} |   ObservableModule(OPar Par) : Parametrized<OPar>(Par) {} | ||||||
|  |  | ||||||
|   virtual void print_parameters(){ |   virtual void print_parameters(){ | ||||||
|     std::cout << this->Par_ << std::endl; |     Parametrized<OPar>::print_parameters(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   template <class ReaderClass> |   template <class ReaderClass> | ||||||
| @@ -79,14 +80,18 @@ class PlaquetteObsParameters : Serializable { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| template < class Impl > | template < class Impl > | ||||||
| class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, PlaquetteObsParameters>{ | class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, NoParameters>{ | ||||||
|   typedef ObservableModule<PlaquetteLogger<Impl>, PlaquetteObsParameters> ObsBase; |   typedef ObservableModule<PlaquetteLogger<Impl>, NoParameters> ObsBase; | ||||||
|   using ObsBase::ObsBase; // for constructors |   using ObsBase::ObsBase; // for constructors | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   // acquire resource |   // acquire resource | ||||||
|   virtual void initialize(){ |   virtual void initialize(){ | ||||||
|     this->ObservablePtr.reset(new PlaquetteLogger<Impl>(this->Par_.output_prefix)); |     this->ObservablePtr.reset(new PlaquetteLogger<Impl>()); | ||||||
|   } |   } | ||||||
|  |   public: | ||||||
|  |   PlaquetteMod(): ObsBase(NoParameters()){} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|  |  | ||||||
| Grid physics library, www.github.com/paboyle/Grid | Grid physics library, www.github.com/paboyle/Grid | ||||||
|  |  | ||||||
| Source file: ./lib/qcd/modules/Registration.h | Source file: ./lib/qcd/modules/plaquette.h | ||||||
|  |  | ||||||
| Copyright (C) 2017 | Copyright (C) 2017 | ||||||
|  |  | ||||||
| @@ -43,41 +43,25 @@ class PlaquetteLogger : public HmcObservable<typename Impl::Field> { | |||||||
|   // here forces the Impl to be of gauge fields |   // here forces the Impl to be of gauge fields | ||||||
|   // if not the compiler will complain |   // if not the compiler will complain | ||||||
|   INHERIT_GIMPL_TYPES(Impl); |   INHERIT_GIMPL_TYPES(Impl); | ||||||
|   typedef typename Impl::Field Field;  // necessary for HmcObservable compatibility |  | ||||||
|   explicit PlaquetteLogger(std::string cf) { Stem = cf; } |   // necessary for HmcObservable compatibility | ||||||
|  |   typedef typename Impl::Field Field; | ||||||
|  |  | ||||||
|   void TrajectoryComplete(int traj, |   void TrajectoryComplete(int traj, | ||||||
|                           Field &U, |                           Field &U, | ||||||
|                           GridSerialRNG &sRNG, |                           GridSerialRNG &sRNG, | ||||||
|                           GridParallelRNG &pRNG) { |                           GridParallelRNG &pRNG) { | ||||||
|     std::string file; |  | ||||||
|     { |  | ||||||
|       std::ostringstream os; |  | ||||||
|       os << Stem << "." << traj; |  | ||||||
|       file = os.str(); |  | ||||||
|     } |  | ||||||
|     std::ofstream of(file); |  | ||||||
|  |  | ||||||
|     RealD peri_plaq = WilsonLoops<PeriodicGimplR>::avgPlaquette(U); |     RealD plaq = WilsonLoops<Impl>::avgPlaquette(U); | ||||||
|     RealD peri_rect = WilsonLoops<PeriodicGimplR>::avgRectangle(U); |  | ||||||
|  |  | ||||||
|     RealD impl_plaq = WilsonLoops<Impl>::avgPlaquette(U); |     int def_prec = std::cout.precision(); | ||||||
|     RealD impl_rect = WilsonLoops<Impl>::avgRectangle(U); |  | ||||||
|  |     std::cout << GridLogMessage | ||||||
|  |         << std::setprecision(std::numeric_limits<Real>::digits10 + 1) | ||||||
|  |         << "Plaquette: [ " << traj << " ] "<< plaq << std::endl; | ||||||
|  |  | ||||||
|  |     std::cout.precision(def_prec); | ||||||
|  |  | ||||||
|     // Fixme reorganise this output |  | ||||||
|     of << traj << " " << impl_plaq << " " << impl_rect << "  " << peri_plaq |  | ||||||
|        << " " << peri_rect << std::endl; |  | ||||||
|     std::cout << GridLogMessage << "traj" |  | ||||||
|               << " " |  | ||||||
|               << "plaq " |  | ||||||
|               << " " |  | ||||||
|               << " rect  " |  | ||||||
|               << "  " |  | ||||||
|               << "peri_plaq" |  | ||||||
|               << " " |  | ||||||
|               << "peri_rect" << std::endl; |  | ||||||
|     std::cout << GridLogMessage << traj << " " << impl_plaq << " " << impl_rect |  | ||||||
|               << "  " << peri_plaq << " " << peri_rect << std::endl; |  | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								lib/qcd/observables/topological_charge.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lib/qcd/observables/topological_charge.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | /************************************************************************************* | ||||||
|  |  | ||||||
|  | Grid physics library, www.github.com/paboyle/Grid | ||||||
|  |  | ||||||
|  | Source file: ./lib/qcd/modules/topological_charge.h | ||||||
|  |  | ||||||
|  | Copyright (C) 2017 | ||||||
|  |  | ||||||
|  | Author: Guido Cossu <guido.cossu@ed.ac.uk> | ||||||
|  |  | ||||||
|  | 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 HMC_TOP_CHARGE_H | ||||||
|  | #define HMC_TOP_CHARGE_H | ||||||
|  |  | ||||||
|  | namespace Grid { | ||||||
|  | namespace QCD ( | ||||||
|  |  | ||||||
|  | // this is only defined for a gauge theory | ||||||
|  | template <class Impl> | ||||||
|  | class TopologicalCharge : public HmcObservable<typename Impl::Field> { | ||||||
|  |  private: | ||||||
|  |   std::string Stem; | ||||||
|  |  | ||||||
|  |  public: | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | ) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  //  HMC_TOP_CHARGE_H | ||||||
| @@ -72,10 +72,8 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   // here there is too much indirection  | ||||||
|   PlaquetteObsParameters PlPar; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlPar.output_prefix = "Plaquette"; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -74,10 +74,8 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   // here there is too much indirection  | ||||||
|   PlaquetteObsParameters PlPar; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlPar.output_prefix = "Plaquette"; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -71,10 +71,8 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   // here there is too much indirection  | ||||||
|   PlaquetteObsParameters PlPar; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlPar.output_prefix = "Plaquette"; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -69,10 +69,8 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   // here there is too much indirection  | ||||||
|   PlaquetteObsParameters PlPar; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlPar.output_prefix = "Plaquette"; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
|     /************************************************************************************* | /************************************************************************************* | ||||||
|  |  | ||||||
|     Grid physics library, www.github.com/paboyle/Grid  |     Grid physics library, www.github.com/paboyle/Grid  | ||||||
|  |  | ||||||
| @@ -6,8 +6,8 @@ | |||||||
|  |  | ||||||
|     Copyright (C) 2015 |     Copyright (C) 2015 | ||||||
|  |  | ||||||
| Author: Peter Boyle <paboyle@ph.ed.ac.uk> |     Author: Peter Boyle <paboyle@ph.ed.ac.uk> | ||||||
| Author: paboyle <paboyle@ph.ed.ac.uk> |     Author: paboyle <paboyle@ph.ed.ac.uk> | ||||||
|  |  | ||||||
|     This program is free software; you can redistribute it and/or modify |     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 |     it under the terms of the GNU General Public License as published by | ||||||
| @@ -24,8 +24,8 @@ Author: paboyle <paboyle@ph.ed.ac.uk> | |||||||
|     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||||
|  |  | ||||||
|     See the full license in the file "LICENSE" in the top level distribution directory |     See the full license in the file "LICENSE" in the top level distribution directory | ||||||
|     *************************************************************************************/ | *************************************************************************************/ | ||||||
|     /*  END LEGAL */ | /*  END LEGAL */ | ||||||
| #include <Grid/Grid.h> | #include <Grid/Grid.h> | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -69,11 +69,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -62,11 +62,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -63,11 +63,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -73,11 +73,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -65,10 +65,8 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   // here there is too much indirection  | ||||||
|   PlaquetteObsParameters PlPar; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlPar.output_prefix = "Plaquette"; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -1,97 +0,0 @@ | |||||||
| /************************************************************************************* |  | ||||||
|  |  | ||||||
| Grid physics library, www.github.com/paboyle/Grid |  | ||||||
|  |  | ||||||
| Source file: ./tests/Test_hmc_WilsonFermionGauge.cc |  | ||||||
|  |  | ||||||
| Copyright (C) 2015 |  | ||||||
|  |  | ||||||
| Author: Peter Boyle <pabobyle@ph.ed.ac.uk> |  | ||||||
| Author: neo <cossu@post.kek.jp> |  | ||||||
| Author: Guido Cossu <guido.cossu@ed.ac.uk> |  | ||||||
|  |  | ||||||
| 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 <Grid/Grid.h> |  | ||||||
|  |  | ||||||
| int main(int argc, char **argv) { |  | ||||||
|   using namespace Grid; |  | ||||||
|   using namespace Grid::QCD; |  | ||||||
|  |  | ||||||
|   Grid_init(&argc, &argv); |  | ||||||
|   int threads = GridThread::GetThreads(); |  | ||||||
|   // here make a routine to print all the relevant information on the run |  | ||||||
|   std::cout << GridLogMessage << "Grid is setup to use " << threads << " threads" << std::endl; |  | ||||||
|  |  | ||||||
|    // Typedefs to simplify notation |  | ||||||
|   typedef GenericHMCRunner<LeapFrog> HMCWrapper;  // Uses the default minimum norm |  | ||||||
|   HMCWrapper TheHMC; |  | ||||||
|  |  | ||||||
|   // Grid from the command line |  | ||||||
|   TheHMC.Resources.AddFourDimGrid("gauge"); |  | ||||||
|   // Possibile to create the module by hand  |  | ||||||
|   // hardcoding parameters or using a Reader |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   // Checkpointer definition |  | ||||||
|   CheckpointerParameters CPparams;   |  | ||||||
|   CPparams.config_prefix = "ckpoint_lat"; |  | ||||||
|   CPparams.rng_prefix = "ckpoint_rng"; |  | ||||||
|   CPparams.saveInterval = 10; |  | ||||||
|   CPparams.format = "IEEE64BIG"; |  | ||||||
|    |  | ||||||
|   TheHMC.Resources.LoadBinaryCheckpointer(CPparams); |  | ||||||
|  |  | ||||||
|   RNGModuleParameters RNGpar; |  | ||||||
|   RNGpar.serial_seeds = "1 2 3 4 5"; |  | ||||||
|   RNGpar.parallel_seeds = "6 7 8 9 10"; |  | ||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |  | ||||||
|  |  | ||||||
|   // Construct observables |  | ||||||
|   // here there is too much indirection  |  | ||||||
|   PlaquetteObsParameters PlPar; |  | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |  | ||||||
|   // Collect actions, here use more encapsulation |  | ||||||
|   // need wrappers of the fermionic classes  |  | ||||||
|   // that have a complex construction |  | ||||||
|   // standard |  | ||||||
|   RealD beta = 5.6; |  | ||||||
|   WilsonGaugeActionR Waction(beta); |  | ||||||
|    |  | ||||||
|   ActionLevel<HMCWrapper::Field> Level1(1); |  | ||||||
|   Level1.push_back(&Waction); |  | ||||||
|   //Level1.push_back(WGMod.getPtr()); |  | ||||||
|   TheHMC.TheAction.push_back(Level1); |  | ||||||
|   ///////////////////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
|   // HMC parameters are serialisable  |  | ||||||
|   TheHMC.Parameters.MD.MDsteps = 40; |  | ||||||
|   TheHMC.Parameters.MD.trajL   = 1.0; |  | ||||||
|  |  | ||||||
|   TheHMC.ReadCommandLine(argc, argv); // these can be parameters from file |  | ||||||
|   TheHMC.Run();  // no smearing |  | ||||||
|  |  | ||||||
|   Grid_finalize(); |  | ||||||
|  |  | ||||||
| } // main |  | ||||||
| @@ -82,11 +82,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -69,11 +69,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
| @@ -100,7 +97,7 @@ int main(int argc, char **argv) { | |||||||
|  |  | ||||||
|   ConjugateGradient<FermionField> CG(1.0e-8, 2000); |   ConjugateGradient<FermionField> CG(1.0e-8, 2000); | ||||||
|  |  | ||||||
|   TwoFlavourPseudoFermionAction<FermionImplPolicy> Nf2(FermOp, CG, CG); |   TwoFlavourEvenOddPseudoFermionAction<FermionImplPolicy> Nf2(FermOp, CG, CG); | ||||||
|  |  | ||||||
|   // With modules |   // With modules | ||||||
|   /* |   /* | ||||||
|   | |||||||
| @@ -72,11 +72,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -69,11 +69,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -70,11 +70,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -69,11 +69,8 @@ int main(int argc, char **argv) { | |||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|   // Construct observables |   // Construct observables | ||||||
|   // here there is too much indirection  |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   PlaquetteObsParameters PlPar; |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|   PlPar.output_prefix = "Plaquette"; |  | ||||||
|   PlaquetteMod<HMCWrapper::ImplPolicy> PlaqModule(PlPar); |  | ||||||
|   TheHMC.Resources.AddObservable(&PlaqModule); |  | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user