def runTest(g_ratio, g_strength, lambda_SO, grid_size=2048, area_size=6, precision=1e-7, dt_dimensionless=1.0/50, random_init=True): so_constants = SOConstants2D(g_ratio=g_ratio, g_strength=g_strength, lambda_SO=lambda_SO) env = envs.cuda() constants = Constants(double=env.supportsDouble(), a11=so_constants.g_intra, a22=so_constants.g_intra, a12=so_constants.g_inter, lambda_R=so_constants.lambda_R, m=so_constants.m, fx=so_constants.f_perp, fy=so_constants.f_perp) box_size = (so_constants.a_perp * area_size, so_constants.a_perp * area_size) grid = UniformGrid(env, constants, (grid_size, grid_size), box_size) t_scale = 1.0 / (so_constants.f_perp * numpy.pi * 2) E_scale = constants.hbar * so_constants.f_perp * numpy.pi * 2 E_modifier = so_constants.lambda_SO ** 2 / 2 * E_scale print "time scale = ", t_scale gs = SOGroundStateEvo(env, constants, grid, dt=t_scale * dt_dimensionless, components=2) stats = gs._stats N = so_constants.N print "target N = ", N t1 = time.time() psi = gs.create(N, precision=precision, E_modifier=E_modifier, random_init=random_init) print "creation time = ", time.time() - t1 Ns = stats.getN(psi) print "final N = ", Ns E = stats.getSOEnergy(psi) E_shifted = (E.sum() + E_modifier) / E_scale print "final energy = ", E_shifted n = env.fromDevice(stats.getDensity(psi)) p, pt = getSymmetries(n) env.release() n *= so_constants.a_perp ** 2 plot_params = dict( xmin=-box_size[1] / 2 / so_constants.a_perp, xmax=box_size[1] / 2 / so_constants.a_perp, ymin=-box_size[0] / 2 / so_constants.a_perp, ymax=box_size[0] / 2 / so_constants.a_perp, xname="$x / a_{\\perp}$", yname="$y / a_{\\perp}$", zname="density", zmin=0, zmax=n.max(), title=( "$\\lambda_{{SO}} = {lambda_SO}$, $g_{{\\uparrow\\downarrow}} / g = {g_ratio}$, $g N = {g_strength}$\n" + "grid: ${gsize}\\times{gsize}$, $dt = {dt} / \\omega_{{\\perp}}$, $precision = {precision}$, " + ("random" if random_init else "uniform") + " initial conditions\n" + "$E / N + \\lambda_{{SO}}^2 / 2 = {E:.6f}$, $n_P = {n_P:.4f}$, $n_{{PT}} = {n_PT:.4f}$" ).format( lambda_SO=so_constants.lambda_SO, g_ratio=so_constants.g_ratio, g_strength=so_constants.g_strength, gsize=grid_size, dt=dt_dimensionless, precision=precision, E=E_shifted, n_P=p, n_PT=pt ) ) suffix = "{g_ratio}_{g_strength}_{lambda_SO}_{init}".format( g_ratio=so_constants.g_ratio, g_strength=so_constants.g_strength, lambda_SO=so_constants.lambda_SO, init=("random" if random_init else "uniform")) buildPlot(n[0, 0], n[1, 0], 'so_' + suffix + '.pdf', **plot_params)