Example #1
0
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)