#include "Grid.h" using namespace std; using namespace Grid; using namespace Grid::QCD; int main (int argc, char ** argv) { Grid_init(&argc,&argv); std::vector latt_size = GridDefaultLatt(); std::vector simd_layout = GridDefaultSimd(4,vComplex::Nsimd()); std::vector mpi_layout = GridDefaultMpi(); GridCartesian Fine(latt_size,simd_layout,mpi_layout); GridRedBlackCartesian RBFine(latt_size,simd_layout,mpi_layout); std::vector seeds({6,7,8,80}); GridParallelRNG pRNG(&Fine); pRNG.SeedFixedIntegers(seeds); std::vector seedsS({1,2,3,4}); GridSerialRNG sRNG; sRNG.SeedFixedIntegers(seedsS); LatticeLorentzColourMatrix U(&Fine); SU3::HotConfiguration(pRNG, U); // simplify template declaration? Strip the lorentz from the second template WilsonGaugeActionR Waction(5.6); Real mass=-0.77; WilsonFermionR FermOp(U,Fine,RBFine,mass); ConjugateGradient CG(1.0e-8,10000); TwoFlavourEvenOddPseudoFermionAction WilsonNf2(FermOp,CG,CG); //Collect actions ActionLevel Level1(1); ActionLevel Level2(4); Level1.push_back(&WilsonNf2); Level2.push_back(&Waction); ActionSet FullSet; FullSet.push_back(Level1); FullSet.push_back(Level2); // Create integrator //typedef LeapFrog IntegratorAlgorithm;// change here to change the algorithm //typedef MinimumNorm2 IntegratorAlgorithm;// change here to change the algorithm typedef ForceGradient IntegratorAlgorithm;// change here to change the algorithm IntegratorParameters MDpar(16); IntegratorAlgorithm MDynamics(&Fine,MDpar, FullSet); // Create HMC NerscHmcCheckpointer Checkpoint(std::string("ckpoint_lat"),std::string("ckpoint_rng"),1); HMCparameters HMCpar; HybridMonteCarlo HMC(HMCpar, MDynamics,sRNG,pRNG,U); HMC.AddObservable(&Checkpoint); // Run it HMC.evolve(); }