diff --git a/Grid/algorithms/iterative/PrecGeneralisedConjugateResidual.h b/Grid/algorithms/iterative/PrecGeneralisedConjugateResidual.h index 388022be8..9ef40b086 100644 --- a/Grid/algorithms/iterative/PrecGeneralisedConjugateResidual.h +++ b/Grid/algorithms/iterative/PrecGeneralisedConjugateResidual.h @@ -236,4 +236,5 @@ public: } }; NAMESPACE_END(Grid); +#undef GCRLogLevel #endif diff --git a/Grid/algorithms/iterative/PrecGeneralisedConjugateResidualNonHermitian.h b/Grid/algorithms/iterative/PrecGeneralisedConjugateResidualNonHermitian.h index 0c6d41d67..f4ff8b410 100644 --- a/Grid/algorithms/iterative/PrecGeneralisedConjugateResidualNonHermitian.h +++ b/Grid/algorithms/iterative/PrecGeneralisedConjugateResidualNonHermitian.h @@ -38,13 +38,14 @@ Author: Peter Boyle /////////////////////////////////////////////////////////////////////////////////////////////////////// NAMESPACE_BEGIN(Grid); -#define GCRLogLevel std::cout << GridLogMessage < class PrecGeneralisedConjugateResidualNonHermitian : public LinearFunction { public: using LinearFunction::operator(); RealD Tolerance; + RealD SSQ; Integer MaxIterations; int verbose; int mmax; @@ -54,11 +55,18 @@ public: GridStopWatch PrecTimer; GridStopWatch MatTimer; GridStopWatch LinalgTimer; + std::string name; + int ZeroGuess = 0; // caller contract: guess is always zero => first-cycle r0 = src, skip the apply + int FirstCycle = 0; LinearFunction &Preconditioner; LinearOperatorBase &Linop; - void Level(int lv) { level=lv; }; + void Name(std::string _name) { name = _name; }; + + void Level(int n) { Name("Level " + std::to_string(n)); level = n; } + + void SetZeroGuess(int z) { ZeroGuess = z; }; PrecGeneralisedConjugateResidualNonHermitian(RealD tol,Integer maxit,LinearOperatorBase &_Linop,LinearFunction &Prec,int _mmax,int _nstep) : Tolerance(tol), @@ -67,8 +75,8 @@ public: Preconditioner(Prec), mmax(_mmax), nstep(_nstep) - { - level=1; + { + Level(1); verbose=1; }; @@ -77,6 +85,7 @@ public: // psi=Zero(); RealD cp, ssq,rsq; ssq=norm2(src); + SSQ=ssq; rsq=Tolerance*Tolerance*ssq; Field r(src.Grid()); @@ -89,11 +98,12 @@ public: SolverTimer.Start(); steps=0; + FirstCycle=1; for(int k=0;k