Skip to content

Commit 5f230ea

Browse files
committed
fxed the other controllers, random initial data
1 parent 64bfbeb commit 5f230ea

File tree

5 files changed

+36
-19
lines changed

5 files changed

+36
-19
lines changed

playgrounds/HeatEquation/periodic_playground.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def main():
2222
level_params = dict()
2323
level_params['restol'] = 1E-08
2424
level_params['dt'] = 0.25
25+
level_params['nsweeps'] = [2, 1]
2526

2627
# initialize sweeper parameters
2728
sweeper_params = dict()
@@ -31,8 +32,8 @@ def main():
3132

3233
# initialize problem parameters
3334
problem_params = dict()
34-
problem_params['nu'] = 1E+05 # diffusion coefficient
35-
problem_params['freq'] = 4 # frequency for the test value
35+
problem_params['nu'] = 1E-06 # diffusion coefficient
36+
problem_params['freq'] = -1 # frequency for the test value
3637
problem_params['nvars'] = [128, 64] # number of degrees of freedom for each level
3738

3839
# initialize step parameters
@@ -71,8 +72,8 @@ def main():
7172
num_proc = 4
7273

7374
# instantiate controller
74-
controller = allinclusive_classic_nonMPI(num_procs=num_proc, controller_params=controller_params,
75-
description=description)
75+
controller = allinclusive_multigrid_nonMPI(num_procs=num_proc, controller_params=controller_params,
76+
description=description)
7677

7778
# get initial values on finest level
7879
P = controller.MS[0].levels[0].prob

pySDC/implementations/controller_classes/allinclusive_classic_MPI.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ def pfasst(self, comm, num_procs):
265265

266266
# standard sweep workflow: update nodes, compute residual, log progress
267267
self.hooks.pre_sweep(step=self.S, level_number=0)
268-
self.S.levels[0].sweep.update_nodes()
268+
for k in range(self.S.levels[0].params.nsweeps):
269+
self.S.levels[0].sweep.update_nodes()
269270
self.S.levels[0].sweep.compute_residual()
270271
self.hooks.post_sweep(step=self.S, level_number=0)
271272

@@ -341,7 +342,8 @@ def pfasst(self, comm, num_procs):
341342
# sweep and send on middle levels (not on finest, not on coarsest, though)
342343
for l in range(1, len(self.S.levels) - 1):
343344
self.hooks.pre_sweep(step=self.S, level_number=l)
344-
self.S.levels[l].sweep.update_nodes()
345+
for k in range(self.S.levels[l].params.nsweeps):
346+
self.S.levels[l].sweep.update_nodes()
345347
self.S.levels[l].sweep.compute_residual()
346348
self.hooks.post_sweep(step=self.S, level_number=l)
347349

@@ -381,7 +383,8 @@ def pfasst(self, comm, num_procs):
381383

382384
# do the sweep
383385
self.hooks.pre_sweep(step=self.S, level_number=len(self.S.levels) - 1)
384-
self.S.levels[-1].sweep.update_nodes()
386+
for k in range(self.S.levels[-1].params.nsweeps):
387+
self.S.levels[-1].sweep.update_nodes()
385388
self.S.levels[-1].sweep.compute_residual()
386389
self.hooks.post_sweep(step=self.S, level_number=len(self.S.levels) - 1)
387390
self.S.levels[-1].sweep.compute_end_point()
@@ -418,7 +421,8 @@ def pfasst(self, comm, num_procs):
418421
# on middle levels: do sweep as usual
419422
if l - 1 > 0:
420423
self.hooks.pre_sweep(step=self.S, level_number=l - 1)
421-
self.S.levels[l - 1].sweep.update_nodes()
424+
for k in range(self.S.levels[l - 1].params.nsweeps):
425+
self.S.levels[l - 1].sweep.update_nodes()
422426
self.S.levels[l - 1].sweep.compute_residual()
423427
self.hooks.post_sweep(step=self.S, level_number=l - 1)
424428

pySDC/implementations/controller_classes/allinclusive_multigrid_MPI.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,8 @@ def pfasst(self, comm, num_procs):
267267

268268
# standard sweep workflow: update nodes, compute residual, log progress
269269
self.hooks.pre_sweep(step=self.S, level_number=0)
270-
self.S.levels[0].sweep.update_nodes()
270+
for k in range(self.S.levels[0].params.nsweeps):
271+
self.S.levels[0].sweep.update_nodes()
271272
self.S.levels[0].sweep.compute_residual()
272273
self.hooks.post_sweep(step=self.S, level_number=0)
273274

@@ -312,7 +313,8 @@ def pfasst(self, comm, num_procs):
312313
# sweep and send on middle levels (not on finest, not on coarsest, though)
313314
for l in range(1, len(self.S.levels) - 1):
314315
self.hooks.pre_sweep(step=self.S, level_number=l)
315-
self.S.levels[l].sweep.update_nodes()
316+
for k in range(self.S.levels[l].params.nsweeps):
317+
self.S.levels[l].sweep.update_nodes()
316318
self.S.levels[l].sweep.compute_residual()
317319
self.hooks.post_sweep(step=self.S, level_number=l)
318320

@@ -341,7 +343,8 @@ def pfasst(self, comm, num_procs):
341343

342344
# do the sweep
343345
self.hooks.pre_sweep(step=self.S, level_number=len(self.S.levels) - 1)
344-
self.S.levels[-1].sweep.update_nodes()
346+
for k in range(self.S.levels[-1].params.nsweeps):
347+
self.S.levels[-1].sweep.update_nodes()
345348
self.S.levels[-1].sweep.compute_residual()
346349
self.hooks.post_sweep(step=self.S, level_number=len(self.S.levels) - 1)
347350
self.S.levels[-1].sweep.compute_end_point()
@@ -389,7 +392,8 @@ def pfasst(self, comm, num_procs):
389392
# on middle levels: do sweep as usual
390393
if l - 1 > 0:
391394
self.hooks.pre_sweep(step=self.S, level_number=l - 1)
392-
self.S.levels[l - 1].sweep.update_nodes()
395+
for k in range(self.S.levels[l - 1].params.nsweeps):
396+
self.S.levels[l - 1].sweep.update_nodes()
393397
self.S.levels[l - 1].sweep.compute_residual()
394398
self.hooks.post_sweep(step=self.S, level_number=l - 1)
395399

pySDC/implementations/controller_classes/allinclusive_multigrid_nonMPI.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,8 @@ def pfasst(self, MS):
290290
for S in MS:
291291
# standard sweep workflow: update nodes, compute residual, log progress
292292
self.hooks.pre_sweep(step=S, level_number=0)
293-
S.levels[0].sweep.update_nodes()
293+
for k in range(S.levels[0].params.nsweeps):
294+
S.levels[0].sweep.update_nodes()
294295
S.levels[0].sweep.compute_residual()
295296
self.hooks.post_sweep(step=S, level_number=0)
296297

@@ -340,7 +341,8 @@ def pfasst(self, MS):
340341
# sweep and send on middle levels (not on finest, not on coarsest, though)
341342
for l in range(1, len(S.levels) - 1):
342343
self.hooks.pre_sweep(step=S, level_number=l)
343-
S.levels[l].sweep.update_nodes()
344+
for k in range(S.levels[l].params.nsweeps):
345+
S.levels[l].sweep.update_nodes()
344346
S.levels[l].sweep.compute_residual()
345347
self.hooks.post_sweep(step=S, level_number=l)
346348

@@ -409,7 +411,8 @@ def pfasst(self, MS):
409411
# on middle levels: do sweep as usual
410412
if l - 1 > 0:
411413
self.hooks.pre_sweep(step=S, level_number=l - 1)
412-
S.levels[l - 1].sweep.update_nodes()
414+
for k in range(S.levels[l - 1].params.nsweeps):
415+
S.levels[l - 1].sweep.update_nodes()
413416
S.levels[l - 1].sweep.compute_residual()
414417
self.hooks.post_sweep(step=S, level_number=l - 1)
415418

pySDC/implementations/problem_classes/HeatEquation_1D_FD_periodic.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(self, problem_params, dtype_u, dtype_f):
3636
raise ParameterError(msg)
3737

3838
# make sure parameters have the correct form
39-
if problem_params['freq'] % 2 != 0:
39+
if problem_params['freq'] >= 0 and problem_params['freq'] % 2 != 0:
4040
raise ProblemError('need even number of frequencies due to periodic BCs')
4141
if problem_params['nvars'] % 2 != 0:
4242
raise ProblemError('the setup requires nvars = 2^p per dimension')
@@ -122,8 +122,13 @@ def u_exact(self, t):
122122
"""
123123

124124
me = self.dtype_u(self.init)
125-
xvalues = np.array([i * self.dx for i in range(self.params.nvars)])
126-
me.values = np.sin(np.pi * self.params.freq * xvalues) * \
127-
np.exp(-t * self.params.nu * (np.pi * self.params.freq) ** 2)
125+
126+
if self.params.freq >= 0:
127+
xvalues = np.array([i * self.dx for i in range(self.params.nvars)])
128+
me.values = np.sin(np.pi * self.params.freq * xvalues) * \
129+
np.exp(-t * self.params.nu * (np.pi * self.params.freq) ** 2)
130+
else:
131+
np.random.seed(1)
132+
me.values = np.random.rand(self.params.nvars)
128133
me.values = me.values.flatten()
129134
return me

0 commit comments

Comments
 (0)