Added flags for explicit eval checks at the end of operator()

This commit is contained in:
Chulwoo Jung
2026-04-17 11:08:34 -04:00
parent a696953485
commit 3b28e3c98f
4 changed files with 50 additions and 3 deletions
@@ -125,6 +125,7 @@ class HarmonicBlockKrylovSchur {
public:
std::vector<Field> evecs;
bool doEvalCheck = false;
//--------------------------------------------------------------------
// Constructor
@@ -253,6 +254,21 @@ public:
<< "HarmonicBlockKrylovSchur: done after " << iter
<< " restarts, " << Nconv << " converged." << std::endl;
std::cout << GridLogMessage << "Eigenvalues: " << evals.transpose() << std::endl;
if (doEvalCheck) {
Field w(Grid_);
for (int k = 0; k < (int)evecs.size(); k++) {
Linop.Op(evecs[k], w);
ComplexD eval_est = toStdCmplx(innerProduct(evecs[k], w));
w -= eval_est * evecs[k];
RealD res = std::sqrt(norm2(w));
std::cout << GridLogMessage << "HarmonicBlockKrylovSchur: evec[" << k << "]"
<< " eval_reported = " << evals[k]
<< " eval_est = " << eval_est
<< " || A v - eval_est * v || = " << res << std::endl;
}
}
return;
}
}