Skip to content

Commit 3274833

Browse files
committed
finalizing scripts to generate paper figures
1 parent 7defd17 commit 3274833

File tree

2 files changed

+51
-35
lines changed

2 files changed

+51
-35
lines changed

scripts/pseudo-spectrum/figure_5_6.py renamed to scripts/pseudo-spectrum/figure_1-4.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,44 @@
1515
try:
1616
figure = int(sys.argv[1]) # 5 generates figure_5, 6 generates figure_6
1717
except:
18-
print("No or wrong command line argument provided, creating figure 5. Use 5 or 6 as command line argument.")
19-
figure = 5
18+
print("No or wrong command line argument provided, creating figure 1. Use 1, 2, 3 or 4 as command line argument.")
19+
figure = 1
2020

2121

22-
if figure==5:
22+
if figure==1:
2323
A = get_upwind(nx, h)
24-
filename='figure_5.pdf'
25-
elif figure==6:
24+
filename='figure_1.pdf'
25+
elif figure==2:
2626
A = get_centered(nx, h)
27-
filename='figure_6.pdf'
27+
filename='figure_2.pdf'
28+
elif figure==3:
29+
A = get_upwind(nx, h)
30+
filename='figure_3.pdf'
31+
elif figure==4:
32+
A = get_centered(nx, h)
33+
filename='figure_4.pdf'
2834
else:
29-
sys.exit("Figure needs to be 5 or 6")
35+
sys.exit("Figure needs to be 1, 2, 3 or 4")
3036

31-
eigs, dummy = LA.eig(A.todense())
37+
eigs_space, dummy = LA.eig(A.todense())
3238
svds = LA.svdvals(A.todense())
3339

34-
A_exp = LA.expm(A*dt)
35-
eigs_exp, dummy = LA.eig(A_exp.todense())
40+
if figure==1 or figure==2:
41+
A_exp = LA.expm(A*dt)
42+
eigs_time, dummy = LA.eig(A_exp.todense())
43+
mylabel = '$\exp(\Delta t A)$'
44+
else:
45+
A_ie = LA.inv(np.eye(nx) - dt*A)
46+
eigs_time, dummy = LA.eig(A_ie)
47+
mylabel = '$(I - \Delta t A)^{-1}$'
3648

3749
rcParams['figure.figsize'] = 2.5, 2.5
3850
fs = 8
3951
ms = 4
4052
fig = plt.figure(1)
41-
plt.plot(0*eigs.real, np.linspace(-2.1,2.1,nx), 'k', linewidth=2)
42-
plt.plot(eigs.real, eigs.imag, 'bo', markersize=ms, markerfacecolor='b', label='$\lambda(A)$')
43-
plt.plot(eigs_exp.real, eigs_exp.imag, 'rs', markersize=ms, markerfacecolor='r', label='$\exp(\lambda(A))$')
53+
plt.plot(0*eigs_space.real, np.linspace(-2.1,2.1,nx), 'k', linewidth=2)
54+
plt.plot(eigs_space.real, eigs_space.imag, 'bo', markersize=ms, markerfacecolor='b', label='$A$')
55+
plt.plot(eigs_time.real, eigs_time.imag, 'rs', markersize=ms, markerfacecolor='r', label=mylabel)
4456
circle = plt.Circle((0.0,0.0), 1.0, color='k', fill=False)
4557
fig.gca().add_patch(circle)
4658
plt.xlim([-2.1, 2.1])

scripts/pseudo-spectrum/plot_norm_vs_dt.py renamed to scripts/pseudo-spectrum/figure_5-8.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@
2626
try:
2727
figure = int(sys.argv[1]) # 1 generates figure_1, 2 generates figure_2
2828
except:
29-
print("No or wrong command line argument provided, creating figure 11. Use 11, 12, 13 or 14 as command line argument.")
30-
figure = 11
31-
assert 11<= figure <= 14, "Figure should be 11, 12, 13 or 14"
29+
print("No or wrong command line argument provided, creating figure 5. Use 5, 6, 7 or 8 as command line argument.")
30+
figure = 5
31+
assert 5<= figure <= 8, "Figure should be 5, 6, 7 or 8"
3232

33-
if figure==11 or figure==12:
33+
if figure==5 or figure==6:
3434
par = parameter(dedalus = False)
35-
elif figure==13 or figure==14:
35+
elif figure==7 or figure==8:
3636
par = parameter(dedalus = True)
3737
else:
38-
sys.exit("Figure should be 11, 12, 13 or 14")
38+
sys.exit("This should have been caught above")
3939

4040
Tend, nslices, maxiter, nfine, ncoarse, tol, epsilon, ndof_f = par.getpar()
4141

@@ -44,16 +44,16 @@
4444
xaxis_f = np.linspace(0.0, 1.0, ndof_f+1)[0:ndof_f]
4545
dx_f = xaxis_f[1] - xaxis_f[0]
4646

47-
if figure==11:
47+
if figure==5:
4848
A_f = get_upwind(ndof_f, dx_f)
4949
u0fine = solution_linear(np.zeros(ndof_f), A_f)
50-
elif figure==12:
50+
elif figure==6 or figure==7:
5151
A_f = get_centered(ndof_f, dx_f)
5252
u0fine = solution_linear(np.zeros(ndof_f), A_f)
53-
elif figure==13:
53+
elif figure==8:
5454
u0fine = solution_dedalus(np.zeros(ndof_f), ndof_f)
5555
else:
56-
sys.exit("Figure can only have values 11, 12 or 13")
56+
sys.exit("This should have been caught above")
5757

5858
norm_l2 = np.zeros((3,np.size(nsteps)))
5959
norm_inf = np.zeros((3,np.size(nsteps)))
@@ -66,30 +66,34 @@
6666
xaxis_c = np.linspace(0.0, 1.0, ndof_c+1)[0:ndof_c]
6767
dx_c = xaxis_c[1] - xaxis_c[0]
6868

69-
if figure==11:
69+
if figure==5:
7070
A_c = get_upwind(ndof_c, dx_c)
7171
u0coarse = solution_linear(np.zeros(ndof_c), A_c)
72-
filename = 'figure_11.pdf'
73-
elif figure==12:
72+
filename = 'figure_5.pdf'
73+
elif figure==6:
7474
A_c = get_centered(ndof_c, dx_c)
7575
u0coarse = solution_linear(np.zeros(ndof_c), A_c)
76-
filename = 'figure_12.pdf'
77-
elif figure==13:
76+
filename = 'figure_6.pdf'
77+
elif figure==7:
78+
A_c = get_centered(ndof_c, dx_c)
79+
u0coarse = solution_linear(np.zeros(ndof_c), A_c)
80+
filename = 'figure_7.pdf'
81+
elif figure==8:
7882
u0coarse = solution_dedalus(np.zeros(ndof_c), ndof_c)
79-
filename = 'figure_13.pdf'
83+
filename = 'figure_8.pdf'
8084
else:
81-
sys.exit("Problem can only have values 1, 2 or 3")
85+
sys.exit("Value of figure should be")
8286

8387
for mm in range(np.size(nsteps)):
8488

85-
if figure==11:
89+
if figure==5 or figure==7:
8690
para = parareal(0.0, Tend, nslices, impeuler, impeuler, nsteps[mm], nsteps[mm], tol, maxiter, u0fine, u0coarse)
87-
elif figure==12:
88-
para = parareal(0.0, Tend, nslices, trapezoidal, trapezoidal, nsteps[mm], nsteps[mm], tol, maxiter, u0fine, u0coarse)
89-
elif figure==13:
91+
elif figure==6:
92+
para = parareal(0.0, Tend, nslices, trapezoidal, trapezoidal, nsteps[mm], nsteps[mm], tol, maxiter, u0fine, u0coarse)
93+
elif figure==8:
9094
para = parareal(0.0, Tend, nslices, integrator_dedalus, integrator_dedalus, nsteps[mm], nsteps[mm], tol, maxiter, u0fine, u0coarse)
9195
else:
92-
quit()
96+
sys.exit("Value of figure should be")
9397
Pmat, Bmat = para.get_parareal_matrix()
9498
dt_f_v[0,mm] = para.timemesh.slices[0].int_fine.dt
9599
dt_c_v[0,mm] = para.timemesh.slices[0].int_coarse.dt

0 commit comments

Comments
 (0)