Coverage for pySDC/tutorial/step_5/A_multistep_multilevel_hierarchy.py: 100%

32 statements  

« prev     ^ index     » next       coverage.py v7.6.9, created at 2024-12-20 14:51 +0000

1from pathlib import Path 

2 

3 

4from pySDC.implementations.controller_classes.controller_nonMPI import controller_nonMPI 

5from pySDC.implementations.problem_classes.HeatEquation_ND_FD import heatNd_forced 

6from pySDC.implementations.sweeper_classes.imex_1st_order import imex_1st_order 

7from pySDC.implementations.transfer_classes.TransferMesh import mesh_to_mesh 

8 

9 

10def main(): 

11 """ 

12 A simple test program to setup a full multi-step multi-level hierarchy 

13 """ 

14 

15 # initialize level parameters 

16 level_params = {} 

17 level_params['restol'] = 1e-10 

18 level_params['dt'] = 0.5 

19 

20 # initialize sweeper parameters 

21 sweeper_params = {} 

22 sweeper_params['quad_type'] = 'RADAU-RIGHT' 

23 sweeper_params['num_nodes'] = [3] 

24 

25 # initialize problem parameters 

26 problem_params = {} 

27 problem_params['nu'] = 0.1 # diffusion coefficient 

28 problem_params['freq'] = 4 # frequency for the test value 

29 problem_params['nvars'] = [31, 15, 7] # number of degrees of freedom for each level 

30 problem_params['bc'] = 'dirichlet-zero' # boundary conditions 

31 

32 # initialize step parameters 

33 step_params = {} 

34 step_params['maxiter'] = 20 

35 

36 # initialize space transfer parameters 

37 space_transfer_params = {} 

38 space_transfer_params['rorder'] = 2 

39 space_transfer_params['iorder'] = 6 

40 

41 # fill description dictionary for easy step instantiation 

42 description = {} 

43 description['problem_class'] = heatNd_forced # pass problem class 

44 description['problem_params'] = problem_params # pass problem parameters 

45 description['sweeper_class'] = imex_1st_order # pass sweeper (see part B) 

46 description['sweeper_params'] = sweeper_params # pass sweeper parameters 

47 description['level_params'] = level_params # pass level parameters 

48 description['step_params'] = step_params # pass step parameters 

49 description['space_transfer_class'] = mesh_to_mesh # pass spatial transfer class 

50 description['space_transfer_params'] = space_transfer_params # pass parameters for spatial transfer 

51 

52 # instantiate controller 

53 controller = controller_nonMPI(num_procs=10, controller_params={}, description=description) 

54 

55 # check number of levels 

56 Path("data").mkdir(parents=True, exist_ok=True) 

57 f = open('data/step_5_A_out.txt', 'w') 

58 for i in range(len(controller.MS)): 

59 out = "Process %2i has %2i levels" % (i, len(controller.MS[i].levels)) 

60 f.write(out + '\n') 

61 print(out) 

62 f.close() 

63 

64 assert all(len(S.levels) == 3 for S in controller.MS), "ERROR: not all steps have the same number of levels" 

65 

66 

67if __name__ == "__main__": 

68 main()