From cf2367c6a99ce572991b2521fbca483f0a12d72d Mon Sep 17 00:00:00 2001 From: Thomas Baumann <39156931+brownbaerchen@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:07:12 +0100 Subject: [PATCH 1/3] Perform at least one SDC iteration --- .../convergence_controller_classes/check_convergence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySDC/implementations/convergence_controller_classes/check_convergence.py b/pySDC/implementations/convergence_controller_classes/check_convergence.py index 36cb8e4a21..c76acebebd 100644 --- a/pySDC/implementations/convergence_controller_classes/check_convergence.py +++ b/pySDC/implementations/convergence_controller_classes/check_convergence.py @@ -73,7 +73,7 @@ def check_convergence(S, self=None): # get residual and check against prescribed tolerance (plus check number of iterations) iter_converged = S.status.iter >= S.params.maxiter - res_converged = L.status.residual <= L.params.restol + res_converged = L.status.residual <= L.params.restol and (S.status.iter > 0 or L.status.sweep > 0) e_tol_converged = ( L.status.increment < L.params.e_tol if (L.params.get('e_tol') and L.status.get('increment')) else False ) From c17024dbcc648ddeec844cab2ff20a1aaaeac8b1 Mon Sep 17 00:00:00 2001 From: Thomas Baumann <39156931+brownbaerchen@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:19:57 +0100 Subject: [PATCH 2/3] Can use only prediction if predicting exotically --- .../convergence_controller_classes/check_convergence.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pySDC/implementations/convergence_controller_classes/check_convergence.py b/pySDC/implementations/convergence_controller_classes/check_convergence.py index c76acebebd..3a2ee3952c 100644 --- a/pySDC/implementations/convergence_controller_classes/check_convergence.py +++ b/pySDC/implementations/convergence_controller_classes/check_convergence.py @@ -73,7 +73,9 @@ def check_convergence(S, self=None): # get residual and check against prescribed tolerance (plus check number of iterations) iter_converged = S.status.iter >= S.params.maxiter - res_converged = L.status.residual <= L.params.restol and (S.status.iter > 0 or L.status.sweep > 0) + res_converged = L.status.residual <= L.params.restol and ( + (S.status.iter > 0 or L.status.sweep > 0) or L.sweep.params.initial_guess not in ['spread', 'copy', 'zero'] + ) e_tol_converged = ( L.status.increment < L.params.e_tol if (L.params.get('e_tol') and L.status.get('increment')) else False ) From c4a793335dc96da7da2c12a8687889f15d2a0b8c Mon Sep 17 00:00:00 2001 From: Thomas Baumann <39156931+brownbaerchen@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:42:56 +0100 Subject: [PATCH 3/3] Reverted last commit --- .../convergence_controller_classes/check_convergence.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pySDC/implementations/convergence_controller_classes/check_convergence.py b/pySDC/implementations/convergence_controller_classes/check_convergence.py index 3a2ee3952c..c76acebebd 100644 --- a/pySDC/implementations/convergence_controller_classes/check_convergence.py +++ b/pySDC/implementations/convergence_controller_classes/check_convergence.py @@ -73,9 +73,7 @@ def check_convergence(S, self=None): # get residual and check against prescribed tolerance (plus check number of iterations) iter_converged = S.status.iter >= S.params.maxiter - res_converged = L.status.residual <= L.params.restol and ( - (S.status.iter > 0 or L.status.sweep > 0) or L.sweep.params.initial_guess not in ['spread', 'copy', 'zero'] - ) + res_converged = L.status.residual <= L.params.restol and (S.status.iter > 0 or L.status.sweep > 0) e_tol_converged = ( L.status.increment < L.params.e_tol if (L.params.get('e_tol') and L.status.get('increment')) else False )