From 8ce0d3a4098f9d528b0eed6004e5a77a22bbb659 Mon Sep 17 00:00:00 2001 From: guanjihuan Date: Wed, 10 Nov 2021 01:30:58 +0800 Subject: [PATCH] guan-0.0.26 --- API_reference.py | 4 ++ PyPI/setup.cfg | 2 +- PyPI/src/guan/calculate_conductance.py | 53 +++++++++++++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/API_reference.py b/API_reference.py index c82e9d9..89e37a5 100644 --- a/API_reference.py +++ b/API_reference.py @@ -82,6 +82,10 @@ right_lead_surface, left_lead_surface = guan.surface_green_function_of_lead(ferm right_self_energy, left_self_energy = guan.self_energy_of_lead(fermi_energy, h00, h01) 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 = guan.calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_density=1.0, length=100) +conductance_array = guan.calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_density=1.0, length=100) +conductance_array = guan.calculate_conductance_with_disorder_density_array(fermi_energy, h00, h01, disorder_density_array,disorder_intensity=2.0, length=100) +conductance_array = guan.calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_density=1.0) # scattering matrix # Source code: https://py.guanjihuan.com/calculate_scattering_matrix if_active = guan.if_active_channel(k_of_channel) diff --git a/PyPI/setup.cfg b/PyPI/setup.cfg index de6564a..74427d5 100644 --- a/PyPI/setup.cfg +++ b/PyPI/setup.cfg @@ -1,7 +1,7 @@ [metadata] # replace with your username: name = guan -version = 0.0.24 +version = 0.0.26 author = guanjihuan author_email = guanjihuan@163.com description = An open source python package diff --git a/PyPI/src/guan/calculate_conductance.py b/PyPI/src/guan/calculate_conductance.py index d82fe47..e42283e 100644 --- a/PyPI/src/guan/calculate_conductance.py +++ b/PyPI/src/guan/calculate_conductance.py @@ -61,8 +61,8 @@ def calculate_conductance(fermi_energy, h00, h01, length=100): else: green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) - right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*(0+1j) - left_self_energy = (left_self_energy - left_self_energy.transpose().conj())*(0+1j) + right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*1j + left_self_energy = (left_self_energy - left_self_energy.transpose().conj())*1j conductance = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj())) return conductance @@ -73,4 +73,53 @@ def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, for fermi_energy_0 in fermi_energy_array: conductance_array[i0] = np.real(calculate_conductance(fermi_energy_0, h00, h01, length)) i0 += 1 + return conductance_array + +def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_density=1.0, length=100): + right_self_energy, left_self_energy = self_energy_of_lead(fermi_energy, h00, h01) + dim = np.array(h00).shape[0] + for ix in range(length): + disorder = np.zeros((dim, dim)) + for dim0 in range(dim): + if np.random.uniform(0, 1)<=disorder_density: + disorder[dim0, dim0] = np.random.uniform(-disorder_intensity, disorder_intensity) + if ix == 0: + green_nn_n = green_function(fermi_energy, h00+disorder, broadening=0, self_energy=left_self_energy) + green_0n_n = copy.deepcopy(green_nn_n) + elif ix != length-1: + green_nn_n = green_function_nn_n(fermi_energy, h00+disorder, h01, green_nn_n, broadening=0) + green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) + else: + green_nn_n = green_function_nn_n(fermi_energy, h00+disorder, h01, green_nn_n, broadening=0, self_energy=right_self_energy) + green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) + right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*1j + left_self_energy = (left_self_energy - left_self_energy.transpose().conj())*1j + conductance = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj())) + return conductance + +def calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_density=1.0, length=100): + dim = np.array(disorder_intensity_array).shape[0] + conductance_array = np.zeros(dim) + i0 = 0 + for disorder_intensity_0 in disorder_intensity_array: + conductance_array[i0] = np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity_0, disorder_density=disorder_density, length=length)) + i0 += 1 + return conductance_array + +def calculate_conductance_with_disorder_density_array(fermi_energy, h00, h01, disorder_density_array,disorder_intensity=2.0, length=100): + dim = np.array(disorder_density_array).shape[0] + conductance_array = np.zeros(dim) + i0 = 0 + for disorder_density_0 in disorder_density_array: + conductance_array[i0] = np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_density=disorder_density_0, length=length)) + i0 += 1 + return conductance_array + +def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_density=1.0): + dim = np.array(length_array).shape[0] + conductance_array = np.zeros(dim) + i0 = 0 + for length_0 in length_array: + conductance_array[i0] = np.real(calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=disorder_intensity, disorder_density=disorder_density, length=length_0)) + i0 += 1 return conductance_array \ No newline at end of file