Example #1
0
    # 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))
Example #2
0
        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')
Example #3
0
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)
Example #5
0
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