From 96bf814d8c85a5fa79f55a9c381e9cc17e0fb07e Mon Sep 17 00:00:00 2001 From: Christoph Lehner Date: Thu, 10 Apr 2025 22:14:55 +0200 Subject: [PATCH] Add checkerboarding to 5D compact clover --- Grid/qcd/action/fermion/WilsonFermion5D.h | 12 ++--- .../WilsonFermion5DImplementation.h | 49 +++++++++++++++++++ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/Grid/qcd/action/fermion/WilsonFermion5D.h b/Grid/qcd/action/fermion/WilsonFermion5D.h index 40c1871f..9dadc866 100644 --- a/Grid/qcd/action/fermion/WilsonFermion5D.h +++ b/Grid/qcd/action/fermion/WilsonFermion5D.h @@ -91,13 +91,13 @@ public: virtual void Mdag (const FermionField &in, FermionField &out){assert(0);}; // half checkerboard operations; leave unimplemented as abstract for now - virtual void Meooe (const FermionField &in, FermionField &out){assert(0);}; - virtual void Mooee (const FermionField &in, FermionField &out){assert(0);}; - virtual void MooeeInv (const FermionField &in, FermionField &out){assert(0);}; + virtual void Meooe (const FermionField &in, FermionField &out); + virtual void Mooee (const FermionField &in, FermionField &out); + virtual void MooeeInv (const FermionField &in, FermionField &out); - virtual void MeooeDag (const FermionField &in, FermionField &out){assert(0);}; - virtual void MooeeDag (const FermionField &in, FermionField &out){assert(0);}; - virtual void MooeeInvDag (const FermionField &in, FermionField &out){assert(0);}; + virtual void MeooeDag (const FermionField &in, FermionField &out); + virtual void MooeeDag (const FermionField &in, FermionField &out); + virtual void MooeeInvDag (const FermionField &in, FermionField &out); virtual void Mdir (const FermionField &in, FermionField &out,int dir,int disp){assert(0);}; // case by case Wilson, Clover, Cayley, ContFrac, PartFrac virtual void MdirAll(const FermionField &in, std::vector &out){assert(0);}; // case by case Wilson, Clover, Cayley, ContFrac, PartFrac diff --git a/Grid/qcd/action/fermion/implementation/WilsonFermion5DImplementation.h b/Grid/qcd/action/fermion/implementation/WilsonFermion5DImplementation.h index 3d4e5cc5..9598552f 100644 --- a/Grid/qcd/action/fermion/implementation/WilsonFermion5DImplementation.h +++ b/Grid/qcd/action/fermion/implementation/WilsonFermion5DImplementation.h @@ -14,6 +14,7 @@ Author: paboyle Author: Guido Cossu Author: Andrew Lawson Author: Vera Guelpers +Author: Christoph Lehner 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 @@ -484,6 +485,54 @@ void WilsonFermion5D::DW(const FermionField &in, FermionField &out,int dag Dhop(in,out,dag); // -0.5 is included axpy(out,4.0-M5,in,out); } +template +void WilsonFermion5D::Meooe(const FermionField &in, FermionField &out) +{ + if (in.Checkerboard() == Odd) { + DhopEO(in, out, DaggerNo); + } else { + DhopOE(in, out, DaggerNo); + } +} + +template +void WilsonFermion5D::MeooeDag(const FermionField &in, FermionField &out) +{ + if (in.Checkerboard() == Odd) { + DhopEO(in, out, DaggerYes); + } else { + DhopOE(in, out, DaggerYes); + } +} + +template +void WilsonFermion5D::Mooee(const FermionField &in, FermionField &out) +{ + out.Checkerboard() = in.Checkerboard(); + typename FermionField::scalar_type scal(4.0 + M5); + out = scal * in; +} + +template +void WilsonFermion5D::MooeeDag(const FermionField &in, FermionField &out) +{ + out.Checkerboard() = in.Checkerboard(); + Mooee(in, out); +} + +template +void WilsonFermion5D::MooeeInv(const FermionField &in, FermionField &out) +{ + out.Checkerboard() = in.Checkerboard(); + out = (1.0/(4.0 + M5))*in; +} + +template +void WilsonFermion5D::MooeeInvDag(const FermionField &in, FermionField &out) +{ + out.Checkerboard() = in.Checkerboard(); + MooeeInv(in,out); +} template void WilsonFermion5D::MomentumSpacePropagatorHt_5d(FermionField &out,const FermionField &in, RealD mass,std::vector twist)