39 this->
DhopDir(psi,chi,dir,disp);
42 for(
int b=0;b<nblock;b++){
56 for(
int point=0;point<chi.size();point++){
58 for(
int b=0;b<nblock;b++){
71 if ( psi.Checkerboard() ==
Odd ) {
78 for(
int b=0;b<nblock;b++){
83 ag5xpby_ssp(chi,p[nblock]*scale/amax,chi,0.0,chi,Ls-1,Ls-1);
90 int sign = dag ? (-1) : 1;
94 for(
int b=0;b<nblock;b++){
111 for(
int b=0;b<nblock;b++){
122 int sign = dag ? (-1) : 1;
125 FermionField
tmp(psi.Grid());
132 axpy(chi,0.0,psi,psi);
134 for(
int b=0;b<nblock;b++){
150 for(
int b=0;b<nblock;b++){
155 for(
int b=0;b<nblock;b++){
157 RealD pp = p[nblock-1-b];
158 RealD qq = q[nblock-1-b];
159 RealD coeff1=dw_diag / ( dw_diag*dw_diag + amax*amax* qq);
160 RealD coeff2=amax*
sqrt(qq) / ( dw_diag*dw_diag + amax*amax* qq);
169 for(
int b=0;b<nblock;b++){
171 RealD pp = p[nblock-1-b];
172 RealD qq = q[nblock-1-b];
173 RealD coeff1=-sign*
sqrt(amax*amax*amax*pp*qq) / ( dw_diag*dw_diag + amax*amax* qq);
174 RealD coeff2=-sign*
sqrt(amax*pp)*dw_diag / ( dw_diag*dw_diag + amax*amax* qq);
175 axpby_ssp (chi,1.0/scale,tmp,coeff1/scale,tmp,s,Ls-1);
176 axpbg5y_ssp(chi,1.0/scale,tmp,coeff2/scale,tmp,s+1,Ls-1);
178 axpby_ssp (chi, 1.0/scale,tmp,0.0,tmp,Ls-1,Ls-1);
184 FermionField D(psi.Grid());
187 int sign = dag ? (-1) : 1;
247 std::cout<<
"Mat" <<
"qmu ("<<
qmu[0]<<
","<<
qmu[1]<<
","<<
qmu[2]<<
","<<
qmu[3]<<
")"<<std::endl;
248 assert(
qmu.size()==
Nd);
250 FermionField qslash_psi(psi.Grid());
252 Gamma::Algebra Gmu [] = {
253 Gamma::Algebra::GammaX,
254 Gamma::Algebra::GammaY,
255 Gamma::Algebra::GammaZ,
256 Gamma::Algebra::GammaT
258 qslash_psi =
qmu[0]*(
Gamma(Gmu[0])*psi);
259 for(
int mu=1;mu<
Nd;mu++){
260 qslash_psi = qslash_psi +
qmu[mu]*(
Gamma(Gmu[mu])*psi);
263 qslash_psi = ci*qslash_psi ;
268 for(
int b=0;b<nblock;b++){
271 double pp =
p[nblock-1-b];
272 double qq =
q[nblock-1-b];
326 for(
int b=0;b<nblock;b++){
328 double pp =
p[nblock-1-b];
386 FermionField D(V.Grid());
389 for(
int b=0;b<nblock;b++){
403 FermionField D(V.Grid());
406 for(
int b=0;b<nblock;b++){
420 FermionField D(V.Grid());
423 for(
int b=0;b<nblock;b++){
449 assert(
Ls == (2*zdata->da -1) );
461 for(
int n=0;n<zdata->da;n++){
462 p[n] = zdata -> alpha[n];
464 for(
int n=0;n<zdata->dd;n++){
465 q[n] = -zdata -> ap[n];
477 conformable(solution5d.Grid(),this->FermionGrid());
486 conformable(imported5d.Grid(),this->FermionGrid());
503 const ImplParams &
p) :
505 FiveDimGrid, FiveDimRedBlackGrid,
506 FourDimGrid, FourDimRedBlackGrid,
M5,
p),
516 Approx::zolotarev_data *zdata = Approx::higham(1.0,nrational);
526 Approx::zolotarev_free(zdata);
536 std::vector<RealD> &_qmu,
539 FiveDimGrid,FiveDimRedBlackGrid,
540 FourDimGrid,FourDimRedBlackGrid,
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
void axpy(Lattice< vobj > &ret, sobj a, const Lattice< vobj > &x, const Lattice< vobj > &y)
void InsertSlice(const Lattice< vobj > &lowDim, Lattice< vobj > &higherDim, int slice, int orthog)
void ExtractSlice(Lattice< vobj > &lowDim, const Lattice< vobj > &higherDim, int slice, int orthog)
void ag5xpby_ssp(Lattice< vobj > &z, Coeff a, const Lattice< vobj > &x, Coeff b, const Lattice< vobj > &y, int s, int sp)
void ag5xpbg5y_ssp(Lattice< vobj > &z, Coeff a, const Lattice< vobj > &x, Coeff b, const Lattice< vobj > &y, int s, int sp)
void axpby_ssp(Lattice< vobj > &z, Coeff a, const Lattice< vobj > &x, Coeff b, const Lattice< vobj > &y, int s, int sp)
void axpbg5y_ssp(Lattice< vobj > &z, Coeff a, const Lattice< vobj > &x, Coeff b, const Lattice< vobj > &y, int s, int sp)
#define NAMESPACE_BEGIN(A)
static constexpr int DaggerYes
static constexpr int DaggerNo
std::complex< RealD > ComplexD
static INTERNAL_PRECISION U
virtual void Dminus(const FermionField &psi, FermionField &chi)
virtual void MDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
const int part_frac_chroma_convention
void Meooe_internal(const FermionField &in, FermionField &out, int dag)
virtual void MeooeDag(const FermionField &in, FermionField &out)
virtual void MooeeDag(const FermionField &in, FermionField &out)
void M_internal(const FermionField &in, FermionField &out, int dag)
virtual void MdirAll(const FermionField &in, std::vector< FermionField > &out)
void MooeeInv_internal(const FermionField &in, FermionField &out, int dag)
virtual void MooeeInvDag(const FermionField &in, FermionField &out)
virtual void SetCoefficientsTanh(Approx::zolotarev_data *zdata, RealD scale)
PartialFractionFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, RealD _mass, RealD M5, const ImplParams &p=ImplParams())
virtual void Mooee(const FermionField &in, FermionField &out)
virtual void M(const FermionField &in, FermionField &out)
virtual void MoeDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void MeoDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void Mdir(const FermionField &in, FermionField &out, int dir, int disp)
virtual void ExportPhysicalFermionSolution(const FermionField &solution5d, FermionField &exported4d)
virtual void Meooe(const FermionField &in, FermionField &out)
virtual void SetCoefficientsZolotarev(RealD zolo_hi, Approx::zolotarev_data *zdata)
void Mooee_internal(const FermionField &in, FermionField &out, int dag)
virtual void MooeeInv(const FermionField &in, FermionField &out)
virtual void Mdag(const FermionField &in, FermionField &out)
virtual void ImportPhysicalFermionSource(const FermionField &input4d, FermionField &imported5d)
GridBase * FermionGrid(void)
virtual void DhopDerivEO(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
void DW(const FermionField &in, FermionField &out, int dag)
void DhopDir(const FermionField &in, FermionField &out, int dir, int disp)
void DhopDirAll(const FermionField &in, std::vector< FermionField > &out)
WilsonFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, double _M5, const ImplParams &p=ImplParams())
virtual void DhopDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
void DhopEO(const FermionField &in, FermionField &out, int dag)
virtual void DhopDerivOE(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)