2015-05-31 15:09:02 +01:00
|
|
|
#ifndef GRID_QCD_ACTIONS_H
|
|
|
|
#define GRID_QCD_ACTIONS_H
|
|
|
|
|
2015-06-02 16:57:12 +01:00
|
|
|
|
|
|
|
// 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
|
|
|
|
////////////////////////////////////////////
|
2015-07-03 18:43:14 +01:00
|
|
|
#include <qcd/action/ActionBase.h>
|
2015-08-18 14:40:08 +01:00
|
|
|
#include <qcd/action/ActionParams.h>
|
2015-07-03 18:43:14 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
2015-06-02 16:57:12 +01:00
|
|
|
////////////////////////////////////////////
|
|
|
|
// Utility functions
|
|
|
|
////////////////////////////////////////////
|
|
|
|
#include <qcd/action/fermion/WilsonCompressor.h> //used by all wilson type fermions
|
2015-08-15 23:25:49 +01:00
|
|
|
#include <qcd/action/fermion/FermionOperatorImpl.h>
|
|
|
|
#include <qcd/action/fermion/FermionOperator.h>
|
2015-06-02 16:57:12 +01:00
|
|
|
#include <qcd/action/fermion/WilsonKernels.h> //used by all wilson type fermions
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
|
2015-08-30 12:18:34 +01:00
|
|
|
////////////////////////////////////////////
|
|
|
|
// Gauge Actions
|
|
|
|
////////////////////////////////////////////
|
|
|
|
#include <qcd/action/gauge/WilsonGaugeAction.h>
|
|
|
|
namespace Grid {
|
|
|
|
namespace QCD {
|
|
|
|
typedef WilsonGaugeAction<LatticeGaugeField> WilsonGaugeActionR;
|
|
|
|
typedef WilsonGaugeAction<LatticeGaugeFieldF> WilsonGaugeActionF;
|
|
|
|
typedef WilsonGaugeAction<LatticeGaugeFieldD> WilsonGaugeActionD;
|
|
|
|
}}
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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<WilsonImplF>; \
|
2015-09-08 17:45:30 +01:00
|
|
|
template class A<WilsonImplD>;
|
2015-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
#define GparityFermOpTemplateInstantiate(A) \
|
|
|
|
template class A<GparityWilsonImplF>; \
|
|
|
|
template class A<GparityWilsonImplD>;
|
2015-06-02 16:57:12 +01:00
|
|
|
|
|
|
|
////////////////////////////////////////////
|
2015-08-10 20:47:44 +01:00
|
|
|
// Fermion operators / actions
|
2015-06-02 16:57:12 +01:00
|
|
|
////////////////////////////////////////////
|
2015-06-03 11:26:54 +01:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
#include <qcd/action/fermion/WilsonFermion.h> // 4d wilson like
|
|
|
|
#include <qcd/action/fermion/WilsonFermion5D.h> // 5d base used by all 5d overlap types
|
2015-06-02 16:57:12 +01:00
|
|
|
|
2015-08-15 23:59:04 +01:00
|
|
|
//#include <qcd/action/fermion/CloverFermion.h>
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
#include <qcd/action/fermion/CayleyFermion5D.h> // Cayley types
|
2015-06-02 16:57:12 +01:00
|
|
|
#include <qcd/action/fermion/DomainWallFermion.h>
|
2015-06-03 09:36:26 +01:00
|
|
|
#include <qcd/action/fermion/DomainWallFermion.h>
|
|
|
|
#include <qcd/action/fermion/MobiusFermion.h>
|
2015-06-03 09:51:06 +01:00
|
|
|
#include <qcd/action/fermion/ScaledShamirFermion.h>
|
2015-06-03 11:26:54 +01:00
|
|
|
#include <qcd/action/fermion/MobiusZolotarevFermion.h>
|
|
|
|
#include <qcd/action/fermion/ShamirZolotarevFermion.h>
|
2015-08-10 20:47:44 +01:00
|
|
|
#include <qcd/action/fermion/OverlapWilsonCayleyTanhFermion.h>
|
2015-06-03 11:26:54 +01:00
|
|
|
#include <qcd/action/fermion/OverlapWilsonCayleyZolotarevFermion.h>
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
#include <qcd/action/fermion/ContinuedFractionFermion5D.h> // Continued fraction
|
2015-09-08 17:45:30 +01:00
|
|
|
#include <qcd/action/fermion/OverlapWilsonContfracTanhFermion.h>
|
|
|
|
#include <qcd/action/fermion/OverlapWilsonContfracZolotarevFermion.h>
|
2015-06-03 11:26:54 +01:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
#include <qcd/action/fermion/PartialFractionFermion5D.h> // Partial fraction
|
2015-06-04 13:28:37 +01:00
|
|
|
#include <qcd/action/fermion/OverlapWilsonPartialFractionTanhFermion.h>
|
|
|
|
#include <qcd/action/fermion/OverlapWilsonPartialFractionZolotarevFermion.h>
|
2015-06-02 16:57:12 +01:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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<WilsonImplR> WilsonFermionR;
|
|
|
|
typedef WilsonFermion<WilsonImplF> WilsonFermionF;
|
|
|
|
typedef WilsonFermion<WilsonImplD> WilsonFermionD;
|
|
|
|
|
|
|
|
typedef DomainWallFermion<WilsonImplR> DomainWallFermionR;
|
|
|
|
typedef DomainWallFermion<WilsonImplF> DomainWallFermionF;
|
|
|
|
typedef DomainWallFermion<WilsonImplD> DomainWallFermionD;
|
|
|
|
typedef MobiusFermion<WilsonImplR> MobiusFermionR;
|
|
|
|
typedef MobiusFermion<WilsonImplF> MobiusFermionF;
|
|
|
|
typedef MobiusFermion<WilsonImplD> MobiusFermionD;
|
|
|
|
typedef ScaledShamirFermion<WilsonImplR> ScaledShamirFermionR;
|
|
|
|
typedef ScaledShamirFermion<WilsonImplF> ScaledShamirFermionF;
|
|
|
|
typedef ScaledShamirFermion<WilsonImplD> ScaledShamirFermionD;
|
|
|
|
|
|
|
|
typedef MobiusZolotarevFermion<WilsonImplR> MobiusZolotarevFermionR;
|
|
|
|
typedef MobiusZolotarevFermion<WilsonImplF> MobiusZolotarevFermionF;
|
|
|
|
typedef MobiusZolotarevFermion<WilsonImplD> MobiusZolotarevFermionD;
|
|
|
|
typedef ShamirZolotarevFermion<WilsonImplR> ShamirZolotarevFermionR;
|
|
|
|
typedef ShamirZolotarevFermion<WilsonImplF> ShamirZolotarevFermionF;
|
|
|
|
typedef ShamirZolotarevFermion<WilsonImplD> ShamirZolotarevFermionD;
|
|
|
|
|
|
|
|
typedef OverlapWilsonCayleyTanhFermion<WilsonImplR> OverlapWilsonCayleyTanhFermionR;
|
|
|
|
typedef OverlapWilsonCayleyTanhFermion<WilsonImplF> OverlapWilsonCayleyTanhFermionF;
|
|
|
|
typedef OverlapWilsonCayleyTanhFermion<WilsonImplD> OverlapWilsonCayleyTanhFermionD;
|
|
|
|
typedef OverlapWilsonCayleyZolotarevFermion<WilsonImplR> OverlapWilsonCayleyZolotarevFermionR;
|
|
|
|
typedef OverlapWilsonCayleyZolotarevFermion<WilsonImplF> OverlapWilsonCayleyZolotarevFermionF;
|
|
|
|
typedef OverlapWilsonCayleyZolotarevFermion<WilsonImplD> OverlapWilsonCayleyZolotarevFermionD;
|
|
|
|
|
|
|
|
// Continued fraction
|
|
|
|
typedef OverlapWilsonContFracTanhFermion<WilsonImplR> OverlapWilsonContFracTanhFermionR;
|
|
|
|
typedef OverlapWilsonContFracTanhFermion<WilsonImplF> OverlapWilsonContFracTanhFermionF;
|
|
|
|
typedef OverlapWilsonContFracTanhFermion<WilsonImplD> OverlapWilsonContFracTanhFermionD;
|
|
|
|
typedef OverlapWilsonContFracZolotarevFermion<WilsonImplR> OverlapWilsonContFracZolotarevFermionR;
|
|
|
|
typedef OverlapWilsonContFracZolotarevFermion<WilsonImplF> OverlapWilsonContFracZolotarevFermionF;
|
|
|
|
typedef OverlapWilsonContFracZolotarevFermion<WilsonImplD> OverlapWilsonContFracZolotarevFermionD;
|
|
|
|
|
|
|
|
// Partial fraction
|
|
|
|
typedef OverlapWilsonPartialFractionTanhFermion<WilsonImplR> OverlapWilsonPartialFractionTanhFermionR;
|
|
|
|
typedef OverlapWilsonPartialFractionTanhFermion<WilsonImplF> OverlapWilsonPartialFractionTanhFermionF;
|
|
|
|
typedef OverlapWilsonPartialFractionTanhFermion<WilsonImplD> OverlapWilsonPartialFractionTanhFermionD;
|
|
|
|
|
|
|
|
typedef OverlapWilsonPartialFractionZolotarevFermion<WilsonImplR> OverlapWilsonPartialFractionZolotarevFermionR;
|
|
|
|
typedef OverlapWilsonPartialFractionZolotarevFermion<WilsonImplF> OverlapWilsonPartialFractionZolotarevFermionF;
|
|
|
|
typedef OverlapWilsonPartialFractionZolotarevFermion<WilsonImplD> OverlapWilsonPartialFractionZolotarevFermionD;
|
2015-08-14 00:01:04 +01:00
|
|
|
|
|
|
|
// Gparity cases; partial list until tested
|
|
|
|
typedef WilsonFermion<GparityWilsonImplR> GparityWilsonFermionR;
|
|
|
|
typedef WilsonFermion<GparityWilsonImplF> GparityWilsonFermionF;
|
|
|
|
typedef WilsonFermion<GparityWilsonImplD> GparityWilsonFermionD;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplR> GparityDomainWallFermionR;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplF> GparityDomainWallFermionF;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplD> GparityDomainWallFermionD;
|
2015-12-14 17:15:06 +00:00
|
|
|
typedef MobiusFermion<GparityWilsonImplR> GparityMobiusFermionR;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplF> GparityMobiusFermionF;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplD> GparityMobiusFermionD;
|
2015-08-14 00:01:04 +01:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
}}
|
2015-06-05 18:16:25 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// G5 herm -- this has to live in QCD since dirac matrix is not in the broader sector of code
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <qcd/action/fermion/g5HermitianLinop.h>
|
2015-06-02 16:57:12 +01:00
|
|
|
|
2015-07-29 09:53:39 +01:00
|
|
|
////////////////////////////////////////
|
2015-08-10 20:47:44 +01:00
|
|
|
// Pseudo fermion combinations for HMC
|
2015-07-29 09:53:39 +01:00
|
|
|
////////////////////////////////////////
|
2015-08-18 10:37:08 +01:00
|
|
|
#include <qcd/action/pseudofermion/EvenOddSchurDifferentiable.h>
|
2015-08-19 05:49:00 +01:00
|
|
|
|
2015-07-29 09:53:39 +01:00
|
|
|
#include <qcd/action/pseudofermion/TwoFlavour.h>
|
2015-08-18 09:21:29 +01:00
|
|
|
#include <qcd/action/pseudofermion/TwoFlavourRatio.h>
|
2015-08-18 10:37:08 +01:00
|
|
|
#include <qcd/action/pseudofermion/TwoFlavourEvenOdd.h>
|
|
|
|
#include <qcd/action/pseudofermion/TwoFlavourEvenOddRatio.h>
|
|
|
|
|
2015-08-19 05:49:00 +01:00
|
|
|
//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.
|
2015-08-18 14:40:08 +01:00
|
|
|
#include <qcd/action/pseudofermion/OneFlavourRational.h>
|
2015-08-19 04:58:40 +01:00
|
|
|
#include <qcd/action/pseudofermion/OneFlavourRationalRatio.h>
|
2015-08-19 05:49:00 +01:00
|
|
|
#include <qcd/action/pseudofermion/OneFlavourEvenOddRational.h>
|
|
|
|
#include <qcd/action/pseudofermion/OneFlavourEvenOddRationalRatio.h>
|
2015-07-29 09:53:39 +01:00
|
|
|
|
2015-05-31 15:09:02 +01:00
|
|
|
#endif
|