mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Optional checkpoint smeared configs for FTHMC
This commit is contained in:
		@@ -284,11 +284,12 @@ 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, Ucur, sRNG, pRNG);
 | 
					        Observables[obs]->TrajectoryComplete(traj + 1, TheIntegrator.Smearer, sRNG, pRNG);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      std::cout << GridLogHMC << ":::::::::::::::::::::::::::::::::::::::::::" << std::endl;
 | 
					      std::cout << GridLogHMC << ":::::::::::::::::::::::::::::::::::::::::::" << std::endl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,13 +35,16 @@ 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 rn = "rng",
 | 
					  CheckpointerParameters(std::string cf = "cfg", std::string sf="cfg_smr" , 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){};
 | 
				
			||||||
@@ -61,13 +64,21 @@ 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 &rng_file) {
 | 
					                       std::string &conf_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;
 | 
				
			||||||
@@ -84,6 +95,11 @@ 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,11 +61,14 @@ public:
 | 
				
			|||||||
    fout.close();
 | 
					    fout.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TrajectoryComplete(int traj, Field &U, GridSerialRNG &sRNG, GridParallelRNG &pRNG) {
 | 
					  void TrajectoryComplete(int traj,
 | 
				
			||||||
 | 
								  ConfigurationBase<Field> &SmartConfig,
 | 
				
			||||||
 | 
								  GridSerialRNG &sRNG, GridParallelRNG &pRNG)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((traj % Params.saveInterval) == 0) {
 | 
					    if ((traj % Params.saveInterval) == 0) {
 | 
				
			||||||
      std::string config, rng;
 | 
					      std::string config, rng, smr;
 | 
				
			||||||
      this->build_filenames(traj, Params, config, rng);
 | 
					      this->build_filenames(traj, Params, config, smr, rng);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      uint32_t nersc_csum;
 | 
					      uint32_t nersc_csum;
 | 
				
			||||||
      uint32_t scidac_csuma;
 | 
					      uint32_t scidac_csuma;
 | 
				
			||||||
@@ -74,9 +77,15 @@ 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);
 | 
				
			||||||
      truncate(config);
 | 
					      std::cout << GridLogMessage << "Written Binary RNG " << rng
 | 
				
			||||||
 | 
					                << " checksum " << std::hex 
 | 
				
			||||||
 | 
							<< nersc_csum   <<"/"
 | 
				
			||||||
 | 
							<< scidac_csuma   <<"/"
 | 
				
			||||||
 | 
							<< scidac_csumb 
 | 
				
			||||||
 | 
							<< std::dec << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      BinaryIO::writeLatticeObject<vobj, sobj_double>(U, config, munge, 0, Params.format,
 | 
					      truncate(config);
 | 
				
			||||||
 | 
					      BinaryIO::writeLatticeObject<vobj, sobj_double>(SmartConfig.get_U(false), 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
 | 
				
			||||||
@@ -85,6 +94,18 @@ 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,17 +69,27 @@ public:
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TrajectoryComplete(int traj, GaugeField &U, GridSerialRNG &sRNG,
 | 
					  void TrajectoryComplete(int traj,
 | 
				
			||||||
 | 
								  ConfigurationBase<GaugeField> &SmartConfig,
 | 
				
			||||||
 | 
								  GridSerialRNG &sRNG,
 | 
				
			||||||
                          GridParallelRNG &pRNG) {
 | 
					                          GridParallelRNG &pRNG) {
 | 
				
			||||||
    if ((traj % Params.saveInterval) == 0) {
 | 
					    if ((traj % Params.saveInterval) == 0) {
 | 
				
			||||||
      std::string config, rng;
 | 
					      std::string config, rng, smr;
 | 
				
			||||||
      this->build_filenames(traj, Params, config, rng);
 | 
					      this->build_filenames(traj, Params, config, rng);
 | 
				
			||||||
      GridBase *grid = U.Grid();
 | 
					      GridBase *grid = SmartConfig.get_U(false).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>(U, traj, config, config);
 | 
					      _IldgWriter.writeConfiguration<GaugeStats>(SmartConfig.get_U(false), traj, config, config);
 | 
				
			||||||
      _IldgWriter.close();
 | 
					      _IldgWriter.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      std::cout << GridLogMessage << "Written ILDG Configuration on " << config
 | 
					      std::cout << GridLogMessage << "Written ILDG Configuration on " << config
 | 
				
			||||||
@@ -88,6 +98,21 @@ 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,23 +52,29 @@ public:
 | 
				
			|||||||
    Params.format = "IEEE64BIG";  // fixed, overwrite any other choice
 | 
					    Params.format = "IEEE64BIG";  // fixed, overwrite any other choice
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TrajectoryComplete(int traj, GaugeField &U, GridSerialRNG &sRNG,
 | 
					  virtual void TrajectoryComplete(int traj,
 | 
				
			||||||
                          GridParallelRNG &pRNG) {
 | 
					                                  ConfigurationBase<GaugeField> &SmartConfig,
 | 
				
			||||||
 | 
					                                  GridSerialRNG &sRNG,
 | 
				
			||||||
 | 
					                                  GridParallelRNG &pRNG)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
    if ((traj % Params.saveInterval) == 0) {
 | 
					    if ((traj % Params.saveInterval) == 0) {
 | 
				
			||||||
      std::string config, rng;
 | 
					      std::string config, rng, smr;
 | 
				
			||||||
      this->build_filenames(traj, Params, config, rng);
 | 
					      this->build_filenames(traj, Params, config, smr, 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>(U, config, tworow, precision32);
 | 
					      NerscIO::writeConfiguration<GaugeStats>(SmartConfig.get_U(false), 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;
 | 
					    std::string config, rng, smr;
 | 
				
			||||||
    this->build_filenames(traj, Params, config, rng);
 | 
					    this->build_filenames(traj, Params, config, smr, rng );
 | 
				
			||||||
    this->check_filename(rng);
 | 
					    this->check_filename(rng);
 | 
				
			||||||
    this->check_filename(config);
 | 
					    this->check_filename(config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,19 +70,37 @@ class ScidacHmcCheckpointer : public BaseHmcCheckpointer<Implementation> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TrajectoryComplete(int traj, Field &U, GridSerialRNG &sRNG,
 | 
					  void TrajectoryComplete(int traj, 
 | 
				
			||||||
 | 
								  ConfigurationBase<Field> &SmartConfig,
 | 
				
			||||||
 | 
								  GridSerialRNG &sRNG,
 | 
				
			||||||
                          GridParallelRNG &pRNG) {
 | 
					                          GridParallelRNG &pRNG) {
 | 
				
			||||||
    if ((traj % Params.saveInterval) == 0) {
 | 
					    if ((traj % Params.saveInterval) == 0) {
 | 
				
			||||||
      std::string config, rng;
 | 
					      std::string config, rng,smr;
 | 
				
			||||||
      this->build_filenames(traj, Params, config, rng);
 | 
					      this->build_filenames(traj, Params, config, smr, rng);
 | 
				
			||||||
      GridBase *grid = U.Grid();
 | 
					      GridBase *grid = SmartConfig.get_U(false).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(U, MData);
 | 
						_ScidacWriter.writeScidacFieldRecord(SmartConfig.get_U(false), 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;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -132,14 +132,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      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(Smearer, 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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      auto name = as[level].actions.at(a)->action_name();
 | 
					      auto name = as[level].actions.at(a)->action_name();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      force = FieldImplementation::projectForce(force); // Ta for gauge fields
 | 
					      force = FieldImplementation::projectForce(force); // Ta for gauge fields
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,13 @@ 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,6 +42,18 @@ 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,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user