version 0.0.53
This commit is contained in:
parent
c7e458fa95
commit
a8210356a3
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user