diff --git a/examples/Example_krylov_schur.cc b/examples/Example_krylov_schur.cc index 208343106..db4e66028 100644 --- a/examples/Example_krylov_schur.cc +++ b/examples/Example_krylov_schur.cc @@ -332,52 +332,68 @@ int main (int argc, char ** argv) std::cout << "[DEBUG] Source at origin = " << tmpSrc << std::endl; LatticeFermion src2 = src[0]; - // Run KrylovSchur and Arnoldi on a Hermitian matrix + // Run KrylovSchur / BlockKrylovSchur / TrueHarmonicBlockKrylovSchur on a Hermitian matrix RealD shift=LanParams.shift; -#if 1 - std::cout << GridLogMessage << "Running Krylov Schur" << std::endl; - KrylovSchur KrySchur (Dwilson, UGrid, resid,EvalImNormSmall); -// KrySchur(src[0], maxIter, Nm, Nk, Nstop); - KrySchur.doEvalCheck=true; - KrySchur(src[0], maxIter, Nm, Nk, Nstop,&shift); -// KrySchur(src[0], maxIter, Nm, Nk, Nstop); - std::cout << GridLogMessage << "KrylovSchur evec.size= " << KrySchur.evecs.size()<< std::endl; -#else - std::cout << GridLogMessage << "Running BlockKrylovSchur" << std::endl; - int Nblock=4; - Nblock=LanParams.Nblock; - bool if_verify=false; - if(LanParams.verify) if_verify=true; -// BlockKrylovSchur KrySchur (Dwilson, UGrid, resid,EvalImNormSmall); - bool useTrueHarmonic = GridCmdOptionExists(argv, argv+argc, std::string("--true-harmonic")); - HarmonicBlockKrylovSchur KrySchurShift (Dwilson, UGrid, resid,shift,EvalImNormSmall); - TrueHarmonicBlockKrylovSchur KrySchurTrue (Dwilson, UGrid, resid,shift,EvalImNormSmall); - HarmonicBlockKrylovSchur& KrySchur = useTrueHarmonic - ? static_cast&>(KrySchurTrue) - : KrySchurShift; - std::cout << GridLogMessage - << (useTrueHarmonic ? "Using TrueHarmonicBlockKrylovSchur (harmonic Ritz)" - : "Using HarmonicBlockKrylovSchur (shift-sorted Ritz)") - << std::endl; - KrySchur.doEvalCheck=true; -// KrySchur.useParityFlip=true; std::cout << GridLogMessage << "useParityFlip= " < KrySchur (Dwilson, UGrid, resid,shift,EvalImNormSmall); + KrySchur.doEvalCheck=true; + KrySchur.gamma5Func = gamma5Lambda; + KrySchur(src, maxIter, Nm, Nk, Nstop,Nblock,true,if_verify); + std::cout << GridLogMessage << "TrueHarmonicBlockKrylovSchur evec.size= " << KrySchur.evecs.size()<< std::endl; + finalEvecs = KrySchur.evecs; + } else { + std::cout << GridLogMessage << "Running BlockKrylovSchur" << std::endl; + BlockKrylovSchur KrySchur (Dwilson, UGrid, resid,EvalImNormSmall); + KrySchur.doEvalCheck=true; + KrySchur.gamma5Func = gamma5Lambda; + KrySchur(src, maxIter, Nm, Nk, Nstop,Nblock,true,if_verify); + std::cout << GridLogMessage << "BlockKrylovSchur evec.size= " << KrySchur.evecs.size()<< std::endl; + finalEvecs = KrySchur.evecs; + } + } + + src[0]=finalEvecs[0]; + std::cout << GridLogMessage << "finalEvecs= "<< finalEvecs.size() <