Coverage for pySDC/projects/GPU/ac_fft.py: 100%
48 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-25 20:28 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-25 20:28 +0000
1from pySDC.implementations.problem_classes.AllenCahn_2D_FFT import allencahn2d_imex
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():
9 # initialize problem parameters
10 problem_params = dict()
11 problem_params['eps'] = 0.04
12 problem_params['radius'] = 0.25
13 problem_params['nvars'] = (512, 512)
15 # initialize level parameters
16 level_params = dict()
17 level_params['restol'] = 1e-07
18 level_params['dt'] = 1e-07
19 level_params['nsweeps'] = 1
21 # initialize sweeper parameters
22 sweeper_params = dict()
23 sweeper_params['collocation_class'] = Collocation
24 sweeper_params['node_type'] = 'LEGENDRE'
25 sweeper_params['quad_type'] = 'RADAU-RIGHT'
26 sweeper_params['QI'] = ['LU']
27 sweeper_params['QE'] = ['PIC']
28 sweeper_params['num_nodes'] = 3
29 sweeper_params['initial_guess'] = 'spread'
31 # initialize step parameters
32 step_params = dict()
33 step_params['maxiter'] = 50
35 # setup parameters "in time"
36 t0 = 0
37 schritte = 8
38 Tend = schritte * level_params['dt']
40 # initialize controller parameters
41 controller_params = dict()
42 controller_params['logger_level'] = 30
44 # fill description dictionary for easy step instantiation
45 description = dict()
46 description['problem_params'] = problem_params # pass problem parameters
47 description['sweeper_class'] = imex_1st_order # pass sweeper
48 description['sweeper_params'] = sweeper_params # pass sweeper parameters
49 description['level_params'] = level_params # pass level parameters
50 description['step_params'] = step_params # pass step parameters
52 return controller_params, description, t0, Tend
55def main():
56 controller_params, description, t0, Tend = set_parameter()
58 # fill description dictionary with CPU problem
59 description['problem_class'] = allencahn2d_imex
61 # instantiate controller cpu
62 controller = controller_nonMPI(num_procs=1, controller_params=controller_params, description=description)
64 # get initial values on finest level cpu
65 P = controller.MS[0].levels[0].prob
66 uinit = P.u_exact(t0)
68 # call main function to get things done on cpu...
69 uend_cpu, stats_cpu = controller.run(u0=uinit, t0=t0, Tend=Tend)
70 timing_cpu = sort_stats(filter_stats(stats_cpu, type='timing_run'), sortby='time')
71 print('Runtime CPU:', timing_cpu[0][1])
73 # same problem again, this time on the GPU
74 description['problem_params'] = dict(description['problem_params'], useGPU=True)
76 # instantiate controller cpu
77 controller = controller_nonMPI(num_procs=1, controller_params=controller_params, description=description)
79 # get initial values on finest level cpu
80 P = controller.MS[0].levels[0].prob
81 uinit = P.u_exact(t0)
83 # call main function to get things done on cpu...
84 uend_gpu, stats_gpu = controller.run(u0=uinit, t0=t0, Tend=Tend)
85 timing_gpu = sort_stats(filter_stats(stats_gpu, type='timing_run'), sortby='time')
86 print('Runtime GPU:', timing_gpu[0][1])
88 assert abs(uend_gpu.get() - uend_cpu) < 1e-13, abs(uend_gpu.get() - uend_cpu)
91if __name__ == '__main__':
92 main()