From 9b7540e4452751b61ccc8a2c3323ee0873603c68 Mon Sep 17 00:00:00 2001 From: guanjihuan Date: Tue, 7 May 2024 22:24:07 +0800 Subject: [PATCH] 0.1.97 --- PyPI/setup.cfg | 2 +- PyPI/src/guan.egg-info/PKG-INFO | 2 +- PyPI/src/guan/Green_functions.py | 8 +++++-- PyPI/src/guan/data_processing.py | 6 +++++ PyPI/src/guan/quantum_transport.py | 36 ++++++++++++++++++++++++------ 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/PyPI/setup.cfg b/PyPI/setup.cfg index 9400c42..1227b41 100644 --- a/PyPI/setup.cfg +++ b/PyPI/setup.cfg @@ -1,7 +1,7 @@ [metadata] # replace with your username: name = guan -version = 0.1.96 +version = 0.1.97 author = guanjihuan author_email = guanjihuan@163.com description = An open source python package diff --git a/PyPI/src/guan.egg-info/PKG-INFO b/PyPI/src/guan.egg-info/PKG-INFO index 657e5d1..60e3a59 100644 --- a/PyPI/src/guan.egg-info/PKG-INFO +++ b/PyPI/src/guan.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: guan -Version: 0.1.96 +Version: 0.1.97 Summary: An open source python package Home-page: https://py.guanjihuan.com Author: guanjihuan diff --git a/PyPI/src/guan/Green_functions.py b/PyPI/src/guan/Green_functions.py index d0988a8..3ca99fb 100644 --- a/PyPI/src/guan/Green_functions.py +++ b/PyPI/src/guan/Green_functions.py @@ -49,8 +49,12 @@ def transfer_matrix(fermi_energy, h00, h01): else: dim = np.array(h00).shape[0] transfer = np.zeros((2*dim, 2*dim), dtype=complex) - transfer[0:dim, 0:dim] = np.dot(np.linalg.inv(h01), fermi_energy*np.identity(dim)-h00) - transfer[0:dim, dim:2*dim] = np.dot(-1*np.linalg.inv(h01), h01.transpose().conj()) + if dim == 1: + transfer[0:dim, 0:dim] = np.dot(1/h01, fermi_energy*np.identity(dim)-h00) + transfer[0:dim, dim:2*dim] = np.dot(-1/h01, h01.transpose().conj()) + else: + transfer[0:dim, 0:dim] = np.dot(np.linalg.inv(h01), fermi_energy*np.identity(dim)-h00) + transfer[0:dim, dim:2*dim] = np.dot(-1*np.linalg.inv(h01), h01.transpose().conj()) transfer[dim:2*dim, 0:dim] = np.identity(dim) transfer[dim:2*dim, dim:2*dim] = 0 return transfer diff --git a/PyPI/src/guan/data_processing.py b/PyPI/src/guan/data_processing.py index f6b00ed..d4939ae 100644 --- a/PyPI/src/guan/data_processing.py +++ b/PyPI/src/guan/data_processing.py @@ -15,6 +15,12 @@ def preprocess_for_parallel_calculations(parameter_array_all, task_num=1, task_i parameter_array = parameter_array_all[task_index*num_parameter:num_all] return parameter_array +# 判断一个数是否接近于整数 +def close_to_integer(value, abs_tol=1e-3): + import math + result = math.isclose(value, round(value), abs_tol=abs_tol) + return result + # 根据子数组的第index个元素对子数组进行排序(index从0开始) def sort_array_by_index_element(original_array, index): sorted_array = sorted(original_array, key=lambda x: x[index]) diff --git a/PyPI/src/guan/quantum_transport.py b/PyPI/src/guan/quantum_transport.py index efe4648..29de1ca 100644 --- a/PyPI/src/guan/quantum_transport.py +++ b/PyPI/src/guan/quantum_transport.py @@ -16,7 +16,11 @@ def calculate_conductance(fermi_energy, h00, h01, length=100): else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + dim = np.array(h00).shape[0] + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算不同费米能下的电导 @@ -53,7 +57,10 @@ def calculate_conductance_with_barrier(fermi_energy, h00, h01, length=100, barri else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算在无序散射下的电导 @@ -79,7 +86,10 @@ def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensi else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) conductance_averaged += conductance conductance_averaged = conductance_averaged/calculation_times return conductance_averaged @@ -104,7 +114,10 @@ def calculate_conductance_with_disorder_array(fermi_energy, h00, h01, disorder_a else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算在无序垂直切片的散射下的电导 @@ -127,7 +140,10 @@ def calculate_conductance_with_slice_disorder(fermi_energy, h00, h01, disorder_i else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算在无序水平切片的散射下的电导 @@ -151,7 +167,10 @@ def calculate_conductance_with_disorder_inside_unit_cell_which_keeps_translation else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算在随机空位的散射下的电导 @@ -175,7 +194,10 @@ def calculate_conductance_with_random_vacancy(fermi_energy, h00, h01, vacancy_co else: green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) - conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) + if dim == 1: + conductance = np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()) + else: + conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) return conductance # 计算在不同无序散射强度下的电导