1212import matplotlib .pyplot as plt
1313from matplotlib .patches import Polygon
1414from subprocess import call
15-
16- def get_stab_function (LHS , RHS , Kmax , lambd , do_coll_update ):
17- Pinv = np .linalg .inv (LHS )
18- Mat_sweep = np .linalg .matrix_power (Pinv .dot (RHS ), Kmax )
19- for l in range (0 ,Kmax ):
20- Mat_sweep = Mat_sweep + np .linalg .matrix_power (Pinv .dot (RHS ),k ).dot (Pinv )
21- if do_coll_update :
22- stab_fh = 1.0 + lambd * level .sweep .coll .weights .dot (Mat_sweep .dot (np .ones (nnodes )))
23- else :
24- q = np .zeros (nnodes )
25- q [nnodes - 1 ] = 1.0
26- stab_fh = q .dot (Mat_sweep .dot (np .ones (nnodes )))
27- return stab_fh
15+ from matplotlib .ticker import ScalarFormatter
2816
2917if __name__ == "__main__" :
30- mvals = [4 ]
31- kvals = np .arange (2 ,9 )
32- lambdaratio = [1 , 5 , 50 ]
33- stabval = np .zeros ((np .size (mvals ), np .size (lambdaratio ), np .size (kvals )))
18+ mvals = np .arange (2 ,10 )
19+ kvals = [3 , 5 , 7 ]
20+ lambda_fast = 10j
21+ lambda_slow = 3j
22+ stabval = np .zeros ((np .size (kvals ), np .size (mvals )))
3423
3524 for i in range (0 ,np .size (mvals )):
3625 pparams = {}
3726 # the following are not used in the computation
3827 pparams ['lambda_s' ] = np .array ([0.0 ])
3928 pparams ['lambda_f' ] = np .array ([0.0 ])
4029 pparams ['u0' ] = 1.0
30+
4131 swparams = {}
32+ # swparams['collocation_class'] = collclass.CollGaussLobatto
33+ # swparams['collocation_class'] = collclass.CollGaussLegendre
4234 swparams ['collocation_class' ] = collclass .CollGaussRadau_Right
4335 swparams ['num_nodes' ] = mvals [i ]
4436 do_coll_update = True
@@ -60,28 +52,34 @@ def get_stab_function(LHS, RHS, Kmax, lambd, do_coll_update):
6052 QE = level .sweep .QE [1 :,1 :]
6153 QI = level .sweep .QI [1 :,1 :]
6254 Q = level .sweep .coll .Qmat [1 :,1 :]
55+ LHS , RHS = level .sweep .get_scalar_problems_sweeper_mats ( lambdas = [ lambda_fast , lambda_slow ] )
6356
64- for j in range (0 ,np .size (lambdaratio )):
65- lambda_slow = 0.1 * 1j
66- lambda_fast = lambdaratio [j ]* lambda_slow
67-
68- LHS = np .eye (nnodes ) - step .status .dt * ( lambda_fast * QI + lambda_slow * QE )
69- RHS = step .status .dt * ( (lambda_fast + lambda_slow )* Q - (lambda_fast * QI + lambda_slow * QE ) )
70-
71- for k in range (0 , np .size (kvals )):
72- Kmax = kvals [k ]
73- stab_fh = get_stab_function (LHS , RHS , kvals [k ], lambda_fast + lambda_slow , do_coll_update )
74- 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 [k ,i ] = np .absolute (stab_fh )
7567
68+ rcParams ['figure.figsize' ] = 2.5 , 2.5
7669 fig = plt .figure ()
7770 fs = 8
78- plt .plot (kvals , stabval [0 ,0 ,:], 'o-' , color = 'b' , label = ("Ratio: %3.0f" % lambdaratio [0 ]))
79- plt .plot (kvals , stabval [0 ,1 ,:], 's-' , color = 'r' , label = ("Ratio: %3.0f" % lambdaratio [1 ]))
80- plt .plot (kvals , stabval [0 ,2 ,:], 'd-' , color = 'g' , label = ("Ratio: %3.0f" % lambdaratio [2 ]))
81- plt .plot (kvals , 1.0 + 0.0 * kvals , '--' , color = 'k' )
71+ plt .plot (mvals , stabval [0 ,:], 'o-' , color = 'b' , label = (r"K=%1i" % kvals [0 ]))
72+ plt .plot (mvals , stabval [1 ,:], 's-' , color = 'r' , label = (r"K=%1i" % kvals [1 ]))
73+ plt .plot (mvals , stabval [2 ,:], 'd-' , color = 'g' , label = (r"K=%1i" % kvals [2 ]))
74+ plt .plot (mvals , 1.0 + 0.0 * mvals , '--' , color = 'k' )
75+ plt .xlabel ('Number of nodes M' , fontsize = fs )
76+ plt .ylabel (r'Modulus of stability function $\left| R \right|$' , fontsize = fs )
77+ plt .ylim ([0.0 , 1.8 ])
8278 plt .legend (loc = 'lower right' , fontsize = fs , prop = {'size' :fs })
83-
84- #plt.plot(kvals, stabval[1,0,:], '-', color='r')
85- #plt.plot(kvals, stabval[1,1,:], '--', color='r')
86- #plt.plot(kvals, stabval[1,2,:], '-.', color='r')
79+ plt .gca ().get_xaxis ().get_major_formatter ().labelOnlyBase = False
80+ plt .gca ().get_xaxis ().set_major_formatter (ScalarFormatter ())
8781 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