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
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
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