mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 15:55:37 +00:00
155c164b0c
So valence sector looks ok. FermionOperatorImpl.h provides the policy classes. Expect HMC will introduce a smearing policy and a fermion representation change policy template param. Will also probably need multi-precision work. * HMC is running even-odd and non-checkerboarded (checked 4^4 wilson fermion/wilson gauge). There appears to be a bug in the multi-level integrator -- <e-dH> passes with single level but not with multi-level. In any case there looks to be quite a bit to clean up. This is the "const det" style implementation that is not appropriate yet for clover since it assumes that Mee is indept of the gauge fields. Easily fixed in future.
51 lines
2.0 KiB
C++
51 lines
2.0 KiB
C++
#ifndef GRID_QCD_DHOP_H
|
|
#define GRID_QCD_DHOP_H
|
|
|
|
namespace Grid {
|
|
|
|
namespace QCD {
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Helper routines that implement Wilson stencil for a single site.
|
|
// Common to both the WilsonFermion and WilsonFermion5D
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
template<class Impl> class WilsonKernels : public FermionOperator<Impl> {
|
|
public:
|
|
|
|
INHERIT_IMPL_TYPES(Impl);
|
|
typedef FermionOperator<Impl> Base;
|
|
|
|
public:
|
|
void DiracOptDhopSite(CartesianStencil &st,DoubledGaugeField &U,
|
|
std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > &buf,
|
|
int sF,int sU,const FermionField &in, FermionField &out);
|
|
|
|
void DiracOptDhopSiteDag(CartesianStencil &st,DoubledGaugeField &U,
|
|
std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > &buf,
|
|
int sF,int sU,const FermionField &in,FermionField &out);
|
|
|
|
void DiracOptDhopDir(CartesianStencil &st,DoubledGaugeField &U,
|
|
std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > &buf,
|
|
int sF,int sU,const FermionField &in, FermionField &out,int dirdisp,int gamma);
|
|
|
|
void DiracOptHandDhopSite(CartesianStencil &st,DoubledGaugeField &U,
|
|
std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > &buf,
|
|
int sF,int sU,const FermionField &in, FermionField &out){
|
|
DiracOptDhopSite(st,U,buf,sF,sU,in,out); // will template override for Wilson Nc=3
|
|
}
|
|
|
|
void DiracOptHandDhopSiteDag(CartesianStencil &st,DoubledGaugeField &U,
|
|
std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > &buf,
|
|
int sF,int sU,const FermionField &in, FermionField &out){
|
|
DiracOptDhopSiteDag(st,U,buf,sF,sU,in,out); // will template override for Wilson Nc=3
|
|
}
|
|
|
|
WilsonKernels(const ImplParams &p= ImplParams()) : Base(p) {};
|
|
|
|
};
|
|
|
|
}
|
|
}
|
|
#endif
|