version 0.0.53
This commit is contained in:
		| @@ -80,7 +80,7 @@ G_n = guan.electron_correlation_function_green_n_for_local_current(fermi_energy, | ||||
|  | ||||
| # density of states | ||||
| total_dos = guan.total_density_of_states(fermi_energy, hamiltonian, broadening=0.01) | ||||
| total_dos_array = guan.total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamiltonian, broadening=0.01) | ||||
| total_dos_array = guan.total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamiltonian, broadening=0.01, print_show=0) | ||||
| local_dos = guan.local_density_of_states_for_square_lattice(fermi_energy, hamiltonian, N1, N2, internal_degree=1, broadening=0.01) | ||||
| local_dos = guan.local_density_of_states_for_cubic_lattice(fermi_energy, hamiltonian, N1, N2, N3, internal_degree=1, broadening=0.01) | ||||
| local_dos = guan.local_density_of_states_for_square_lattice_using_dyson_equation(fermi_energy, h00, h01, N2, N1, internal_degree=1, broadening=0.01) | ||||
| @@ -89,23 +89,23 @@ local_dos = guan.local_density_of_states_for_square_lattice_with_self_energy_usi | ||||
|  | ||||
| # quantum transport | ||||
| conductance = guan.calculate_conductance(fermi_energy, h00, h01, length=100) | ||||
| conductance_array = guan.calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100) | ||||
| conductance_array = guan.calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100, print_show=0) | ||||
| conductance = guan.calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100) | ||||
| conductance_array = guan.calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_concentration=1.0, length=100, calculation_times=1) | ||||
| conductance_array = guan.calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h01, disorder_concentration_array, disorder_intensity=2.0, length=100, calculation_times=1) | ||||
| conductance_array = guan.calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1) | ||||
| conductance_array = guan.calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_concentration=1.0, length=100, calculation_times=1, print_show=0) | ||||
| conductance_array = guan.calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h01, disorder_concentration_array, disorder_intensity=2.0, length=100, calculation_times=1, print_show=0) | ||||
| conductance_array = guan.calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1, print_show=0) | ||||
| transmission_matrix = guan.calculate_six_terminal_transmission_matrix(fermi_energy, h00_for_lead_4, h01_for_lead_4, h00_for_lead_2, h01_for_lead_2, center_hamiltonian, width=10, length=50, internal_degree=1, moving_step_of_leads=10) | ||||
| if_active = guan.if_active_channel(k_of_channel) | ||||
| k_of_channel, velocity_of_channel, eigenvalue, eigenvector = guan.get_k_and_velocity_of_channel(fermi_energy, h00, h01) | ||||
| k_right, k_left, velocity_right, velocity_left, f_right, f_left, u_right, u_left, ind_right_active = guan.get_classified_k_velocity_u_and_f(fermi_energy, h00, h01) | ||||
| transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active = guan.calculate_scattering_matrix(fermi_energy, h00, h01, length=100) | ||||
| guan.print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_print=1, on_write=0) | ||||
| guan.print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, print_show=1, write_file=0, filename='a', format='txt') | ||||
|  | ||||
| # topological invariant | ||||
| chern_number = guan.calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100) | ||||
| chern_number = guan.calculate_chern_number_for_square_lattice_with_Wilson_loop(hamiltonian_function, precision_of_plaquettes=10, precision_of_Wilson_loop=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) | ||||
| chern_number = guan.calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100, print_show=0) | ||||
| chern_number = guan.calculate_chern_number_for_square_lattice_with_Wilson_loop(hamiltonian_function, precision_of_plaquettes=10, precision_of_Wilson_loop=100, print_show=0) | ||||
| chern_number = guan.calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300, print_show=0) | ||||
| wilson_loop_array = guan.calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100, print_show=0) | ||||
|  | ||||
| # read and write | ||||
| x_array, y_array = guan.read_one_dimensional_data(filename='a', format='txt') | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| [metadata] | ||||
| # replace with your username: | ||||
| name = guan | ||||
| version = 0.0.52 | ||||
| version = 0.0.53 | ||||
| author = guanjihuan | ||||
| author_email = guanjihuan@163.com | ||||
| description = An open source python package | ||||
|   | ||||
| @@ -712,11 +712,13 @@ def total_density_of_states(fermi_energy, hamiltonian, broadening=0.01): | ||||
|     total_dos = -np.trace(np.imag(green))/pi | ||||
|     return total_dos | ||||
|  | ||||
| def total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamiltonian, broadening=0.01): | ||||
| def total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamiltonian, broadening=0.01, print_show=0): | ||||
|     dim = np.array(fermi_energy_array).shape[0] | ||||
|     total_dos_array = np.zeros(dim) | ||||
|     i0 = 0 | ||||
|     for fermi_energy in fermi_energy_array: | ||||
|         if print_show == 1: | ||||
|             print(fermi_energy) | ||||
|         total_dos_array[i0] = total_density_of_states(fermi_energy, hamiltonian, broadening) | ||||
|         i0 += 1 | ||||
|     return total_dos_array | ||||
| @@ -867,12 +869,14 @@ def calculate_conductance(fermi_energy, h00, h01, length=100): | ||||
|     conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) | ||||
|     return conductance | ||||
|  | ||||
| def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100): | ||||
| def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100, print_show=0): | ||||
|     dim = np.array(fermi_energy_array).shape[0] | ||||
|     conductance_array = np.zeros(dim) | ||||
|     i0 = 0 | ||||
|     for fermi_energy_0 in fermi_energy_array: | ||||
|         conductance_array[i0] = np.real(calculate_conductance(fermi_energy_0, h00, h01, length)) | ||||
|     for fermi_energy in fermi_energy_array: | ||||
|         if print_show == 1: | ||||
|             print(fermi_energy) | ||||
|         conductance_array[i0] = np.real(calculate_conductance(fermi_energy, h00, h01, length)) | ||||
|         i0 += 1 | ||||
|     return conductance_array | ||||
|  | ||||
| @@ -896,35 +900,41 @@ def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensi | ||||
|     conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) | ||||
|     return conductance | ||||
|  | ||||
| def calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_concentration=1.0, length=100, calculation_times=1): | ||||
| def calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_concentration=1.0, length=100, calculation_times=1, print_show=0): | ||||
|     dim = np.array(disorder_intensity_array).shape[0] | ||||
|     conductance_array = np.zeros(dim) | ||||
|     i0 = 0 | ||||
|     for disorder_intensity_0 in disorder_intensity_array: | ||||
|     for disorder_intensity in disorder_intensity_array: | ||||
|         if print_show == 1: | ||||
|             print(disorder_intensity) | ||||
|         for times in range(calculation_times): | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity_0, disorder_concentration=disorder_concentration, length=length)) | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_concentration=disorder_concentration, length=length)) | ||||
|         i0 += 1 | ||||
|     conductance_array = conductance_array/calculation_times | ||||
|     return conductance_array | ||||
|  | ||||
| def calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h01, disorder_concentration_array, disorder_intensity=2.0, length=100, calculation_times=1): | ||||
| def calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h01, disorder_concentration_array, disorder_intensity=2.0, length=100, calculation_times=1, print_show=0): | ||||
|     dim = np.array(disorder_concentration_array).shape[0] | ||||
|     conductance_array = np.zeros(dim) | ||||
|     i0 = 0 | ||||
|     for disorder_concentration_0 in disorder_concentration_array: | ||||
|     for disorder_concentration in disorder_concentration_array: | ||||
|         if print_show == 1: | ||||
|             print(disorder_concentration) | ||||
|         for times in range(calculation_times): | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_concentration=disorder_concentration_0, length=length)) | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_concentration=disorder_concentration, length=length)) | ||||
|         i0 += 1 | ||||
|     conductance_array = conductance_array/calculation_times | ||||
|     return conductance_array | ||||
|  | ||||
| def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1): | ||||
| def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1, print_show=0): | ||||
|     dim = np.array(length_array).shape[0] | ||||
|     conductance_array = np.zeros(dim) | ||||
|     i0 = 0 | ||||
|     for length_0 in length_array: | ||||
|     for length in length_array: | ||||
|         if print_show == 1: | ||||
|             print(length) | ||||
|         for times in range(calculation_times): | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_concentration=disorder_concentration, length=length_0)) | ||||
|             conductance_array[i0] = conductance_array[i0]+np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_concentration=disorder_concentration, length=length)) | ||||
|         i0 += 1 | ||||
|     conductance_array = conductance_array/calculation_times | ||||
|     return conductance_array | ||||
| @@ -1126,13 +1136,13 @@ def calculate_scattering_matrix(fermi_energy, h00, h01, length=100): | ||||
|             print('Error Alert: scattering matrix is not normalized!') | ||||
|     return transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active | ||||
|  | ||||
| def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_print=1, on_write=0): | ||||
| def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, print_show=1, write_file=0, filename='a', format='txt'): | ||||
|     if np.array(h00).shape==(): | ||||
|         dim = 1 | ||||
|     else: | ||||
|         dim = np.array(h00).shape[0] | ||||
|     transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active = calculate_scattering_matrix(fermi_energy, h00, h01, length) | ||||
|     if on_print == 1: | ||||
|     if print_show == 1: | ||||
|         print('\nActive channel (left or right) = ', ind_right_active) | ||||
|         print('Evanescent channel (left or right) = ', dim-ind_right_active, '\n') | ||||
|         print('K of right-moving active channels:\n', np.real(k_right[0:ind_right_active])) | ||||
| @@ -1145,8 +1155,8 @@ def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_prin | ||||
|         print('Total reflection of channels:\n',np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)) | ||||
|         print('Sum of transmission and reflection of channels:\n', np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) + np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)) | ||||
|         print('Total conductance = ', np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active]))), '\n') | ||||
|     if on_write == 1: | ||||
|         with open('a.txt', 'w') as f: | ||||
|     if write_file == 1: | ||||
|         with open(filename+'.'+format, 'w') as f: | ||||
|             f.write('Active channel (left or right) = ' + str(ind_right_active) + '\n') | ||||
|             f.write('Evanescent channel (left or right) = ' + str(dim - ind_right_active) + '\n\n') | ||||
|             f.write('Channel               K                                     Velocity\n') | ||||
| @@ -1185,7 +1195,7 @@ def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_prin | ||||
|  | ||||
| # Module 9: topological invariant | ||||
|  | ||||
| def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100): | ||||
| def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100, print_show=0): | ||||
|     if np.array(hamiltonian_function(0, 0)).shape==(): | ||||
|         dim = 1 | ||||
|     else: | ||||
| @@ -1193,6 +1203,8 @@ def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=10 | ||||
|     delta = 2*pi/precision | ||||
|     chern_number = np.zeros(dim, dtype=complex) | ||||
|     for kx in np.arange(-pi, pi, delta): | ||||
|         if print_show == 1: | ||||
|             print(kx) | ||||
|         for ky in np.arange(-pi, pi, delta): | ||||
|             H = hamiltonian_function(kx, ky) | ||||
|             vector = guan.calculate_eigenvector(H) | ||||
| @@ -1216,10 +1228,12 @@ def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=10 | ||||
|     chern_number = chern_number/(2*pi*1j) | ||||
|     return chern_number | ||||
|  | ||||
| def calculate_chern_number_for_square_lattice_with_Wilson_loop(hamiltonian_function, precision_of_plaquettes=10, precision_of_Wilson_loop=100): | ||||
| def calculate_chern_number_for_square_lattice_with_Wilson_loop(hamiltonian_function, precision_of_plaquettes=10, precision_of_Wilson_loop=100, print_show=0): | ||||
|     delta = 2*pi/precision_of_plaquettes | ||||
|     chern_number = 0 | ||||
|     for kx in np.arange(-pi, pi, delta): | ||||
|         if print_show == 1: | ||||
|             print(kx) | ||||
|         for ky in np.arange(-pi, pi, delta): | ||||
|             vector_array = [] | ||||
|             # line_1 | ||||
| @@ -1255,7 +1269,7 @@ def calculate_chern_number_for_square_lattice_with_Wilson_loop(hamiltonian_funct | ||||
|     chern_number = chern_number/(2*pi) | ||||
|     return chern_number | ||||
|  | ||||
| def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300): | ||||
| def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300, print_show=0): | ||||
|     if np.array(hamiltonian_function(0, 0)).shape==(): | ||||
|         dim = 1 | ||||
|     else: | ||||
| @@ -1267,6 +1281,8 @@ def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, prec | ||||
|     delta1 = 2*L1/precision | ||||
|     delta3 = 2*L3/precision | ||||
|     for kx in np.arange(-L1, L1, delta1): | ||||
|         if print_show == 1: | ||||
|             print(kx) | ||||
|         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) | ||||
| @@ -1291,11 +1307,13 @@ def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, prec | ||||
|     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, print_show=0): | ||||
|     k_array = np.linspace(k_min, k_max, precision) | ||||
|     dim = np.array(hamiltonian_function(0)).shape[0] | ||||
|     wilson_loop_array = np.ones(dim, dtype=complex) | ||||
|     for i in range(dim): | ||||
|         if print_show == 1: | ||||
|             print(i) | ||||
|         eigenvector_array = [] | ||||
|         for k in k_array: | ||||
|             eigenvector  = guan.calculate_eigenvector(hamiltonian_function(k))   | ||||
|   | ||||
		Reference in New Issue
	
	Block a user