6 #ifndef __multi_syssolver_mdagm_cg_chrono_clover_h__
7 #define __multi_syssolver_mdagm_cg_chrono_clover_h__
27 namespace MdagMMultiSysSolverCGChronoCloverEnv
67 typedef LatticeFermion
T;
68 typedef LatticeColorMatrix
U;
69 typedef multi1d<LatticeColorMatrix>
Q;
70 typedef multi1d<LatticeColorMatrix>
P;
72 typedef LatticeFermionF
TF;
73 typedef LatticeColorMatrixF
UF;
74 typedef multi1d<LatticeColorMatrixF>
QF;
75 typedef multi1d<LatticeColorMatrixF>
PF;
77 typedef LatticeFermionD
TD;
78 typedef LatticeColorMatrixD
UD;
79 typedef multi1d<LatticeColorMatrixD>
QD;
80 typedef multi1d<LatticeColorMatrixD>
PD;
92 QF links_single; links_single.resize(
Nd);
93 QD links_double; links_double.resize(
Nd);
95 const Q& links = state_->getLinks();
97 links_single[
mu] = links[
mu];
98 links_double[
mu] = links[
mu];
113 const Subset&
subset()
const {
return M->subset();}
130 multi1d<Real>
RsdCG(shifts.size());
140 QDPIO::cerr <<
"MdagMMultiSysSolverCGChronoClover: shifts incompatible" << std::endl;
146 multi1d<RealF> modRsdCG(shifts.size());
147 for(
int i=0;
i < shifts.size();
i++) {
160 multi1d<TF> psi_f(shifts.size());
166 chi_f[
M->subset()] =
chi;
167 for(
int i=0;
i < shifts.size();
i++) {
168 psi_f[
i][
M->subset()] =
zero;
172 multi1d<RealF> shifts_r(shifts.size());
173 for(
int i=0;
i < shifts.size();
i++ ) {
174 shifts_r[
i] = shifts[
i];
188 psi.resize(shifts.size());
197 TD chi_d; chi_d[
M->subset()] =
chi;
199 for(
int i=shifts.size()-1;
i >= 0;
i--) {
200 RealD rshift = sqrt(shifts[
i]);
201 RealF rshift_s = rshift;
202 RealD dshift = shifts[
i];
208 psi_d[
M->subset()] = psi_f[
i];
210 chrono.
predictX(psi_d, dshift, chi_d);
215 psi[
i][
M->subset()] = psi_d;
216 QDPIO::cout <<
"n_count = " << res_tmp.
n_count << std::endl;
223 push(log,
"MultiCG");
224 write(log,
"shifts", shifts);
228 multi1d<Double> r_rel(shifts.size());
230 for(
int i=0;
i < shifts.size();
i++) {
237 r_rel[
i] = sqrt(norm2(
r,
M->subset())/chinorm );
239 QDPIO::cout <<
"r[" <<
i <<
"] = " << r_rel[
i] << std::endl;
243 write(log,
"ResidRel", r_rel);
247 double time = swatch.getTimeInSeconds();
248 QDPIO::cout <<
"MULTI_CG_CHRONO_CLOVER_SOLVER: " << res.
n_count <<
" iterations. Rsd = " << res.
resid << std::endl;
249 QDPIO::cout <<
"MULTI_CG_CHRONO_CLOVER_SOLVER: "<<time<<
" sec" << std::endl;
Initialization of Chroma.
Even-odd preconditioned Clover-Dirac operator.
Even-odd preconditioned Clover-Dirac operator.
Support class for fermion actions and linear operators.
Class for counted reference semantics.
Solve a CG2 system. Here, the operator is NOT assumed to be hermitian.
Handle< FermState< TF, QF, QF > > fstate_single
multi1d< LatticeColorMatrix > P
const Subset & subset() const
Return the subset on which the operator acts.
const MultiSysSolverCGChronoCloverParams invParam
SystemSolverResults_t operator()(multi1d< T > &psi, const multi1d< Real > &shifts, const T &chi) const
Solver the linear system.
~MdagMMultiSysSolverCGChronoClover()
Destructor is automatic.
Handle< LinearOperator< T > > M
MdagMMultiSysSolverCGChronoClover(Handle< LinearOperator< T > > M_, Handle< FermState< T, P, Q > > state_, const MultiSysSolverCGChronoCloverParams &invParam_)
Constructor.
Handle< FermState< TD, QD, QD > > fstate_double
multi1d< LatticeColorMatrixD > PD
multi1d< LatticeColorMatrixF > PF
multi1d< LatticeColorMatrixF > QF
MdagMMultiSysSolverCGChronoClover()
multi1d< LatticeColorMatrix > Q
multi1d< LatticeColorMatrixD > QD
Periodic version of FermState.
Parameters for Clover fermion action.
Even-odd preconditioned Clover fermion linear operator.
void read(XMLReader &xml, const std::string &path, AsqtadFermActParams ¶m)
Read parameters.
void write(XMLWriter &xml, const std::string &path, const AsqtadFermActParams ¶m)
Writer parameters.
void MInvCG2(const LinearOperator< LatticeFermionF > &M, const LatticeFermionF &chi, multi1d< LatticeFermionF > &psi, const multi1d< RealF > &shifts, const multi1d< RealF > &RsdCG, int MaxCG, int &n_count)
SystemSolverResults_t InvCGReliable(const LinearOperator< LatticeFermionF > &A, const LatticeFermionF &chi, LatticeFermionF &psi, const Real &RsdCG, const Real &Delta, int MaxCG)
Bi-CG stabilized.
Class for counted reference semantics.
M^dag*M composition of a linear operator.
Multishift Conjugate-Gradient algorithm for a Linear Operator.
Minimal residual predictor.
Disambiguator for multi-shift MdagM system solvers.
bool registerAll()
Register all the factories.
Asqtad Staggered-Dirac operator.
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > enum InvType invType const multi1d< Real > & RsdCG
XMLFileWriter & getXMLLogInstance()
Get xml log instance.
push(xml_out,"Condensates")
multi1d< LatticeFermion > chi(Ncb)
FloatingPoint< double > Double
Periodic ferm state and a creator.
BiCGStab Solver with reliable updates.
Params for clover ferm acts.
SystemSolver disambiguator.
multi1d< Real > RsdTarget
MultiSysSolverCGChronoCloverParams()
MultiSysSolverCGChronoCloverParams(const MultiSysSolverCGChronoCloverParams &p)
CloverFermActParams clovParams
Holds return info from SystemSolver call.