diff --git a/HMC/Mobius2f_DDHMC.cc b/HMC/Mobius2f_DDHMC.cc deleted file mode 100644 index d3648813..00000000 --- a/HMC/Mobius2f_DDHMC.cc +++ /dev/null @@ -1,322 +0,0 @@ -/************************************************************************************* - -Grid physics library, www.github.com/paboyle/Grid - -Source file: - -Copyright (C) 2015-2016 - -Author: Peter Boyle - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -See the full license in the file "LICENSE" in the top level distribution -directory -*************************************************************************************/ -/* END LEGAL */ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -NAMESPACE_BEGIN(Grid); - -#define MIXED_PRECISION - -NAMESPACE_END(Grid); - -int main(int argc, char **argv) -{ - using namespace Grid; - - Grid_init(&argc, &argv); - int threads = GridThread::GetThreads(); - // here make a routine to print all the relevant information on the run - std::cout << GridLogMessage << "Grid is setup to use " << threads << " threads" << std::endl; - - // Typedefs to simplify notation - typedef WilsonImplR FimplD; - typedef WilsonImplF FimplF; - typedef FermionOperator FermionOperatorF; - typedef FermionOperator FermionOperatorD; - typedef MobiusFermionR FermionActionD; - typedef MobiusFermionF FermionActionF; - typedef DirichletFermionOperator DirichletFermionD; - typedef DirichletFermionOperator DirichletFermionF; - - typedef MobiusEOFAFermionR FermionEOFAAction; - typedef typename FermionActionD::FermionField FermionFieldD; - typedef typename FermionActionF::FermionField FermionFieldF; - - typedef SchurDiagMooeeOperator,FermionFieldF> LinearOperatorF; - typedef SchurDiagMooeeOperator,FermionFieldD> LinearOperatorD; - typedef SchurDiagMooeeDagOperator,FermionFieldF> LinearOperatorDagF; - typedef SchurDiagMooeeDagOperator,FermionFieldD> LinearOperatorDagD; - - typedef Grid::XmlReader Serialiser; - - //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - IntegratorParameters MD; - // typedef GenericHMCRunner HMCWrapper; - // MD.name = std::string("Leap Frog"); - // typedef GenericHMCRunner HMCWrapper; - // MD.name = std::string("Force Gradient"); - typedef GenericHMCRunner HMCWrapper; - MD.name = std::string("MinimumNorm2"); - MD.MDsteps = 6; - MD.trajL = 1.0; - - HMCparameters HMCparams; - HMCparams.StartTrajectory = 26; - HMCparams.Trajectories = 1; - HMCparams.NoMetropolisUntil= 0; - // "[HotStart, ColdStart, TepidStart, CheckpointStart]\n"; - // HMCparams.StartingType =std::string("ColdStart"); - HMCparams.StartingType =std::string("CheckpointStart"); - HMCparams.MD = MD; - HMCWrapper TheHMC(HMCparams); - - // Grid from the command line arguments --grid and --mpi - TheHMC.Resources.AddFourDimGrid("gauge"); // use default simd lanes decomposition - - CheckpointerParameters CPparams; - CPparams.config_prefix = "ckpoint_EOFA4D_lat"; - CPparams.rng_prefix = "ckpoint_EOFA4D_rng"; - CPparams.saveInterval = 1; - CPparams.format = "IEEE64BIG"; - TheHMC.Resources.LoadNerscCheckpointer(CPparams); - - RNGModuleParameters RNGpar; - RNGpar.serial_seeds = "1 2 3 4 5"; - RNGpar.parallel_seeds = "6 7 8 9 10"; - TheHMC.Resources.SetRNGSeeds(RNGpar); - - // Momentum Dirichlet - Coordinate Block({0,0,0,16}); // Temporal only decomposition - - TheHMC.Resources.SetMomentumFilter(new DDHMCFilter(Block)); - // Construct observables - // here there is too much indirection - typedef PlaquetteMod PlaqObs; - TheHMC.Resources.AddObservable(); - ////////////////////////////////////////////// - - const int Ls = 16; - Real beta = 2.13; - Real light_mass = 0.01; - Real pv_mass = 1.0; - RealD M5 = 1.8; - RealD b = 1.0; - RealD c = 0.0; - - std::vector hasenbusch({ 0.15, 0.4, 0.7 }); - - auto GridPtr = TheHMC.Resources.GetCartesian(); - auto GridRBPtr = TheHMC.Resources.GetRBCartesian(); - auto FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,GridPtr); - auto FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,GridPtr); - - Coordinate latt = GridDefaultLatt(); - Coordinate mpi = GridDefaultMpi(); - Coordinate simdF = GridDefaultSimd(Nd,vComplexF::Nsimd()); - Coordinate simdD = GridDefaultSimd(Nd,vComplexD::Nsimd()); - auto GridPtrF = SpaceTimeGrid::makeFourDimGrid(latt,simdF,mpi); - auto GridRBPtrF = SpaceTimeGrid::makeFourDimRedBlackGrid(GridPtrF); - auto FGridF = SpaceTimeGrid::makeFiveDimGrid(Ls,GridPtrF); - auto FrbGridF = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,GridPtrF); - - IwasakiGaugeActionR GaugeAction(beta); - - // temporarily need a gauge field - LatticeGaugeField U(GridPtr); - LatticeGaugeFieldF UF(GridPtrF); - - // These lines are unecessary if BC are all periodic - std::vector boundary = {1,1,1,-1}; - FermionActionD::ImplParams Params(boundary); - FermionActionD::ImplParams DirichletParams(boundary); - DirichletParams.locally_periodic=true; - - double ActionStoppingCondition = 1e-10; - double DerivativeStoppingCondition = 1e-8; - double BoundaryDerivativeStoppingCondition = 1e-6; - double MaxCGIterations = 30000; - - //////////////////////////////////// - // Collect actions - //////////////////////////////////// - ActionLevel Level1(1); - ActionLevel Level2(1); - ActionLevel Level3(8); - - ConjugateGradient ActionCG(ActionStoppingCondition,MaxCGIterations); - ConjugateGradient DerivativeCG(DerivativeStoppingCondition,MaxCGIterations); - - //////////////////////////////////// - // up down action - //////////////////////////////////// - std::vector light_den; - std::vector light_num; - - int n_hasenbusch = hasenbusch.size(); - light_den.push_back(light_mass); - for(int h=0;h DNumeratorsD; - std::vector DNumeratorsF; - std::vector DDenominatorsD; - std::vector DDenominatorsF; - ///////////////////////////////////////////////// - // Dirichlet wrappers - ///////////////////////////////////////////////// - std::vector DirichletNumeratorsD; - std::vector DirichletNumeratorsF; - std::vector DirichletDenominatorsD; - std::vector DirichletDenominatorsF; - - std::vector *> Quotients; - std::vector *> BoundaryQuotients; - - typedef MixedPrecisionConjugateGradientOperatorFunction MxPCG; - std::vector ActionMPCG; - std::vector MPCG; - std::vector LinOpD; - std::vector LinOpF; - - const int MX_inner = 1000; - const RealD MX_tol = 1.0e-6; - - for(int h=0;h - (*DirichletNumeratorsD[h], - *DirichletDenominatorsD[h], - *ActionMPCG[h], - *ActionMPCG[h], - ActionCG)); - - Level2.push_back(Quotients[h]); - } - - ///////////////////////////////////////////////////////////// - // Boundary action - ///////////////////////////////////////////////////////////// - int l_idx = 0; - int pv_idx = n_hasenbusch; - - std::cout << GridLogMessage<<" Boundary action masses " < BoundaryNumerator(PeriNumeratorD,PeriNumeratorF, - DirichletNumeratorD,DirichletNumeratorF, - Block); - - SchurFactoredFermionOperator BoundaryDenominator(PeriDenominatorD,PeriDenominatorF, - DirichletDenominatorD,DirichletDenominatorF, - Block); - Level1.push_back(new - DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion - (BoundaryNumerator, - BoundaryDenominator, - BoundaryDerivativeStoppingCondition,ActionStoppingCondition,MX_tol)); - - ///////////////////////////////////////////////////////////// - // Gauge action - ///////////////////////////////////////////////////////////// - Level3.push_back(&GaugeAction); - TheHMC.TheAction.push_back(Level1); - TheHMC.TheAction.push_back(Level2); - TheHMC.TheAction.push_back(Level3); - std::cout << GridLogMessage << " Action complete "<< std::endl; - - ///////////////////////////////////////////////////////////// - // HMC parameters are serialisable - std::cout << GridLogMessage << " Running the HMC "<< std::endl; - TheHMC.Run(); // no smearing - - Grid_finalize(); -} // main - - -