Skip to content

Commit 234b895

Browse files
author
Daniel Ruprecht
committed
update script to generate figure plotting sigma vs. coarse time step
1 parent 9035a30 commit 234b895

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

scripts/plot_svd_vs_dt.py

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,50 @@
2424
nslices = int(Tend) # Make sure each time slice has length 1
2525
U_speed = 1.0
2626
nu = 0.0
27-
ncoarse_v = range(1,11)
28-
nfine = 10
29-
niter_v = [5, 10, 15]
27+
ncoarse_v = [1, 2, 4, 5, 10, 15, 20]
28+
nfine = 20
3029
dx = 1.0
31-
Nsamples = 60
3230
u0_val = np.array([[1.0]], dtype='complex')
3331

34-
k_vec = np.linspace(0.0, np.pi, Nsamples+1, endpoint=False)
32+
Nk = 6
33+
k_vec = np.linspace(0, np.pi, Nk+1, endpoint=False)
3534
k_vec = k_vec[1:]
36-
waveno = k_vec[-1]
35+
k_vec = [k_vec[0], k_vec[1], k_vec[-1]]
3736

38-
svds = np.zeros((1,np.size(ncoarse_v)))
39-
dt_v = np.zeros((1,np.size(ncoarse_v)))
4037

41-
symb = -(1j*U_speed*waveno + nu*waveno**2)
42-
symb_coarse = symb
43-
# symb_coarse = -(1.0/dx)*(1.0 - np.exp(-1j*waveno*dx))
38+
svds = np.zeros((3,np.size(ncoarse_v)))
39+
dt_v = np.zeros((3,np.size(ncoarse_v)))
4440

45-
# Solution objects define the problem
46-
u0 = solution_linear(u0_val, np.array([[symb]],dtype='complex'))
47-
ucoarse = solution_linear(u0_val, np.array([[symb_coarse]],dtype='complex'))
41+
for k in range(3):
42+
if k==0:
43+
waveno = k_vec[0]
44+
elif k==1:
45+
waveno = k_vec[1]
46+
else:
47+
waveno = k_vec[2]
48+
symb = -(1j*U_speed*waveno + nu*waveno**2)
49+
symb_coarse = symb
50+
# symb_coarse = -(1.0/dx)*(1.0 - np.exp(-1j*waveno*dx))
4851

49-
for i in range(0,np.size(ncoarse_v)):
50-
para = parareal(0.0, Tend, nslices, intexact, impeuler, nfine, ncoarse_v[i], 0.0, niter_v[2], u0)
51-
dt_v[0,i] = Tend/float(ncoarse_v[i]*nslices)
52-
svds[0,i] = para.get_max_svd(ucoarse=ucoarse)
52+
# Solution objects define the problem
53+
u0 = solution_linear(u0_val, np.array([[symb]],dtype='complex'))
54+
ucoarse = solution_linear(u0_val, np.array([[symb_coarse]],dtype='complex'))
5355

54-
rcParams['figure.figsize'] = 7.5, 7.5
56+
for i in range(0,np.size(ncoarse_v)):
57+
para = parareal(0.0, Tend, nslices, intexact, impeuler, nfine, ncoarse_v[i], 0.0, 1, u0)
58+
dt_v[k,i] = Tend/float(ncoarse_v[i]*nslices)
59+
svds[k,i] = para.get_max_svd(ucoarse=ucoarse)
60+
61+
rcParams['figure.figsize'] = 2.5, 2.5
5562
fs = 8
5663
fig = plt.figure()
57-
plt.plot(dt_v[0,:], svds[0,:])
64+
plt.plot(dt_v[0,:], svds[0,:], 'b-o', label=(r"$\kappa$=%4.2f" % k_vec[0]), markersize=fs/2)
65+
plt.plot(dt_v[1,:], svds[1,:], 'r-s', label=(r"$\kappa$=%4.2f" % k_vec[1]), markersize=fs/2)
66+
plt.plot(dt_v[2,:], svds[2,:], 'g-x', label=(r"$\kappa$=%4.2f" % k_vec[2]), markersize=fs/2)
67+
plt.legend(loc='upper left', fontsize=fs, prop={'size':fs-2}, handlelength=3)
68+
plt.xlabel(r'Coarse time step $\Delta t$', fontsize=fs)
69+
plt.ylabel(r'Maximum singular value $\sigma$', fontsize=fs)
70+
filename = 'parareal-sigma-vs-dt.pdf'
71+
plt.gcf().savefig(filename, bbox_inches='tight')
72+
call(["pdfcrop", filename, filename])
5873
plt.show()

0 commit comments

Comments
 (0)