[petsc-users] petsc4py did not raise for a second time with option `ksp_error_if_not_converged`

Matthew Knepley knepley at gmail.com
Sun Mar 5 12:40:04 CST 2023


On Sun, Mar 5, 2023 at 3:14 AM Zongze Yang <yangzongze at gmail.com> wrote:

>
>
> Hello,
>
> I am trying to catch the "not converged" error in a loop with the
> `ksp_error_if_not_converged` option on. However, it seems that PETSc only
> raises the exception once, even though the solver does not converge after
> that. Is this expected behavior? Can I make it raise an exception every
> time?
>

When an error is raised, we do not guarantee a consistent state for
recovery, so errors terminate the program. If you want
to do something useful with non-convergence, then you do not set
-ksp_error_if_not_converged. Rather you check the convergence
code, and if it is not convergence, you take your action.

  Thanks,

     Matt


> I have included a code snippet of the loop below, and the complete code is
> attached:
> ```python
> for i in range(3):
>     printf(f"Loop i = {i}")
>     try:
>         solver.solve()
>     except ConvergenceError:
>         printf(f"  Error from Firedrake: solver did not converged:
> {get_ksp_reason(solver)}")
>     except PETSc.Error as e:
>         if e.ierr == 91:
>             printf(f"  Error from PETSc: solver did not converged:
> {get_ksp_reason(solver)}")
>         else:
>             raise
> ```
>
> The output of the code looks like this:
> ```python
> (complex-int32-mkl) $ python test_error.py
> Loop i = 0
>   Linear  solve did not converge due to DIVERGED_ITS iterations 4
>   Error from PETSc: solver did not converged: DIVERGED_MAX_IT
> Loop i = 1
>   Linear  solve did not converge due to DIVERGED_ITS iterations 4
>   Error from Firedrake: solver did not converged: DIVERGED_MAX_IT
> Loop i = 2
>   Linear  solve did not converge due to DIVERGED_ITS iterations 4
>   Error from Firedrake: solver did not converged: DIVERGED_MAX_IT
> ```
>
> Best wishes,
> Zongze
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230305/d43ec955/attachment.html>


More information about the petsc-users mailing list