Skip to content

Commit b58a8f3

Browse files
author
Daniel Ruprecht
committed
script now plots stability function versus k for different values of M for lambda_fast, lambda_slow fixed
1 parent 0a66f50 commit b58a8f3

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

examples/fwsw/plot_stab_vs_k.py

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
from matplotlib.ticker import ScalarFormatter
1616

1717
if __name__ == "__main__":
18-
mvals = [3]
18+
mvals = [2, 3, 4]
1919
kvals = np.arange(2,10)
20-
lambdaratio = [1, 5, 10]
21-
stabval = np.zeros((np.size(mvals), np.size(lambdaratio), np.size(kvals)))
20+
lambda_fast = 15j
21+
lambda_slow = 3j
22+
stabval = np.zeros((np.size(mvals), np.size(kvals)))
2223

2324
for i in range(0,np.size(mvals)):
2425
pparams = {}
@@ -51,40 +52,34 @@
5152
QI = level.sweep.QI[1:,1:]
5253
Q = level.sweep.coll.Qmat[1:,1:]
5354

54-
for j in range(0,np.size(lambdaratio)):
55-
lambda_slow = 1j
56-
lambda_fast = lambdaratio[j]*lambda_slow
55+
LHS, RHS = level.sweep.get_scalar_problems_sweeper_mats( lambdas = [ lambda_fast, lambda_slow ] )
5756

58-
LHS, RHS = level.sweep.get_scalar_problems_sweeper_mats( lambdas = [ lambda_fast, lambda_slow ] )
59-
60-
for k in range(0, np.size(kvals)):
61-
Kmax = kvals[k]
62-
Mat_sweep = level.sweep.get_scalar_problems_manysweep_mat( nsweeps = Kmax, lambdas = [ lambda_fast, lambda_slow ] )
63-
if do_coll_update:
64-
stab_fh = 1.0 + (lambda_fast + lambda_slow)*level.sweep.coll.weights.dot(Mat_sweep.dot(np.ones(nnodes)))
65-
else:
66-
q = np.zeros(nnodes)
67-
q[nnodes-1] = 1.0
68-
stab_fh = q.dot(Mat_sweep.dot(np.ones(nnodes)))
69-
stabval[i,j,k] = np.absolute(stab_fh)
57+
for k in range(0, np.size(kvals)):
58+
Kmax = kvals[k]
59+
Mat_sweep = level.sweep.get_scalar_problems_manysweep_mat( nsweeps = Kmax, lambdas = [ lambda_fast, lambda_slow ] )
60+
if do_coll_update:
61+
stab_fh = 1.0 + (lambda_fast + lambda_slow)*level.sweep.coll.weights.dot(Mat_sweep.dot(np.ones(nnodes)))
62+
else:
63+
q = np.zeros(nnodes)
64+
q[nnodes-1] = 1.0
65+
stab_fh = q.dot(Mat_sweep.dot(np.ones(nnodes)))
66+
stabval[i,k] = np.absolute(stab_fh)
7067

7168
rcParams['figure.figsize'] = 2.5, 2.5
7269
fig = plt.figure()
7370
fs = 8
74-
plt.plot(kvals, stabval[0,0,:], 'o-', color='b', label=("$\lambda_{fast}/\lambda_{slow}$=%3.0f" % lambdaratio[0]))
75-
plt.plot(kvals, stabval[0,1,:], 's-', color='r', label=("$\lambda_{fast}/\lambda_{slow}$=%3.0f" % lambdaratio[1]))
76-
plt.plot(kvals, stabval[0,2,:], 'd-', color='g', label=("$\lambda_{fast}/\lambda_{slow}$=%3.0f" % lambdaratio[2]))
71+
plt.plot(kvals, stabval[0,:], 'o-', color='b', label=("M=%2i" % mvals[0]))
72+
plt.plot(kvals, stabval[1,:], 's-', color='r', label=("M=%2i" % mvals[1]))
73+
plt.plot(kvals, stabval[2,:], 'd-', color='g', label=("M=%2i" % mvals[2]))
7774
plt.plot(kvals, 1.0+0.0*kvals, '--', color='k')
7875
plt.xlabel('Number of iterations K', fontsize=fs)
7976
plt.ylabel(r'Modulus of stability function $\left| R \right|$', fontsize=fs)
8077
plt.ylim([0.0, 1.2])
8178
plt.legend(loc='lower left', fontsize=fs, prop={'size':fs})
8279
plt.gca().get_xaxis().get_major_formatter().labelOnlyBase = False
8380
plt.gca().get_xaxis().set_major_formatter(ScalarFormatter())
84-
plt.title(("M = %1i" % mvals[0]), fontsize=fs)
85-
#plt.plot(kvals, stabval[1,0,:], '-', color='r')
86-
#plt.plot(kvals, stabval[1,1,:], '--', color='r')
87-
#plt.plot(kvals, stabval[1,2,:], '-.', color='r')
88-
filename = 'stablimit-M'+str(mvals[0])+'.pdf'
89-
fig.savefig(filename, bbox_inches='tight')
90-
call(["pdfcrop", filename, filename])
81+
plt.show()
82+
83+
# filename = 'stablimit-M'+str(mvals[0])+'.pdf'
84+
# fig.savefig(filename, bbox_inches='tight')
85+
# call(["pdfcrop", filename, filename])

0 commit comments

Comments
 (0)