On Dec 21, 2010, at 3:16 PM, Vijay S. Mahadevan wrote: > Also GCR seems to use and allocate comparatively more vectors, > translating to lot more memory.
Yes > This does make FGMRES more attractive. > I will look at the preconditioner and try to find the true cause of > the issue. > > Cheers, > Vijay > > On Tue, Dec 21, 2010 at 2:52 PM, Barry Smith <bsmith at mcs.anl.gov> wrote: >> >> The GCR algorithm computes the residual and hence the residual norm >> EXPLICITLY as part of the solution process, it does not use the recursive >> formula that FGMES uses. I "think" the use of the recursive formula is why >> FGMRES is cheaper than GCR (and hence much more commonly used). >> >> Barry >> >> >> On Dec 21, 2010, at 2:46 PM, Vijay S. Mahadevan wrote: >> >>>> Yes but look at the true residual norm it is huge and indicates the >>>> residual is not really getting small. >>> Ah yes. I was reading the output wrongly. Thanks for pointing that >>> out. So then it is quite possible that my preconditioner is terrible >>> for this problem. >>> >>> Curiously with GCR, the true residual does converge. >>> >>> 62 KSP Residual norm 6.845396874593e-10 >>> 62 KSP preconditioned resid norm 6.845396874593e-10 true resid norm >>> 6.845396874593e-10 ||Ae||/||Ax|| 1.063128003731e+00 >>> 63 KSP preconditioned resid norm 4.617426258215e-10 true resid norm >>> 4.617426258215e-10 ||Ae||/||Ax|| 9.425403350509e-01 >>> 63 KSP Residual norm 4.617426258215e-10 >>> 63 KSP preconditioned resid norm 4.617426258215e-10 true resid norm >>> 4.617426258215e-10 ||Ae||/||Ax|| 9.425403350509e-01 >>> 64 KSP preconditioned resid norm 3.659090331422e-10 true resid norm >>> 3.659090331422e-10 ||Ae||/||Ax|| 1.044433624917e+00 >>> 64 KSP Residual norm 3.659090331422e-10 >>> 64 KSP preconditioned resid norm 3.659090331422e-10 true resid norm >>> 3.659090331422e-10 ||Ae||/||Ax|| 1.044433624917e+00 >>> 65 KSP preconditioned resid norm 2.457005532004e-10 true resid norm >>> 2.457005532004e-10 ||Ae||/||Ax|| 9.250757590415e-01 >>> 65 KSP Residual norm 2.457005532004e-10 >>> 65 KSP preconditioned resid norm 2.457005532004e-10 true resid norm >>> 2.457005532004e-10 ||Ae||/||Ax|| 9.250757590415e-01 >>> 66 KSP preconditioned resid norm 1.765446010945e-10 true resid norm >>> 1.765446010945e-10 ||Ae||/||Ax|| 9.880804659179e-01 >>> 66 KSP Residual norm 1.765446010945e-10 >>> 66 KSP preconditioned resid norm 1.765446010945e-10 true resid norm >>> 1.765446010945e-10 ||Ae||/||Ax|| 9.880804659179e-01 >>> >>> Jed, with modified gram schmidt procedure, fgmres yields the >>> following, which looks like the same as before: >>> >>> 49 KSP Residual norm 2.426160176080e-08 >>> 49 KSP preconditioned resid norm 2.426160176080e-08 true resid norm >>> 1.864897210364e+02 ||Ae||/||Ax|| 2.696456942624e+02 >>> 50 KSP preconditioned resid norm 1.864914790828e+02 true resid norm >>> 1.864914790828e+02 ||Ae||/||Ax|| 2.798875072987e+02 >>> 50 KSP Residual norm 1.864914790828e+02 >>> 50 KSP preconditioned resid norm 1.864914790828e+02 true resid norm >>> 1.864914790828e+02 ||Ae||/||Ax|| 2.798875072987e+02 >>> 51 KSP preconditioned resid norm 6.741080961009e+01 true resid norm >>> 6.759768469363e+01 ||Ae||/||Ax|| 1.666964983874e+02 >>> 51 KSP Residual norm 6.741080961009e+01 >>> 51 KSP preconditioned resid norm 6.741080961009e+01 true resid norm >>> 6.759768469363e+01 ||Ae||/||Ax|| 1.666964983874e+02 >>> 52 KSP preconditioned resid norm 5.191621875736e+01 true resid norm >>> 5.146342142561e+01 ||Ae||/||Ax|| 7.225409161988e+01 >>> >>> But I generally see that the true residual of GCR seems to converge to >>> desired tolerance but for GMRES, the convergence stagnates with >>> different options on my MG preconditioner. This is puzzling to me >>> since I spent enough time making sure that the preconditioner was >>> working correctly but I will look more into this now. Thanks for all >>> the helpful comments guys ! I will post here if I find any other >>> curious behavior. >>> >>> Vijay >>> >>> On Tue, Dec 21, 2010 at 2:30 PM, Barry Smith <bsmith at mcs.anl.gov> wrote: >>>> >>>> Yes but look at the true residual norm it is huge and indicates the >>>> residual is not really getting small. >>>> >>>> Barry >>>> >>>> On Dec 21, 2010, at 2:26 PM, Vijay S. Mahadevan wrote: >>>> >>>>> Barry, I tried with the true_residual_norm option and it gives me the >>>>> exact same convergence as the one I have shown before. >>>>> >>>>> 45 KSP Residual norm 2.511364148934e-07 >>>>> 45 KSP preconditioned resid norm 2.511364148934e-07 true resid norm >>>>> 1.865039278877e+02 ||Ae||/||Ax|| 2.699481989705e+02 >>>>> 46 KSP preconditioned resid norm 1.307034672896e-07 true resid norm >>>>> 1.864478183180e+02 ||Ae||/||Ax|| 2.724877015479e+02 >>>>> 46 KSP Residual norm 1.307034672896e-07 >>>>> 46 KSP preconditioned resid norm 1.307034672896e-07 true resid norm >>>>> 1.864478183180e+02 ||Ae||/||Ax|| 2.724877015479e+02 >>>>> 47 KSP preconditioned resid norm 7.105770015635e-08 true resid norm >>>>> 1.864563163311e+02 ||Ae||/||Ax|| 2.722662760395e+02 >>>>> 47 KSP Residual norm 7.105770015635e-08 >>>>> 47 KSP preconditioned resid norm 7.105770015635e-08 true resid norm >>>>> 1.864563163311e+02 ||Ae||/||Ax|| 2.722662760395e+02 >>>>> 48 KSP preconditioned resid norm 4.098578230710e-08 true resid norm >>>>> 1.864560351328e+02 ||Ae||/||Ax|| 2.690284539995e+02 >>>>> 48 KSP Residual norm 4.098578230710e-08 >>>>> 48 KSP preconditioned resid norm 4.098578230710e-08 true resid norm >>>>> 1.864560351328e+02 ||Ae||/||Ax|| 2.690284539995e+02 >>>>> 49 KSP preconditioned resid norm 2.426160176080e-08 true resid norm >>>>> 1.864897210364e+02 ||Ae||/||Ax|| 2.696456942624e+02 >>>>> 49 KSP Residual norm 2.426160176080e-08 >>>>> 49 KSP preconditioned resid norm 2.426160176080e-08 true resid norm >>>>> 1.864897210364e+02 ||Ae||/||Ax|| 2.696456942624e+02 >>>>> 50 KSP preconditioned resid norm 1.864914790828e+02 true resid norm >>>>> 1.864914790828e+02 ||Ae||/||Ax|| 2.798875072987e+02 >>>>> 50 KSP Residual norm 1.864914790828e+02 >>>>> 50 KSP preconditioned resid norm 1.864914790828e+02 true resid norm >>>>> 1.864914790828e+02 ||Ae||/||Ax|| 2.798875072987e+02 >>>>> 51 KSP preconditioned resid norm 6.741080961009e+01 true resid norm >>>>> 6.759768469363e+01 ||Ae||/||Ax|| 1.666964983874e+02 >>>>> 51 KSP Residual norm 6.741080961009e+01 >>>>> 51 KSP preconditioned resid norm 6.741080961009e+01 true resid norm >>>>> 6.759768469363e+01 ||Ae||/||Ax|| 1.666964983874e+02 >>>>> 52 KSP preconditioned resid norm 5.191621875736e+01 true resid norm >>>>> 5.146342142561e+01 ||Ae||/||Ax|| 7.225409161988e+01 >>>>> 52 KSP Residual norm 5.191621875736e+01 >>>>> 52 KSP preconditioned resid norm 5.191621875736e+01 true resid norm >>>>> 5.146342142561e+01 ||Ae||/||Ax|| 7.225409161988e+01 >>>>> 53 KSP preconditioned resid norm 4.513782866249e+01 true resid norm >>>>> 4.546883708687e+01 ||Ae||/||Ax|| 7.426476446334e+01 >>>>> 53 KSP Residual norm 4.513782866249e+01 >>>>> 53 KSP preconditioned resid norm 4.513782866249e+01 true resid norm >>>>> 4.546883708687e+01 ||Ae||/||Ax|| 7.426476446334e+01 >>>>> 54 KSP preconditioned resid norm 3.320195603375e+01 true resid norm >>>>> 3.297361634749e+01 ||Ae||/||Ax|| 5.285029509147e+01 >>>>> >>>>> >>>>> Vijay >>>>> >>>>> On Tue, Dec 21, 2010 at 2:23 PM, Barry Smith <bsmith at mcs.anl.gov> >>>>> wrote: >>>>>> >>>>>> On Dec 21, 2010, at 2:08 PM, Jed Brown wrote: >>>>>> >>>>>>> On Tue, Dec 21, 2010 at 21:04, Barry Smith <bsmith at mcs.anl.gov> >>>>>>> wrote: >>>>>>> This is a sign that the preconditioner is seriously messed up and >>>>>>> should not be used in its current form. It can happen if the matrix is >>>>>>> nearly singular and for example you use an incomplete factorization for >>>>>>> a preconditioner that just screws up the scaling like totally. Run with >>>>>>> -ksp_monitor_true_residual and you'll see that the solver is not really >>>>>>> solving the problem even though it thinks it is converging fine. >>>>>>> >>>>>>> FGMRES only does right preconditioning so it should be showing the true >>>>>>> residual. >>>>>> >>>>>> No because it uses a recursive formula for "computing" the residual >>>>>> norm it does not compute it explicitly. So in extreme circumstances the >>>>>> recursively compute one generates "garbage". >>>>>> >>>>>> Barry >>>>>> >>>>>> >>>>>> >>>> >>>> >> >>
