Skip to content

Commit bf940bd

Browse files
Added increment to level status (#504)
1 parent 0ea5135 commit bf940bd

File tree

4 files changed

+15
-6
lines changed

4 files changed

+15
-6
lines changed

pySDC/implementations/convergence_controller_classes/adaptivity.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,16 @@ def determine_restart(self, controller, S, **kwargs):
229229
if self.get_convergence(controller, S, **kwargs):
230230
self.res_last_iter = np.inf
231231

232-
if self.params.restart_at_maxiter and S.levels[0].status.residual > S.levels[0].params.restol:
232+
L = S.levels[0]
233+
e_tol_converged = (
234+
L.status.increment < L.params.e_tol if (L.params.get('e_tol') and L.status.get('increment')) else False
235+
)
236+
237+
if (
238+
self.params.restart_at_maxiter
239+
and S.levels[0].status.residual > S.levels[0].params.restol
240+
and not e_tol_converged
241+
):
233242
self.trigger_restart_upon_nonconvergence(S)
234243
elif self.get_local_error_estimate(controller, S, **kwargs) > self.params.e_tol:
235244
S.status.restart = True

pySDC/implementations/convergence_controller_classes/check_convergence.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ def check_convergence(S, self=None):
7575
iter_converged = S.status.iter >= S.params.maxiter
7676
res_converged = L.status.residual <= L.params.restol
7777
e_tol_converged = (
78-
L.status.error_embedded_estimate < L.params.e_tol
79-
if (L.params.get('e_tol') and L.status.get('error_embedded_estimate'))
80-
else False
78+
L.status.increment < L.params.e_tol if (L.params.get('e_tol') and L.status.get('increment')) else False
8179
)
8280
converged = (
8381
iter_converged or res_converged or e_tol_converged or S.status.force_done

pySDC/implementations/convergence_controller_classes/estimate_embedded_error.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,13 @@ def estimate_embedded_error_serial(self, L):
109109

110110
def setup_status_variables(self, controller, **kwargs):
111111
"""
112-
Add the embedded error variable to the error function.
112+
Add the embedded error to the level status
113113
114114
Args:
115115
controller (pySDC.Controller): The controller
116116
"""
117117
self.add_status_variable_to_level('error_embedded_estimate')
118+
self.add_status_variable_to_level('increment')
118119

119120
def post_iteration_processing(self, controller, S, **kwargs):
120121
"""
@@ -134,6 +135,7 @@ def post_iteration_processing(self, controller, S, **kwargs):
134135
if S.status.iter > 0 or self.params.sweeper_type == "RK":
135136
for L in S.levels:
136137
L.status.error_embedded_estimate = max([self.estimate_embedded_error_serial(L), np.finfo(float).eps])
138+
L.status.increment = L.status.error_embedded_estimate * 1
137139
self.debug(f'L.status.error_embedded_estimate={L.status.error_embedded_estimate:.5e}', S)
138140

139141
return None

pySDC/implementations/convergence_controller_classes/estimate_polynomial_error.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def post_iteration_processing(self, controller, S, **kwargs):
150150
if self.comm:
151151
buf = np.array(abs(u_inter - high_order_sol) if self.comm.rank == rank else 0.0)
152152
self.comm.Bcast(buf, root=rank)
153-
L.status.error_embedded_estimate = buf
153+
L.status.error_embedded_estimate = float(buf)
154154
else:
155155
L.status.error_embedded_estimate = abs(u_inter - high_order_sol)
156156

0 commit comments

Comments
 (0)