1 #ifndef ILU2PREC_S_CPREC_T_WILSONLIKE_LINOP_W_H
2 #define ILU2PREC_S_CPREC_T_WILSONLIKE_LINOP_W_H
4 #include "qdp_config.h"
26 class ILU2PrecSCprecTWilsonLikeLinOp :
27 public ILU2PrecSpaceCentralPrecTimeLinearOperator<LatticeFermion,
28 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
32 typedef LatticeFermion
T;
33 typedef multi1d<LatticeColorMatrix>
P;
34 typedef multi1d<LatticeColorMatrix>
Q;
35 typedef PScalar<PColorMatrix<RComplex<REAL>, 3> > CMat;
36 typedef PSpinVector<PColorVector<RComplex<REAL>, 3>, 2> HVec_site;
39 virtual ~ILU2PrecSCprecTWilsonLikeLinOp() {}
47 virtual const multi3d< int >& getTsiteArray(
void)
const = 0;
48 virtual const multi3d< CMat >& getPMatrixArray(
void)
const = 0;
49 virtual const multi3d< CMat >& getPMatrixDaggerArray(
void)
const = 0;
50 virtual const multi2d< CMat >& getQMatrixInvArray(
void)
const = 0;
51 virtual const multi2d< CMat >& getQMatrixDaggerInvArray(
void)
const = 0;
52 virtual const Real& getFactor()
const = 0;
53 virtual const Real& getInvFactor()
const = 0;
54 virtual const multi1d< LatticeColorMatrix>& getLinks(
void)
const = 0;
55 virtual int getTMax(
void)
const = 0;
59 const FermBC<T,P,Q>& getFermBC()
const = 0;
71 virtual unsigned long nFlops()
const
83 LatticeHalfFermion tmp_minus;
84 LatticeHalfFermion tmp_plus;
85 LatticeHalfFermion tmp_T;
89 tmp_plus[ rb3[ cb3d ] ] = spinProjectDir3Plus(
psi);
90 chi[ rb3[ cb3d ] ] = spinReconstructDir3Plus(tmp_plus);
93 tmp_minus[ rb3[ cb3d ] ] = spinProjectDir3Minus(
psi);
98 CentralTPrecNoSpinUtils::TOp(tmp_T,
101 getTsiteArray()[cb3d],
106 chi[rb3[ cb3d ]] += spinReconstructDir3Minus(tmp_T);
107 chi[rb3[ cb3d ]] *= Real(0.5);
119 LatticeHalfFermion tmp_minus;
120 LatticeHalfFermion tmp_plus;
121 LatticeHalfFermion tmp_T;
126 tmp_minus[rb3[cb3d]] = spinProjectDir3Minus(
psi);
127 chi[rb3[cb3d]] = spinReconstructDir3Minus(tmp_minus);
130 tmp_plus[rb3[cb3d]] = spinProjectDir3Plus(
psi);
135 CentralTPrecNoSpinUtils::TOp(tmp_T,
138 getTsiteArray()[cb3d],
143 chi[rb3[cb3d]] += spinReconstructDir3Plus(tmp_T);
145 chi[rb3[cb3d]] *= Real(0.5);
157 LatticeHalfFermion tmp_minus;
158 LatticeHalfFermion tmp_plus;
159 LatticeHalfFermion tmp_T;
161 tmp_plus[rb3[cb3d]] = spinProjectDir3Plus(
psi);
162 chi[rb3[cb3d]] = spinReconstructDir3Plus(tmp_plus);
164 tmp_minus[rb3[cb3d]] = spinProjectDir3Minus(
psi);
168 CentralTPrecNoSpinUtils::invTOp( tmp_T,
171 getTsiteArray()[cb3d],
172 getPMatrixArray()[cb3d],
173 getPMatrixDaggerArray()[cb3d],
174 getQMatrixInvArray()[cb3d],
175 getQMatrixDaggerInvArray()[cb3d],
182 chi[rb3[cb3d]] += spinReconstructDir3Minus(tmp_T);
183 chi[rb3[cb3d]] *= Real(0.5);
195 LatticeHalfFermion tmp_minus;
196 LatticeHalfFermion tmp_plus;
197 LatticeHalfFermion tmp_T;
199 tmp_minus[rb3[cb3d]] = spinProjectDir3Minus(
psi);
200 chi[rb3[cb3d]] = spinReconstructDir3Minus(tmp_minus);
202 tmp_plus[rb3[cb3d]] = spinProjectDir3Plus(
psi);
206 CentralTPrecNoSpinUtils::invTOp( tmp_T,
209 getTsiteArray()[cb3d],
210 getPMatrixArray()[cb3d],
211 getPMatrixDaggerArray()[cb3d],
212 getQMatrixInvArray()[cb3d],
213 getQMatrixDaggerInvArray()[cb3d],
220 chi[rb3[cb3d]] += spinReconstructDir3Plus(tmp_T);
221 chi[rb3[cb3d]] *= Real(0.5);
231 cRightLinOp(tmp1,
psi,
PLUS, (1-cb3));
236 cLeftLinOp(tmp1,
psi,
MINUS, 1-cb3);
247 cRightLinOp(tmp1,
psi,
PLUS, cb3);
Time-preconditioned Linear Operators.
Support for time preconditioning.
Include possibly optimized Wilson dslash.
multi1d< LatticeColorMatrix > P
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::Q Q
LinOpSysSolverMGProtoClover::T T
multi1d< LatticeFermion > chi(Ncb)