Skip to content

Commit 27f12d2

Browse files
committed
further playing around
1 parent 2082843 commit 27f12d2

File tree

3 files changed

+52
-10
lines changed

3 files changed

+52
-10
lines changed

pySDC/implementations/problem_classes/HeatEquation_1D_FD.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,9 @@ def u_exact(self, t):
114114
me = self.dtype_u(self.init)
115115
if self.params.freq >= 0:
116116
xvalues = np.array([(i + 1) * self.dx for i in range(self.params.nvars)])
117+
rho = (2.0 - 2.0 * np.cos(np.pi * self.params.freq * self.dx)) / self.dx ** 2
117118
me.values = np.sin(np.pi * self.params.freq * xvalues) * \
118-
np.exp(-t * self.params.nu * (np.pi * self.params.freq) ** 2)
119+
np.exp(-t * self.params.nu * rho)
119120
else:
120121
np.random.seed(1)
121122
me.values = np.random.rand(self.params.nvars)

pySDC/playgrounds/order_test/heat1d.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@
1111
from pySDC.implementations.controller_classes.allinclusive_multigrid_nonMPI import allinclusive_multigrid_nonMPI
1212
from pySDC.implementations.problem_classes.HeatEquation_1D_FD_periodic import heat1d_periodic
1313
from pySDC.implementations.problem_classes.HeatEquation_1D_FD_forced import heat1d_forced
14+
from pySDC.implementations.problem_classes.HeatEquation_1D_FD import heat1d
1415
from pySDC.implementations.transfer_classes.TransferMesh import mesh_to_mesh
1516

17+
from pySDC.playgrounds.order_test.hook_get_update import get_update
18+
1619
from pySDC.helpers.stats_helper import filter_stats, sort_stats
1720

1821

@@ -28,32 +31,33 @@ def main():
2831

2932
# This comes as read-in for the problem class
3033
problem_params = dict()
31-
problem_params['nu'] = 0.01
34+
problem_params['nu'] = 0.1
3235
problem_params['freq'] = 2
33-
problem_params['nvars'] = [2 ** 7, 2 ** 6]
36+
problem_params['nvars'] = [2 ** 10 - 1, 2 ** 9 - 1]
3437

3538
# This comes as read-in for the sweeper class
3639
sweeper_params = dict()
3740
sweeper_params['collocation_class'] = CollGaussRadau_Right
3841
sweeper_params['num_nodes'] = [5]
39-
sweeper_params['QI'] = ['IE', 'PIC']
42+
sweeper_params['QI'] = ['IE']#, 'IE']
4043
sweeper_params['spread'] = False
4144
sweeper_params['do_coll_update'] = False
4245

4346
# initialize space transfer parameters
4447
space_transfer_params = dict()
4548
space_transfer_params['rorder'] = 2
4649
space_transfer_params['iorder'] = 6
47-
space_transfer_params['periodic'] = True
50+
space_transfer_params['periodic'] = False
4851

4952
# initialize controller parameters
5053
controller_params = dict()
51-
controller_params['logger_level'] = 20
54+
controller_params['logger_level'] = 30
5255
controller_params['predict'] = False
56+
# controller_params['hook_class'] = get_update
5357

5458
# Fill description dictionary for easy hierarchy creation
5559
description = dict()
56-
description['problem_class'] = heat1d_periodic
60+
description['problem_class'] = heat1d
5761
description['dtype_u'] = mesh
5862
description['dtype_f'] = mesh#rhs_imex_mesh
5963
description['sweeper_class'] = generic_implicit#imex_1st_order
@@ -69,8 +73,8 @@ def main():
6973
t0 = 0.0
7074
Tend = 1.0
7175

72-
dt_list = [Tend / 2 ** i for i in range(0, 6)]
73-
niter_list = [100]#[1, 2, 3, 4]
76+
dt_list = [Tend / 2 ** i for i in range(0, 8)]
77+
niter_list = [2]#[1, 2, 3, 4]
7478

7579
for niter in niter_list:
7680

@@ -104,7 +108,7 @@ def main():
104108
print(' error at time %s: %s' % (Tend, err_new))
105109
if err > 0:
106110
print(' order of accuracy: %6.4f' % (np.log(err / err_new) / np.log(2)))
107-
111+
# exit()
108112
err = err_new
109113

110114
# # filter statistics by type (number of iterations)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from pySDC.core.Hooks import hooks
2+
3+
4+
class get_update(hooks):
5+
6+
def pre_iteration(self, step, level_number):
7+
"""
8+
Hook called before each step
9+
10+
Args:
11+
step (pySDC.Step.step): the current step
12+
level_number (int): the current level number
13+
"""
14+
super(get_update, self).pre_iteration(step, level_number)
15+
16+
L = step.levels[level_number]
17+
L.sweep.compute_end_point()
18+
19+
L.uold = L.uend
20+
21+
def post_iteration(self, step, level_number):
22+
"""
23+
Hook called before each step
24+
25+
Args:
26+
step (pySDC.Step.step): the current step
27+
level_number (int): the current level number
28+
"""
29+
super(get_update, self).post_iteration(step, level_number)
30+
31+
L = step.levels[level_number]
32+
L.sweep.compute_end_point()
33+
34+
uex = L.prob.u_exact(L.time + L.dt)
35+
err_new = abs(uex - L.uend)
36+
37+
print(abs(L.uold - L.uend), err_new)

0 commit comments

Comments
 (0)