Skip to content

Commit 1387a61

Browse files
committed
fixed classic non-MPI
1 parent 7587391 commit 1387a61

File tree

3 files changed

+19
-17
lines changed

3 files changed

+19
-17
lines changed

pySDC/implementations/controller_classes/allinclusive_classic_nonMPI.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ def __init__(self, num_procs, controller_params, description):
3030
for p in range(num_procs):
3131
self.MS.append(stepclass.step(description))
3232

33+
assert not (len(self.MS) > 1 and len(self.MS[0].levels) == 1), "ERROR: classic cannot do MSSDC"
34+
3335
if self.params.dump_setup:
3436
self.dump_setup(step=self.MS[0], controller_params=controller_params, description=description)
3537

@@ -144,7 +146,7 @@ def restart_block(self, active_slots, time, u0):
144146
# reset some values
145147
self.MS[p].status.done = False
146148
self.MS[p].status.pred_cnt = active_slots.index(p) + 1
147-
self.MS[p].status.iter = 1
149+
self.MS[p].status.iter = 0
148150
self.MS[p].status.stage = 'SPREAD'
149151
for l in self.MS[p].levels:
150152
l.tag = False
@@ -293,7 +295,7 @@ def pfasst(self, S, num_procs):
293295

294296
# update stage and return
295297
self.hooks.pre_iteration(step=S, level_number=0)
296-
S.status.stage = 'IT_FINE_SWEEP'
298+
S.status.stage = 'IT_CHECK'
297299
return S
298300

299301
elif stage == 'IT_FINE_SWEEP':
@@ -321,7 +323,10 @@ def pfasst(self, S, num_procs):
321323
self.logger.debug('Process %2i provides data on level %2i with tag %s'
322324
% (S.status.slot, 0, True))
323325
self.send(S.levels[0], tag=True)
324-
S.status.stage = 'IT_CHECK'
326+
if len(S.levels) > 1:
327+
S.status.stage = 'IT_UP'
328+
else: # SDC
329+
S.status.stage = 'IT_CHECK'
325330
else:
326331
S.status.stage = 'IT_FINE_SEND'
327332
# return
@@ -331,10 +336,12 @@ def pfasst(self, S, num_procs):
331336

332337
# check whether to stop iterating
333338

334-
self.hooks.post_iteration(step=S, level_number=0)
335-
339+
S.levels[0].sweep.compute_residual()
336340
S.status.done = self.check_convergence(S)
337341

342+
if S.status.iter > 0:
343+
self.hooks.post_iteration(step=S, level_number=0)
344+
338345
# if the previous step is still iterating but I am done, un-do me to still forward values
339346
if not S.status.first and S.status.done and (S.prev.status.done is not None and not S.prev.status.done):
340347
S.status.done = False
@@ -348,12 +355,7 @@ def pfasst(self, S, num_procs):
348355
# increment iteration count here (and only here)
349356
S.status.iter += 1
350357
self.hooks.pre_iteration(step=S, level_number=0)
351-
if len(S.levels) > 1:
352-
S.status.stage = 'IT_UP'
353-
elif num_procs > 1: # MSSDC
354-
S.status.stage = 'IT_COARSE_RECV'
355-
elif num_procs == 1: # SDC
356-
S.status.stage = 'IT_FINE_SWEEP'
358+
S.status.stage = 'IT_FINE_SWEEP'
357359
# return
358360
return S
359361

@@ -475,7 +477,7 @@ def pfasst(self, S, num_procs):
475477
self.hooks.post_sweep(step=S, level_number=l - 1)
476478

477479
# update stage and return
478-
S.status.stage = 'IT_FINE_SWEEP'
480+
S.status.stage = 'IT_CHECK'
479481
return S
480482

481483
else:

tutorial/step_6/A_classic_vs_multigrid_controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def main(num_proc_list=None, fname=None):
7878

7979
assert all([item[1] <= 7 for item in iter_counts_multigrid]), \
8080
"ERROR: weird iteration counts for multigrid, got %s" % iter_counts_multigrid
81-
assert diff < 1E-09, "ERROR: difference between classic and multigrid controller is too large, got %s" % diff
81+
assert diff < 1.281E-10, "ERROR: difference between classic and multigrid controller is too large, got %s" % diff
8282

8383
f.close()
8484

tutorial/step_7/B_multistep_SDC.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from pySDC.implementations.collocation_classes.gauss_radau_right import CollGaussRadau_Right
66
from pySDC.implementations.sweeper_classes.generic_LU import generic_LU
77
from pySDC.implementations.transfer_classes.TransferMesh import mesh_to_mesh
8-
from pySDC.implementations.controller_classes.allinclusive_classic_nonMPI import allinclusive_classic_nonMPI
8+
from pySDC.implementations.controller_classes.allinclusive_multigrid_nonMPI import allinclusive_multigrid_nonMPI
99

1010
from pySDC.helpers.stats_helper import filter_stats, sort_stats
1111
from pySDC.helpers.visualization_tools import show_residual_across_simulation
@@ -75,9 +75,9 @@ def main():
7575
num_proc = 8
7676

7777
# instantiate controllers
78-
controller_mssdc = allinclusive_classic_nonMPI(num_procs=num_proc, controller_params=controller_params,
78+
controller_mssdc = allinclusive_multigrid_nonMPI(num_procs=num_proc, controller_params=controller_params,
7979
description=description_mssdc)
80-
controller_pfasst = allinclusive_classic_nonMPI(num_procs=num_proc, controller_params=controller_params,
80+
controller_pfasst = allinclusive_multigrid_nonMPI(num_procs=num_proc, controller_params=controller_params,
8181
description=description_pfasst)
8282

8383
# get initial values on finest level
@@ -127,7 +127,7 @@ def main():
127127
show_residual_across_simulation(stats_mssdc, 'step_7_residuals_mssdc.png')
128128

129129
assert os.path.isfile('step_7_residuals_mssdc.png')
130-
assert diff < 2.66E-09, "ERROR: difference between PFASST and MSSDC controller is too large, got %s" % diff
130+
assert diff < 5.15E-11, "ERROR: difference between PFASST and MSSDC controller is too large, got %s" % diff
131131

132132

133133
if __name__ == "__main__":

0 commit comments

Comments
 (0)