diff --git a/API_Reference/API_Reference.py b/API_Reference/API_Reference.py index 3ccf675..ae5f68e 100644 --- a/API_Reference/API_Reference.py +++ b/API_Reference/API_Reference.py @@ -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') diff --git a/PyPI/setup.cfg b/PyPI/setup.cfg index 2ec24b6..02627e1 100644 --- a/PyPI/setup.cfg +++ b/PyPI/setup.cfg @@ -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 diff --git a/PyPI/src/guan/__init__.py b/PyPI/src/guan/__init__.py index f274b95..2471839 100644 --- a/PyPI/src/guan/__init__.py +++ b/PyPI/src/guan/__init__.py @@ -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))