Skip to content

Commit 226d9dd

Browse files
author
Thomas Baumann
committed
Dealt with dangerous business of restarts a little bit
1 parent 02dc5d4 commit 226d9dd

File tree

7 files changed

+33
-12
lines changed

7 files changed

+33
-12
lines changed

pySDC/core/Hooks.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ class hooks(object):
77
"""
88
Hook class to contain the functions called during the controller runs (e.g. for calling user-routines)
99
10+
When deriving a custom hook from this class make sure to always call the parent method using e.g.
11+
`super().post_step(step, level_number)`. Otherwise bugs may arise when using `filer_recomputed` from the stats
12+
helper for post processing.
13+
1014
Attributes:
11-
__num_restarts (int): number of restarts of the current step
1215
logger: logger instance for output
16+
__num_restarts (int): number of restarts of the current step
1317
__stats (dict): dictionary for gathering the statistics of a run
1418
__entry (namedtuple): statistics entry containing all information to identify the value
1519
"""
@@ -120,7 +124,7 @@ def pre_predict(self, step, level_number):
120124
step (pySDC.Step.step): the current step
121125
level_number (int): the current level number
122126
"""
123-
pass
127+
self.__num_restarts = step.status.get('restarts_in_a_row') if step is not None else 0
124128

125129
def pre_step(self, step, level_number):
126130
"""

pySDC/implementations/hooks/default_hook.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,10 @@ class DefaultHooks(hooks):
2121
__t1_sweep (float): private variable to get end time of the sweep
2222
__t1_setup (float): private variable to get end time of setup
2323
__t1_comm (list): private variable to hold timing of the communication (!)
24-
logger: logger instance for output
25-
__stats (dict): dictionary for gathering the statistics of a run
26-
__entry (namedtuple): statistics entry containing all information to identify the value
2724
"""
2825

2926
def __init__(self):
30-
super(DefaultHooks, self).__init__()
27+
super().__init__()
3128
self.__t0_setup = None
3229
self.__t0_run = None
3330
self.__t0_predict = None
@@ -51,6 +48,7 @@ def pre_setup(self, step, level_number):
5148
step (pySDC.Step.step): the current step
5249
level_number (int): the current level number
5350
"""
51+
super().pre_setup(step, level_number)
5452
self.__t0_setup = time.perf_counter()
5553

5654
def pre_run(self, step, level_number):
@@ -61,6 +59,7 @@ def pre_run(self, step, level_number):
6159
step (pySDC.Step.step): the current step
6260
level_number (int): the current level number
6361
"""
62+
super().pre_run(step, level_number)
6463
self.__t0_run = time.perf_counter()
6564

6665
def pre_predict(self, step, level_number):
@@ -71,6 +70,7 @@ def pre_predict(self, step, level_number):
7170
step (pySDC.Step.step): the current step
7271
level_number (int): the current level number
7372
"""
73+
super().pre_predict(step, level_number)
7474
self.__t0_predict = time.perf_counter()
7575

7676
def pre_step(self, step, level_number):
@@ -81,6 +81,7 @@ def pre_step(self, step, level_number):
8181
step (pySDC.Step.step): the current step
8282
level_number (int): the current level number
8383
"""
84+
super().pre_step(step, level_number)
8485
self.__t0_step = time.perf_counter()
8586

8687
def pre_iteration(self, step, level_number):
@@ -91,6 +92,7 @@ def pre_iteration(self, step, level_number):
9192
step (pySDC.Step.step): the current step
9293
level_number (int): the current level number
9394
"""
95+
super().pre_iteration(step, level_number)
9496
self.__t0_iteration = time.perf_counter()
9597

9698
def pre_sweep(self, step, level_number):
@@ -101,6 +103,7 @@ def pre_sweep(self, step, level_number):
101103
step (pySDC.Step.step): the current step
102104
level_number (int): the current level number
103105
"""
106+
super().pre_sweep(step, level_number)
104107
self.__t0_sweep = time.perf_counter()
105108

106109
def pre_comm(self, step, level_number):
@@ -111,6 +114,7 @@ def pre_comm(self, step, level_number):
111114
step (pySDC.Step.step): the current step
112115
level_number (int): the current level number
113116
"""
117+
super().pre_comm(step, level_number)
114118
if len(self.__t0_comm) >= level_number + 1:
115119
self.__t0_comm[level_number] = time.perf_counter()
116120
else:
@@ -131,6 +135,7 @@ def post_comm(self, step, level_number, add_to_stats=False):
131135
level_number (int): the current level number
132136
add_to_stats (bool): set if result should go to stats object
133137
"""
138+
super().post_comm(step, level_number)
134139
assert len(self.__t1_comm) >= level_number + 1
135140
self.__t1_comm[level_number] += time.perf_counter() - self.__t0_comm[level_number]
136141

@@ -156,6 +161,7 @@ def post_sweep(self, step, level_number):
156161
step (pySDC.Step.step): the current step
157162
level_number (int): the current level number
158163
"""
164+
super().post_sweep(step, level_number)
159165
self.__t1_sweep = time.perf_counter()
160166

161167
L = step.levels[level_number]
@@ -198,6 +204,7 @@ def post_iteration(self, step, level_number):
198204
step (pySDC.Step.step): the current step
199205
level_number (int): the current level number
200206
"""
207+
super().post_iteration(step, level_number)
201208
self.__t1_iteration = time.perf_counter()
202209

203210
L = step.levels[level_number]
@@ -229,6 +236,7 @@ def post_step(self, step, level_number):
229236
step (pySDC.Step.step): the current step
230237
level_number (int): the current level number
231238
"""
239+
super().post_step(step, level_number)
232240
self.__t1_step = time.perf_counter()
233241

234242
L = step.levels[level_number]
@@ -275,6 +283,7 @@ def post_predict(self, step, level_number):
275283
step (pySDC.Step.step): the current step
276284
level_number (int): the current level number
277285
"""
286+
super().post_predict(step, level_number)
278287
self.__t1_predict = time.perf_counter()
279288

280289
L = step.levels[level_number]
@@ -297,6 +306,7 @@ def post_run(self, step, level_number):
297306
step (pySDC.Step.step): the current step
298307
level_number (int): the current level number
299308
"""
309+
super().post_run(step, level_number)
300310
self.__t1_run = time.perf_counter()
301311

302312
L = step.levels[level_number]
@@ -319,6 +329,7 @@ def post_setup(self, step, level_number):
319329
step (pySDC.Step.step): the current step
320330
level_number (int): the current level number
321331
"""
332+
super().post_setup(step, level_number)
322333
self.__t1_setup = time.perf_counter()
323334

324335
self.add_to_stats(

pySDC/implementations/hooks/log_embedded_error_estimate.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def post_step(self, step, level_number):
1717
Returns:
1818
None
1919
"""
20-
# some abbreviations
20+
super().post_step(step, level_number)
21+
2122
L = step.levels[level_number]
2223

2324
self.add_to_stats(

pySDC/implementations/hooks/log_extrapolated_error_estimate.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ def post_step(self, step, level_number):
1717
Returns:
1818
None
1919
"""
20+
super().post_step(step, level_number)
21+
2022
# some abbreviations
2123
L = step.levels[level_number]
2224

pySDC/implementations/hooks/log_solution.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def post_step(self, step, level_number):
1717
Returns:
1818
None
1919
"""
20-
# some abbreviations
20+
super().post_step(step, level_number)
21+
2122
L = step.levels[level_number]
2223
L.sweep.compute_end_point()
2324

pySDC/implementations/hooks/log_step_size.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def post_step(self, step, level_number):
1717
Returns:
1818
None
1919
"""
20-
# some abbreviations
20+
super().post_step(step, level_number)
21+
2122
L = step.levels[level_number]
2223

2324
self.add_to_stats(

pySDC/projects/Resilience/hook.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,18 @@ def pre_run(self, step, level_number):
1717
"""
1818
Record los conditiones initiales
1919
"""
20+
super().pre_run(step, level_number)
21+
2022
L = step.levels[level_number]
2123
self.add_to_stats(process=0, time=0, level=0, iter=0, sweep=0, type='u0', value=L.u[0])
2224

2325
def post_step(self, step, level_number):
2426
"""
2527
Record final solutions as well as step size and error estimates
2628
"""
27-
# some abbreviations
28-
L = step.levels[level_number]
29+
super().post_step(step, level_number)
2930

30-
L.sweep.compute_end_point()
31+
L = step.levels[level_number]
3132

3233
self.add_to_stats(
3334
process=step.status.slot,

0 commit comments

Comments
 (0)