29#ifndef GRID_QCD_CONTINUED_FRACTION_H
30#define GRID_QCD_CONTINUED_FRACTION_H
44 virtual void M (
const FermionField &in, FermionField &out);
45 virtual void Mdag (
const FermionField &in, FermionField &out);
48 virtual void Meooe (
const FermionField &in, FermionField &out);
49 virtual void MeooeDag (
const FermionField &in, FermionField &out);
50 virtual void Mooee (
const FermionField &in, FermionField &out);
51 virtual void MooeeDag (
const FermionField &in, FermionField &out);
52 virtual void MooeeInv (
const FermionField &in, FermionField &out);
53 virtual void MooeeInvDag (
const FermionField &in, FermionField &out);
56 virtual void MDeriv (GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
57 virtual void MoeDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
58 virtual void MeoDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag);
63 void FreePropagator(
const FermionField &in,FermionField &out,
RealD mass,std::vector<Complex> boundary, std::vector<double> twist)
65 std::cout <<
"Free Propagator for PartialFraction"<<std::endl;
66 FermionField in_k(in.Grid());
67 FermionField prop_k(in.Grid());
72 ComplexField coor(in.Grid());
73 ComplexField ph(in.Grid()); ph =
Zero();
74 FermionField in_buf(in.Grid()); in_buf =
Zero();
75 typedef typename Simd::scalar_type Scalar;
77 assert(twist.size() ==
Nd);
78 assert(boundary.size() ==
Nd);
80 for(
unsigned int nu = 0; nu <
Nd; nu++)
84 double boundary_phase =
::acos(
real(boundary[nu]));
85 ph = ph + boundary_phase*coor*((1./(in.Grid()->_fdimensions[nu+shift])));
87 twist[nu] = twist[nu] + boundary_phase/((2.0*
M_PI));
89 in_buf =
exp(ci*ph*(-1.0))*in;
96 out = out *
exp(ci*ph);
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);
108 virtual void Mdir (
const FermionField &in, FermionField &out,
int dir,
int disp);
109 virtual void MdirAll(
const FermionField &in, std::vector<FermionField> &out);
125 RealD _mass,
RealD M5,
const ImplParams &p= ImplParams());
138 std::vector<double>
cc;;
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
virtual void Instantiatable(void)=0
virtual void Mdir(const FermionField &in, FermionField &out, int dir, int disp)
virtual void Meooe(const FermionField &in, FermionField &out)
virtual void MdirAll(const FermionField &in, std::vector< FermionField > &out)
virtual void MeoDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
std::vector< double > cc_d
virtual void M(const FermionField &in, FermionField &out)
void FreePropagator(const FermionField &in, FermionField &out, RealD mass, std::vector< Complex > boundary, std::vector< double > twist)
virtual void MooeeInvDag(const FermionField &in, FermionField &out)
virtual void Mooee(const FermionField &in, FermionField &out)
std::vector< double > Beta
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass)
std::vector< double > See
virtual void Mdag(const FermionField &in, FermionField &out)
virtual void ImportPhysicalFermionSource(const FermionField &input4d, FermionField &imported5d)
void SetCoefficientsZolotarev(RealD zolo_hi, Approx::zolotarev_data *zdata)
std::vector< double > sqrt_cc
virtual void MoeDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void MooeeDag(const FermionField &in, FermionField &out)
virtual void ExportPhysicalFermionSolution(const FermionField &solution5d, FermionField &exported4d)
void SetCoefficientsTanh(Approx::zolotarev_data *zdata, RealD scale)
ContinuedFractionFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, RealD _mass, RealD M5, const ImplParams &p=ImplParams())
virtual void MeooeDag(const FermionField &in, FermionField &out)
std::vector< double > Aee
virtual void MDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void MooeeInv(const FermionField &in, FermionField &out)
static const int backward
void FFT_all_dim(Lattice< vobj > &result, const Lattice< vobj > &source, int sign)
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())