mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Working on the 5d
This commit is contained in:
		@@ -23,9 +23,9 @@ 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
 | 
			
		||||
*************************************************************************************/
 | 
			
		||||
  See the full license in the file "LICENSE" in the top level distribution
 | 
			
		||||
  directory
 | 
			
		||||
  *************************************************************************************/
 | 
			
		||||
/*  END LEGAL */
 | 
			
		||||
#ifndef GENERIC_HMC_RUNNER
 | 
			
		||||
#define GENERIC_HMC_RUNNER
 | 
			
		||||
@@ -33,165 +33,169 @@ directory
 | 
			
		||||
namespace Grid {
 | 
			
		||||
namespace QCD {
 | 
			
		||||
 | 
			
		||||
// Virtual Class for HMC specific for gauge theories
 | 
			
		||||
// implement a specific theory by defining the BuildTheAction
 | 
			
		||||
template <class Implementation,
 | 
			
		||||
          class RepresentationsPolicy = NoHirep>
 | 
			
		||||
class BinaryHmcRunnerTemplate {
 | 
			
		||||
 public:
 | 
			
		||||
  INHERIT_FIELD_TYPES(Implementation);
 | 
			
		||||
  typedef Implementation ImplPolicy;
 | 
			
		||||
  // Virtual Class for HMC specific for gauge theories
 | 
			
		||||
  // implement a specific theory by defining the BuildTheAction
 | 
			
		||||
  template <class Implementation, class RepresentationsPolicy = NoHirep>
 | 
			
		||||
  class BinaryHmcRunnerTemplate {
 | 
			
		||||
  public:
 | 
			
		||||
    INHERIT_FIELD_TYPES(Implementation);
 | 
			
		||||
    typedef Implementation ImplPolicy;
 | 
			
		||||
 | 
			
		||||
  enum StartType_t { ColdStart, HotStart, TepidStart, CheckpointStart };
 | 
			
		||||
    enum StartType_t { ColdStart,
 | 
			
		||||
                       HotStart,
 | 
			
		||||
                       TepidStart,
 | 
			
		||||
                       CheckpointStart };
 | 
			
		||||
 | 
			
		||||
  ActionSet<Field, RepresentationsPolicy> TheAction;
 | 
			
		||||
  
 | 
			
		||||
  // A vector of HmcObservable 
 | 
			
		||||
  // that can be injected from outside  
 | 
			
		||||
  std::vector< HmcObservable<typename Implementation::Field>* > ObservablesList;
 | 
			
		||||
    ActionSet<Field, RepresentationsPolicy> TheAction;
 | 
			
		||||
 | 
			
		||||
  IntegratorParameters MDparameters;
 | 
			
		||||
    // A vector of HmcObservable
 | 
			
		||||
    // that can be injected from outside
 | 
			
		||||
    std::vector<HmcObservable<typename Implementation::Field> *>
 | 
			
		||||
        ObservablesList;
 | 
			
		||||
 | 
			
		||||
  GridCartesian *UGrid;
 | 
			
		||||
  GridCartesian *FGrid;
 | 
			
		||||
  GridRedBlackCartesian *UrbGrid;
 | 
			
		||||
  GridRedBlackCartesian *FrbGrid;
 | 
			
		||||
    IntegratorParameters MDparameters;
 | 
			
		||||
 | 
			
		||||
  std::vector<int> SerialSeed;
 | 
			
		||||
  std::vector<int> ParallelSeed;
 | 
			
		||||
    GridCartesian *        UGrid;
 | 
			
		||||
    GridCartesian *        FGrid;
 | 
			
		||||
    GridRedBlackCartesian *UrbGrid;
 | 
			
		||||
    GridRedBlackCartesian *FrbGrid;
 | 
			
		||||
 | 
			
		||||
  void RNGSeeds(std::vector<int> S, std::vector<int> P){
 | 
			
		||||
    SerialSeed = S;
 | 
			
		||||
    ParallelSeed = P;
 | 
			
		||||
  }
 | 
			
		||||
    std::vector<int> SerialSeed;
 | 
			
		||||
    std::vector<int> ParallelSeed;
 | 
			
		||||
 | 
			
		||||
  virtual void BuildTheAction(int argc, char **argv) = 0;  // necessary?
 | 
			
		||||
    void RNGSeeds(std::vector<int> S, std::vector<int> P) {
 | 
			
		||||
      SerialSeed   = S;
 | 
			
		||||
      ParallelSeed = P;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  // A couple of wrapper classes
 | 
			
		||||
  template <class IOCheckpointer>
 | 
			
		||||
  void Run(int argc, char **argv, IOCheckpointer &Checkpoint) {
 | 
			
		||||
    NoSmearing<Implementation> S;
 | 
			
		||||
    Runner(argc, argv, Checkpoint, S);
 | 
			
		||||
  }
 | 
			
		||||
    virtual void BuildTheAction(int argc, char **argv) = 0; // necessary?
 | 
			
		||||
 | 
			
		||||
  template <class IOCheckpointer, class SmearingPolicy>
 | 
			
		||||
  void Run(int argc, char **argv, IOCheckpointer &CP, SmearingPolicy &S) {
 | 
			
		||||
    Runner(argc, argv, CP, S);
 | 
			
		||||
  }
 | 
			
		||||
  //////////////////////////////
 | 
			
		||||
    // A couple of wrapper classes
 | 
			
		||||
    template <class IOCheckpointer>
 | 
			
		||||
    void Run(int argc, char **argv, IOCheckpointer &Checkpoint) {
 | 
			
		||||
      NoSmearing<Implementation> S;
 | 
			
		||||
      Runner(argc, argv, Checkpoint, S);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  template <class SmearingPolicy, class IOCheckpointer >
 | 
			
		||||
  void Runner(int argc, char **argv, IOCheckpointer &Checkpoint,
 | 
			
		||||
           SmearingPolicy &Smearing) {
 | 
			
		||||
    StartType_t StartType = HotStart;
 | 
			
		||||
    template <class IOCheckpointer, class SmearingPolicy>
 | 
			
		||||
    void Run(int argc, char **argv, IOCheckpointer &CP, SmearingPolicy &S) {
 | 
			
		||||
      Runner(argc, argv, CP, S);
 | 
			
		||||
    }
 | 
			
		||||
    //////////////////////////////
 | 
			
		||||
 | 
			
		||||
    std::string arg;
 | 
			
		||||
    template <class SmearingPolicy, class IOCheckpointer>
 | 
			
		||||
    void Runner(int             argc,
 | 
			
		||||
                char **         argv,
 | 
			
		||||
                IOCheckpointer &Checkpoint,
 | 
			
		||||
                SmearingPolicy &Smearing) {
 | 
			
		||||
      StartType_t StartType = HotStart;
 | 
			
		||||
 | 
			
		||||
    if (GridCmdOptionExists(argv, argv + argc, "--StartType")) {
 | 
			
		||||
      arg = GridCmdOptionPayload(argv, argv + argc, "--StartType");
 | 
			
		||||
      if (arg == "HotStart") {
 | 
			
		||||
        StartType = HotStart;
 | 
			
		||||
      } else if (arg == "ColdStart") {
 | 
			
		||||
        StartType = ColdStart;
 | 
			
		||||
      } else if (arg == "TepidStart") {
 | 
			
		||||
        StartType = TepidStart;
 | 
			
		||||
      } else if (arg == "CheckpointStart") {
 | 
			
		||||
        StartType = CheckpointStart;
 | 
			
		||||
      } else {
 | 
			
		||||
        std::cout << GridLogError << "Unrecognized option in --StartType\n";
 | 
			
		||||
        std::cout
 | 
			
		||||
            << GridLogError
 | 
			
		||||
            << "Valid [HotStart, ColdStart, TepidStart, CheckpointStart]\n";
 | 
			
		||||
        assert(0);
 | 
			
		||||
      std::string arg;
 | 
			
		||||
 | 
			
		||||
      if (GridCmdOptionExists(argv, argv + argc, "--StartType")) {
 | 
			
		||||
        arg = GridCmdOptionPayload(argv, argv + argc, "--StartType");
 | 
			
		||||
        if (arg == "HotStart") {
 | 
			
		||||
          StartType = HotStart;
 | 
			
		||||
        } else if (arg == "ColdStart") {
 | 
			
		||||
          StartType = ColdStart;
 | 
			
		||||
        } else if (arg == "TepidStart") {
 | 
			
		||||
          StartType = TepidStart;
 | 
			
		||||
        } else if (arg == "CheckpointStart") {
 | 
			
		||||
          StartType = CheckpointStart;
 | 
			
		||||
        } else {
 | 
			
		||||
          std::cout << GridLogError << "Unrecognized option in --StartType\n";
 | 
			
		||||
          std::cout
 | 
			
		||||
              << GridLogError
 | 
			
		||||
              << "Valid [HotStart, ColdStart, TepidStart, CheckpointStart]\n";
 | 
			
		||||
          assert(0);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      int StartTraj = 0;
 | 
			
		||||
      if (GridCmdOptionExists(argv, argv + argc, "--StartTrajectory")) {
 | 
			
		||||
        arg = GridCmdOptionPayload(argv, argv + argc, "--StartTrajectory");
 | 
			
		||||
        std::vector<int> ivec(0);
 | 
			
		||||
        GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
        StartTraj = ivec[0];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      int NumTraj = 1;
 | 
			
		||||
      if (GridCmdOptionExists(argv, argv + argc, "--Trajectories")) {
 | 
			
		||||
        arg = GridCmdOptionPayload(argv, argv + argc, "--Trajectories");
 | 
			
		||||
        std::vector<int> ivec(0);
 | 
			
		||||
        GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
        NumTraj = ivec[0];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      int NumThermalizations = 10;
 | 
			
		||||
      if (GridCmdOptionExists(argv, argv + argc, "--Thermalizations")) {
 | 
			
		||||
        arg = GridCmdOptionPayload(argv, argv + argc, "--Thermalizations");
 | 
			
		||||
        std::vector<int> ivec(0);
 | 
			
		||||
        GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
        NumThermalizations = ivec[0];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      GridSerialRNG   sRNG;
 | 
			
		||||
      GridParallelRNG pRNG(UGrid);
 | 
			
		||||
      Field           U(UGrid);
 | 
			
		||||
 | 
			
		||||
      typedef MinimumNorm2<Implementation,
 | 
			
		||||
                           SmearingPolicy,
 | 
			
		||||
                           RepresentationsPolicy>
 | 
			
		||||
          IntegratorType; // change here to change the algorithm
 | 
			
		||||
      IntegratorType MDynamics(UGrid, MDparameters, TheAction, Smearing);
 | 
			
		||||
 | 
			
		||||
      HMCparameters HMCpar;
 | 
			
		||||
      HMCpar.StartTrajectory   = StartTraj;
 | 
			
		||||
      HMCpar.Trajectories      = NumTraj;
 | 
			
		||||
      HMCpar.NoMetropolisUntil = NumThermalizations;
 | 
			
		||||
 | 
			
		||||
      if (StartType == HotStart) {
 | 
			
		||||
        // Hot start
 | 
			
		||||
        HMCpar.MetropolisTest = true;
 | 
			
		||||
        sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
        pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
        Implementation::HotConfiguration(pRNG, U);
 | 
			
		||||
      } else if (StartType == ColdStart) {
 | 
			
		||||
        // Cold start
 | 
			
		||||
        HMCpar.MetropolisTest = true;
 | 
			
		||||
        sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
        pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
        Implementation::ColdConfiguration(pRNG, U);
 | 
			
		||||
      } else if (StartType == TepidStart) {
 | 
			
		||||
        // Tepid start
 | 
			
		||||
        HMCpar.MetropolisTest = true;
 | 
			
		||||
        sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
        pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
        Implementation::TepidConfiguration(pRNG, U);
 | 
			
		||||
      } else if (StartType == CheckpointStart) {
 | 
			
		||||
        HMCpar.MetropolisTest = true;
 | 
			
		||||
        // CheckpointRestart
 | 
			
		||||
        Checkpoint.CheckpointRestore(StartTraj, U, sRNG, pRNG);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Smearing.set_Field(U);
 | 
			
		||||
 | 
			
		||||
      HybridMonteCarlo<IntegratorType> HMC(HMCpar, MDynamics, sRNG, pRNG, U);
 | 
			
		||||
 | 
			
		||||
      for (int obs = 0; obs < ObservablesList.size(); obs++)
 | 
			
		||||
        HMC.AddObservable(ObservablesList[obs]);
 | 
			
		||||
 | 
			
		||||
      // Run it
 | 
			
		||||
      HMC.evolve();
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
    int StartTraj = 0;
 | 
			
		||||
    if (GridCmdOptionExists(argv, argv + argc, "--StartTrajectory")) {
 | 
			
		||||
      arg = GridCmdOptionPayload(argv, argv + argc, "--StartTrajectory");
 | 
			
		||||
      std::vector<int> ivec(0);
 | 
			
		||||
      GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
      StartTraj = ivec[0];
 | 
			
		||||
    }
 | 
			
		||||
  // These are for gauge fields
 | 
			
		||||
  typedef BinaryHmcRunnerTemplate<PeriodicGimplR> BinaryHmcRunner;
 | 
			
		||||
  typedef BinaryHmcRunnerTemplate<PeriodicGimplF> BinaryHmcRunnerF;
 | 
			
		||||
  typedef BinaryHmcRunnerTemplate<PeriodicGimplD> BinaryHmcRunnerD;
 | 
			
		||||
 | 
			
		||||
    int NumTraj = 1;
 | 
			
		||||
    if (GridCmdOptionExists(argv, argv + argc, "--Trajectories")) {
 | 
			
		||||
      arg = GridCmdOptionPayload(argv, argv + argc, "--Trajectories");
 | 
			
		||||
      std::vector<int> ivec(0);
 | 
			
		||||
      GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
      NumTraj = ivec[0];
 | 
			
		||||
    }
 | 
			
		||||
  template <class RepresentationsPolicy>
 | 
			
		||||
  using BinaryHmcRunnerTemplateHirep = BinaryHmcRunnerTemplate<PeriodicGimplR, RepresentationsPolicy>;
 | 
			
		||||
 | 
			
		||||
    int NumThermalizations = 10;
 | 
			
		||||
    if (GridCmdOptionExists(argv, argv + argc, "--Thermalizations")) {
 | 
			
		||||
      arg = GridCmdOptionPayload(argv, argv + argc, "--Thermalizations");
 | 
			
		||||
      std::vector<int> ivec(0);
 | 
			
		||||
      GridCmdOptionIntVector(arg, ivec);
 | 
			
		||||
      NumThermalizations = ivec[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    GridSerialRNG sRNG;
 | 
			
		||||
    GridParallelRNG pRNG(UGrid);
 | 
			
		||||
    Field U(UGrid);
 | 
			
		||||
 | 
			
		||||
    typedef MinimumNorm2<Implementation, SmearingPolicy,
 | 
			
		||||
                         RepresentationsPolicy>
 | 
			
		||||
        IntegratorType;  // change here to change the algorithm
 | 
			
		||||
    IntegratorType MDynamics(UGrid, MDparameters, TheAction, Smearing);
 | 
			
		||||
 | 
			
		||||
    HMCparameters HMCpar;
 | 
			
		||||
    HMCpar.StartTrajectory = StartTraj;
 | 
			
		||||
    HMCpar.Trajectories = NumTraj;
 | 
			
		||||
    HMCpar.NoMetropolisUntil = NumThermalizations;
 | 
			
		||||
 | 
			
		||||
    if (StartType == HotStart) {
 | 
			
		||||
      // Hot start
 | 
			
		||||
      HMCpar.MetropolisTest = true;
 | 
			
		||||
      sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
      pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
      Implementation::HotConfiguration(pRNG, U);
 | 
			
		||||
    } else if (StartType == ColdStart) {
 | 
			
		||||
      // Cold start
 | 
			
		||||
      HMCpar.MetropolisTest = true;
 | 
			
		||||
      sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
      pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
      Implementation::ColdConfiguration(pRNG, U);
 | 
			
		||||
    } else if (StartType == TepidStart) {
 | 
			
		||||
      // Tepid start
 | 
			
		||||
      HMCpar.MetropolisTest = true;
 | 
			
		||||
      sRNG.SeedFixedIntegers(SerialSeed);
 | 
			
		||||
      pRNG.SeedFixedIntegers(ParallelSeed);
 | 
			
		||||
      Implementation::TepidConfiguration(pRNG, U);
 | 
			
		||||
    } else if (StartType == CheckpointStart) {
 | 
			
		||||
      HMCpar.MetropolisTest = true;
 | 
			
		||||
      // CheckpointRestart
 | 
			
		||||
      Checkpoint.CheckpointRestore(StartTraj, U, sRNG, pRNG);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Smearing.set_Field(U);
 | 
			
		||||
 | 
			
		||||
    HybridMonteCarlo<IntegratorType> HMC(HMCpar, MDynamics, sRNG, pRNG, U);
 | 
			
		||||
 | 
			
		||||
    for (int obs = 0; obs < ObservablesList.size(); obs++)
 | 
			
		||||
      HMC.AddObservable(ObservablesList[obs]); 
 | 
			
		||||
 | 
			
		||||
    // Run it
 | 
			
		||||
    HMC.evolve();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// These are for gauge fields
 | 
			
		||||
typedef BinaryHmcRunnerTemplate<PeriodicGimplR> BinaryHmcRunner;
 | 
			
		||||
typedef BinaryHmcRunnerTemplate<PeriodicGimplF> BinaryHmcRunnerF;
 | 
			
		||||
typedef BinaryHmcRunnerTemplate<PeriodicGimplD> BinaryHmcRunnerD;
 | 
			
		||||
 | 
			
		||||
template <class RepresentationsPolicy>
 | 
			
		||||
using BinaryHmcRunnerTemplateHirep =
 | 
			
		||||
    BinaryHmcRunnerTemplate<PeriodicGimplR, RepresentationsPolicy>;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    typedef BinaryHmcRunnerTemplate<ScalarImplR, ScalarFields> ScalarBinaryHmcRunner;
 | 
			
		||||
  typedef BinaryHmcRunnerTemplate<ScalarImplR, ScalarFields>
 | 
			
		||||
      ScalarBinaryHmcRunner;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@ directory
 | 
			
		||||
 * @brief Classes for Hybrid Monte Carlo update
 | 
			
		||||
 *
 | 
			
		||||
 * @author Guido Cossu
 | 
			
		||||
 * Time-stamp: <2015-07-30 16:58:26 neo>
 | 
			
		||||
 */
 | 
			
		||||
//--------------------------------------------------------------------
 | 
			
		||||
#ifndef HMC_INCLUDED
 | 
			
		||||
 
 | 
			
		||||
@@ -29,14 +29,6 @@ directory
 | 
			
		||||
*************************************************************************************/
 | 
			
		||||
/*  END LEGAL */
 | 
			
		||||
//--------------------------------------------------------------------
 | 
			
		||||
/*! @file Integrator.h
 | 
			
		||||
 * @brief Classes for the Molecular Dynamics integrator
 | 
			
		||||
 *
 | 
			
		||||
 * @author Guido Cossu
 | 
			
		||||
 * Time-stamp: <2015-07-30 16:21:29 neo>
 | 
			
		||||
 */
 | 
			
		||||
//--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifndef INTEGRATOR_INCLUDED
 | 
			
		||||
#define INTEGRATOR_INCLUDED
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user