diff --git a/Grid/algorithms/iterative/KrylovSchur.h b/Grid/algorithms/iterative/KrylovSchur.h index 0fe76515..8a10c85b 100644 --- a/Grid/algorithms/iterative/KrylovSchur.h +++ b/Grid/algorithms/iterative/KrylovSchur.h @@ -370,7 +370,7 @@ class KrylovSchur { ComplexSchurDecomposition schur (Rayleigh, false, ritzFilter); - ComplexSchurDecomposition schurS (RayleighS, false, ritzFilter); + ComplexSchurDecomposition schurS (Btilde, false, ritzFilter); std::cout << GridLogDebug << "Schur decomp holds? " << schur.checkDecomposition() << std::endl; // Rearrange Schur matrix so wanted evals are on top left (like MATLAB's ordschur) @@ -390,6 +390,34 @@ class KrylovSchur { b = Q * b; // b^\dag = b^\dag * Q^\dag <==> b = Q*b // basisRotate(basis, Q, 0, Nm, 0, Nm, Nm); // basisRotate(evecs, Q, 0, Nm, 0, Nm, Nm); +if(shift){ + Field w(Grid); + ComplexD coeff; + for (int j = 0; j < Nm; j++) { + Linop.Op(basis[j], w); + // Linop.Op(basis[i], w); + for (int k = 0; k < Nm; k++) { + coeff = innerProduct(basis[k], w); // coeff = h_{ij}. Note that since {vi} is ONB it's OK to subtract it off after. + std::cout << GridLogMessage << " Btilde "< basis2; // basis2.reserve(Nm);