30#ifndef GRID_QCD_DOMAIN_WALL_FERMION_H
31#define GRID_QCD_DOMAIN_WALL_FERMION_H
44 void FreePropagator(
const FermionField &in,FermionField &out,
RealD mass,std::vector<Complex> boundary, std::vector<double> twist,
bool fiveD) {
45 FermionField in_k(in.Grid());
46 FermionField prop_k(in.Grid());
51 ComplexField coor(in.Grid());
52 ComplexField ph(in.Grid()); ph =
Zero();
53 FermionField in_buf(in.Grid()); in_buf =
Zero();
54 typedef typename Simd::scalar_type Scalar;
56 assert(twist.size() ==
Nd);
57 assert(boundary.size() ==
Nd);
60 for(
unsigned int nu = 0; nu <
Nd; nu++)
64 double boundary_phase =
::acos(
real(boundary[nu]));
65 ph = ph + boundary_phase*coor*((1./(in.Grid()->_fdimensions[nu+shift])));
67 twist[nu] = twist[nu] + boundary_phase/((2.0*
M_PI));
69 in_buf =
exp(ci*ph*(-1.0))*in;
72 std::vector<int> mask(
Nd+1,1); mask[0] = 0;
83 out = out *
exp(ci*ph);
86 virtual void FreePropagator(
const FermionField &in,FermionField &out,
RealD mass,std::vector<Complex> boundary,std::vector<double> twist) {
92 std::vector<double> twist(
Nd,0.0);
93 std::vector<Complex> boundary;
94 for(
int i=0;i<
Nd;i++) boundary.push_back(1);
100 std::vector<double> twist(
Nd,0.0);
101 std::vector<Complex> boundary;
102 for(
int i=0;i<
Nd;i++) boundary.push_back(1);
113 RealD _mass,
RealD _M5,
const ImplParams &p= ImplParams()) :
120 FourDimRedBlackGrid,_mass,_M5,p)
125 Approx::zolotarev_data *zdata = Approx::higham(eps,this->
Ls);
126 assert(zdata->n==this->Ls);
132 Approx::zolotarev_free(zdata);
accelerator_inline Grid_simd< S, V > acos(const Grid_simd< S, V > &r)
accelerator_inline Grid_simd< S, V > exp(const Grid_simd< S, V > &r)
void LatticeCoordinate(Lattice< iobj > &l, int mu)
Lattice< vobj > real(const Lattice< vobj > &lhs)
#define NAMESPACE_BEGIN(A)
CayleyFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, RealD _mass, RealD _M5, const ImplParams &p=ImplParams())
virtual void SetCoefficientsTanh(Approx::zolotarev_data *zdata, RealD b, RealD c)
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass)
void FreePropagator(const FermionField &in, FermionField &out, RealD mass, std::vector< Complex > boundary, std::vector< double > twist, bool fiveD)
virtual void Instantiatable(void)
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass, std::vector< Complex > boundary, std::vector< double > twist)
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass, bool fiveD)
DomainWallFermion(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, RealD _mass, RealD _M5, const ImplParams &p=ImplParams())
static const int backward
void FFT_dim_mask(Lattice< vobj > &result, const Lattice< vobj > &source, Coordinate mask, int sign)
void FFT_all_dim(Lattice< vobj > &result, const Lattice< vobj > &source, int sign)
void MomentumSpacePropagatorHt(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)
void MomentumSpacePropagatorHt_5d(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)