Skip to content

Commit 2598c9f

Browse files
author
Daniel Ruprecht
committed
adds script to plot sigma versus number of time slices
1 parent dbdb56d commit 2598c9f

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

scripts/sigma_vs_timeslices.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import sys
2+
sys.path.append('../src')
3+
4+
from parareal import parareal
5+
from impeuler import impeuler
6+
from intexact import intexact
7+
from trapezoidal import trapezoidal
8+
from special_integrator import special_integrator
9+
from solution_linear import solution_linear
10+
import numpy as np
11+
import scipy.sparse as sparse
12+
import math
13+
14+
from pylab import rcParams
15+
import matplotlib.pyplot as plt
16+
from matplotlib.patches import Polygon
17+
from subprocess import call
18+
import sympy
19+
from pylab import rcParams
20+
21+
if __name__ == "__main__":
22+
23+
nslices_v = [2, 4, 8, 16, 32, 64]
24+
25+
U_speed = 1.0
26+
nu = 0.0
27+
ncoarse = 2
28+
nfine = 10
29+
niter_v = [5, 10, 15]
30+
dx = 1.0
31+
Nsamples = 60
32+
u0_val = np.array([[1.0]], dtype='complex')
33+
34+
k_vec = np.linspace(0.0, np.pi, Nsamples+1, endpoint=False)
35+
k_vec = k_vec[1:]
36+
waveno = k_vec[-1]
37+
38+
svds = np.zeros((1, np.size(nslices_v)))
39+
40+
symb = -(1j*U_speed*waveno + nu*waveno**2)
41+
symb_coarse = symb
42+
# symb_coarse = -(1.0/dx)*(1.0 - np.exp(-1j*waveno*dx))
43+
44+
# Solution objects define the problem
45+
u0 = solution_linear(u0_val, np.array([[symb]],dtype='complex'))
46+
ucoarse = solution_linear(u0_val, np.array([[symb_coarse]],dtype='complex'))
47+
48+
for i in range(0,np.size(nslices_v)):
49+
para = parareal(0.0, float(nslices_v[i]), nslices_v[i], intexact, impeuler, nfine, ncoarse, 0.0, niter_v[0], u0)
50+
svds[0,i] = para.get_max_svd(ucoarse=ucoarse)
51+
52+
rcParams['figure.figsize'] = 7.5, 7.5
53+
fs = 8
54+
fig = plt.figure()
55+
plt.plot(nslices_v, svds[0,:], 'b--')
56+
plt.show()

src/parareal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def get_parareal_stab_function(self, k, ucoarse=None):
9999
# Returns the largest singular value of the error propagation matrix
100100
def get_max_svd(self, ucoarse=None):
101101
Pmat, Bmat = self.get_parareal_matrix(ucoarse)
102-
svds = linalg.svds(Pmat, k=1, return_singular_vectors=False)
102+
svds = linalg.svds(Pmat, k=1, tol=1e-6, return_singular_vectors=False)
103103
return svds[0]
104104

105105
# Returns array containing all intermediate solutions

0 commit comments

Comments
 (0)