/************************************************************************************* Grid physics library, www.github.com/paboyle/Grid Source file: ./lib/qcd/action/Actions.h Copyright (C) 2015 Author: Azusa Yamaguchi Author: Peter Boyle Author: Peter Boyle Author: Peter Boyle Author: neo Author: paboyle 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 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 FermOp4dVecTemplateInstantiate(A) \ template class A; \ template class A; \ template class A; \ template class A; \ template class A; \ template class A; #define AdjointFermOpTemplateInstantiate(A) \ template class A; \ template class A; #define TwoIndexFermOpTemplateInstantiate(A) \ template class A; \ template class A; #define FermOp5dVecTemplateInstantiate(A) \ template class A; \ template class A; \ template class A; \ template class A; #define FermOpTemplateInstantiate(A) \ FermOp4dVecTemplateInstantiate(A) \ FermOp5dVecTemplateInstantiate(A) #define GparityFermOpTemplateInstantiate(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 #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 WilsonFermion WilsonAdjFermionR; typedef WilsonFermion WilsonAdjFermionF; typedef WilsonFermion WilsonAdjFermionD; typedef WilsonFermion WilsonTwoIndexSymmetricFermionR; typedef WilsonFermion WilsonTwoIndexSymmetricFermionF; typedef WilsonFermion WilsonTwoIndexSymmetricFermionD; 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 ZMobiusFermion ZMobiusFermionR; typedef ZMobiusFermion ZMobiusFermionF; typedef ZMobiusFermion ZMobiusFermionD; 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; typedef WilsonTMFermion GparityWilsonTMFermionR; typedef WilsonTMFermion GparityWilsonTMFermionF; typedef WilsonTMFermion GparityWilsonTMFermionD; typedef MobiusFermion GparityMobiusFermionR; typedef MobiusFermion GparityMobiusFermionF; typedef MobiusFermion GparityMobiusFermionD; }} /////////////////////////////////////////////////////////////////////////////// // 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