Beispiel #1
0
def find_bott_index(P,L):
    N_total = L * L * 2
    delta = (2 * np.pi) / L#

    Q = np.eye(N_total,N_total) - P

    # now we create the x and y operators
    xs = np.zeros(N_total)
    ys = np.zeros(N_total)
    for i in range(N_total):
        _, xs[i], ys[i] = func.number_to_index(i, L)

    # Make exponential operators
    X_exp = np.diag(np.exp(1j * xs * delta))
    Y_exp = np.diag(np.exp(1j * ys * delta))
    X_exp_star = np.diag(np.exp(-1j * xs * delta))
    Y_exp_star = np.diag(np.exp(-1j * ys * delta))

    # now we find the projected X and Y exponentials
    U = np.linalg.multi_dot([P, X_exp, P])
    V = np.linalg.multi_dot([P, Y_exp, P])
    U_star = np.linalg.multi_dot([P, X_exp_star, P])
    V_star = np.linalg.multi_dot([P, Y_exp_star, P])

    UVUV = np.linalg.multi_dot([U, V, U_star, V_star])

    next = scipy.linalg.logm(UVUV + Q)
    out = np.diag(next) * L * L
    bott_index = np.imag(out[::2] + out[1::2]) / (2 * np.pi)

    z_grid = bott_index.reshape([L, L])

    return z_grid
Beispiel #2
0
def find_chern_marker(P,L):
    N_total = L * L * 2
    Q = np.eye(N_total, N_total) - P

    # now we create the x and y operators
    xs = np.zeros(N_total)
    ys = np.zeros(N_total)
    for i in range(N_total):
        _, xs[i], ys[i] = func.number_to_index(i, L)
    X = np.diag(xs)
    Y = np.diag(ys)
    out = np.linalg.multi_dot([P, X, Q, Y, P])
    out2 = (np.imag(np.diagonal(out)) * 4 * np.pi)
    outsummed = out2[::2] + out2[1::2]
    outsummed_matrix = outsummed.reshape((L, L))
    return outsummed_matrix
Beispiel #3
0


L = 10
N = L*L*2
u_initial = 1.9
u_final = 2.2
time_final = 50
num_time_steps = 50
delta = (2 * np.pi) / L

#MAKE POSITION OPERATORS
xs = np.zeros(N)
ys = np.zeros(N)
for i in range(N):
    _, xs[i], ys[i] = func.number_to_index(i, L)

time_step = time_final/num_time_steps

# create hamiltonians!
H0 = createHam.create_full_hamiltonian_periodic_boundaries(L,u_initial)
H1 = createHam.create_full_hamiltonian_periodic_boundaries(L,u_final)

s = 4
x_position = 10*L / 2
y_position = 10*L / 2
hole_function = 1 - 2 * np.exp(-(1 / (s**2)) * ((xs - x_position) ** 2 + (ys - y_position) ** 2))


noise_factor = 0