version 0.0.52
This commit is contained in:
		| @@ -64,7 +64,7 @@ eigenvector = guan.calculate_eigenvector(hamiltonian) | |||||||
| vector_target = guan.find_vector_with_the_same_gauge_with_binary_search(vector_target, vector_ref, show_error=1, show_times=0, show_phase=0, n_test=10001, precision=1e-6) | vector_target = guan.find_vector_with_the_same_gauge_with_binary_search(vector_target, vector_ref, show_error=1, show_times=0, show_phase=0, n_test=10001, precision=1e-6) | ||||||
| vector = guan.find_vector_with_fixed_gauge_by_making_one_component_real(vector, precision=0.005, index=None) | vector = guan.find_vector_with_fixed_gauge_by_making_one_component_real(vector, precision=0.005, index=None) | ||||||
|  |  | ||||||
| # calculate Green functions | # Green functions | ||||||
| green = guan.green_function(fermi_energy, hamiltonian, broadening, self_energy=0) | green = guan.green_function(fermi_energy, hamiltonian, broadening, self_energy=0) | ||||||
| green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, self_energy=0) | green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, self_energy=0) | ||||||
| green_in_n = guan.green_function_in_n(green_in_n_minus, h01, green_nn_n) | green_in_n = guan.green_function_in_n(green_in_n_minus, h01, green_nn_n) | ||||||
| @@ -78,7 +78,7 @@ self_energy, gamma = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy | |||||||
| green, gamma_right, gamma_left = guan.green_function_with_leads(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian) | green, gamma_right, gamma_left = guan.green_function_with_leads(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian) | ||||||
| G_n = guan.electron_correlation_function_green_n_for_local_current(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian) | G_n = guan.electron_correlation_function_green_n_for_local_current(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian) | ||||||
|  |  | ||||||
| # calculate density of states | # density of states | ||||||
| total_dos = guan.total_density_of_states(fermi_energy, hamiltonian, broadening=0.01) | 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) | ||||||
| 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_square_lattice(fermi_energy, hamiltonian, N1, N2, internal_degree=1, broadening=0.01) | ||||||
| @@ -87,22 +87,21 @@ local_dos = guan.local_density_of_states_for_square_lattice_using_dyson_equation | |||||||
| local_dos = guan.local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy, h00, h01, N3, N2, N1, internal_degree=1, broadening=0.01) | local_dos = guan.local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy, h00, h01, N3, N2, N1, internal_degree=1, broadening=0.01) | ||||||
| local_dos = guan.local_density_of_states_for_square_lattice_with_self_energy_using_dyson_equation(fermi_energy, h00, h01, N2, N1, right_self_energy, left_self_energy, internal_degree=1, broadening=0.01) | local_dos = guan.local_density_of_states_for_square_lattice_with_self_energy_using_dyson_equation(fermi_energy, h00, h01, N2, N1, right_self_energy, left_self_energy, internal_degree=1, broadening=0.01) | ||||||
|  |  | ||||||
| # calculate conductance | # quantum transport | ||||||
| conductance = guan.calculate_conductance(fermi_energy, h00, h01, length=100) | 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) | ||||||
| conductance = guan.calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100) | 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_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_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_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1) | ||||||
|  | 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) | ||||||
| # scattering matrix |  | ||||||
| if_active = guan.if_active_channel(k_of_channel) | 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_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) | 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) | 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, on_print=1, on_write=0) | ||||||
|  |  | ||||||
| # calculate topological invariant | # 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_square_lattice_with_Wilson_loop(hamiltonian_function, precision_of_plaquettes=10, precision_of_Wilson_loop=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) | chern_number = guan.calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| [metadata] | [metadata] | ||||||
| # replace with your username: | # replace with your username: | ||||||
| name = guan | name = guan | ||||||
| version = 0.0.51 | version = 0.0.52 | ||||||
| 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 | ||||||
|   | |||||||
| @@ -929,6 +929,73 @@ def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, l | |||||||
|     conductance_array = conductance_array/calculation_times |     conductance_array = conductance_array/calculation_times | ||||||
|     return conductance_array |     return conductance_array | ||||||
|  |  | ||||||
|  | ## multi-terminal transmission | ||||||
|  |  | ||||||
|  | def 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): | ||||||
|  |     #   ---------------- Geometry ---------------- | ||||||
|  |     #               lead2         lead3 | ||||||
|  |     #   lead1(L)                          lead4(R)   | ||||||
|  |     #               lead6         lead5  | ||||||
|  |  | ||||||
|  |     # h00 and h01 in leads | ||||||
|  |     h00_for_lead_1 = h00_for_lead_4 | ||||||
|  |     h00_for_lead_2 = h00_for_lead_2 | ||||||
|  |     h00_for_lead_3 = h00_for_lead_2 | ||||||
|  |     h00_for_lead_5 = h00_for_lead_2 | ||||||
|  |     h00_for_lead_6 = h00_for_lead_2 | ||||||
|  |     h00_for_lead_4 = h00_for_lead_4 | ||||||
|  |     h01_for_lead_1 = h01_for_lead_4.transpose().conj() | ||||||
|  |     h01_for_lead_2 = h01_for_lead_2 | ||||||
|  |     h01_for_lead_3 = h01_for_lead_2 | ||||||
|  |     h01_for_lead_4 = h01_for_lead_4 | ||||||
|  |     h01_for_lead_5 = h01_for_lead_2.transpose().conj() | ||||||
|  |     h01_for_lead_6 = h01_for_lead_2.transpose().conj() | ||||||
|  |     # hopping matrix from lead to center | ||||||
|  |     h_lead1_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     h_lead2_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     h_lead3_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     h_lead4_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     h_lead5_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     h_lead6_to_center = np.zeros((internal_degree*width, internal_degree*width*length), dtype=complex) | ||||||
|  |     move = moving_step_of_leads # the step of leads 2,3,6,5 moving to center | ||||||
|  |     h_lead1_to_center[0:internal_degree*width, 0:internal_degree*width] = h01_for_lead_1.transpose().conj() | ||||||
|  |     h_lead4_to_center[0:internal_degree*width, internal_degree*width*(length-1):internal_degree*width*length] = h01_for_lead_4.transpose().conj() | ||||||
|  |     for i0 in range(width): | ||||||
|  |         begin_index = internal_degree*i0+0 | ||||||
|  |         end_index = internal_degree*i0+internal_degree | ||||||
|  |         h_lead2_to_center[begin_index:end_index, internal_degree*(width*(move+i0)+(width-1))+0:internal_degree*(width*(move+i0)+(width-1))+internal_degree] = h01_for_lead_2.transpose().conj()[begin_index:end_index, begin_index:end_index] | ||||||
|  |         h_lead3_to_center[begin_index:end_index, internal_degree*(width*(length-move-1-i0)+(width-1))+0:internal_degree*(width*(length-move-1-i0)+(width-1))+internal_degree] = h01_for_lead_3.transpose().conj()[begin_index:end_index, begin_index:end_index] | ||||||
|  |         h_lead5_to_center[begin_index:end_index, internal_degree*(width*(length-move-1-i0)+0)+0:internal_degree*(width*(length-move-1-i0)+0)+internal_degree] = h01_for_lead_5.transpose().conj()[begin_index:end_index, begin_index:end_index] | ||||||
|  |         h_lead6_to_center[begin_index:end_index, internal_degree*(width*(i0+move)+0)+0:internal_degree*(width*(i0+move)+0)+internal_degree] = h01_for_lead_6.transpose().conj()[begin_index:end_index, begin_index:end_index] | ||||||
|  |     # self energy     | ||||||
|  |     self_energy1, gamma1 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_1, h01_for_lead_1, h_lead1_to_center) | ||||||
|  |     self_energy2, gamma2 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_2, h01_for_lead_1, h_lead2_to_center) | ||||||
|  |     self_energy3, gamma3 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_3, h01_for_lead_1, h_lead3_to_center) | ||||||
|  |     self_energy4, gamma4 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_4, h01_for_lead_1, h_lead4_to_center) | ||||||
|  |     self_energy5, gamma5 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_5, h01_for_lead_1, h_lead5_to_center) | ||||||
|  |     self_energy6, gamma6 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_6, h01_for_lead_1, h_lead6_to_center) | ||||||
|  |     gamma_array = [gamma1, gamma2, gamma3, gamma4, gamma5, gamma6] | ||||||
|  |     # Green function | ||||||
|  |     green = np.linalg.inv(fermi_energy*np.eye(internal_degree*width*length)-center_hamiltonian-self_energy1-self_energy2-self_energy3-self_energy4-self_energy5-self_energy6) | ||||||
|  |     # Transmission | ||||||
|  |     transmission_matrix = np.zeros((6, 6), dtype=complex) | ||||||
|  |     channel_lead_4 = guan.calculate_conductance(fermi_energy, h00_for_lead_4, h01_for_lead_4, length=3) | ||||||
|  |     channel_lead_2 = guan.calculate_conductance(fermi_energy, h00_for_lead_2, h01_for_lead_2, length=3) | ||||||
|  |     for i0 in range(6): | ||||||
|  |         for j0 in range(6): | ||||||
|  |             if j0!=i0: | ||||||
|  |                 transmission_matrix[i0, j0] = np.trace(np.dot(np.dot(np.dot(gamma_array[i0], green), gamma_array[j0]), green.transpose().conj())) | ||||||
|  |     for i0 in range(6): | ||||||
|  |         if i0 == 0 or i0 == 3: | ||||||
|  |             transmission_matrix[i0, i0] = channel_lead_4 | ||||||
|  |         else: | ||||||
|  |             transmission_matrix[i0, i0] = channel_lead_2 | ||||||
|  |     for i0 in range(6): | ||||||
|  |         for j0 in range(6): | ||||||
|  |             if j0!=i0: | ||||||
|  |                 transmission_matrix[i0, i0] = transmission_matrix[i0, i0]-transmission_matrix[i0, j0] | ||||||
|  |     transmission_matrix = np.real(transmission_matrix) | ||||||
|  |     return transmission_matrix | ||||||
|  |  | ||||||
| ## scattering matrix | ## scattering matrix | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user