29#ifndef GRID_QCD_PARTIAL_FRACTION_H
30#define GRID_QCD_PARTIAL_FRACTION_H
44 void Meooe_internal(
const FermionField &in, FermionField &out,
int dag);
45 void Mooee_internal(
const FermionField &in, FermionField &out,
int dag);
47 void M_internal(
const FermionField &in, FermionField &out,
int dag);
50 virtual void M (
const FermionField &in, FermionField &out);
51 virtual void Mdag (
const FermionField &in, FermionField &out);
54 virtual void Meooe (
const FermionField &in, FermionField &out);
55 virtual void MeooeDag (
const FermionField &in, FermionField &out);
56 virtual void Mooee (
const FermionField &in, FermionField &out);
57 virtual void MooeeDag (
const FermionField &in, FermionField &out);
58 virtual void MooeeInv (
const FermionField &in, FermionField &out);
59 virtual void MooeeInvDag (
const FermionField &in, FermionField &out);
62 virtual void MDeriv (GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
63 virtual void MoeDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
64 virtual void MeoDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
69 virtual void Mdir (
const FermionField &in, FermionField &out,
int dir,
int disp);
70 virtual void MdirAll(
const FermionField &in, std::vector<FermionField> &out);
91 RealD _mass,
RealD M5,std::vector<RealD> &_qmu,
const ImplParams &
p= ImplParams());
93 void FreePropagator(
const FermionField &in,FermionField &out,
RealD mass,std::vector<Complex> boundary, std::vector<double> twist)
95 std::cout <<
"Free Propagator for PartialFraction"<<std::endl;
96 FermionField in_k(in.Grid());
97 FermionField prop_k(in.Grid());
102 ComplexField coor(in.Grid());
103 ComplexField ph(in.Grid()); ph =
Zero();
104 FermionField in_buf(in.Grid()); in_buf =
Zero();
105 typedef typename Simd::scalar_type Scalar;
107 assert(twist.size() ==
Nd);
108 assert(boundary.size() ==
Nd);
110 for(
unsigned int nu = 0; nu <
Nd; nu++)
114 double boundary_phase =
::acos(
real(boundary[nu]));
115 ph = ph + boundary_phase*coor*((1./(in.Grid()->_fdimensions[nu+shift])));
117 twist[nu] = twist[nu] + boundary_phase/((2.0*
M_PI));
119 in_buf =
exp(ci*ph*(-1.0))*in;
122 if ( this->
qmu.size() ){
130 out = out *
exp(ci*ph);
134 std::vector<double> twist(
Nd,0.0);
135 std::vector<Complex> boundary;
136 for(
int i=0;i<
Nd;i++) boundary.push_back(1);
141 void addQmu(
const FermionField &in, FermionField &out,
int dag);
156 std::vector<double>
p;
157 std::vector<double>
q;
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)
static INTERNAL_PRECISION U
static const int backward
void FFT_all_dim(Lattice< vobj > &result, const Lattice< vobj > &source, int sign)
virtual void MDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
void addQmu(const FermionField &in, FermionField &out, int dag)
const int part_frac_chroma_convention
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass)
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 Instantiatable(void)=0
void set_qmu(std::vector< RealD > _qmu)
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)
void FreePropagator(const FermionField &in, FermionField &out, RealD mass, std::vector< Complex > boundary, std::vector< double > twist)
void MomentumSpacePropagatorHwQ(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist, std::vector< double > qmu)
void MomentumSpacePropagatorHw(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)
WilsonFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, double _M5, const ImplParams &p=ImplParams())