mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-10-30 19:44:32 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			feature/ft
			...
			b15d9b294c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | b15d9b294c | ||
| 32e6d58356 | 
| @@ -44,7 +44,7 @@ public: | |||||||
|   ConfigurationBase() {} |   ConfigurationBase() {} | ||||||
|   virtual ~ConfigurationBase() {} |   virtual ~ConfigurationBase() {} | ||||||
|   virtual void set_Field(Field& U) =0; |   virtual void set_Field(Field& U) =0; | ||||||
|   virtual void smeared_force(Field&) = 0; |   virtual void smeared_force(Field&) const = 0; | ||||||
|   virtual Field& get_SmearedU() =0; |   virtual Field& get_SmearedU() =0; | ||||||
|   virtual Field &get_U(bool smeared = false) = 0; |   virtual Field &get_U(bool smeared = false) = 0; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -86,8 +86,13 @@ public: | |||||||
|     assert(ForceE.Checkerboard()==Even); |     assert(ForceE.Checkerboard()==Even); | ||||||
|     assert(ForceO.Checkerboard()==Odd); |     assert(ForceO.Checkerboard()==Odd); | ||||||
|  |  | ||||||
|  | #if defined(GRID_CUDA) || defined(GRID_HIP)  || defined(GRID_SYCL) | ||||||
|  |     acceleratorSetCheckerboard(Force,ForceE); | ||||||
|  |     acceleratorSetCheckerboard(Force,ForceO); | ||||||
|  | #else | ||||||
|     setCheckerboard(Force,ForceE);  |     setCheckerboard(Force,ForceE);  | ||||||
|     setCheckerboard(Force,ForceO); |     setCheckerboard(Force,ForceO); | ||||||
|  | #endif | ||||||
|     Force=-Force; |     Force=-Force; | ||||||
|  |  | ||||||
|     delete forcecb; |     delete forcecb; | ||||||
| @@ -130,8 +135,13 @@ public: | |||||||
|     assert(ForceE.Checkerboard()==Even); |     assert(ForceE.Checkerboard()==Even); | ||||||
|     assert(ForceO.Checkerboard()==Odd); |     assert(ForceO.Checkerboard()==Odd); | ||||||
|  |  | ||||||
|  | #if defined(GRID_CUDA) || defined(GRID_HIP)  || defined(GRID_SYCL) | ||||||
|  |     acceleratorSetCheckerboard(Force,ForceE); | ||||||
|  |     acceleratorSetCheckerboard(Force,ForceO); | ||||||
|  | #else | ||||||
|     setCheckerboard(Force,ForceE);  |     setCheckerboard(Force,ForceE);  | ||||||
|     setCheckerboard(Force,ForceO); |     setCheckerboard(Force,ForceO); | ||||||
|  | #endif | ||||||
|     Force=-Force; |     Force=-Force; | ||||||
|  |  | ||||||
|     delete forcecb; |     delete forcecb; | ||||||
|   | |||||||
| @@ -284,12 +284,11 @@ public: | |||||||
|  |  | ||||||
|       TheIntegrator.print_timer(); |       TheIntegrator.print_timer(); | ||||||
|  |  | ||||||
|       TheIntegrator.Smearer.set_Field(Ucur); |  | ||||||
|       for (int obs = 0; obs < Observables.size(); obs++) { |       for (int obs = 0; obs < Observables.size(); obs++) { | ||||||
|       	std::cout << GridLogDebug << "Observables # " << obs << std::endl; |       	std::cout << GridLogDebug << "Observables # " << obs << std::endl; | ||||||
|       	std::cout << GridLogDebug << "Observables total " << Observables.size() << std::endl; |       	std::cout << GridLogDebug << "Observables total " << Observables.size() << std::endl; | ||||||
|       	std::cout << GridLogDebug << "Observables pointer " << Observables[obs] << std::endl; |       	std::cout << GridLogDebug << "Observables pointer " << Observables[obs] << std::endl; | ||||||
|         Observables[obs]->TrajectoryComplete(traj + 1, TheIntegrator.Smearer, sRNG, pRNG); |         Observables[obs]->TrajectoryComplete(traj + 1, Ucur, sRNG, pRNG); | ||||||
|       } |       } | ||||||
|       std::cout << GridLogHMC << ":::::::::::::::::::::::::::::::::::::::::::" << std::endl; |       std::cout << GridLogHMC << ":::::::::::::::::::::::::::::::::::::::::::" << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -35,16 +35,13 @@ class CheckpointerParameters : Serializable { | |||||||
| public: | public: | ||||||
|   GRID_SERIALIZABLE_CLASS_MEMBERS(CheckpointerParameters,  |   GRID_SERIALIZABLE_CLASS_MEMBERS(CheckpointerParameters,  | ||||||
| 				  std::string, config_prefix,  | 				  std::string, config_prefix,  | ||||||
| 				  std::string, smeared_prefix,  |  | ||||||
| 				  std::string, rng_prefix,  | 				  std::string, rng_prefix,  | ||||||
| 				  int, saveInterval,  | 				  int, saveInterval,  | ||||||
| 				  bool, saveSmeared,  |  | ||||||
| 				  std::string, format, ); | 				  std::string, format, ); | ||||||
|  |  | ||||||
|   CheckpointerParameters(std::string cf = "cfg", std::string sf="cfg_smr" , std::string rn = "rng", |   CheckpointerParameters(std::string cf = "cfg", std::string rn = "rng", | ||||||
| 			 int savemodulo = 1, const std::string &f = "IEEE64BIG") | 			 int savemodulo = 1, const std::string &f = "IEEE64BIG") | ||||||
|     : config_prefix(cf), |     : config_prefix(cf), | ||||||
|       smeared_prefix(sf), |  | ||||||
|       rng_prefix(rn), |       rng_prefix(rn), | ||||||
|       saveInterval(savemodulo), |       saveInterval(savemodulo), | ||||||
|       format(f){}; |       format(f){}; | ||||||
| @@ -64,21 +61,13 @@ template <class Impl> | |||||||
| class BaseHmcCheckpointer : public HmcObservable<typename Impl::Field> { | class BaseHmcCheckpointer : public HmcObservable<typename Impl::Field> { | ||||||
| public: | public: | ||||||
|   void build_filenames(int traj, CheckpointerParameters &Params, |   void build_filenames(int traj, CheckpointerParameters &Params, | ||||||
|                        std::string &conf_file, |                        std::string &conf_file, std::string &rng_file) { | ||||||
|                        std::string &smear_file, |  | ||||||
| 		       std::string &rng_file) { |  | ||||||
|     { |     { | ||||||
|       std::ostringstream os; |       std::ostringstream os; | ||||||
|       os << Params.rng_prefix << "." << traj; |       os << Params.rng_prefix << "." << traj; | ||||||
|       rng_file = os.str(); |       rng_file = os.str(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     { |  | ||||||
|       std::ostringstream os; |  | ||||||
|       os << Params.smeared_prefix << "." << traj; |  | ||||||
|       smear_file = os.str(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     { |     { | ||||||
|       std::ostringstream os; |       std::ostringstream os; | ||||||
|       os << Params.config_prefix << "." << traj; |       os << Params.config_prefix << "." << traj; | ||||||
| @@ -95,11 +84,6 @@ public: | |||||||
|   } |   } | ||||||
|   virtual void initialize(const CheckpointerParameters &Params) = 0; |   virtual void initialize(const CheckpointerParameters &Params) = 0; | ||||||
|  |  | ||||||
|   virtual void TrajectoryComplete(int traj, |  | ||||||
|                                   typename Impl::Field &U, |  | ||||||
|                                   GridSerialRNG &sRNG, |  | ||||||
|                                   GridParallelRNG &pRNG) { assert(0); } ; // HMC should pass the smart config with smeared and unsmeared |  | ||||||
|    |  | ||||||
|   virtual void CheckpointRestore(int traj, typename Impl::Field &U, |   virtual void CheckpointRestore(int traj, typename Impl::Field &U, | ||||||
|                                  GridSerialRNG &sRNG, |                                  GridSerialRNG &sRNG, | ||||||
|                                  GridParallelRNG &pRNG) = 0; |                                  GridParallelRNG &pRNG) = 0; | ||||||
|   | |||||||
| @@ -61,14 +61,11 @@ public: | |||||||
|     fout.close(); |     fout.close(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void TrajectoryComplete(int traj, |   void TrajectoryComplete(int traj, Field &U, GridSerialRNG &sRNG, GridParallelRNG &pRNG) { | ||||||
| 			  ConfigurationBase<Field> &SmartConfig, |  | ||||||
| 			  GridSerialRNG &sRNG, GridParallelRNG &pRNG) |  | ||||||
|   { |  | ||||||
|  |  | ||||||
|     if ((traj % Params.saveInterval) == 0) { |     if ((traj % Params.saveInterval) == 0) { | ||||||
|       std::string config, rng, smr; |       std::string config, rng; | ||||||
|       this->build_filenames(traj, Params, config, smr, rng); |       this->build_filenames(traj, Params, config, rng); | ||||||
|  |  | ||||||
|       uint32_t nersc_csum; |       uint32_t nersc_csum; | ||||||
|       uint32_t scidac_csuma; |       uint32_t scidac_csuma; | ||||||
| @@ -77,15 +74,9 @@ public: | |||||||
|       BinarySimpleUnmunger<sobj_double, sobj> munge; |       BinarySimpleUnmunger<sobj_double, sobj> munge; | ||||||
|       truncate(rng); |       truncate(rng); | ||||||
|       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); |       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); | ||||||
|       std::cout << GridLogMessage << "Written Binary RNG " << rng |  | ||||||
|                 << " checksum " << std::hex  |  | ||||||
| 		<< nersc_csum   <<"/" |  | ||||||
| 		<< scidac_csuma   <<"/" |  | ||||||
| 		<< scidac_csumb  |  | ||||||
| 		<< std::dec << std::endl; |  | ||||||
|  |  | ||||||
|       truncate(config); |       truncate(config); | ||||||
|       BinaryIO::writeLatticeObject<vobj, sobj_double>(SmartConfig.get_U(false), config, munge, 0, Params.format, |  | ||||||
|  |       BinaryIO::writeLatticeObject<vobj, sobj_double>(U, config, munge, 0, Params.format, | ||||||
| 						      nersc_csum,scidac_csuma,scidac_csumb); | 						      nersc_csum,scidac_csuma,scidac_csumb); | ||||||
|  |  | ||||||
|       std::cout << GridLogMessage << "Written Binary Configuration " << config |       std::cout << GridLogMessage << "Written Binary Configuration " << config | ||||||
| @@ -94,18 +85,6 @@ public: | |||||||
| 		<< scidac_csuma   <<"/" | 		<< scidac_csuma   <<"/" | ||||||
| 		<< scidac_csumb  | 		<< scidac_csumb  | ||||||
| 		<< std::dec << std::endl; | 		<< std::dec << std::endl; | ||||||
|  |  | ||||||
|       if ( Params.saveSmeared ) { |  | ||||||
| 	truncate(smr); |  | ||||||
| 	BinaryIO::writeLatticeObject<vobj, sobj_double>(SmartConfig.get_U(true), smr, munge, 0, Params.format, |  | ||||||
| 							nersc_csum,scidac_csuma,scidac_csumb); |  | ||||||
| 	std::cout << GridLogMessage << "Written Binary Smeared Configuration " << smr |  | ||||||
|                 << " checksum " << std::hex  |  | ||||||
| 		<< nersc_csum   <<"/" |  | ||||||
| 		<< scidac_csuma   <<"/" |  | ||||||
| 		<< scidac_csumb  |  | ||||||
| 		<< std::dec << std::endl; |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   }; |   }; | ||||||
|   | |||||||
| @@ -69,27 +69,17 @@ public: | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void TrajectoryComplete(int traj, |   void TrajectoryComplete(int traj, GaugeField &U, GridSerialRNG &sRNG, | ||||||
| 			  ConfigurationBase<GaugeField> &SmartConfig, |  | ||||||
| 			  GridSerialRNG &sRNG, |  | ||||||
|                           GridParallelRNG &pRNG) { |                           GridParallelRNG &pRNG) { | ||||||
|     if ((traj % Params.saveInterval) == 0) { |     if ((traj % Params.saveInterval) == 0) { | ||||||
|       std::string config, rng, smr; |       std::string config, rng; | ||||||
|       this->build_filenames(traj, Params, config, rng); |       this->build_filenames(traj, Params, config, rng); | ||||||
|       GridBase *grid = SmartConfig.get_U(false).Grid(); |       GridBase *grid = U.Grid(); | ||||||
|       uint32_t nersc_csum,scidac_csuma,scidac_csumb; |       uint32_t nersc_csum,scidac_csuma,scidac_csumb; | ||||||
|       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); |       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); | ||||||
|       std::cout << GridLogMessage << "Written BINARY RNG " << rng |  | ||||||
|                 << " checksum " << std::hex  |  | ||||||
| 		<< nersc_csum<<"/" |  | ||||||
| 		<< scidac_csuma<<"/" |  | ||||||
| 		<< scidac_csumb |  | ||||||
| 		<< std::dec << std::endl; |  | ||||||
|  |  | ||||||
|        |  | ||||||
|       IldgWriter _IldgWriter(grid->IsBoss()); |       IldgWriter _IldgWriter(grid->IsBoss()); | ||||||
|       _IldgWriter.open(config); |       _IldgWriter.open(config); | ||||||
|       _IldgWriter.writeConfiguration<GaugeStats>(SmartConfig.get_U(false), traj, config, config); |       _IldgWriter.writeConfiguration<GaugeStats>(U, traj, config, config); | ||||||
|       _IldgWriter.close(); |       _IldgWriter.close(); | ||||||
|  |  | ||||||
|       std::cout << GridLogMessage << "Written ILDG Configuration on " << config |       std::cout << GridLogMessage << "Written ILDG Configuration on " << config | ||||||
| @@ -98,21 +88,6 @@ public: | |||||||
| 		<< scidac_csuma<<"/" | 		<< scidac_csuma<<"/" | ||||||
| 		<< scidac_csumb | 		<< scidac_csumb | ||||||
| 		<< std::dec << std::endl; | 		<< std::dec << std::endl; | ||||||
|  |  | ||||||
|       if ( Params.saveSmeared ) {  |  | ||||||
| 	IldgWriter _IldgWriter(grid->IsBoss()); |  | ||||||
| 	_IldgWriter.open(smr); |  | ||||||
| 	_IldgWriter.writeConfiguration<GaugeStats>(SmartConfig.get_U(true), traj, config, config); |  | ||||||
| 	_IldgWriter.close(); |  | ||||||
|  |  | ||||||
| 	std::cout << GridLogMessage << "Written ILDG Configuration on " << smr |  | ||||||
|                 << " checksum " << std::hex  |  | ||||||
| 		<< nersc_csum<<"/" |  | ||||||
| 		<< scidac_csuma<<"/" |  | ||||||
| 		<< scidac_csumb |  | ||||||
| 		<< std::dec << std::endl; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -52,29 +52,23 @@ public: | |||||||
|     Params.format = "IEEE64BIG";  // fixed, overwrite any other choice |     Params.format = "IEEE64BIG";  // fixed, overwrite any other choice | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   virtual void TrajectoryComplete(int traj, |   void TrajectoryComplete(int traj, GaugeField &U, GridSerialRNG &sRNG, | ||||||
|                                   ConfigurationBase<GaugeField> &SmartConfig, |                           GridParallelRNG &pRNG) { | ||||||
|                                   GridSerialRNG &sRNG, |  | ||||||
|                                   GridParallelRNG &pRNG) |  | ||||||
|   { |  | ||||||
|     if ((traj % Params.saveInterval) == 0) { |     if ((traj % Params.saveInterval) == 0) { | ||||||
|       std::string config, rng, smr; |       std::string config, rng; | ||||||
|       this->build_filenames(traj, Params, config, smr, rng); |       this->build_filenames(traj, Params, config, rng); | ||||||
|  |  | ||||||
|       int precision32 = 1; |       int precision32 = 1; | ||||||
|       int tworow = 0; |       int tworow = 0; | ||||||
|       NerscIO::writeRNGState(sRNG, pRNG, rng); |       NerscIO::writeRNGState(sRNG, pRNG, rng); | ||||||
|       NerscIO::writeConfiguration<GaugeStats>(SmartConfig.get_U(false), config, tworow, precision32); |       NerscIO::writeConfiguration<GaugeStats>(U, config, tworow, precision32); | ||||||
|       if ( Params.saveSmeared ) { |  | ||||||
| 	NerscIO::writeConfiguration<GaugeStats>(SmartConfig.get_U(true), smr, tworow, precision32); |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   void CheckpointRestore(int traj, GaugeField &U, GridSerialRNG &sRNG, |   void CheckpointRestore(int traj, GaugeField &U, GridSerialRNG &sRNG, | ||||||
|                          GridParallelRNG &pRNG) { |                          GridParallelRNG &pRNG) { | ||||||
|     std::string config, rng, smr; |     std::string config, rng; | ||||||
|     this->build_filenames(traj, Params, config, smr, rng ); |     this->build_filenames(traj, Params, config, rng); | ||||||
|     this->check_filename(rng); |     this->check_filename(rng); | ||||||
|     this->check_filename(config); |     this->check_filename(config); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -70,37 +70,19 @@ class ScidacHmcCheckpointer : public BaseHmcCheckpointer<Implementation> { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void TrajectoryComplete(int traj,  |   void TrajectoryComplete(int traj, Field &U, GridSerialRNG &sRNG, | ||||||
| 			  ConfigurationBase<Field> &SmartConfig, |  | ||||||
| 			  GridSerialRNG &sRNG, |  | ||||||
|                           GridParallelRNG &pRNG) { |                           GridParallelRNG &pRNG) { | ||||||
|     if ((traj % Params.saveInterval) == 0) { |     if ((traj % Params.saveInterval) == 0) { | ||||||
|       std::string config, rng,smr; |       std::string config, rng; | ||||||
|       this->build_filenames(traj, Params, config, smr, rng); |       this->build_filenames(traj, Params, config, rng); | ||||||
|       GridBase *grid = SmartConfig.get_U(false).Grid(); |       GridBase *grid = U.Grid(); | ||||||
|       uint32_t nersc_csum,scidac_csuma,scidac_csumb; |       uint32_t nersc_csum,scidac_csuma,scidac_csumb; | ||||||
|       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); |       BinaryIO::writeRNG(sRNG, pRNG, rng, 0,nersc_csum,scidac_csuma,scidac_csumb); | ||||||
|       std::cout << GridLogMessage << "Written Binary RNG " << rng |  | ||||||
|                 << " checksum " << std::hex  |  | ||||||
| 		<< nersc_csum   <<"/" |  | ||||||
| 		<< scidac_csuma   <<"/" |  | ||||||
| 		<< scidac_csumb  |  | ||||||
| 		<< std::dec << std::endl; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|       { |  | ||||||
|       ScidacWriter _ScidacWriter(grid->IsBoss()); |       ScidacWriter _ScidacWriter(grid->IsBoss()); | ||||||
|       _ScidacWriter.open(config); |       _ScidacWriter.open(config); | ||||||
| 	_ScidacWriter.writeScidacFieldRecord(SmartConfig.get_U(false), MData); |       _ScidacWriter.writeScidacFieldRecord(U, MData); | ||||||
|       _ScidacWriter.close(); |       _ScidacWriter.close(); | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if ( Params.saveSmeared ) { |  | ||||||
| 	ScidacWriter _ScidacWriter(grid->IsBoss()); |  | ||||||
| 	_ScidacWriter.open(smr); |  | ||||||
| 	_ScidacWriter.writeScidacFieldRecord(SmartConfig.get_U(true), MData); |  | ||||||
| 	_ScidacWriter.close(); |  | ||||||
|       } |  | ||||||
|       std::cout << GridLogMessage << "Written Scidac Configuration on " << config << std::endl; |       std::cout << GridLogMessage << "Written Scidac Configuration on " << config << std::endl; | ||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
|   | |||||||
| @@ -66,7 +66,6 @@ public: | |||||||
| template <class FieldImplementation_, class SmearingPolicy, class RepresentationPolicy> | template <class FieldImplementation_, class SmearingPolicy, class RepresentationPolicy> | ||||||
| class Integrator { | class Integrator { | ||||||
| protected: | protected: | ||||||
| public: |  | ||||||
|   typedef FieldImplementation_ FieldImplementation; |   typedef FieldImplementation_ FieldImplementation; | ||||||
|   typedef typename FieldImplementation::Field MomentaField;  //for readability |   typedef typename FieldImplementation::Field MomentaField;  //for readability | ||||||
|   typedef typename FieldImplementation::Field Field; |   typedef typename FieldImplementation::Field Field; | ||||||
| @@ -97,6 +96,7 @@ public: | |||||||
|   { |   { | ||||||
|     t_P[level] += ep; |     t_P[level] += ep; | ||||||
|     update_P(P, U, level, ep); |     update_P(P, U, level, ep); | ||||||
|  |  | ||||||
|     std::cout << GridLogIntegrator << "[" << level << "] P " << " dt " << ep << " : t_P " << t_P[level] << std::endl; |     std::cout << GridLogIntegrator << "[" << level << "] P " << " dt " << ep << " : t_P " << t_P[level] << std::endl; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -130,20 +130,28 @@ public: | |||||||
|       Field force(U.Grid()); |       Field force(U.Grid()); | ||||||
|       conformable(U.Grid(), Mom.Grid()); |       conformable(U.Grid(), Mom.Grid()); | ||||||
|  |  | ||||||
|  |       Field& Us = Smearer.get_U(as[level].actions.at(a)->is_smeared); | ||||||
|       double start_force = usecond(); |       double start_force = usecond(); | ||||||
|  |  | ||||||
|  |       std::cout << GridLogMessage << "AuditForce["<<level<<"]["<<a<<"] before"<<std::endl; | ||||||
|  |        | ||||||
|       as[level].actions.at(a)->deriv_timer_start(); |       as[level].actions.at(a)->deriv_timer_start(); | ||||||
|       as[level].actions.at(a)->deriv(Smearer, force);  // deriv should NOT include Ta |       as[level].actions.at(a)->deriv(Us, force);  // deriv should NOT include Ta | ||||||
|       as[level].actions.at(a)->deriv_timer_stop(); |       as[level].actions.at(a)->deriv_timer_stop(); | ||||||
|  |  | ||||||
|  |       std::cout << GridLogMessage << "AuditForce["<<level<<"]["<<a<<"] after"<<std::endl; | ||||||
|  |  | ||||||
|  |       std::cout << GridLogIntegrator << "Smearing (on/off): " << as[level].actions.at(a)->is_smeared << std::endl; | ||||||
|       auto name = as[level].actions.at(a)->action_name(); |       auto name = as[level].actions.at(a)->action_name(); | ||||||
|  |       if (as[level].actions.at(a)->is_smeared) Smearer.smeared_force(force); | ||||||
|  |  | ||||||
|       force = FieldImplementation::projectForce(force); // Ta for gauge fields |       force = FieldImplementation::projectForce(force); // Ta for gauge fields | ||||||
|       double end_force = usecond(); |       double end_force = usecond(); | ||||||
|  |  | ||||||
|  |       //      DumpSliceNorm("force ",force,Nd-1); | ||||||
|       MomFilter->applyFilter(force); |       MomFilter->applyFilter(force); | ||||||
|  |  | ||||||
|       std::cout << GridLogIntegrator << " update_P : Level [" << level <<"]["<<a <<"] "<<name<<" dt "<<ep<<  std::endl; |       std::cout << GridLogIntegrator << " update_P : Level [" << level <<"]["<<a <<"] "<<name<<" dt "<<ep<<  std::endl; | ||||||
|  |       DumpSliceNorm("force filtered ",force,Nd-1); | ||||||
|        |        | ||||||
|       Real force_abs   = std::sqrt(norm2(force)/U.Grid()->gSites()); //average per-site norm.  nb. norm2(latt) = \sum_x norm2(latt[x])  |       Real force_abs   = std::sqrt(norm2(force)/U.Grid()->gSites()); //average per-site norm.  nb. norm2(latt) = \sum_x norm2(latt[x])  | ||||||
|       Real impulse_abs = force_abs * ep * HMC_MOMENTUM_DENOMINATOR;     |       Real impulse_abs = force_abs * ep * HMC_MOMENTUM_DENOMINATOR;     | ||||||
| @@ -369,9 +377,14 @@ public: | |||||||
| 	auto name = as[level].actions.at(actionID)->action_name(); | 	auto name = as[level].actions.at(actionID)->action_name(); | ||||||
|         std::cout << GridLogMessage << "refresh [" << level << "][" << actionID << "] "<<name << std::endl; |         std::cout << GridLogMessage << "refresh [" << level << "][" << actionID << "] "<<name << std::endl; | ||||||
|  |  | ||||||
|  |         Field& Us = Smearer.get_U(as[level].actions.at(actionID)->is_smeared); | ||||||
|  |  | ||||||
|  | 	std::cout << GridLogMessage << "AuditRefresh["<<level<<"]["<<actionID<<"] before"<<std::endl; | ||||||
|  |  | ||||||
| 	as[level].actions.at(actionID)->refresh_timer_start(); | 	as[level].actions.at(actionID)->refresh_timer_start(); | ||||||
|         as[level].actions.at(actionID)->refresh(Smearer, sRNG, pRNG); |         as[level].actions.at(actionID)->refresh(Us, sRNG, pRNG); | ||||||
| 	as[level].actions.at(actionID)->refresh_timer_stop(); | 	as[level].actions.at(actionID)->refresh_timer_stop(); | ||||||
|  | 	std::cout << GridLogMessage << "AuditRefresh["<<level<<"]["<<actionID<<"] after"<<std::endl; | ||||||
|  |  | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -412,9 +425,10 @@ public: | |||||||
|  |  | ||||||
|         // get gauge field from the SmearingPolicy and |         // get gauge field from the SmearingPolicy and | ||||||
|         // based on the boolean is_smeared in actionID |         // based on the boolean is_smeared in actionID | ||||||
|  |         Field& Us = Smearer.get_U(as[level].actions.at(actionID)->is_smeared); | ||||||
|         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] action eval " << std::endl; |         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] action eval " << std::endl; | ||||||
| 	        as[level].actions.at(actionID)->S_timer_start(); | 	        as[level].actions.at(actionID)->S_timer_start(); | ||||||
|         Hterm = as[level].actions.at(actionID)->S(Smearer); |         Hterm = as[level].actions.at(actionID)->S(Us); | ||||||
|    	        as[level].actions.at(actionID)->S_timer_stop(); |    	        as[level].actions.at(actionID)->S_timer_stop(); | ||||||
|         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] H = " << Hterm << std::endl; |         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] H = " << Hterm << std::endl; | ||||||
|         H += Hterm; |         H += Hterm; | ||||||
| @@ -455,10 +469,11 @@ public: | |||||||
|       for (int actionID = 0; actionID < as[level].actions.size(); ++actionID) { |       for (int actionID = 0; actionID < as[level].actions.size(); ++actionID) { | ||||||
|         // get gauge field from the SmearingPolicy and |         // get gauge field from the SmearingPolicy and | ||||||
|         // based on the boolean is_smeared in actionID |         // based on the boolean is_smeared in actionID | ||||||
|  |         Field& Us = Smearer.get_U(as[level].actions.at(actionID)->is_smeared); | ||||||
|         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] action eval " << std::endl; |         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] action eval " << std::endl; | ||||||
|  |  | ||||||
| 	        as[level].actions.at(actionID)->S_timer_start(); | 	        as[level].actions.at(actionID)->S_timer_start(); | ||||||
|         Hterm = as[level].actions.at(actionID)->S(Smearer); |  | ||||||
|  |         Hterm = as[level].actions.at(actionID)->Sinitial(Us); | ||||||
|    	        as[level].actions.at(actionID)->S_timer_stop(); |    	        as[level].actions.at(actionID)->S_timer_stop(); | ||||||
|  |  | ||||||
|         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] H = " << Hterm << std::endl; |         std::cout << GridLogMessage << "S [" << level << "][" << actionID << "] H = " << Hterm << std::endl; | ||||||
|   | |||||||
| @@ -34,13 +34,6 @@ NAMESPACE_BEGIN(Grid); | |||||||
| template <class Field> | template <class Field> | ||||||
| class HmcObservable { | class HmcObservable { | ||||||
|  public: |  public: | ||||||
|   virtual void TrajectoryComplete(int traj, |  | ||||||
|                                   ConfigurationBase<Field> &SmartConfig, |  | ||||||
|                                   GridSerialRNG &sRNG, |  | ||||||
|                                   GridParallelRNG &pRNG) |  | ||||||
|   { |  | ||||||
|     TrajectoryComplete(traj,SmartConfig.get_U(false),sRNG,pRNG); // Unsmeared observable |  | ||||||
|   }; |  | ||||||
|   virtual void TrajectoryComplete(int traj, |   virtual void TrajectoryComplete(int traj, | ||||||
|                                   Field &U, |                                   Field &U, | ||||||
|                                   GridSerialRNG &sRNG, |                                   GridSerialRNG &sRNG, | ||||||
|   | |||||||
| @@ -42,18 +42,6 @@ public: | |||||||
|   // necessary for HmcObservable compatibility |   // necessary for HmcObservable compatibility | ||||||
|   typedef typename Impl::Field Field; |   typedef typename Impl::Field Field; | ||||||
|  |  | ||||||
|   virtual void TrajectoryComplete(int traj, |  | ||||||
|                                   ConfigurationBase<Field> &SmartConfig, |  | ||||||
|                                   GridSerialRNG &sRNG, |  | ||||||
|                                   GridParallelRNG &pRNG) |  | ||||||
|   { |  | ||||||
|     std::cout << GridLogMessage << "+++++++++++++++++++"<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << "Unsmeared plaquette"<<std::endl; |  | ||||||
|     TrajectoryComplete(traj,SmartConfig.get_U(false),sRNG,pRNG); // Unsmeared observable |  | ||||||
|     std::cout << GridLogMessage << "Smeared plaquette"<<std::endl; |  | ||||||
|     TrajectoryComplete(traj,SmartConfig.get_U(true),sRNG,pRNG); // Unsmeared observable |  | ||||||
|     std::cout << GridLogMessage << "+++++++++++++++++++"<<std::endl; |  | ||||||
|   }; |  | ||||||
|   void TrajectoryComplete(int traj, |   void TrajectoryComplete(int traj, | ||||||
|                           Field &U, |                           Field &U, | ||||||
|                           GridSerialRNG &sRNG, |                           GridSerialRNG &sRNG, | ||||||
|   | |||||||
| @@ -19,13 +19,13 @@ public: | |||||||
|  |  | ||||||
|   NoSmearing(): ThinLinks(NULL) {} |   NoSmearing(): ThinLinks(NULL) {} | ||||||
|  |  | ||||||
|   virtual void set_Field(Field& U) { ThinLinks = &U; } |   void set_Field(Field& U) { ThinLinks = &U; } | ||||||
|  |  | ||||||
|   virtual void smeared_force(Field&) {} |   void smeared_force(Field&) const {} | ||||||
|  |  | ||||||
|   virtual Field& get_SmearedU() { return *ThinLinks; } |   Field& get_SmearedU() { return *ThinLinks; } | ||||||
|  |  | ||||||
|   virtual Field &get_U(bool smeared = false) |   Field &get_U(bool smeared = false) | ||||||
|   { |   { | ||||||
|     return *ThinLinks; |     return *ThinLinks; | ||||||
|   } |   } | ||||||
| @@ -235,7 +235,7 @@ public: | |||||||
|     : smearingLevels(0), StoutSmearing(nullptr), SmearedSet(), ThinLinks(NULL) {} |     : smearingLevels(0), StoutSmearing(nullptr), SmearedSet(), ThinLinks(NULL) {} | ||||||
|  |  | ||||||
|   // attach the smeared routines to the thin links U and fill the smeared set |   // attach the smeared routines to the thin links U and fill the smeared set | ||||||
|   virtual void set_Field(GaugeField &U) |   void set_Field(GaugeField &U) | ||||||
|   { |   { | ||||||
|     double start = usecond(); |     double start = usecond(); | ||||||
|     fill_smearedSet(U); |     fill_smearedSet(U); | ||||||
| @@ -245,7 +245,7 @@ public: | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   //==================================================================== |   //==================================================================== | ||||||
|   virtual void smeared_force(GaugeField &SigmaTilde)  |   void smeared_force(GaugeField &SigmaTilde) const | ||||||
|   { |   { | ||||||
|     if (smearingLevels > 0) |     if (smearingLevels > 0) | ||||||
|     { |     { | ||||||
| @@ -272,16 +272,14 @@ public: | |||||||
|       } |       } | ||||||
|       double end = usecond(); |       double end = usecond(); | ||||||
|       double time = (end - start)/ 1e3; |       double time = (end - start)/ 1e3; | ||||||
|       std::cout << GridLogMessage << " GaugeConfiguration: Smeared Force chain rule took " << time << " ms" << std::endl; |       std::cout << GridLogMessage << "Smearing force in " << time << " ms" << std::endl;   | ||||||
|     }  // if smearingLevels = 0 do nothing |     }  // if smearingLevels = 0 do nothing | ||||||
|     SigmaTilde=Gimpl::projectForce(SigmaTilde); // Ta |  | ||||||
|        |  | ||||||
|   } |   } | ||||||
|   //==================================================================== |   //==================================================================== | ||||||
|  |  | ||||||
|   virtual GaugeField& get_SmearedU() { return SmearedSet[smearingLevels - 1]; } |   GaugeField& get_SmearedU() { return SmearedSet[smearingLevels - 1]; } | ||||||
|  |  | ||||||
|   virtual GaugeField &get_U(bool smeared = false) |   GaugeField &get_U(bool smeared = false) | ||||||
|   { |   { | ||||||
|     // get the config, thin links by default |     // get the config, thin links by default | ||||||
|     if (smeared) |     if (smeared) | ||||||
|   | |||||||
| @@ -131,7 +131,6 @@ public: | |||||||
|     AdjMatrixField  X(grid); |     AdjMatrixField  X(grid); | ||||||
|     Complex ci(0,1); |     Complex ci(0,1); | ||||||
|  |  | ||||||
|     RealD t0 = usecond(); |  | ||||||
|     Ident = ComplexD(1.0); |     Ident = ComplexD(1.0); | ||||||
|     for(int d=0;d<Nd;d++){ |     for(int d=0;d<Nd;d++){ | ||||||
|       Umu[d] = peekLorentz(U, d); |       Umu[d] = peekLorentz(U, d); | ||||||
| @@ -162,8 +161,6 @@ public: | |||||||
|     // Assemble the N matrix |     // Assemble the N matrix | ||||||
|     ////////////////////////////////////////////////////////////////// |     ////////////////////////////////////////////////////////////////// | ||||||
|     // Computes ALL the staples -- could compute one only and do it here |     // Computes ALL the staples -- could compute one only and do it here | ||||||
|     RealD time; |  | ||||||
|     time=-usecond(); |  | ||||||
|     this->StoutSmearing->BaseSmear(C, U); |     this->StoutSmearing->BaseSmear(C, U); | ||||||
|     Cmu = peekLorentz(C, mu); |     Cmu = peekLorentz(C, mu); | ||||||
|  |  | ||||||
| @@ -172,10 +169,7 @@ public: | |||||||
|     ////////////////////////////////////////////////////////////////// |     ////////////////////////////////////////////////////////////////// | ||||||
|     // Ta so Z lives in Lie algabra |     // Ta so Z lives in Lie algabra | ||||||
|     Zx  = Ta(Cmu * adj(Umu[mu])); |     Zx  = Ta(Cmu * adj(Umu[mu])); | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "Z took "<<time<< " us"<<std::endl; |  | ||||||
|  |  | ||||||
|     time=-usecond(); |  | ||||||
|     // Move Z to the Adjoint Rep == make_adjoint_representation |     // Move Z to the Adjoint Rep == make_adjoint_representation | ||||||
|     ZxAd = Zero(); |     ZxAd = Zero(); | ||||||
|     for(int b=0;b<8;b++) { |     for(int b=0;b<8;b++) { | ||||||
| @@ -186,13 +180,10 @@ public: | |||||||
|       cplx = 2.0*trace(ci*tb*Zx); // my convention 1/2 delta ba |       cplx = 2.0*trace(ci*tb*Zx); // my convention 1/2 delta ba | ||||||
|       ZxAd = ZxAd + cplx * TRb; // is this right? YES - Guido used Anti herm Ta's and with bloody wrong sign. |       ZxAd = ZxAd + cplx * TRb; // is this right? YES - Guido used Anti herm Ta's and with bloody wrong sign. | ||||||
|     } |     } | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "ZxAd took "<<time<< " us"<<std::endl; |  | ||||||
|  |  | ||||||
|     ////////////////////////////////////// |     ////////////////////////////////////// | ||||||
|     // J(x) = 1 + Sum_k=1..N (-Zac)^k/(k+1)! |     // J(x) = 1 + Sum_k=1..N (-Zac)^k/(k+1)! | ||||||
|     ////////////////////////////////////// |     ////////////////////////////////////// | ||||||
|     time=-usecond(); |  | ||||||
|     X=1.0;  |     X=1.0;  | ||||||
|     JxAd = X; |     JxAd = X; | ||||||
|     mZxAd = (-1.0)*ZxAd;  |     mZxAd = (-1.0)*ZxAd;  | ||||||
| @@ -202,13 +193,10 @@ public: | |||||||
|       kpfac = kpfac /(k+1); |       kpfac = kpfac /(k+1); | ||||||
|       JxAd = JxAd + X * kpfac; |       JxAd = JxAd + X * kpfac; | ||||||
|     } |     } | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "Jx took "<<time<< " us"<<std::endl; |  | ||||||
|  |  | ||||||
|     ////////////////////////////////////// |     ////////////////////////////////////// | ||||||
|     // dJ(x)/dxe |     // dJ(x)/dxe | ||||||
|     ////////////////////////////////////// |     ////////////////////////////////////// | ||||||
|     time=-usecond(); |  | ||||||
|     std::vector<AdjMatrixField>  dJdX;    dJdX.resize(8,grid); |     std::vector<AdjMatrixField>  dJdX;    dJdX.resize(8,grid); | ||||||
|     AdjMatrixField tbXn(grid); |     AdjMatrixField tbXn(grid); | ||||||
|     AdjMatrixField sumXtbX(grid); |     AdjMatrixField sumXtbX(grid); | ||||||
| @@ -232,17 +220,12 @@ public: | |||||||
|       } |       } | ||||||
|       dJdX[b] = -dt2;  |       dJdX[b] = -dt2;  | ||||||
|     } |     } | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "dJx took "<<time<< " us"<<std::endl; |  | ||||||
|     ///////////////////////////////////////////////////////////////// |     ///////////////////////////////////////////////////////////////// | ||||||
|     // Mask Umu for this link |     // Mask Umu for this link | ||||||
|     ///////////////////////////////////////////////////////////////// |     ///////////////////////////////////////////////////////////////// | ||||||
|     time=-usecond(); |  | ||||||
|     PlaqL = Ident; |     PlaqL = Ident; | ||||||
|     PlaqR = Utmp*adj(Cmu); |     PlaqR = Utmp*adj(Cmu); | ||||||
|     ComputeNxy(PlaqL,PlaqR,NxxAd); |     ComputeNxy(PlaqL,PlaqR,NxxAd); | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "ComputeNxy took "<<time<< " us"<<std::endl; |  | ||||||
|      |      | ||||||
|     //////////////////////////// |     //////////////////////////// | ||||||
|     // Mab |     // Mab | ||||||
| @@ -253,12 +236,8 @@ public: | |||||||
|     ///////////////////////// |     ///////////////////////// | ||||||
|     // invert the 8x8 |     // invert the 8x8 | ||||||
|     ///////////////////////// |     ///////////////////////// | ||||||
|     time=-usecond(); |  | ||||||
|     MpAdInv = Inverse(MpAd); |     MpAdInv = Inverse(MpAd); | ||||||
|     time+=usecond(); |  | ||||||
|     std::cout << GridLogMessage << "MpAdInv took "<<time<< " us"<<std::endl; |  | ||||||
|      |      | ||||||
|     RealD t3a = usecond(); |  | ||||||
|     ///////////////////////////////////////////////////////////////// |     ///////////////////////////////////////////////////////////////// | ||||||
|     // Nxx Mp^-1 |     // Nxx Mp^-1 | ||||||
|     ///////////////////////////////////////////////////////////////// |     ///////////////////////////////////////////////////////////////// | ||||||
| @@ -304,7 +283,6 @@ public: | |||||||
|     GaugeField Fdet2(grid); |     GaugeField Fdet2(grid); | ||||||
|     GaugeLinkField Fdet_pol(grid); // one polarisation |     GaugeLinkField Fdet_pol(grid); // one polarisation | ||||||
|  |  | ||||||
|     RealD t4 = usecond(); |  | ||||||
|     for(int nu=0;nu<Nd;nu++){ |     for(int nu=0;nu<Nd;nu++){ | ||||||
|  |  | ||||||
|       if (nu!=mu) { |       if (nu!=mu) { | ||||||
| @@ -313,29 +291,20 @@ public: | |||||||
| 	//    |  | | 	//    |  | | ||||||
| 	//    x==    // nu polarisation -- clockwise | 	//    x==    // nu polarisation -- clockwise | ||||||
|  |  | ||||||
| 	time=-usecond(); |  | ||||||
| 	PlaqL=Ident; | 	PlaqL=Ident; | ||||||
|  |  | ||||||
| 	PlaqR=(-rho)*Gimpl::CovShiftForward(Umu[nu], nu, | 	PlaqR=(-rho)*Gimpl::CovShiftForward(Umu[nu], nu, | ||||||
|  	       Gimpl::CovShiftForward(Umu[mu], mu, |  	       Gimpl::CovShiftForward(Umu[mu], mu, | ||||||
| 	         Gimpl::CovShiftBackward(Umu[nu], nu, | 	         Gimpl::CovShiftBackward(Umu[nu], nu, | ||||||
| 		   Gimpl::CovShiftIdentityBackward(Utmp, mu)))); | 		   Gimpl::CovShiftIdentityBackward(Utmp, mu)))); | ||||||
| 	time+=usecond(); |  | ||||||
| 	std::cout << GridLogMessage << "PlaqLR took "<<time<< " us"<<std::endl; |  | ||||||
|  |  | ||||||
| 	time=-usecond(); |  | ||||||
| 	dJdXe_nMpInv_y =   dJdXe_nMpInv; | 	dJdXe_nMpInv_y =   dJdXe_nMpInv; | ||||||
| 	ComputeNxy(PlaqL,PlaqR,Nxy); | 	ComputeNxy(PlaqL,PlaqR,Nxy); | ||||||
| 	Fdet1_nu = transpose(Nxy)*dJdXe_nMpInv_y; | 	Fdet1_nu = transpose(Nxy)*dJdXe_nMpInv_y; | ||||||
| 	time+=usecond(); |  | ||||||
| 	std::cout << GridLogMessage << "ComputeNxy (occurs 6x) took "<<time<< " us"<<std::endl; |  | ||||||
|  |  | ||||||
| 	time=-usecond(); |  | ||||||
| 	PlaqR=(-1.0)*PlaqR; | 	PlaqR=(-1.0)*PlaqR; | ||||||
| 	Compute_MpInvJx_dNxxdSy(PlaqL,PlaqR,MpInvJx,FdetV); | 	Compute_MpInvJx_dNxxdSy(PlaqL,PlaqR,MpInvJx,FdetV); | ||||||
| 	Fdet2_nu = FdetV; | 	Fdet2_nu = FdetV; | ||||||
| 	time+=usecond(); |  | ||||||
| 	std::cout << GridLogMessage << "Compute_MpInvJx_dNxxSy (occurs 6x) took "<<time<< " us"<<std::endl; |  | ||||||
| 	 | 	 | ||||||
| 	//    x== | 	//    x== | ||||||
| 	//    |  | | 	//    |  | | ||||||
| @@ -447,7 +416,6 @@ public: | |||||||
| 	 | 	 | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     RealD t5 = usecond(); |  | ||||||
|  |  | ||||||
|     Fdet1_mu = Fdet1_mu + transpose(NxxAd)*dJdXe_nMpInv; |     Fdet1_mu = Fdet1_mu + transpose(NxxAd)*dJdXe_nMpInv; | ||||||
|  |  | ||||||
| @@ -455,13 +423,6 @@ public: | |||||||
|     InsertForce(Fdet2,Fdet2_mu,mu); |     InsertForce(Fdet2,Fdet2_mu,mu); | ||||||
|  |  | ||||||
|     force= (-0.5)*( Fdet1 + Fdet2); |     force= (-0.5)*( Fdet1 + Fdet2); | ||||||
|     RealD t1 = usecond(); |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce level took "<<t1-t0<<" us "<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce t3-t0 "<<t3a-t0<<" us "<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce t4-t3 dJdXe_nMpInv "<<t4-t3a<<" us "<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce t5-t4 mu nu loop "<<t5-t4<<" us "<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce t1-t5 "<<t1-t5<<" us "<<std::endl; |  | ||||||
|     std::cout << GridLogMessage << " logDetJacobianForce level took "<<t1-t0<<" us "<<std::endl; |  | ||||||
|   } |   } | ||||||
|   RealD logDetJacobianLevel(const GaugeField &U,int smr) |   RealD logDetJacobianLevel(const GaugeField &U,int smr) | ||||||
|   { |   { | ||||||
| @@ -735,10 +696,10 @@ private: | |||||||
| public: | public: | ||||||
|  |  | ||||||
|   /* Standard constructor */ |   /* Standard constructor */ | ||||||
|   SmearedConfigurationMasked(GridCartesian* _UGrid, unsigned int Nsmear, Smear_Stout<Gimpl>& Stout) |   SmearedConfigurationMasked(GridCartesian* _UGrid, unsigned int Nsmear, Smear_Stout<Gimpl>& Stout,bool domask=false) | ||||||
|     : SmearedConfiguration<Gimpl>(_UGrid, Nsmear,Stout) |     : SmearedConfiguration<Gimpl>(_UGrid, Nsmear,Stout) | ||||||
|   { |   { | ||||||
|     assert(Nsmear%(2*Nd)==0); // Or multiply by 8?? |     if(domask) assert(Nsmear%(2*Nd)==0); // Or multiply by 8?? | ||||||
|  |  | ||||||
|     // was resized in base class |     // was resized in base class | ||||||
|     assert(this->SmearedSet.size()==Nsmear); |     assert(this->SmearedSet.size()==Nsmear); | ||||||
| @@ -751,6 +712,7 @@ public: | |||||||
|     for (unsigned int i = 0; i < this->smearingLevels; ++i) { |     for (unsigned int i = 0; i < this->smearingLevels; ++i) { | ||||||
|  |  | ||||||
|       masks.push_back(*(new LatticeLorentzComplex(_UGrid))); |       masks.push_back(*(new LatticeLorentzComplex(_UGrid))); | ||||||
|  |       if (domask) { | ||||||
|  |  | ||||||
| 	int mu= (i/2) %Nd; | 	int mu= (i/2) %Nd; | ||||||
| 	int cb= (i%2); | 	int cb= (i%2); | ||||||
| @@ -765,6 +727,11 @@ public: | |||||||
| 	setCheckerboard(tmp,tmpcb); | 	setCheckerboard(tmp,tmpcb); | ||||||
| 	PokeIndex<LorentzIndex>(masks[i],tmp, mu); | 	PokeIndex<LorentzIndex>(masks[i],tmp, mu); | ||||||
| 	 | 	 | ||||||
|  |       } else { | ||||||
|  | 	for(int mu=0;mu<Nd;mu++){ | ||||||
|  | 	  PokeIndex<LorentzIndex>(masks[i],one, mu); | ||||||
|  | 	} | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     delete UrbGrid; |     delete UrbGrid; | ||||||
|   } |   } | ||||||
| @@ -797,14 +764,10 @@ public: | |||||||
|         tmp_mu = peekLorentz(*this->ThinLinks, mu) * peekLorentz(force, mu); |         tmp_mu = peekLorentz(*this->ThinLinks, mu) * peekLorentz(force, mu); | ||||||
|         pokeLorentz(SigmaTilde, tmp_mu, mu); |         pokeLorentz(SigmaTilde, tmp_mu, mu); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |  | ||||||
|       double end = usecond(); |       double end = usecond(); | ||||||
|       double time = (end - start)/ 1e3; |       double time = (end - start)/ 1e3; | ||||||
|       std::cout << GridLogMessage << " GaugeConfigurationMasked: Smeared Force chain rule took " << time << " ms" << std::endl;   |       std::cout << GridLogMessage << " GaugeConfigurationMasked: Smeared Force chain rule took " << time << " ms" << std::endl;   | ||||||
|  |  | ||||||
|     }  // if smearingLevels = 0 do nothing |     }  // if smearingLevels = 0 do nothing | ||||||
|     SigmaTilde=Gimpl::projectForce(SigmaTilde); // Ta |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -2,11 +2,15 @@ | |||||||
|  |  | ||||||
| Grid physics library, www.github.com/paboyle/Grid | Grid physics library, www.github.com/paboyle/Grid | ||||||
|  |  | ||||||
| Source file: ./lib/qcd/action/gauge/JacobianAction.h | Source file: ./lib/qcd/action/gauge/WilsonGaugeAction.h | ||||||
|  |  | ||||||
| Copyright (C) 2015 | Copyright (C) 2015 | ||||||
|  |  | ||||||
|  | Author: Azusa Yamaguchi <ayamaguc@staffmail.ed.ac.uk> | ||||||
| Author: Peter Boyle <paboyle@ph.ed.ac.uk> | Author: Peter Boyle <paboyle@ph.ed.ac.uk> | ||||||
|  | Author: neo <cossu@post.kek.jp> | ||||||
|  | Author: paboyle <paboyle@ph.ed.ac.uk> | ||||||
|  | Author: Guido Cossu <guido.cossu@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 | ||||||
|   | |||||||
| @@ -34,59 +34,6 @@ directory | |||||||
|  |  | ||||||
| NAMESPACE_BEGIN(Grid); | NAMESPACE_BEGIN(Grid); | ||||||
|  |  | ||||||
| template<int N, class Vec> |  | ||||||
| Lattice<iScalar<iScalar<iScalar<Vec> > > > Determinant(const Lattice<iScalar<iScalar<iMatrix<Vec, N> > > > &Umu) |  | ||||||
| { |  | ||||||
|   GridBase *grid=Umu.Grid(); |  | ||||||
|   auto lvol = grid->lSites(); |  | ||||||
|   Lattice<iScalar<iScalar<iScalar<Vec> > > > ret(grid); |  | ||||||
|  |  | ||||||
|   autoView(Umu_v,Umu,CpuRead); |  | ||||||
|   autoView(ret_v,ret,CpuWrite); |  | ||||||
|   thread_for(site,lvol,{ |  | ||||||
|     Eigen::MatrixXcd EigenU = Eigen::MatrixXcd::Zero(N,N); |  | ||||||
|     Coordinate lcoor; |  | ||||||
|     grid->LocalIndexToLocalCoor(site, lcoor); |  | ||||||
|     iScalar<iScalar<iMatrix<ComplexD, N> > > Us; |  | ||||||
|     peekLocalSite(Us, Umu_v, lcoor); |  | ||||||
|     for(int i=0;i<N;i++){ |  | ||||||
|       for(int j=0;j<N;j++){ |  | ||||||
| 	EigenU(i,j) = Us()()(i,j); |  | ||||||
|       }} |  | ||||||
|     ComplexD detD  = EigenU.determinant(); |  | ||||||
|     typename Vec::scalar_type det(detD.real(),detD.imag()); |  | ||||||
|     pokeLocalSite(det,ret_v,lcoor); |  | ||||||
|   }); |  | ||||||
|   return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template<int N, class Vec> |  | ||||||
| static void ProjectSUn(Lattice<iScalar<iScalar<iMatrix<Vec, N> > > > &Umu) |  | ||||||
| { |  | ||||||
|   Umu      = ProjectOnGroup(Umu); |  | ||||||
|   auto det = Determinant(Umu); |  | ||||||
|  |  | ||||||
|   det = conjugate(det); |  | ||||||
|  |  | ||||||
|   for(int i=0;i<N;i++){ |  | ||||||
|     auto element = PeekIndex<ColourIndex>(Umu,N-1,i); |  | ||||||
|     element = element * det; |  | ||||||
|     PokeIndex<ColourIndex>(Umu,element,Nc-1,i); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| template<int N,class Vec> |  | ||||||
| static void ProjectSUn(Lattice<iVector<iScalar<iMatrix<Vec, N> >,Nd> > &U) |  | ||||||
| { |  | ||||||
|   GridBase *grid=U.Grid(); |  | ||||||
|   // Reunitarise |  | ||||||
|   for(int mu=0;mu<Nd;mu++){ |  | ||||||
|     auto Umu = PeekIndex<LorentzIndex>(U,mu); |  | ||||||
|     Umu      = ProjectOnGroup(Umu); |  | ||||||
|     ProjectSUn(Umu); |  | ||||||
|     PokeIndex<LorentzIndex>(U,Umu,mu); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <int ncolour> | template <int ncolour> | ||||||
| class SU { | class SU { | ||||||
| public: | public: | ||||||
| @@ -794,14 +741,8 @@ public: | |||||||
|     typedef Lattice<vMatrixType> LatticeMatrixType; |     typedef Lattice<vMatrixType> LatticeMatrixType; | ||||||
|  |  | ||||||
|     LatticeMatrixType Umu(out.Grid()); |     LatticeMatrixType Umu(out.Grid()); | ||||||
|     LatticeMatrixType tmp(out.Grid()); |  | ||||||
|     for (int mu = 0; mu < Nd; mu++) { |     for (int mu = 0; mu < Nd; mu++) { | ||||||
|       //      LieRandomize(pRNG, Umu, 1.0); |       LieRandomize(pRNG, Umu, 1.0); | ||||||
|       //      PokeIndex<LorentzIndex>(out, Umu, mu); |  | ||||||
|       gaussian(pRNG,Umu); |  | ||||||
|       tmp = Ta(Umu); |  | ||||||
|       taExp(tmp,Umu); |  | ||||||
|       ProjectSUn(Umu); |  | ||||||
|       PokeIndex<LorentzIndex>(out, Umu, mu); |       PokeIndex<LorentzIndex>(out, Umu, mu); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -857,6 +798,30 @@ public: | |||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | template<int N> | ||||||
|  | LatticeComplexD Determinant(const Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) | ||||||
|  | { | ||||||
|  |   GridBase *grid=Umu.Grid(); | ||||||
|  |   auto lvol = grid->lSites(); | ||||||
|  |   LatticeComplexD ret(grid); | ||||||
|  |  | ||||||
|  |   autoView(Umu_v,Umu,CpuRead); | ||||||
|  |   autoView(ret_v,ret,CpuWrite); | ||||||
|  |   thread_for(site,lvol,{ | ||||||
|  |     Eigen::MatrixXcd EigenU = Eigen::MatrixXcd::Zero(N,N); | ||||||
|  |     Coordinate lcoor; | ||||||
|  |     grid->LocalIndexToLocalCoor(site, lcoor); | ||||||
|  |     iScalar<iScalar<iMatrix<ComplexD, N> > > Us; | ||||||
|  |     peekLocalSite(Us, Umu_v, lcoor); | ||||||
|  |     for(int i=0;i<N;i++){ | ||||||
|  |       for(int j=0;j<N;j++){ | ||||||
|  | 	EigenU(i,j) = Us()()(i,j); | ||||||
|  |       }} | ||||||
|  |     ComplexD det = EigenU.determinant(); | ||||||
|  |     pokeLocalSite(det,ret_v,lcoor); | ||||||
|  |   }); | ||||||
|  |   return ret; | ||||||
|  | } | ||||||
| template<int N> | template<int N> | ||||||
| Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > Inverse(const Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) | Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > Inverse(const Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) | ||||||
| { | { | ||||||
| @@ -886,6 +851,32 @@ Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > Inverse(const Lattice<iScala | |||||||
|   }); |   }); | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|  | template<int N> | ||||||
|  | static void ProjectSUn(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) | ||||||
|  | { | ||||||
|  |   Umu      = ProjectOnGroup(Umu); | ||||||
|  |   auto det = Determinant(Umu); | ||||||
|  |  | ||||||
|  |   det = conjugate(det); | ||||||
|  |  | ||||||
|  |   for(int i=0;i<N;i++){ | ||||||
|  |     auto element = PeekIndex<ColourIndex>(Umu,N-1,i); | ||||||
|  |     element = element * det; | ||||||
|  |     PokeIndex<ColourIndex>(Umu,element,Nc-1,i); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | template<int N> | ||||||
|  | static void ProjectSUn(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >,Nd> > &U) | ||||||
|  | { | ||||||
|  |   GridBase *grid=U.Grid(); | ||||||
|  |   // Reunitarise | ||||||
|  |   for(int mu=0;mu<Nd;mu++){ | ||||||
|  |     auto Umu = PeekIndex<LorentzIndex>(U,mu); | ||||||
|  |     Umu      = ProjectOnGroup(Umu); | ||||||
|  |     ProjectSUn(Umu); | ||||||
|  |     PokeIndex<LorentzIndex>(U,Umu,mu); | ||||||
|  |   } | ||||||
|  | } | ||||||
| // Explicit specialisation for SU(3). | // Explicit specialisation for SU(3). | ||||||
| // Explicit specialisation for SU(3). | // Explicit specialisation for SU(3). | ||||||
| static void | static void | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| BREW=/opt/local/ | BREW=/opt/local/ | ||||||
| MPICXX=mpicxx CXX=c++-12 ../../configure --enable-simd=GEN --enable-comms=mpi-auto --enable-unified=yes --prefix $HOME/QCD/GridInstall --with-lime=/Users/peterboyle/QCD/SciDAC/install/ --with-openssl=$BREW --disable-fermion-reps --disable-gparity --disable-debug | MPICXX=mpicxx CXX=c++-12 ../../configure --enable-simd=GEN --enable-comms=mpi-auto --enable-unified=yes --prefix $HOME/QCD/GridInstall --with-lime=/Users/peterboyle/QCD/SciDAC/install/ --with-openssl=$BREW --disable-fermion-reps --disable-gparity  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -32,12 +32,9 @@ Author: Peter Boyle <pboyle@bnl.gov> | |||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Grid; | using namespace Grid; | ||||||
|  |  | ||||||
| typedef MobiusFermionD FermionAction; |  | ||||||
| typedef WilsonImplD FimplD; |  | ||||||
| typedef WilsonImplD FermionImplPolicy; |  | ||||||
|  |  | ||||||
| template<class Gimpl> | template<class Gimpl> | ||||||
| void ForceTest(Action<LatticeGaugeField> &action,ConfigurationBase<LatticeGaugeField> & smU,MomentumFilterBase<LatticeGaugeField> &Filter) | void ForceTest(Action<LatticeGaugeField> &action,SmearedConfigurationMasked<PeriodicGimplR> & smU,MomentumFilterBase<LatticeGaugeField> &Filter) | ||||||
| { | { | ||||||
|   LatticeGaugeField U = smU.get_U(false); // unsmeared config |   LatticeGaugeField U = smU.get_U(false); // unsmeared config | ||||||
|   GridBase *UGrid = U.Grid(); |   GridBase *UGrid = U.Grid(); | ||||||
| @@ -54,14 +51,14 @@ void ForceTest(Action<LatticeGaugeField> &action,ConfigurationBase<LatticeGaugeF | |||||||
|   std::cout << GridLogMessage << " Force test for "<<action.action_name()<<std::endl; |   std::cout << GridLogMessage << " Force test for "<<action.action_name()<<std::endl; | ||||||
|   std::cout << GridLogMessage << "*********************************************************"<<std::endl; |   std::cout << GridLogMessage << "*********************************************************"<<std::endl; | ||||||
|    |    | ||||||
|   RealD eps=0.01; |   RealD eps=0.005; | ||||||
|  |  | ||||||
|   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; |   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; | ||||||
|   std::cout << GridLogMessage << " Refresh "<<action.action_name()<<std::endl; |   std::cout << GridLogMessage << " Refresh "<<action.action_name()<<std::endl; | ||||||
|   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; |   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; | ||||||
|    |    | ||||||
|   Gimpl::generate_momenta(P,sRNG,RNG4); |   Gimpl::generate_momenta(P,sRNG,RNG4); | ||||||
|   //  Filter.applyFilter(P); |   Filter.applyFilter(P); | ||||||
|  |  | ||||||
|   action.refresh(smU,sRNG,RNG4); |   action.refresh(smU,sRNG,RNG4); | ||||||
|  |  | ||||||
| @@ -79,7 +76,7 @@ void ForceTest(Action<LatticeGaugeField> &action,ConfigurationBase<LatticeGaugeF | |||||||
|   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; |   std::cout << GridLogMessage << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl; | ||||||
|   action.deriv(smU,UdSdU); |   action.deriv(smU,UdSdU); | ||||||
|   UdSdU = Ta(UdSdU); |   UdSdU = Ta(UdSdU); | ||||||
|   //  Filter.applyFilter(UdSdU); |   Filter.applyFilter(UdSdU); | ||||||
|  |  | ||||||
|   DumpSliceNorm("Force",UdSdU,Nd-1); |   DumpSliceNorm("Force",UdSdU,Nd-1); | ||||||
|    |    | ||||||
| @@ -97,7 +94,7 @@ void ForceTest(Action<LatticeGaugeField> &action,ConfigurationBase<LatticeGaugeF | |||||||
|   for(int mu=0;mu<Nd;mu++){ |   for(int mu=0;mu<Nd;mu++){ | ||||||
|     auto UdSdUmu = PeekIndex<LorentzIndex>(UdSdU,mu); |     auto UdSdUmu = PeekIndex<LorentzIndex>(UdSdU,mu); | ||||||
|     Pmu= PeekIndex<LorentzIndex>(P,mu); |     Pmu= PeekIndex<LorentzIndex>(P,mu); | ||||||
|     dS = dS - trace(Pmu*UdSdUmu)*eps*2.0*HMC_MOMENTUM_DENOMINATOR; |     dS = dS - trace(Pmu*UdSdUmu)*eps*2.0*2.0; | ||||||
|   } |   } | ||||||
|   ComplexD dSpred    = sum(dS); |   ComplexD dSpred    = sum(dS); | ||||||
|   RealD diff =  S2-S1-dSpred.real(); |   RealD diff =  S2-S1-dSpred.real(); | ||||||
| @@ -128,10 +125,7 @@ int main (int argc, char ** argv) | |||||||
|   const int Ls=12; |   const int Ls=12; | ||||||
|   const int Nt = latt_size[3]; |   const int Nt = latt_size[3]; | ||||||
|   GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi()); |   GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi()); | ||||||
|   GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid); |  | ||||||
|   GridCartesian         * FGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid); |   GridCartesian         * FGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid); | ||||||
|   GridRedBlackCartesian * FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   ///////////////////// Gauge Field and Gauge Forces //////////////////////////// |   ///////////////////// Gauge Field and Gauge Forces //////////////////////////// | ||||||
|   LatticeGaugeField U(UGrid); |   LatticeGaugeField U(UGrid); | ||||||
| @@ -147,40 +141,17 @@ int main (int argc, char ** argv) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|    |    | ||||||
|   WilsonGaugeActionR  PlaqAction(6.0); |   RealD beta=6.0; | ||||||
|   IwasakiGaugeActionR RectAction(2.13); |   WilsonGaugeActionR  PlaqAction(beta); | ||||||
|   PlaqAction.is_smeared = true;   |   IwasakiGaugeActionR RectAction(beta); | ||||||
|   RectAction.is_smeared = true;   |  | ||||||
|  |  | ||||||
|   //////////////////////////////////// |  | ||||||
|   // Fermion Action |  | ||||||
|   //////////////////////////////////// |  | ||||||
|   RealD mass=0.01;  |  | ||||||
|   RealD pvmass=1.0;  |  | ||||||
|   RealD M5=1.8;  |  | ||||||
|   RealD b=1.5; |  | ||||||
|   RealD c=0.5; |  | ||||||
|    |  | ||||||
|   // Double versions |  | ||||||
|   std::vector<Complex> boundary = {1,1,1,-1}; |  | ||||||
|   FermionAction::ImplParams Params(boundary); |  | ||||||
|   FermionAction DdwfPeriodic(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,Params); |  | ||||||
|   FermionAction PVPeriodic  (U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,pvmass,M5,b,c,Params); |  | ||||||
|  |  | ||||||
|   double StoppingCondition = 1.0e-8; |  | ||||||
|   double MaxCGIterations = 50000; |  | ||||||
|   ConjugateGradient<LatticeFermion>  CG(StoppingCondition,MaxCGIterations); |  | ||||||
|  |  | ||||||
|   TwoFlavourRatioPseudoFermionAction<FimplD> Nf2(PVPeriodic, DdwfPeriodic,CG,CG); |  | ||||||
|   Nf2.is_smeared = true;   |  | ||||||
|  |  | ||||||
|   //////////////////////////////////////////////// |   //////////////////////////////////////////////// | ||||||
|   // Plaquette only FTHMC smearer |   // Plaquette only FTHMC smearer | ||||||
|   //////////////////////////////////////////////// |   //////////////////////////////////////////////// | ||||||
|   double rho = 0.1; |   double rho = 0.1; | ||||||
|   Smear_Stout<PeriodicGimplR> Smearer(rho); |   Smear_Stout<PeriodicGimplR> Smearer(rho); | ||||||
|   SmearedConfigurationMasked<PeriodicGimplR> SmartConfig(UGrid,2*Nd,Smearer); |   SmearedConfigurationMasked<PeriodicGimplR> SmartConfig(UGrid,2*Nd,Smearer,true); | ||||||
|   SmearedConfiguration<PeriodicGimplR> StoutConfig(UGrid,1,Smearer); |  | ||||||
|  |  | ||||||
|   JacobianAction<PeriodicGimplR> Jacobian(&SmartConfig); |   JacobianAction<PeriodicGimplR> Jacobian(&SmartConfig); | ||||||
|    |    | ||||||
| @@ -188,32 +159,12 @@ int main (int argc, char ** argv) | |||||||
|   // Run some tests |   // Run some tests | ||||||
|   //////////////////////////////////////////////// |   //////////////////////////////////////////////// | ||||||
|   MomentumFilterNone<LatticeGaugeField> FilterNone; |   MomentumFilterNone<LatticeGaugeField> FilterNone; | ||||||
|  |  | ||||||
|   std::cout << " *********  FIELD TRANSFORM SMEARING ***** "<<std::endl; |  | ||||||
|  |  | ||||||
|   SmartConfig.set_Field(U); |   SmartConfig.set_Field(U); | ||||||
|   ForceTest<GimplTypesR>(PlaqAction,SmartConfig,FilterNone); |   ForceTest<GimplTypesR>(PlaqAction,SmartConfig,FilterNone); | ||||||
|  |  | ||||||
|   SmartConfig.set_Field(U); |   SmartConfig.set_Field(U); | ||||||
|   ForceTest<GimplTypesR>(RectAction,SmartConfig,FilterNone); |   ForceTest<GimplTypesR>(RectAction,SmartConfig,FilterNone); | ||||||
|  |  | ||||||
|   SmartConfig.set_Field(U); |   SmartConfig.set_Field(U); | ||||||
|   ForceTest<GimplTypesR>(Jacobian,SmartConfig,FilterNone); |   ForceTest<GimplTypesR>(Jacobian,SmartConfig,FilterNone); | ||||||
|  |  | ||||||
|   SmartConfig.set_Field(U); |  | ||||||
|   ForceTest<GimplTypesR>(Nf2,SmartConfig,FilterNone); |  | ||||||
|  |  | ||||||
|   std::cout << " *********    STOUT SMEARING ***** "<<std::endl; |  | ||||||
|  |  | ||||||
|   StoutConfig.set_Field(U); |  | ||||||
|   ForceTest<GimplTypesR>(PlaqAction,StoutConfig,FilterNone); |  | ||||||
|  |  | ||||||
|   StoutConfig.set_Field(U); |  | ||||||
|   ForceTest<GimplTypesR>(RectAction,StoutConfig,FilterNone); |  | ||||||
|    |  | ||||||
|   StoutConfig.set_Field(U); |  | ||||||
|   ForceTest<GimplTypesR>(Nf2,StoutConfig,FilterNone); |  | ||||||
|    |  | ||||||
|  |  | ||||||
|   Grid_finalize(); |   Grid_finalize(); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user