> 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
> 
> 
> -- 
> Alexandre This
> 
> Doctorant CIFRE (Philips Healthcare - INRIA) : Fusion Image / Modèles 
> Numériques pour la quantification de la sévérité de la régurgitation mitrale
> 
> Master 2 Recherche Mathématiques, Vision, Apprentissage - ENS Cachan
> Ingénieur spécialisation Santé&Technologie - ECE Paris
> Bachelor of Science : Informatics - Aalborg University, Danemark
> 
> tel : 06.32.57.12.44

Reply via email to