Thank you for your suggestion. Best wishes, Zongze
On Mon, 6 Mar 2023 at 02:40, Matthew Knepley <knep...@gmail.com> wrote: > On Sun, Mar 5, 2023 at 3:14 AM Zongze Yang <yangzon...@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/> >