50 virtual FermionField &
tmp(
void) = 0;
63 virtual void M (
const FermionField &in, FermionField &out)=0;
64 virtual void Mdag (
const FermionField &in, FermionField &out)=0;
67 virtual void Meooe (
const FermionField &in, FermionField &out)=0;
68 virtual void MeooeDag (
const FermionField &in, FermionField &out)=0;
69 virtual void Mooee (
const FermionField &in, FermionField &out)=0;
70 virtual void MooeeDag (
const FermionField &in, FermionField &out)=0;
71 virtual void MooeeInv (
const FermionField &in, FermionField &out)=0;
72 virtual void MooeeInvDag (
const FermionField &in, FermionField &out)=0;
75 virtual void Dhop (
const FermionField &in, FermionField &out,
int dag)=0;
76 virtual void DhopOE(
const FermionField &in, FermionField &out,
int dag)=0;
77 virtual void DhopEO(
const FermionField &in, FermionField &out,
int dag)=0;
78 virtual void DhopDir(
const FermionField &in, FermionField &out,
int dir,
int disp)=0;
81 virtual void MDeriv (GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag){
DhopDeriv(mat,
U,V,dag);};
82 virtual void MoeDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag){
DhopDerivOE(mat,
U,V,dag);};
83 virtual void MeoDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag){
DhopDerivEO(mat,
U,V,dag);};
84 virtual void MooDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag){mat=
Zero();};
85 virtual void MeeDeriv(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag){mat=
Zero();};
87 virtual void DhopDeriv (GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag)=0;
88 virtual void DhopDerivEO(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag)=0;
89 virtual void DhopDerivOE(GaugeField &mat,
const FermionField &
U,
const FermionField &V,
int dag)=0;
91 virtual void Mdiag (
const FermionField &in, FermionField &out) {
Mooee(in,out);};
92 virtual void Mdir (
const FermionField &in, FermionField &out,
int dir,
int disp)=0;
93 virtual void MdirAll(
const FermionField &in, std::vector<FermionField> &out)=0;
98 virtual void FreePropagator(
const FermionField &in,FermionField &out,
RealD mass,std::vector<Complex> boundary,std::vector<double> twist)
102 typedef typename Simd::scalar_type Scalar;
104 FermionField in_k(in.Grid());
105 FermionField prop_k(in.Grid());
108 ComplexField coor(in.Grid());
109 ComplexField ph(in.Grid()); ph =
Zero();
110 FermionField in_buf(in.Grid()); in_buf =
Zero();
113 assert(twist.size() ==
Nd);
114 assert(boundary.size() ==
Nd);
115 for(
unsigned int nu = 0; nu <
Nd; nu++)
118 double boundary_phase =
::acos(
real(boundary[nu]));
119 ph = ph + boundary_phase*coor*((1./(in.Grid()->_fdimensions[nu])));
121 twist[nu] = twist[nu] + boundary_phase/((2.0*
M_PI));
123 in_buf =
exp(ci*ph*(-1.0))*in;
130 out = out *
exp(Scalar(2.0*
M_PI)*ci*ph);
135 std::vector<Complex> boundary;
136 for(
int i=0;i<
Nd;i++) boundary.push_back(1);
137 std::vector<double> twist(
Nd,0.0);
150 PropagatorField &q_in_2,
151 PropagatorField &q_out,
152 PropagatorField &phys_src,
157 PropagatorField &q_out,
158 PropagatorField &phys_src,
163 ComplexField &lattice_cmplx)
174 virtual void Dminus(
const FermionField &psi, FermionField &chi) { chi=psi; }
175 virtual void DminusDag(
const FermionField &psi, FermionField &chi) { chi=psi; }
AcceleratorVector< int, MaxDims > Coordinate
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 Mdag(const FermionField &in, FermionField &out)=0
virtual void MeeDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void ImportPhysicalFermionSource(const FermionField &input, FermionField &imported)
virtual void MeoDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void Dminus(const FermionField &psi, FermionField &chi)
virtual void MoeDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual GridBase * GaugeGrid(void)=0
virtual void DhopEO(const FermionField &in, FermionField &out, int dag)=0
virtual void DhopDir(const FermionField &in, FermionField &out, int dir, int disp)=0
virtual void MooeeDag(const FermionField &in, FermionField &out)=0
virtual void MooeeInvDag(const FermionField &in, FermionField &out)=0
virtual ~FermionOperator(void)=default
virtual GridBase * FermionRedBlackGrid(void)=0
virtual void ContractJ5q(PropagatorField &q_in, ComplexField &J5q)
virtual void ImportGauge(const GaugeField &_U)=0
virtual void MdirAll(const FermionField &in, std::vector< FermionField > &out)=0
virtual GridBase * GaugeRedBlackGrid(void)=0
virtual void DhopDerivOE(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)=0
virtual void SeqConservedCurrent(PropagatorField &q_in, PropagatorField &q_out, PropagatorField &phys_src, Current curr_type, unsigned int mu, unsigned int tmin, unsigned int tmax, ComplexField &lattice_cmplx)
virtual void MDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
GridBase * RedBlackGrid(void)
virtual void DirichletBlock(const Coordinate &_Block)
virtual GridBase * FermionGrid(void)=0
virtual void Meooe(const FermionField &in, FermionField &out)=0
virtual void DhopDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)=0
virtual void MooDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass, std::vector< Complex > boundary, std::vector< double > twist)
virtual void MooeeInv(const FermionField &in, FermionField &out)=0
virtual void ContractJ5q(FermionField &q_in, ComplexField &J5q)
virtual void DhopDerivEO(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)=0
virtual void Mooee(const FermionField &in, FermionField &out)=0
virtual void ExportPhysicalFermionSource(const FermionField &solution, FermionField &exported)
virtual void ExportPhysicalFermionSolution(const FermionField &solution, FermionField &exported)
virtual void DminusDag(const FermionField &psi, FermionField &chi)
virtual void Dhop(const FermionField &in, FermionField &out, int dag)=0
virtual void DhopOE(const FermionField &in, FermionField &out, int dag)=0
virtual void ContractConservedCurrent(PropagatorField &q_in_1, PropagatorField &q_in_2, PropagatorField &q_out, PropagatorField &phys_src, Current curr_type, unsigned int mu)
virtual void Mdir(const FermionField &in, FermionField &out, int dir, int disp)=0
virtual FermionField & tmp(void)=0
virtual void MomentumSpacePropagator(FermionField &out, const FermionField &in, RealD _m, std::vector< double > twist)
virtual void ImportUnphysicalFermion(const FermionField &input, FermionField &imported)
virtual void FreePropagator(const FermionField &in, FermionField &out, RealD mass)
virtual void M(const FermionField &in, FermionField &out)=0
FermionOperator(const ImplParams &p=ImplParams())
virtual void Mdiag(const FermionField &in, FermionField &out)
virtual void MeooeDag(const FermionField &in, FermionField &out)=0