39
This commit is contained in:
		| @@ -98,6 +98,7 @@ guan.print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_pri | |||||||
|  |  | ||||||
| # calculate topological invariant     # Source code: https://py.guanjihuan.com/source-code/calculate_topological_invariant | # calculate topological invariant     # Source code: https://py.guanjihuan.com/source-code/calculate_topological_invariant | ||||||
| chern_number = guan.calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100) | chern_number = guan.calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100) | ||||||
|  | chern_number = guan.calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300) | ||||||
| wilson_loop_array = guan.calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100) | wilson_loop_array = guan.calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100) | ||||||
|  |  | ||||||
| # read and write    # Source code: https://py.guanjihuan.com/read_and_write | # read and write    # Source code: https://py.guanjihuan.com/read_and_write | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| [metadata] | [metadata] | ||||||
| # replace with your username: | # replace with your username: | ||||||
| name = guan | name = guan | ||||||
| version = 0.0.37 | version = 0.0.39 | ||||||
| author = guanjihuan | author = guanjihuan | ||||||
| author_email = guanjihuan@163.com | author_email = guanjihuan@163.com | ||||||
| description = An open source python package | description = An open source python package | ||||||
|   | |||||||
| @@ -38,6 +38,42 @@ def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=10 | |||||||
|     chern_number = chern_number/(2*pi*1j) |     chern_number = chern_number/(2*pi*1j) | ||||||
|     return chern_number |     return chern_number | ||||||
|  |  | ||||||
|  | def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300): | ||||||
|  |     if np.array(hamiltonian_function(0, 0)).shape==(): | ||||||
|  |         dim = 1 | ||||||
|  |     else: | ||||||
|  |         dim = np.array(hamiltonian_function(0, 0)).shape[0]    | ||||||
|  |     chern_number = np.zeros(dim, dtype=complex) | ||||||
|  |     L1 = 4*sqrt(3)*pi/9/a | ||||||
|  |     L2 = 2*sqrt(3)*pi/9/a | ||||||
|  |     L3 = 2*pi/3/a | ||||||
|  |     delta1 = 2*L1/precision | ||||||
|  |     delta3 = 2*L3/precision | ||||||
|  |     for kx in np.arange(-L1, L1, delta1): | ||||||
|  |         for ky in np.arange(-L3, L3, delta3): | ||||||
|  |             if (-L2<=kx<=L2) or (kx>L2 and -(L1-kx)*tan(pi/3)<=ky<=(L1-kx)*tan(pi/3)) or (kx<-L2 and  -(kx-(-L1))*tan(pi/3)<=ky<=(kx-(-L1))*tan(pi/3)): | ||||||
|  |                 H = hamiltonian_function(kx, ky) | ||||||
|  |                 vector = guan.calculate_eigenvector(H) | ||||||
|  |                 H_delta_kx = hamiltonian_function(kx+delta1, ky)  | ||||||
|  |                 vector_delta_kx = guan.calculate_eigenvector(H_delta_kx) | ||||||
|  |                 H_delta_ky = hamiltonian_function(kx, ky+delta3) | ||||||
|  |                 vector_delta_ky = guan.calculate_eigenvector(H_delta_ky) | ||||||
|  |                 H_delta_kx_ky = hamiltonian_function(kx+delta1, ky+delta3) | ||||||
|  |                 vector_delta_kx_ky = guan.calculate_eigenvector(H_delta_kx_ky) | ||||||
|  |                 for i in range(dim): | ||||||
|  |                     vector_i = vector[:, i] | ||||||
|  |                     vector_delta_kx_i = vector_delta_kx[:, i] | ||||||
|  |                     vector_delta_ky_i = vector_delta_ky[:, i] | ||||||
|  |                     vector_delta_kx_ky_i = vector_delta_kx_ky[:, i] | ||||||
|  |                     Ux = np.dot(np.conj(vector_i), vector_delta_kx_i)/abs(np.dot(np.conj(vector_i), vector_delta_kx_i)) | ||||||
|  |                     Uy = np.dot(np.conj(vector_i), vector_delta_ky_i)/abs(np.dot(np.conj(vector_i), vector_delta_ky_i)) | ||||||
|  |                     Ux_y = np.dot(np.conj(vector_delta_ky_i), vector_delta_kx_ky_i)/abs(np.dot(np.conj(vector_delta_ky_i), vector_delta_kx_ky_i)) | ||||||
|  |                     Uy_x = np.dot(np.conj(vector_delta_kx_i), vector_delta_kx_ky_i)/abs(np.dot(np.conj(vector_delta_kx_i), vector_delta_kx_ky_i)) | ||||||
|  |                     F = cmath.log(Ux*Uy_x*(1/Ux_y)*(1/Uy)) | ||||||
|  |                     chern_number[i] = chern_number[i] + F | ||||||
|  |     chern_number = chern_number/(2*pi*1j) | ||||||
|  |     return chern_number | ||||||
|  |  | ||||||
| def calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100): | def calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100): | ||||||
|     k_array = np.linspace(k_min, k_max, precision) |     k_array = np.linspace(k_min, k_max, precision) | ||||||
|     dim = np.array(hamiltonian_function(0)).shape[0] |     dim = np.array(hamiltonian_function(0)).shape[0] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user