2016-01-02 14:51:32 +00:00
|
|
|
/*************************************************************************************
|
|
|
|
|
|
|
|
Grid physics library, www.github.com/paboyle/Grid
|
|
|
|
|
2017-02-22 18:09:33 +00:00
|
|
|
Source file: ./lib/qcd/action/fermion/Fermion_base_aggregate.h
|
2016-01-02 14:51:32 +00:00
|
|
|
|
|
|
|
Copyright (C) 2015
|
|
|
|
|
|
|
|
Author: Peter Boyle <pabobyle@ph.ed.ac.uk>
|
|
|
|
|
|
|
|
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 */
|
2017-02-23 00:25:29 +00:00
|
|
|
#ifndef GRID_QCD_FERMION_H
|
|
|
|
#define GRID_QCD_FERMION_H
|
2015-08-30 12:18:34 +01:00
|
|
|
|
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
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
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
|
|
|
|
2016-07-07 22:31:07 +01:00
|
|
|
#include <Grid/qcd/action/fermion/WilsonFermion.h> // 4d wilson like
|
|
|
|
#include <Grid/qcd/action/fermion/WilsonTMFermion.h> // 4d wilson like
|
|
|
|
#include <Grid/qcd/action/fermion/WilsonFermion5D.h> // 5d base used by all 5d overlap types
|
|
|
|
//#include <Grid/qcd/action/fermion/CloverFermion.h>
|
2016-11-01 14:24:22 +00:00
|
|
|
#include <Grid/qcd/action/fermion/ImprovedStaggeredFermion.h>
|
2016-11-29 13:13:56 +00:00
|
|
|
#include <Grid/qcd/action/fermion/ImprovedStaggeredFermion5D.h>
|
2016-07-07 22:31:07 +01:00
|
|
|
#include <Grid/qcd/action/fermion/CayleyFermion5D.h> // Cayley types
|
|
|
|
#include <Grid/qcd/action/fermion/DomainWallFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/DomainWallFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/MobiusFermion.h>
|
2016-08-15 22:31:29 +01:00
|
|
|
#include <Grid/qcd/action/fermion/ZMobiusFermion.h>
|
2017-04-07 03:07:40 +01:00
|
|
|
#include <Grid/qcd/action/fermion/SchurDiagTwoKappa.h>
|
2016-07-07 22:31:07 +01:00
|
|
|
#include <Grid/qcd/action/fermion/ScaledShamirFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/MobiusZolotarevFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/ShamirZolotarevFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonCayleyTanhFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonCayleyZolotarevFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/ContinuedFractionFermion5D.h> // Continued fraction
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonContfracTanhFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonContfracZolotarevFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/PartialFractionFermion5D.h> // Partial fraction
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonPartialFractionTanhFermion.h>
|
|
|
|
#include <Grid/qcd/action/fermion/OverlapWilsonPartialFractionZolotarevFermion.h>
|
2017-02-22 18:09:33 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// G5 herm -- this has to live in QCD since dirac matrix is not in the broader sector of code
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <Grid/qcd/action/fermion/g5HermitianLinop.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;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef WilsonFermion<WilsonImplRL> WilsonFermionRL;
|
|
|
|
typedef WilsonFermion<WilsonImplFH> WilsonFermionFH;
|
|
|
|
typedef WilsonFermion<WilsonImplDF> WilsonFermionDF;
|
|
|
|
|
2016-07-18 16:36:28 +01:00
|
|
|
typedef WilsonFermion<WilsonAdjImplR> WilsonAdjFermionR;
|
|
|
|
typedef WilsonFermion<WilsonAdjImplF> WilsonAdjFermionF;
|
|
|
|
typedef WilsonFermion<WilsonAdjImplD> WilsonAdjFermionD;
|
|
|
|
|
2016-09-22 14:17:37 +01:00
|
|
|
typedef WilsonFermion<WilsonTwoIndexSymmetricImplR> WilsonTwoIndexSymmetricFermionR;
|
|
|
|
typedef WilsonFermion<WilsonTwoIndexSymmetricImplF> WilsonTwoIndexSymmetricFermionF;
|
|
|
|
typedef WilsonFermion<WilsonTwoIndexSymmetricImplD> WilsonTwoIndexSymmetricFermionD;
|
|
|
|
|
2015-12-17 23:06:33 +00:00
|
|
|
typedef WilsonTMFermion<WilsonImplR> WilsonTMFermionR;
|
|
|
|
typedef WilsonTMFermion<WilsonImplF> WilsonTMFermionF;
|
|
|
|
typedef WilsonTMFermion<WilsonImplD> WilsonTMFermionD;
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
typedef DomainWallFermion<WilsonImplR> DomainWallFermionR;
|
|
|
|
typedef DomainWallFermion<WilsonImplF> DomainWallFermionF;
|
|
|
|
typedef DomainWallFermion<WilsonImplD> DomainWallFermionD;
|
2016-11-29 00:14:36 +00:00
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef DomainWallFermion<WilsonImplRL> DomainWallFermionRL;
|
|
|
|
typedef DomainWallFermion<WilsonImplFH> DomainWallFermionFH;
|
|
|
|
typedef DomainWallFermion<WilsonImplDF> DomainWallFermionDF;
|
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
typedef MobiusFermion<WilsonImplR> MobiusFermionR;
|
|
|
|
typedef MobiusFermion<WilsonImplF> MobiusFermionF;
|
|
|
|
typedef MobiusFermion<WilsonImplD> MobiusFermionD;
|
2016-08-15 22:31:29 +01:00
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef MobiusFermion<WilsonImplRL> MobiusFermionRL;
|
|
|
|
typedef MobiusFermion<WilsonImplFH> MobiusFermionFH;
|
|
|
|
typedef MobiusFermion<WilsonImplDF> MobiusFermionDF;
|
|
|
|
|
2016-08-15 22:31:29 +01:00
|
|
|
typedef ZMobiusFermion<ZWilsonImplR> ZMobiusFermionR;
|
|
|
|
typedef ZMobiusFermion<ZWilsonImplF> ZMobiusFermionF;
|
|
|
|
typedef ZMobiusFermion<ZWilsonImplD> ZMobiusFermionD;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef ZMobiusFermion<ZWilsonImplRL> ZMobiusFermionRL;
|
|
|
|
typedef ZMobiusFermion<ZWilsonImplFH> ZMobiusFermionFH;
|
|
|
|
typedef ZMobiusFermion<ZWilsonImplDF> ZMobiusFermionDF;
|
|
|
|
|
2016-11-29 00:14:36 +00:00
|
|
|
// Ls vectorised
|
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplR> DomainWallFermionVec5dR;
|
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplF> DomainWallFermionVec5dF;
|
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplD> DomainWallFermionVec5dD;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplRL> DomainWallFermionVec5dRL;
|
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplFH> DomainWallFermionVec5dFH;
|
|
|
|
typedef DomainWallFermion<DomainWallVec5dImplDF> DomainWallFermionVec5dDF;
|
|
|
|
|
2016-11-29 00:14:36 +00:00
|
|
|
typedef MobiusFermion<DomainWallVec5dImplR> MobiusFermionVec5dR;
|
|
|
|
typedef MobiusFermion<DomainWallVec5dImplF> MobiusFermionVec5dF;
|
|
|
|
typedef MobiusFermion<DomainWallVec5dImplD> MobiusFermionVec5dD;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef MobiusFermion<DomainWallVec5dImplRL> MobiusFermionVec5dRL;
|
|
|
|
typedef MobiusFermion<DomainWallVec5dImplFH> MobiusFermionVec5dFH;
|
|
|
|
typedef MobiusFermion<DomainWallVec5dImplDF> MobiusFermionVec5dDF;
|
|
|
|
|
2016-11-29 00:14:36 +00:00
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplR> ZMobiusFermionVec5dR;
|
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplF> ZMobiusFermionVec5dF;
|
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplD> ZMobiusFermionVec5dD;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplRL> ZMobiusFermionVec5dRL;
|
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplFH> ZMobiusFermionVec5dFH;
|
|
|
|
typedef ZMobiusFermion<ZDomainWallVec5dImplDF> ZMobiusFermionVec5dDF;
|
2016-11-29 00:14:36 +00:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
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;
|
2017-04-20 11:20:26 +01:00
|
|
|
|
|
|
|
typedef WilsonFermion<GparityWilsonImplRL> GparityWilsonFermionRL;
|
|
|
|
typedef WilsonFermion<GparityWilsonImplFH> GparityWilsonFermionFH;
|
|
|
|
typedef WilsonFermion<GparityWilsonImplDF> GparityWilsonFermionDF;
|
|
|
|
|
2015-08-14 00:01:04 +01:00
|
|
|
typedef DomainWallFermion<GparityWilsonImplR> GparityDomainWallFermionR;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplF> GparityDomainWallFermionF;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplD> GparityDomainWallFermionD;
|
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef DomainWallFermion<GparityWilsonImplRL> GparityDomainWallFermionRL;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplFH> GparityDomainWallFermionFH;
|
|
|
|
typedef DomainWallFermion<GparityWilsonImplDF> GparityDomainWallFermionDF;
|
|
|
|
|
2016-01-25 21:03:02 +00:00
|
|
|
typedef WilsonTMFermion<GparityWilsonImplR> GparityWilsonTMFermionR;
|
|
|
|
typedef WilsonTMFermion<GparityWilsonImplF> GparityWilsonTMFermionF;
|
|
|
|
typedef WilsonTMFermion<GparityWilsonImplD> GparityWilsonTMFermionD;
|
2017-04-20 11:20:26 +01:00
|
|
|
|
|
|
|
typedef WilsonTMFermion<GparityWilsonImplRL> GparityWilsonTMFermionRL;
|
|
|
|
typedef WilsonTMFermion<GparityWilsonImplFH> GparityWilsonTMFermionFH;
|
|
|
|
typedef WilsonTMFermion<GparityWilsonImplDF> GparityWilsonTMFermionDF;
|
|
|
|
|
2015-12-14 17:15:06 +00:00
|
|
|
typedef MobiusFermion<GparityWilsonImplR> GparityMobiusFermionR;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplF> GparityMobiusFermionF;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplD> GparityMobiusFermionD;
|
2016-03-08 09:55:14 +00:00
|
|
|
|
2017-04-20 11:20:26 +01:00
|
|
|
typedef MobiusFermion<GparityWilsonImplRL> GparityMobiusFermionRL;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplFH> GparityMobiusFermionFH;
|
|
|
|
typedef MobiusFermion<GparityWilsonImplDF> GparityMobiusFermionDF;
|
|
|
|
|
2016-11-03 16:26:56 +00:00
|
|
|
typedef ImprovedStaggeredFermion<StaggeredImplR> ImprovedStaggeredFermionR;
|
|
|
|
typedef ImprovedStaggeredFermion<StaggeredImplF> ImprovedStaggeredFermionF;
|
|
|
|
typedef ImprovedStaggeredFermion<StaggeredImplD> ImprovedStaggeredFermionD;
|
2015-08-14 00:01:04 +01:00
|
|
|
|
2016-11-29 13:13:56 +00:00
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredImplR> ImprovedStaggeredFermion5DR;
|
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredImplF> ImprovedStaggeredFermion5DF;
|
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredImplD> ImprovedStaggeredFermion5DD;
|
|
|
|
|
2016-12-16 16:55:36 +00:00
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredVec5dImplR> ImprovedStaggeredFermionVec5dR;
|
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredVec5dImplF> ImprovedStaggeredFermionVec5dF;
|
|
|
|
typedef ImprovedStaggeredFermion5D<StaggeredVec5dImplD> ImprovedStaggeredFermionVec5dD;
|
2015-08-14 00:01:04 +01:00
|
|
|
|
2016-11-29 00:14:36 +00:00
|
|
|
|
2015-08-10 20:47:44 +01:00
|
|
|
}}
|
2015-07-29 09:53:39 +01:00
|
|
|
|
2015-05-31 15:09:02 +01:00
|
|
|
#endif
|