Coverage for pySDC/projects/GPU/heat.py: 100%
5 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 12:30 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 12:30 +0000
1from pySDC.implementations.problem_classes.HeatEquation_ND_FD import heatNd_forced
2from pySDC.core.collocation import CollBase as Collocation
3from pySDC.implementations.sweeper_classes.imex_1st_order import imex_1st_order
4from pySDC.implementations.controller_classes.controller_nonMPI import controller_nonMPI
5from pySDC.helpers.stats_helper import filter_stats, sort_stats
8def set_parameter(): # pragma: no cover
9 # initialize problem parameters
10 problem_params = dict()
11 problem_params['nu'] = 1
12 problem_params['freq'] = (4, 4, 4)
13 problem_params['order'] = 2
14 problem_params['lintol'] = 1e-10
15 problem_params['liniter'] = 99
16 problem_params['solver_type'] = 'CG'
17 problem_params['nvars'] = (32, 32, 32)
18 problem_params['bc'] = 'periodic'
20 # initialize level parameters
21 level_params = dict()
22 level_params['restol'] = 1e-07
23 level_params['dt'] = 1e-07
24 level_params['nsweeps'] = 1
26 # initialize sweeper parameters
27 sweeper_params = dict()
28 sweeper_params['collocation_class'] = Collocation
29 sweeper_params['node_type'] = 'LEGENDRE'
30 sweeper_params['quad_type'] = 'RADAU-RIGHT'
31 sweeper_params['QI'] = ['LU']
32 sweeper_params['QE'] = ['PIC']
33 sweeper_params['num_nodes'] = 3
34 sweeper_params['initial_guess'] = 'spread'
36 # initialize step parameters
37 step_params = dict()
38 step_params['maxiter'] = 50
40 # setup parameters "in time"
41 t0 = 0
42 schritte = 8
43 Tend = schritte * level_params['dt']
45 # initialize controller parameters
46 controller_params = dict()
47 controller_params['logger_level'] = 30
49 # fill description dictionary for easy step instantiation cpu
50 description = dict()
51 description['problem_params'] = problem_params # pass problem parameters
52 description['sweeper_class'] = imex_1st_order # pass sweeper
53 description['sweeper_params'] = sweeper_params # pass sweeper parameters
54 description['level_params'] = level_params # pass level parameters
55 description['step_params'] = step_params # pass step parameters
57 return controller_params, description, t0, Tend
60def main(): # pragma: no cover
61 controller_params, description, t0, Tend = set_parameter()
63 # fill description dictionary with CPU problem
64 description['problem_class'] = heatNd_forced
66 # instantiate controller cpu
67 controller = controller_nonMPI(num_procs=1, controller_params=controller_params, description=description)
69 # get initial values on finest level cpu
70 P = controller.MS[0].levels[0].prob
71 uinit = P.u_exact(t0)
73 # call main function to get things done on cpu...
74 uend_cpu, stats_cpu = controller.run(u0=uinit, t0=t0, Tend=Tend)
75 timing_cpu = sort_stats(filter_stats(stats_cpu, type='timing_run'), sortby='time')
76 print('Runtime CPU:', timing_cpu[0][1])
78 # change description dictionary for GPU problem
79 description['problem_class'] = heatNd_forced
80 description['problem_params'] = dict(description['problem_params'], useGPU=True)
82 # instantiate controller gpu
83 controller = controller_nonMPI(num_procs=1, controller_params=controller_params, description=description)
85 # get initial values on finest level gpu
86 P = controller.MS[0].levels[0].prob
87 uinit = P.u_exact(t0)
89 # call main function to get things done on gpu...
90 uend_gpu, stats_gpu = controller.run(u0=uinit, t0=t0, Tend=Tend)
91 timing_gpu = sort_stats(filter_stats(stats_gpu, type='timing_run'), sortby='time')
92 print('Runtime GPU:', timing_gpu[0][1])
94 assert abs(uend_gpu.get() - uend_cpu) < 1e-13, abs(uend_gpu.get() - uend_cpu)
97if __name__ == '__main__':
98 main()