/************************************************************************************* Grid physics library, www.github.com/paboyle/Grid Source file: ./lib/qcd/modules/Registration.h Copyright (C) 2016 Author: Guido Cossu 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 */ #ifndef MODULES_REGISTRATION_H #define MODULES_REGISTRATION_H // simplify with macros /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Actions /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef QCD::WilsonGModule WilsonGMod; typedef QCD::SymanzikGModule SymanzikGMod; typedef QCD::IwasakiGModule IwasakiGMod; typedef QCD::DBW2GModule DBW2GMod; typedef QCD::RBCGModule RBCGMod; typedef QCD::PlaqPlusRectangleGModule PlaqPlusRectangleGMod; static Registrar > __WGmodXMLInit("Wilson"); static Registrar > __SymGmodXMLInit("Symanzik"); static Registrar > __IwGmodXMLInit("Iwasaki"); static Registrar > __DBW2GmodXMLInit("DBW2"); static Registrar > __RBCGmodXMLInit("RBC"); static Registrar > __PPRectGmodXMLInit("PlaqPlusRect"); // FIXME more general implementation static Registrar , HMC_ActionModuleFactory > __TwoFlavourFmodXMLInit("TwoFlavours"); static Registrar , HMC_ActionModuleFactory > __TwoFlavourRatioFmodXMLInit("TwoFlavoursRatio"); static Registrar , HMC_ActionModuleFactory > __TwoFlavourEOFmodXMLInit("TwoFlavoursEvenOdd"); static Registrar, HMC_ActionModuleFactory > __TwoFlavourRatioEOFmodXMLInit("TwoFlavoursEvenOddRatio"); static Registrar , HMC_ActionModuleFactory > __OneFlavourFmodXMLInit("OneFlavour"); static Registrar , HMC_ActionModuleFactory > __OneFlavourEOFmodXMLInit("OneFlavourEvenOdd"); static Registrar , HMC_ActionModuleFactory > __OneFlavourRatioFmodXMLInit("OneFlavourRatio"); static Registrar, HMC_ActionModuleFactory > __OneFlavourRatioEOFmodXMLInit("OneFlavourEvenOddRatio"); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Solvers /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Now a specific registration with a fermion field // here must instantiate CG and CR for every new fermion field type (macro!!) static Registrar< ConjugateGradientModule, HMC_SolverModuleFactory > __CGWFmodXMLInit("ConjugateGradient"); static Registrar< ConjugateResidualModule, HMC_SolverModuleFactory > __CRWFmodXMLInit("ConjugateResidual"); // add the staggered, scalar versions here /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Fermion operators /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static Registrar< QCD::WilsonFermionModule, HMC_FermionOperatorModuleFactory > __WilsonFOPmodXMLInit("Wilson"); static Registrar< QCD::MobiusFermionModule, HMC_FermionOperatorModuleFactory > __MobiusFOPmodXMLInit("Mobius"); static Registrar< QCD::DomainWallFermionModule, HMC_FermionOperatorModuleFactory > __DWFOPmodXMLInit("DomainWall"); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Observables /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static Registrar, HMC_ObservablesModuleFactory > __OBSPLmodXMLInit("Plaquette"); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checkpointers /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static Registrar, HMC_CPModuleFactory > __CPBinarymodXMLInit("Binary"); static Registrar , HMC_CPModuleFactory > __CPNerscmodXMLInit("Nersc"); #ifdef HAVE_LIME static Registrar , HMC_CPModuleFactory > __CPILDGmodXMLInit("ILDG"); #endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Integrators /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static Registrar< HMCLeapFrog , HMCRunnerModuleFactory > __HMCLFmodXMLInit("LeapFrog"); static Registrar< HMCMinimumNorm2 , HMCRunnerModuleFactory > __HMCMN2modXMLInit("MinimumNorm2"); static Registrar< HMCForceGradient , HMCRunnerModuleFactory > __HMCFGmodXMLInit("ForceGradient"); typedef HMCRunnerModuleFactory HMCModuleFactory; #endif