Jed, I ask because after the restart, the residual changes 10 orders of magnitude and a-priori, it is quite hard to decide the restart number. Yes in the test case I presented, the residual gets close enough to the tolerance and I can afford few more vector storage but for a much refined problem, this might not be the case and so it worries me.
My initial tests with bcgs were not satisfactory (very bad convergence as compared to gmres) but I tried GCR just now and it seems to converge correctly to the right solution, monotonically for the same problem. Alternatively, yes, I could make my preconditioner stronger (add more levels, more smoothing steps etc..) to converge within the restart limit. Barry, the matrix is not nearly singular although I have not yet looked at the effectiveness of the preconditoner thoroughly yet. It is possible that the preconditioned operator might have some undesired properties. Just to compare, the same linear system without any preconditioning takes about 2400 iterations and maybe that gives some ball park metric on the efficiency of the preconditioner.. Let me know if you want to know some other specific information to better understand the system. Vijay On Tue, Dec 21, 2010 at 1:10 PM, Jed Brown <jed at 59a2.org> wrote: > On Tue, Dec 21, 2010 at 19:53, Vijay S. Mahadevan <vijay.m at gmail.com> > wrote: >> >> I am running a linear problem discretized with FEM on a diffusion >> reaction system, with discontinuous source distribution. When I run >> FGMRes with geometric multigrid as its preconditioner, I notice that >> every time after the restart in fgmres, the new residual is orders of >> magnitude higher than the previous iteration. I might be wrong on this >> but should the restart not preserve monotonicity in convergence ? Or >> am I thinking of a different variant of Gmres here. > > It is not possible to guarantee monotonicity for nonsymmetric matrices > without storing the full subspace. ?There is no variant of GMRES, or any > Krylov method for that matter, that can do what you want. ?You are seeing a > particularly large jump, if you actually have a linear preconditioner (if > you don't use Krylov cycles inside your smoothers) then you might try using > bcgs or some variant thereof which would avoid the high cost of restart. ?Or > you could stop using restarts, it looks like you were getting close to an > adequate tolerance. ?Or find a way to make the preconditioner strong enough > to converge in a reasonable number of iterations.
