8 using namespace QDP::Hints;
12 EvenOddPrecOvlapContFrac5DLinOpBaseArray::EvenOddPrecOvlapContFrac5DLinOpBaseArray(
15 const Real& _OverMass,
17 const Real& _scale_fac,
18 const multi1d<Real>& _alpha,
19 const multi1d<Real>& _beta,
20 const bool _isLastZeroP ) :
21 m_q(_m_q),
OverMass(_OverMass),
N5(_N5), scale_fac(_scale_fac),
22 alpha(_alpha),
beta(_beta), isLastZeroP(_isLastZeroP)
37 Real
mass = ( Real(1) +
m_q ) / (Real(1) -
m_q);
47 for(
int i=0;
i <
N5;
i++)
64 QDPIO::cerr <<
"Something is wrong. At the end of this loop"
65 <<
" Hsign should be -ve" << std::endl;
70 for(
int i=0;
i <
N5-1;
i++) {
86 invd[0] = Real(1)/
d[0];
88 for(
int i=1;
i <
N5;
i++) {
102 for(
int i=0;
i <
N5-1;
i++) {
107 for(
int i=0;
i <
N5;
i++) {
136 multi1d<LatticeFermion>&
chi,
137 const multi1d<LatticeFermion>&
psi,
156 LatticeFermion
tmp; moveToFastMemoryHint(
tmp);
170 chi[0][rb[
cb]] =
a[0]*(GammaConst<Ns,Ns*Ns-1>()*
psi[0]);
174 for(
int i=1;
i <
N5;
i++) {
220 multi1d<LatticeFermion>&
chi,
221 const multi1d<LatticeFermion>&
psi,
229 multi1d<LatticeFermion>
y(
N5); moveToFastMemoryHint(
y);
233 const int G5 = Ns*Ns-1;
239 for(
int i = 1;
i <
N5;
i++) {
242 y[
i][rb[
cb]] =
psi[
i] -
u[
i-1]*(GammaConst<Ns,Ns*Ns-1>()*
y[
i-1]);
257 for(
int i =
N5-2;
i >= 0;
i--) {
283 multi1d<LatticeFermion>&
chi,
284 const multi1d<LatticeFermion>&
psi,
292 multi1d<LatticeFermion>
tmp(
N5); moveToFastMemoryHint(
tmp);
301 for(
int i=0;
i <
N5-1;
i++) {
342 multi1d<LatticeColorMatrix>& ds_u,
343 const multi1d<LatticeFermion>&
chi,
344 const multi1d<LatticeFermion>&
psi,
353 multi1d<LatticeColorMatrix> ds_tmp(
Nd);
355 LatticeFermion
tmp; moveToFastMemoryHint(
tmp);
364 for(
int i=0;
i <
N5;
i++)
376 tmp[rb[
cb]] *= coeff;
386 for(
int i=0;
i <
N5;
i++)
398 tmp[rb[1-
cb]] *= coeff;
virtual void applyOffDiag(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign, const int cb) const
Apply the off diagonal block.
multi1d< Real > beta_tilde
const multi1d< Real > beta
const multi1d< Real > alpha
virtual void applyDerivOffDiag(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign, int cb) const
Apply the even-odd (odd-even) coupling piece of the NEF operator.
multi1d< Real > off_diag_coeff
Support class for fermion actions and linear operators.
Class for counted reference semantics.
virtual void deriv(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Take deriv of D.
Include possibly optimized Wilson dslash.
Base class for Even-odd prec. 5D continued fraction linop.
virtual void applyDiagInv(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign, const int cb) const
Apply the inverse even-even (odd-odd) coupling piece of the domain-wall fermion operator.
void apply(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign, int cb) const
General Wilson-Dirac dslash.
void create(Handle< FermState< T, P, Q > > state, int N5_)
Creation routine.
virtual void applyDiag(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign, const int cb) const
Apply the even-even (odd-odd) coupling piece of the domain-wall fermion operator.
static const LatticeInteger & beta(const int dim)
static const LatticeInteger & alpha(const int dim)
Asqtad Staggered-Dirac operator.
QDP_error_exit("too many BiCG iterations", n_count, rsd_sq, cp, c, re_rvr, im_rvr, re_a, im_a, re_b, im_b)
multi1d< LatticeFermion > chi(Ncb)
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > state