#ifndef GRID_QCD_ACTIONS_H #define GRID_QCD_ACTIONS_H // * Linear operators (Hermitian and non-hermitian) .. my LinearOperator // * System solvers (Hermitian and non-hermitian) .. my OperatorFunction // * MultiShift System solvers (Hermitian and non-hermitian) .. my OperatorFunction //////////////////////////////////////////// // Abstract base interface //////////////////////////////////////////// #include #include //////////////////////////////////////////// // Utility functions //////////////////////////////////////////// #include #include #include //used by all wilson type fermions #include #include #include //used by all wilson type fermions //////////////////////////////////////////// // Gauge Actions //////////////////////////////////////////// #include #include namespace Grid { namespace QCD { typedef WilsonGaugeAction WilsonGaugeActionR; typedef WilsonGaugeAction WilsonGaugeActionF; typedef WilsonGaugeAction WilsonGaugeActionD; typedef PlaqPlusRectangleAction PlaqPlusRectangleActionR; typedef PlaqPlusRectangleAction PlaqPlusRectangleActionF; typedef PlaqPlusRectangleAction PlaqPlusRectangleActionD; typedef IwasakiGaugeAction IwasakiGaugeActionR; typedef IwasakiGaugeAction IwasakiGaugeActionF; typedef IwasakiGaugeAction IwasakiGaugeActionD; typedef SymanzikGaugeAction SymanzikGaugeActionR; typedef SymanzikGaugeAction SymanzikGaugeActionF; typedef SymanzikGaugeAction SymanzikGaugeActionD; typedef WilsonGaugeAction ConjugateWilsonGaugeActionR; typedef WilsonGaugeAction ConjugateWilsonGaugeActionF; typedef WilsonGaugeAction ConjugateWilsonGaugeActionD; typedef PlaqPlusRectangleAction ConjugatePlaqPlusRectangleActionR; typedef PlaqPlusRectangleAction ConjugatePlaqPlusRectangleActionF; typedef PlaqPlusRectangleAction ConjugatePlaqPlusRectangleActionD; typedef IwasakiGaugeAction ConjugateIwasakiGaugeActionR; typedef IwasakiGaugeAction ConjugateIwasakiGaugeActionF; typedef IwasakiGaugeAction ConjugateIwasakiGaugeActionD; typedef SymanzikGaugeAction ConjugateSymanzikGaugeActionR; typedef SymanzikGaugeAction ConjugateSymanzikGaugeActionF; typedef SymanzikGaugeAction ConjugateSymanzikGaugeActionD; }} //////////////////////////////////////////////////////////////////////////////////////////////////// // Explicit explicit template instantiation is still required in the .cc files // // - CayleyFermion5D.cc // - PartialFractionFermion5D.cc // - WilsonFermion5D.cc // - WilsonKernelsHand.cc // - ContinuedFractionFermion5D.cc // - WilsonFermion.cc // - WilsonKernels.cc // // The explicit instantiation is only avoidable if we move this source to headers and end up with include/parse/recompile // for EVERY .cc file. This define centralises the list and restores global push of impl cases //////////////////////////////////////////////////////////////////////////////////////////////////// #define FermOpTemplateInstantiate(A) \ template class A; \ template class A; \ template class A; \ template class A; //////////////////////////////////////////// // Fermion operators / actions //////////////////////////////////////////// #include // 4d wilson like #include // 4d wilson like #include // 5d base used by all 5d overlap types //#include #include // Cayley types #include #include #include #include #include #include #include #include #include // Continued fraction #include #include #include // Partial fraction #include #include //////////////////////////////////////////////////////////////////////////////////////////////////// // More maintainable to maintain the following typedef list centrally, as more "impl" targets // are added, (e.g. extension for gparity, half precision project in comms etc..) //////////////////////////////////////////////////////////////////////////////////////////////////// // Cayley 5d namespace Grid { namespace QCD { typedef WilsonFermion WilsonFermionR; typedef WilsonFermion WilsonFermionF; typedef WilsonFermion WilsonFermionD; typedef WilsonTMFermion WilsonTMFermionR; typedef WilsonTMFermion WilsonTMFermionF; typedef WilsonTMFermion WilsonTMFermionD; typedef DomainWallFermion DomainWallFermionR; typedef DomainWallFermion DomainWallFermionF; typedef DomainWallFermion DomainWallFermionD; typedef MobiusFermion MobiusFermionR; typedef MobiusFermion MobiusFermionF; typedef MobiusFermion MobiusFermionD; typedef ScaledShamirFermion ScaledShamirFermionR; typedef ScaledShamirFermion ScaledShamirFermionF; typedef ScaledShamirFermion ScaledShamirFermionD; typedef MobiusZolotarevFermion MobiusZolotarevFermionR; typedef MobiusZolotarevFermion MobiusZolotarevFermionF; typedef MobiusZolotarevFermion MobiusZolotarevFermionD; typedef ShamirZolotarevFermion ShamirZolotarevFermionR; typedef ShamirZolotarevFermion ShamirZolotarevFermionF; typedef ShamirZolotarevFermion ShamirZolotarevFermionD; typedef OverlapWilsonCayleyTanhFermion OverlapWilsonCayleyTanhFermionR; typedef OverlapWilsonCayleyTanhFermion OverlapWilsonCayleyTanhFermionF; typedef OverlapWilsonCayleyTanhFermion OverlapWilsonCayleyTanhFermionD; typedef OverlapWilsonCayleyZolotarevFermion OverlapWilsonCayleyZolotarevFermionR; typedef OverlapWilsonCayleyZolotarevFermion OverlapWilsonCayleyZolotarevFermionF; typedef OverlapWilsonCayleyZolotarevFermion OverlapWilsonCayleyZolotarevFermionD; // Continued fraction typedef OverlapWilsonContFracTanhFermion OverlapWilsonContFracTanhFermionR; typedef OverlapWilsonContFracTanhFermion OverlapWilsonContFracTanhFermionF; typedef OverlapWilsonContFracTanhFermion OverlapWilsonContFracTanhFermionD; typedef OverlapWilsonContFracZolotarevFermion OverlapWilsonContFracZolotarevFermionR; typedef OverlapWilsonContFracZolotarevFermion OverlapWilsonContFracZolotarevFermionF; typedef OverlapWilsonContFracZolotarevFermion OverlapWilsonContFracZolotarevFermionD; // Partial fraction typedef OverlapWilsonPartialFractionTanhFermion OverlapWilsonPartialFractionTanhFermionR; typedef OverlapWilsonPartialFractionTanhFermion OverlapWilsonPartialFractionTanhFermionF; typedef OverlapWilsonPartialFractionTanhFermion OverlapWilsonPartialFractionTanhFermionD; typedef OverlapWilsonPartialFractionZolotarevFermion OverlapWilsonPartialFractionZolotarevFermionR; typedef OverlapWilsonPartialFractionZolotarevFermion OverlapWilsonPartialFractionZolotarevFermionF; typedef OverlapWilsonPartialFractionZolotarevFermion OverlapWilsonPartialFractionZolotarevFermionD; // Gparity cases; partial list until tested typedef WilsonFermion GparityWilsonFermionR; typedef WilsonFermion GparityWilsonFermionF; typedef WilsonFermion GparityWilsonFermionD; typedef DomainWallFermion GparityDomainWallFermionR; typedef DomainWallFermion GparityDomainWallFermionF; typedef DomainWallFermion GparityDomainWallFermionD; }} /////////////////////////////////////////////////////////////////////////////// // G5 herm -- this has to live in QCD since dirac matrix is not in the broader sector of code /////////////////////////////////////////////////////////////////////////////// #include //////////////////////////////////////// // Pseudo fermion combinations for HMC //////////////////////////////////////// #include #include #include #include #include #include #include #include #include #endif