# generating the grid is the longest part start = time.time() mins = np.array((10, 0.25)) maxs = np.array((50, 0.75)) nums = np.array((10, 10)) try: cf.load_grid('TASBL_Re0_growth_rates.h5') except: cf.grid_generator(mins, maxs, nums) if comm.rank == 0: cf.save_grid('TASBL_Re0_growth_rates') end = time.time() if comm.rank == 0: print("grid generation time: {:10.5f} sec".format(end - start)) cf.root_finder() crit = cf.crit_finder(find_freq=True) if comm.rank == 0: print("crit = {}".format(crit)) print("critical wavenumber alpha = {:10.5f}".format(crit[1])) print("critical Re = {:10.5f}".format(crit[0])) print("critical omega = {:10.5f}".format(crit[2])) cf.save_grid('orr_sommerfeld_growth_rates') cf.plot_crit() else: gr, idx, freq = EP.growth_rate({}) print("TASBL growth rate = {0:10.5e}".format(gr))
return val[0] else: return val cf = CriticalFinder(shim, comm) # generating the grid is the longest part start = time.time() gridl = 10 mins = np.array((0.5, 0.001)) maxs = np.array((2.0, 0.1)) num = np.array((gridl, gridl)) logs = np.array((False, True)) cf.grid_generator(mins, maxs, num, logs) # Rm = (0.5, 2.0); k = (0.001, 0.1) is not a bracketing interval for Pm = 1E-4. neither is (0.5, 2.0, 0.0001, 0.001) end = time.time() if comm.rank == 0: print("grid generation time: {:10.5f} sec".format(end-start)) print(cf.grid) print(cf.grid.shape) cf.root_finder() crit = cf.crit_finder() if comm.rank == 0: print("critical wavenumber k = {:10.5f}".format(crit[0])) print("critical Rm = {:10.5f}".format(crit[1])) cf.plot_crit(title = "growth_rates_Pm"+str(Pm), xlabel = r"$k_z$", ylabel = r"$\mathrm{Rm}$") cf.save_grid('widegap_growth_rates')
start = time.time() if no_slip: mins = np.array((1000, 2)) maxs = np.array((3000, 4)) elif stress_free: #657.5, 2.221 mins = np.array((400, 1.6)) maxs = np.array((1000, 3)) nums = np.array((20, 20)) try: cf.load_grid('{}.h5'.format(file_name)) except: cf.grid_generator(mins, maxs, nums) if comm.rank == 0: cf.save_grid(file_name) end = time.time() if comm.rank == 0: print("grid generation time: {:10.5f} sec".format(end - start)) cf.root_finder() crit = cf.crit_finder(find_freq=True) if comm.rank == 0: print("crit = {}".format(crit)) print("critical wavenumber k = {:10.5f}".format(crit[1])) print("critical Ra = {:10.5f}".format(crit[0])) print("critical freq = {:10.5f}".format(crit[2])) cf.plot_crit(title=file_name, transpose=True, xlabel='kx', ylabel='Ra')
nx = 10 ny = 10 xpoints = np.linspace(2, 2.4, ny) ypoints = np.linspace(550, 700, nx) try: cf.load_grid('{}.h5'.format(file_name)) except: cf.grid_generator((xpoints, ypoints), sparse=True) cf.save_grid(file_name) end = time.time() if comm.rank == 0: logger.info("grid generation time: {:10.5f} sec".format(end - start)) logger.info("Beginning critical finding with root polishing...") begin = time.time() crit = cf.crit_finder(polish_roots=True, tol=1e-5) end = time.time() logger.info("critical finding/root polishing time: {:10.5f} sec".format(end - start)) if comm.rank == 0: print("crit = {}".format(crit)) print("critical wavenumber k = {:10.5f}".format(crit[0])) print("critical Ra = {:10.5f}".format(crit[1])) print("critical freq = {:10.5f}".format(crit[2])) pax, cax = cf.plot_crit(xlabel=r'$k_x$', ylabel=r'$\mathrm{Ra}$') pax.figure.savefig("rayleigh_benard_2d_growth_rates.png", dpi=300)
except: start = time.time() cf.grid_generator((xpoints, ypoints), sparse=True) end = time.time() if comm.rank == 0: cf.save_grid(file_name) logger.info("grid generation time: {:10.5f} sec".format(end - start)) crit = cf.crit_finder(polish_roots=False) if comm.rank == 0: logger.info("critical Rm = {:10.5f}, Q = {:10.5f}".format( crit[1], crit[0])) # create plot of critical parameter space pax, cax = cf.plot_crit() fig = pax.figure # add an interpolated critical line x_lim = cf.parameter_grids[0][0, np.isfinite(cf.roots)] x_hires = np.linspace(x_lim[0], x_lim[-1], 100) pax.plot(x_hires, cf.root_fn(x_hires), color='k') fig.savefig('{}.png'.format(file_name), dpi=300) # plot the spectrum for the critical mode logger.info("solving dense eigenvalue problem for critical parameters") EP.solve(parameters={"Q": crit[0], "Rm": crit[1]}, sparse=False) ax = EP.plot_spectrum() # mark critical mode eps = 1e-2 mask = np.abs(EP.evalues.real) < eps