45 const ImplParams &p) :
60 UmuOdd (&FourDimRedBlackGrid),
64 _tmp(&FiveDimRedBlackGrid)
95 if (Impl::LsVectorised) {
97 int nsimd = Simd::Nsimd();
103 for(
int d=0;d<4;d++){
117 int vol4= FourDimGrid.
oSites();
118 Stencil.BuildSurfaceList(LLs,vol4);
120 vol4=FourDimRedBlackGrid.
oSites();
140 const ImplParams &p) :
142 FourDimGrid,FourDimRedBlackGrid,
157 for (
int mu = 0; mu <
Nd; mu++) {
160 Impl::InsertGaugeField(
UUUmu,
U,mu);
163 Impl::InsertGaugeField(
UUUmu,-
U,mu+4);
166 Impl::InsertGaugeField(
Umu,
U,mu);
169 Impl::InsertGaugeField(
Umu,-
U,mu+4);
197 for (
int mu = 0; mu <
Nd; mu++) {
220 Compressor compressor;
221 Stencil.HaloExchange(in,compressor);
227 for(int s=0;s<Ls;s++){
230 Kernels::DhopDirKernel(Stencil, Umu_v, UUUmu_v, Stencil.CommBuf(), sF, sU, in_v, out_v, dir, disp);
237 DoubledGaugeField &
U,
238 DoubledGaugeField & UUU,
240 const FermionField &A,
241 const FermionField &
B,
250 const FermionField &A,
251 const FermionField &
B,
259 const FermionField &A,
260 const FermionField &
B,
269 const FermionField &A,
270 const FermionField &
B,
279 DoubledGaugeField &
U,DoubledGaugeField & UUU,
280 const FermionField &in, FermionField &out,
int dag)
290 DoubledGaugeField &
U,DoubledGaugeField & UUU,
291 const FermionField &in, FermionField &out,
int dag)
294 Compressor compressor;
296 int LLs = in.Grid()->_rdimensions[0];
297 int len =
U.Grid()->oSites();
300 st.HaloGather(in,compressor);
302 std::vector<std::vector<CommsRequest_t> > requests;
303 st.CommunicateBegin(requests);
306 st.CommsMergeSHM(compressor);
317 st.CommsMerge(compressor);
319 st.CommunicateComplete(requests);
330 DoubledGaugeField &
U,DoubledGaugeField & UUU,
331 const FermionField &in, FermionField &out,
int dag)
333 Compressor compressor;
334 int LLs = in.Grid()->_rdimensions[0];
336 st.HaloExchange(in,compressor);
355 assert(in.Checkerboard()==
Even);
356 out.Checkerboard() =
Odd;
366 assert(in.Checkerboard()==
Odd);
367 out.Checkerboard() =
Even;
377 out.Checkerboard() = in.Checkerboard();
398 out.Checkerboard() = in.Checkerboard();
406 out.Checkerboard() = in.Checkerboard();
414 if (in.Checkerboard() ==
Odd) {
423 if (in.Checkerboard() ==
Odd) {
433 out.Checkerboard() = in.Checkerboard();
434 typename FermionField::scalar_type scal(
mass);
441 out.Checkerboard() = in.Checkerboard();
448 out.Checkerboard() = in.Checkerboard();
449 out = (1.0 / (
mass)) * in;
455 out.Checkerboard() = in.Checkerboard();
464 PropagatorField &q_in_2,
465 PropagatorField &q_out,
466 PropagatorField &src,
475 PropagatorField &q_out,
476 PropagatorField &src,
481 ComplexField &lattice_cmplx)
auto Cshift(const Expression &expr, int dim, int shift) -> decltype(closure(expr))
void axpy(Lattice< vobj > &ret, sobj a, const Lattice< vobj > &x, const Lattice< vobj > &y)
void PokeIndex(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< Index >(vobj(), 0))> &rhs, int i)
auto PeekIndex(const Lattice< vobj > &lhs, int i) -> Lattice< decltype(peekIndex< Index >(vobj(), i))>
Lattice< vobj > adj(const Lattice< vobj > &lhs)
void pickCheckerboard(int cb, Lattice< vobj > &half, const Lattice< vobj > &full)
#define autoView(l_v, l, mode)
#define NAMESPACE_BEGIN(A)
static constexpr int DaggerYes
static constexpr int DaggerNo
#define thread_for(i, num,...)
static INTERNAL_PRECISION U
unsigned long _ndimension
static const std::vector< int > displacements
static const std::vector< int > directions
GridBase * _FourDimRedBlackGrid
void Mdag(const FermionField &in, FermionField &out)
void MdirAll(const FermionField &in, std::vector< FermionField > &out)
void Mooee(const FermionField &in, FermionField &out)
GridBase * FermionRedBlackGrid(void)
void DhopDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
DoubledGaugeField UUUmuOdd
void ImportGauge(const GaugeField &_Uthin)
void DhopOE(const FermionField &in, FermionField &out, int dag)
void DerivInternal(StencilImpl &st, DoubledGaugeField &U, DoubledGaugeField &UUU, GaugeField &mat, const FermionField &A, const FermionField &B, int dag)
void DhopDerivOE(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
ImprovedStaggeredFermion5D(GaugeField &_Uthin, GaugeField &_Ufat, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, double _mass, RealD _c1, RealD _c2, RealD _u0, const ImplParams &p=ImplParams())
GridBase * FermionGrid(void)
void MooeeDag(const FermionField &in, FermionField &out)
void DhopEO(const FermionField &in, FermionField &out, int dag)
void CopyGaugeCheckerboards(void)
void DhopInternalSerialComms(StencilImpl &st, DoubledGaugeField &U, DoubledGaugeField &UUU, const FermionField &in, FermionField &out, int dag)
DoubledGaugeField UUUmuEven
void M(const FermionField &in, FermionField &out)
void Mdir(const FermionField &in, FermionField &out, int dir, int disp)
void ContractConservedCurrent(PropagatorField &q_in_1, PropagatorField &q_in_2, PropagatorField &q_out, PropagatorField &src, Current curr_type, unsigned int mu)
void DhopInternalOverlappedComms(StencilImpl &st, DoubledGaugeField &U, DoubledGaugeField &UUU, const FermionField &in, FermionField &out, int dag)
void MooeeInvDag(const FermionField &in, FermionField &out)
void DhopDerivEO(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
void MooeeInv(const FermionField &in, FermionField &out)
void Meooe(const FermionField &in, FermionField &out)
void Dhop(const FermionField &in, FermionField &out, int dag)
DoubledGaugeField UmuEven
GridBase * GaugeGrid(void)
StaggeredKernels< Impl > Kernels
void DhopDir(const FermionField &in, FermionField &out, int dir, int disp)
void MeooeDag(const FermionField &in, FermionField &out)
void SeqConservedCurrent(PropagatorField &q_in, PropagatorField &q_out, PropagatorField &src, Current curr_type, unsigned int mu, unsigned int tmin, unsigned int tmax, ComplexField &lattice_cmplx)
void DhopInternal(StencilImpl &st, DoubledGaugeField &U, DoubledGaugeField &UUU, const FermionField &in, FermionField &out, int dag)
GridBase * _FiveDimRedBlackGrid
void ImportGaugeSimple(const GaugeField &_UUU, const GaugeField &_U)
void DhopImproved(StencilImpl &st, DoubledGaugeField &U, DoubledGaugeField &UUU, const FermionField &in, FermionField &out, int dag, int interior, int exterior)