#ifndef GRID_QCD_ACTIONS_H #define GRID_QCD_ACTIONS_H // Some reorganisation likely required as both Chroma and IroIro // are separating the concept of the operator from that of action. // // The FermAction contains methods to create // * 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 //used by all wilson type fermions #include #include #include //used by all wilson type fermions //////////////////////////////////////////// // Gauge Actions //////////////////////////////////////////// #include namespace Grid { namespace QCD { typedef WilsonGaugeAction WilsonGaugeActionR; typedef WilsonGaugeAction WilsonGaugeActionF; typedef WilsonGaugeAction WilsonGaugeActionD; }} //////////////////////////////////////////////////////////////////////////////////////////////////// // 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 // 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 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 //IroIro inserted general "Nf" param; could also be done, //but not clear why unless into large Nf BSM studies //Even there, don't want the explicit (2) on power denominator //if even number of flavours, so further generalised interface //would be required but easy. #include #include #include #include #endif