> On Mar 25, 2017, at 9:11 AM, alexandre this <[email protected]> wrote:
> 
> This (the code paste that you provided) is exactly what I was thinking 
> about/refering to when I posted my question to this mailing list.
> 
> I changed the tolerance and the solver worked fine but it is definitely a 
> bandage that is going to heal only the symptom. It will also disable the 
> tolerance test in the later iterations while this test is here to prevent 
> divergence of the results, right ?

   The divergence test is very very rarely needed in practice with Krylov 
methods; it is only there for when preconditioners "go crazy" because they have 
a bug in them.  Though you are right the fix is "a bandage" you can confidently 
use it without concerns.

> 
> Is there an option to disable the tolerance test only in the initial check 
> (which I did not find as of yet) ?

   No. 
> 
> Best,
> Alexandre
> 
> 
> 
> 2017-03-25 1:52 GMT+01:00 Barry Smith <[email protected]>:
> 
> > On Mar 24, 2017, at 8:56 AM, alexandre this <[email protected]> 
> > wrote:
> >
> > Dear all,
> >
> > I'm in the configuration where I need to solve a linear system Ax = b where 
> > b is very small although not equal to zero.
> >
> > It appears that, in this configuration, the initial residual of the first 
> > iteration of the solver is completely out of reach and the 
> > KSP_DIVERGED_DTOL is raised.
> >
> > In particular, when using the "-ksp_monitor_true_residual flag", I get the 
> > following :
> > 0 KSP preconditioned resid norm 2.907111674781e+00 true resid norm 
> > 1.955854211540e+02 ||r(i)||/||b|| 1.765818923254e+09
> 
>    Yeah this is a glitch in the divergence checking. A bad initial guess with 
> a nearly zero right hand side can trigger this. There is special code in 
> KSPConvergedDefault() when the right hand side is identical to zero
> 
>       if (!snorm) {
>         ierr  = PetscInfo(ksp,"Special case, user has provided nonzero 
> initial guess and zero RHS\n");CHKERRQ(ierr);
>         snorm = rnorm;
>       }
> 
> but not for "small" right hand side.
> 
> You can use something like  -ksp_divtol 1.e30 ( or bigger) to turn off the 
> divtol test.
> 
> Do any PETSc users or developers know a more systematic way to handle this 
> issue with small right hand side and bad initial guess?
> 
> 
>   Barry
> 
> 
> 
> >
> > What is the best course of action in this case ?
> >
> > Best,
> > Alexandre

Reply via email to