1 #ifndef EO3DPREC_S_CPREC_T_CLOVER_LINOP_W_H
2 #define EO3DPREC_S_CPREC_T_CLOVER_LINOP_W_H
4 #include "qdp_config.h"
28 class EELinOp :
public LinearOperator<LatticeFermion> {
31 EELinOp(
const EO3DPrecSpaceCentralPrecTimeLinearOperator<LatticeFermion,
32 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& EO_,
43 EOLinOp.evenEvenLinOp(
chi,
psi, opp_sign);
51 virtual const Subset& subset()
const {
57 const EO3DPrecSpaceCentralPrecTimeLinearOperator<LatticeFermion,
58 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& EOLinOp;
63 class EO3DPrecSCprecTCloverLinOp :
64 public EO3DPrecSpaceCentralPrecTimeLinearOperator<LatticeFermion,
65 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
69 typedef LatticeFermion
T;
70 typedef multi1d<LatticeColorMatrix>
P;
71 typedef multi1d<LatticeColorMatrix>
Q;
72 typedef PScalar<PColorMatrix<RComplex<REAL>, 3> > CMat;
73 typedef PSpinVector<PColorVector<RComplex<REAL>, 3>, 2> HVec_site;
75 EO3DPrecSCprecTCloverLinOp() {}
79 EO3DPrecSCprecTCloverLinOp(Handle< FermState<T,P,Q> > fs_,
80 const CloverFermActParams& param_)
84 ~EO3DPrecSCprecTCloverLinOp() {}
87 const FermBC<T,P,Q>& getFermBC()
const {
return fs->getBC();}
91 void create(Handle< FermState<T,P,Q> > fs_,
92 const CloverFermActParams& param_);
102 int getTMax()
const {
103 return Layout::lattSize()[
tDir()];
127 cRightLinOp(tmp1,
psi,
PLUS, cb3);
129 const int* tab = rb3[cb3].siteTable().slice();
130 for(
int j=0;
j < rb3[cb3].siteTable().size();
j++) {
132 APlusFact.applySite(
tmp2, tmp1,
PLUS, site);
134 tmp2[rb3[cb3]] -= fact * tmp1;
138 chi[rb3[cb3]] =
psi + tmp1;
144 const int* tab = rb3[cb3].siteTable().slice();
145 for(
int j=0;
j < rb3[cb3].siteTable().size();
j++) {
147 APlusFact.applySite(
tmp2, tmp1,
MINUS, site);
150 tmp2[rb3[cb3]] -= fact * tmp1;
152 chi[rb3[cb3]] =
psi + tmp1;
156 QDPIO::cout <<
"error: Unknown ISIGN" << std::endl;
172 EELinOp eeLin(*
this,
isign);
177 evenEvenLinOp(tmp1,
psi, opp_sign);
178 Real
RsdCG=Real(1.0e-8);
236 unsigned long nFlops()
const
246 QDPIO::cerr <<
"Not Yet Implemented" << std::endl;
252 Double logDetTDagT(
void)
const {
253 QDPIO::cerr <<
"Not Yet Implemented" << std::endl;
262 QDPIO::cerr <<
"Not Yet Implemented" << std::endl;
272 Real mhalf=Real(-0.5);
274 chi[rb3[cb3d]] *= mhalf;
284 Handle< FermState<T,P,Q> > fs;
285 multi1d<LatticeColorMatrix>
u;
287 multi3d< int > tsite;
289 multi3d< CMat > P_mat;
290 multi3d< CMat > P_mat_dag;
292 multi2d< CMat > Q_mat_inv;
293 multi2d< CMat > Q_mat_dag_inv;
296 CloverFermActParams param;
Time-preconditioned Linear Operators.
Support for time preconditioning.
Parameters for Clover fermion action.
Include possibly optimized Clover terms.
Include possibly optimized Wilson dslash.
SystemSolverResults_t InvCG2(const LinearOperator< LatticeFermionF > &M, const LatticeFermionF &chi, LatticeFermionF &psi, const Real &RsdCG, int MaxCG)
Conjugate-Gradient (CGNE) algorithm for a generic Linear Operator.
Conjugate-Gradient algorithm for a generic Linear Operator.
multi1d< LatticeColorMatrix > P
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > enum InvType invType const multi1d< Real > & RsdCG
static multi1d< LatticeColorMatrix > u
LinOpSysSolverMGProtoClover::Q Q
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > & Mass
LinOpSysSolverMGProtoClover::T T
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > enum InvType invType const multi1d< Real > int MaxCG
multi1d< LatticeFermion > chi(Ncb)
FloatingPoint< double > Double
multi1d< LatticeColorMatrix > P
multi1d< LatticeColorMatrix > deriv(const EvenOddPrecLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > &AP, const LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign)
Apply the operator onto a source std::vector.