diff --git a/lib/algorithms/iterative/MinimalResidual.h b/lib/algorithms/iterative/MinimalResidual.h index 7e054398..432b5933 100644 --- a/lib/algorithms/iterative/MinimalResidual.h +++ b/lib/algorithms/iterative/MinimalResidual.h @@ -42,11 +42,12 @@ template class MinimalResidual : public OperatorFunction { // Defaults true. RealD Tolerance; Integer MaxIterations; + RealD overRelaxParam; Integer IterationsToComplete; // Number of iterations the MR took to finish. // Filled in upon completion - MinimalResidual(RealD tol, Integer maxit, bool err_on_no_conv = true) - : Tolerance(tol), MaxIterations(maxit), ErrorOnNoConverge(err_on_no_conv){}; + MinimalResidual(RealD tol, Integer maxit, Real ovrelparam = 1.0, bool err_on_no_conv = true) + : Tolerance(tol), MaxIterations(maxit), overRelaxParam(ovrelparam), ErrorOnNoConverge(err_on_no_conv){}; void operator()(LinearOperatorBase &Linop, const Field &src, Field &psi) { @@ -104,7 +105,7 @@ template class MinimalResidual : public OperatorFunction { a = c / d; - // a = a * MRovpar; // a[k-1] *= MRovpar // from chroma code. TODO: check what to do with this + a = a * overRelaxParam; // a[k-1] *= MRovpar psi = psi + r * a; // Psi[k] += a[k-1] r[k-1] ; // flopcount.addSiteFlops(4*Nc*Ns,s); diff --git a/tests/solver/Test_dwf_mr_unprec.cc b/tests/solver/Test_dwf_mr_unprec.cc index a7c7733b..3ca35e32 100644 --- a/tests/solver/Test_dwf_mr_unprec.cc +++ b/tests/solver/Test_dwf_mr_unprec.cc @@ -61,7 +61,7 @@ int main (int argc, char ** argv) DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5); MdagMLinearOperator HermOp(Ddwf); - MinimalResidual MR(1.0e-6,10000); + MinimalResidual MR(1.0e-6,10000,0.8); MR(HermOp,src,result); Grid_finalize(); diff --git a/tests/solver/Test_staggered_mr_unprec.cc b/tests/solver/Test_staggered_mr_unprec.cc index 22210329..63b08837 100644 --- a/tests/solver/Test_staggered_mr_unprec.cc +++ b/tests/solver/Test_staggered_mr_unprec.cc @@ -62,7 +62,7 @@ int main (int argc, char ** argv) ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass); MdagMLinearOperator HermOp(Ds); - MinimalResidual MR(1.0e-6,10000); + MinimalResidual MR(1.0e-6,10000,0.8); MR(HermOp,src,result); Grid_finalize(); diff --git a/tests/solver/Test_wilson_mr_unprec.cc b/tests/solver/Test_wilson_mr_unprec.cc index be88d6f8..7b7ef0f9 100644 --- a/tests/solver/Test_wilson_mr_unprec.cc +++ b/tests/solver/Test_wilson_mr_unprec.cc @@ -58,7 +58,7 @@ int main (int argc, char ** argv) WilsonFermionR Dw(Umu,Grid,RBGrid,mass); MdagMLinearOperator HermOp(Dw); - MinimalResidual MR(1.0e-8,10000); + MinimalResidual MR(1.0e-8,10000,0.8); MR(HermOp,src,result); Grid_finalize();