Coverage for pySDC / projects / parallelSDC_reloaded / scripts / fig02_stab.py: 100%

40 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-27 07:06 +0000

1#!/usr/bin/env python3 

2# -*- coding: utf-8 -*- 

3""" 

4Created on Wed Jan 10 12:02:55 2024 

5 

6Stability plots (on Dahlquist) for the article 

7""" 

8 

9import os 

10import numpy as np 

11 

12from pySDC.projects.parallelSDC_reloaded.utils import getParamsSDC, solutionSDC, plotStabContour, plt 

13from pySDC.helpers.testing import DataChecker 

14 

15data = DataChecker(__file__) 

16 

17PATH = '/' + os.path.join(*__file__.split('/')[:-1]) 

18SCRIPT = __file__.split('/')[-1].split('.')[0] 

19 

20# Script parameters 

21zoom = 2 

22reLims = -4.5 * zoom, 0.5 * zoom 

23imLims = -3.5 * zoom, 3.5 * zoom 

24nVals = 251 

25 

26# Collocation parameters 

27nNodes = 4 

28nodeType = "LEGENDRE" 

29quadType = "RADAU-RIGHT" 

30 

31# Configuration 

32# (qDeltaType) 

33config = [ 

34 "PIC", 

35 "MIN-SR-NS", 

36 "MIN-SR-S", 

37 "MIN-SR-FLEX", 

38 "LU", 

39 "VDHS", 

40] 

41 

42 

43# ----------------------------------------------------------------------------- 

44# Script execution 

45# ----------------------------------------------------------------------------- 

46 

47# Problem instanciation 

48reVals = np.linspace(*reLims, num=nVals) 

49imVals = np.linspace(*imLims, num=nVals) 

50lambdas = reVals[None, :] + 1j * imVals[:, None] 

51 

52# Scheme instanciation 

53for qDeltaType in config: 

54 if qDeltaType == "MIN-SR-S": 

55 fac = 5 

56 reVals *= fac 

57 imVals *= fac 

58 lambdas *= fac 

59 

60 for nSweeps in [1, 2, 3, 4]: 

61 params = getParamsSDC(quadType, nNodes, qDeltaType, nSweeps, nodeType) 

62 

63 uNum, counters, parallel = solutionSDC(1, 1, params, 'DAHLQUIST', lambdas=lambdas.ravel()) 

64 

65 uEnd = uNum[-1, :].reshape(lambdas.shape) 

66 stab = np.abs(uEnd) 

67 

68 figName = f"{qDeltaType}_K{nSweeps}" 

69 plt.figure(figName) 

70 

71 plotStabContour(reVals, imVals, stab) 

72 data.storeAndCheck(f"{SCRIPT}_{figName}", stab[::5, -50]) 

73 

74 plt.xticks(fontsize=8) 

75 plt.yticks(fontsize=8) 

76 plt.title(f"$K={nSweeps}$", fontsize=10) 

77 plt.gcf().set_size_inches(2.5, 2.5) 

78 plt.tight_layout() 

79 plt.savefig(f"{PATH}/{SCRIPT}_{figName}.pdf") 

80 

81data.writeToJSON()