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
« 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
6Stability plots (on Dahlquist) for the article
7"""
9import os
10import numpy as np
12from pySDC.projects.parallelSDC_reloaded.utils import getParamsSDC, solutionSDC, plotStabContour, plt
13from pySDC.helpers.testing import DataChecker
15data = DataChecker(__file__)
17PATH = '/' + os.path.join(*__file__.split('/')[:-1])
18SCRIPT = __file__.split('/')[-1].split('.')[0]
20# Script parameters
21zoom = 2
22reLims = -4.5 * zoom, 0.5 * zoom
23imLims = -3.5 * zoom, 3.5 * zoom
24nVals = 251
26# Collocation parameters
27nNodes = 4
28nodeType = "LEGENDRE"
29quadType = "RADAU-RIGHT"
31# Configuration
32# (qDeltaType)
33config = [
34 "PIC",
35 "MIN-SR-NS",
36 "MIN-SR-S",
37 "MIN-SR-FLEX",
38 "LU",
39 "VDHS",
40]
43# -----------------------------------------------------------------------------
44# Script execution
45# -----------------------------------------------------------------------------
47# Problem instanciation
48reVals = np.linspace(*reLims, num=nVals)
49imVals = np.linspace(*imLims, num=nVals)
50lambdas = reVals[None, :] + 1j * imVals[:, None]
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
60 for nSweeps in [1, 2, 3, 4]:
61 params = getParamsSDC(quadType, nNodes, qDeltaType, nSweeps, nodeType)
63 uNum, counters, parallel = solutionSDC(1, 1, params, 'DAHLQUIST', lambdas=lambdas.ravel())
65 uEnd = uNum[-1, :].reshape(lambdas.shape)
66 stab = np.abs(uEnd)
68 figName = f"{qDeltaType}_K{nSweeps}"
69 plt.figure(figName)
71 plotStabContour(reVals, imVals, stab)
72 data.storeAndCheck(f"{SCRIPT}_{figName}", stab[::5, -50])
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")
81data.writeToJSON()