<div dir="ltr"><div><div><div><div>Hi!<br><br></div>I'm using PETSc 3.4.3, with only default runtime settings, to solve Ax=b, for complex numbers (I have used --with-scalar-type=complex).<br><br></div>After reading sections 4.3.1, 4.3.2, 4.3.3 in the manual, I decided to investigate the convergence in my program, since I'm having some problems when the system is larger. So, I'm running it with the options<br>
<br>-ksp_monitor_true_residual -ksp_converged_reason -ksp_view<br><br></div>The output shows that the relative tolerance required for convergence is 1e-5, but none of the reported norms are that small. Despite this, convergence is reported (CONVERGED_RTOL).<br>
<br></div><div>I though that CONVERGED_RTOL should indicate that ||r||_2/||b||_2 < 1e-5, where r is the preconditioned residual?<br></div><div><br></div><div>Here is the output of my program (which includes some code to compute the l_2 norm of b, just before KSPSolve is run):<br>
<br>*************************************************************<br>Norm of b: 0.179829<br>  0 KSP preconditioned resid norm 2.508789303280e+04 true resid norm 1.798290175843e-01 ||r(i)||/||b|| 1.000000000000e+00<br>  1 KSP preconditioned resid norm 1.856991132478e+00 true resid norm 3.186462510386e-01 ||r(i)||/||b|| 1.771940120227e+00<br>
  2 KSP preconditioned resid norm 1.704678606994e-01 true resid norm 4.004071321891e-02 ||r(i)||/||b|| 2.226599119363e-01<br>Linear solve converged due to CONVERGED_RTOL iterations 2<br>KSP Object: 1 MPI processes<br>  type: gmres<br>
    GMRES: restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement<br>    GMRES: happy breakdown tolerance 1e-30<br>  maximum iterations=10000, initial guess is zero<br>  tolerances:  relative=1e-05, absolute=1e-50, divergence=10000<br>
  left preconditioning<br>  using PRECONDITIONED norm type for convergence test<br>PC Object: 1 MPI processes<br>  type: ilu<br>    ILU: out-of-place factorization<br>    0 levels of fill<br>    tolerance for zero pivot 2.22045e-14<br>
    using diagonal shift on blocks to prevent zero pivot [INBLOCKS]<br>    matrix ordering: natural<br>    factor fill ratio given 1, needed 1<br>      Factored matrix follows:<br>        Matrix Object:         1 MPI processes<br>
          type: seqaij<br>          rows=18, cols=18<br>          package used to perform factorization: petsc<br>          total: nonzeros=144, allocated nonzeros=144<br>          total number of mallocs used during MatSetValues calls =0<br>
            using I-node routines: found 9 nodes, limit used is 5<br>  linear system matrix = precond matrix:<br>  Matrix Object:   1 MPI processes<br>    type: seqaij<br>    rows=18, cols=18<br>    total: nonzeros=144, allocated nonzeros=360<br>
    total number of mallocs used during MatSetValues calls =18<br>      using I-node routines: found 9 nodes, limit used is 5<br>************************************************************************************************<br>
<br></div><div>Here is the code I used to get the l_2 norm of b:<br><br>PetscReal val;<br>VecNorm(b, NORM_2, &val);<br>PetscPrintf(PETSC_COMM_WORLD, "Norm of b: %G\n", val);<br></div><div><br></div><div>Best regards<br>
</div><div>Torquil Sørensen<br></div></div>