version 0.0.37 changed to guan.function()

This commit is contained in:
guanjihuan 2021-12-28 21:08:03 +08:00
parent cb0a7d1ac4
commit 3d98ec8cdd
6 changed files with 60 additions and 60 deletions

View File

@ -1,7 +1,7 @@
[metadata] [metadata]
# replace with your username: # replace with your username:
name = guan name = guan
version = 0.0.35 version = 0.0.37
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

View File

@ -5,14 +5,14 @@
import numpy as np import numpy as np
import cmath import cmath
from math import * from math import *
from .Fourier_transform import * import guan
def hamiltonian_of_simple_chain(k): def hamiltonian_of_simple_chain(k):
hamiltonian = one_dimensional_fourier_transform(k, unit_cell=0, hopping=1) hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=0, hopping=1)
return hamiltonian return hamiltonian
def hamiltonian_of_square_lattice(k1, k2): def hamiltonian_of_square_lattice(k1, k2):
hamiltonian = two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell=0, hopping_1=1, hopping_2=1) hamiltonian = guan.two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell=0, hopping_1=1, hopping_2=1)
return hamiltonian return hamiltonian
def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10): def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10):
@ -23,11 +23,11 @@ def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10):
h00[i+1, i] = 1 h00[i+1, i] = 1
for i in range(N): for i in range(N):
h01[i, i] = 1 h01[i, i] = 1
hamiltonian = one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01)
return hamiltonian return hamiltonian
def hamiltonian_of_cubic_lattice(k1, k2, k3): def hamiltonian_of_cubic_lattice(k1, k2, k3):
hamiltonian = three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell=0, hopping_1=1, hopping_2=1, hopping_3=1) hamiltonian = guan.three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell=0, hopping_1=1, hopping_2=1, hopping_3=1)
return hamiltonian return hamiltonian
def hamiltonian_of_ssh_model(k, v=0.6, w=1): def hamiltonian_of_ssh_model(k, v=0.6, w=1):
@ -66,7 +66,7 @@ def hamiltonian_of_graphene_with_zigzag_in_quasi_one_dimension(k, N=10, M=0, t=1
for i in range(N): for i in range(N):
h01[i*4+1, i*4+0] = t h01[i*4+1, i*4+0] = t
h01[i*4+2, i*4+3] = t h01[i*4+2, i*4+3] = t
hamiltonian = one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01)
return hamiltonian return hamiltonian
def hamiltonian_of_haldane_model(k1, k2, M=2/3, t1=1, t2=1/3, phi=pi/4, a=1/sqrt(3)): def hamiltonian_of_haldane_model(k1, k2, M=2/3, t1=1, t2=1/3, phi=pi/4, a=1/sqrt(3)):

View File

@ -4,20 +4,20 @@
import numpy as np import numpy as np
import copy import copy
from .calculate_Green_functions import * import guan
def calculate_conductance(fermi_energy, h00, h01, length=100): def calculate_conductance(fermi_energy, h00, h01, length=100):
right_self_energy, left_self_energy = self_energy_of_lead(fermi_energy, h00, h01) right_self_energy, left_self_energy = guan.self_energy_of_lead(fermi_energy, h00, h01)
for ix in range(length): for ix in range(length):
if ix == 0: if ix == 0:
green_nn_n = green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy) green_nn_n = guan.green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy)
green_0n_n = copy.deepcopy(green_nn_n) green_0n_n = copy.deepcopy(green_nn_n)
elif ix != length-1: elif ix != length-1:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0)
green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n)
else: else:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) 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 = green_function_in_n(green_0n_n, h01, green_nn_n) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n)
right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*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 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())) conductance = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj()))
@ -33,7 +33,7 @@ def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01,
return conductance_array return conductance_array
def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100): def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100):
right_self_energy, left_self_energy = self_energy_of_lead(fermi_energy, h00, h01) right_self_energy, left_self_energy = guan.self_energy_of_lead(fermi_energy, h00, h01)
dim = np.array(h00).shape[0] dim = np.array(h00).shape[0]
for ix in range(length): for ix in range(length):
disorder = np.zeros((dim, dim)) disorder = np.zeros((dim, dim))
@ -41,14 +41,14 @@ def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensi
if np.random.uniform(0, 1)<=disorder_concentration: if np.random.uniform(0, 1)<=disorder_concentration:
disorder[dim0, dim0] = np.random.uniform(-disorder_intensity, disorder_intensity) disorder[dim0, dim0] = np.random.uniform(-disorder_intensity, disorder_intensity)
if ix == 0: if ix == 0:
green_nn_n = green_function(fermi_energy, h00+disorder, broadening=0, self_energy=left_self_energy) green_nn_n = guan.green_function(fermi_energy, h00+disorder, broadening=0, self_energy=left_self_energy)
green_0n_n = copy.deepcopy(green_nn_n) green_0n_n = copy.deepcopy(green_nn_n)
elif ix != length-1: elif ix != length-1:
green_nn_n = green_function_nn_n(fermi_energy, h00+disorder, h01, green_nn_n, broadening=0) green_nn_n = guan.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) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n)
else: else:
green_nn_n = green_function_nn_n(fermi_energy, h00+disorder, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_nn_n = guan.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) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n)
right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*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 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())) conductance = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj()))

View File

@ -4,10 +4,10 @@
import numpy as np import numpy as np
from math import * from math import *
from .calculate_Green_functions import * import guan
def total_density_of_states(fermi_energy, hamiltonian, broadening=0.01): def total_density_of_states(fermi_energy, hamiltonian, broadening=0.01):
green = green_function(fermi_energy, hamiltonian, broadening) green = guan.green_function(fermi_energy, hamiltonian, broadening)
total_dos = -np.trace(np.imag(green))/pi total_dos = -np.trace(np.imag(green))/pi
return total_dos return total_dos
@ -22,7 +22,7 @@ def total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamilton
def local_density_of_states_for_square_lattice(fermi_energy, hamiltonian, N1, N2, internal_degree=1, broadening=0.01): def local_density_of_states_for_square_lattice(fermi_energy, hamiltonian, N1, N2, internal_degree=1, broadening=0.01):
# dim_hamiltonian = N1*N2*internal_degree # dim_hamiltonian = N1*N2*internal_degree
green = green_function(fermi_energy, hamiltonian, broadening) green = guan.green_function(fermi_energy, hamiltonian, broadening)
local_dos = np.zeros((N2, N1)) local_dos = np.zeros((N2, N1))
for i1 in range(N1): for i1 in range(N1):
for i2 in range(N2): for i2 in range(N2):
@ -32,7 +32,7 @@ def local_density_of_states_for_square_lattice(fermi_energy, hamiltonian, N1, N2
def local_density_of_states_for_cubic_lattice(fermi_energy, hamiltonian, N1, N2, N3, internal_degree=1, broadening=0.01): def local_density_of_states_for_cubic_lattice(fermi_energy, hamiltonian, N1, N2, N3, internal_degree=1, broadening=0.01):
# dim_hamiltonian = N1*N2*N3*internal_degree # dim_hamiltonian = N1*N2*N3*internal_degree
green = green_function(fermi_energy, hamiltonian, broadening) green = guan.green_function(fermi_energy, hamiltonian, broadening)
local_dos = np.zeros((N3, N2, N1)) local_dos = np.zeros((N3, N2, N1))
for i1 in range(N1): for i1 in range(N1):
for i2 in range(N2): for i2 in range(N2):
@ -44,27 +44,27 @@ def local_density_of_states_for_cubic_lattice(fermi_energy, hamiltonian, N1, N2,
def local_density_of_states_for_square_lattice_using_dyson_equation(fermi_energy, h00, h01, N2, N1, internal_degree=1, broadening=0.01): def local_density_of_states_for_square_lattice_using_dyson_equation(fermi_energy, h00, h01, N2, N1, internal_degree=1, broadening=0.01):
# dim_h00 = N2*internal_degree # dim_h00 = N2*internal_degree
local_dos = np.zeros((N2, N1)) local_dos = np.zeros((N2, N1))
green_11_1 = green_function(fermi_energy, h00, broadening) green_11_1 = guan.green_function(fermi_energy, h00, broadening)
for i1 in range(N1): for i1 in range(N1):
green_nn_n_minus = green_11_1 green_nn_n_minus = green_11_1
green_in_n_minus = green_11_1 green_in_n_minus = green_11_1
green_ni_n_minus = green_11_1 green_ni_n_minus = green_11_1
green_ii_n_minus = green_11_1 green_ii_n_minus = green_11_1
for i2_0 in range(i1): for i2_0 in range(i1):
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
if i1!=0: if i1!=0:
green_in_n_minus = green_nn_n green_in_n_minus = green_nn_n
green_ni_n_minus = green_nn_n green_ni_n_minus = green_nn_n
green_ii_n_minus = green_nn_n green_ii_n_minus = green_nn_n
for size_0 in range(N1-1-i1): for size_0 in range(N1-1-i1):
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
green_ii_n = green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus) green_ii_n = guan.green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus)
green_ii_n_minus = green_ii_n green_ii_n_minus = green_ii_n
green_in_n = 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)
green_in_n_minus = green_in_n green_in_n_minus = green_in_n
green_ni_n = green_function_ni_n(green_nn_n, h01, green_ni_n_minus) green_ni_n = guan.green_function_ni_n(green_nn_n, h01, green_ni_n_minus)
green_ni_n_minus = green_ni_n green_ni_n_minus = green_ni_n
for i2 in range(N2): for i2 in range(N2):
for i in range(internal_degree): for i in range(internal_degree):
@ -74,27 +74,27 @@ def local_density_of_states_for_square_lattice_using_dyson_equation(fermi_energy
def local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy, h00, h01, N3, N2, N1, internal_degree=1, broadening=0.01): def local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy, h00, h01, N3, N2, N1, internal_degree=1, broadening=0.01):
# dim_h00 = N2*N3*internal_degree # dim_h00 = N2*N3*internal_degree
local_dos = np.zeros((N3, N2, N1)) local_dos = np.zeros((N3, N2, N1))
green_11_1 = green_function(fermi_energy, h00, broadening) green_11_1 = guan.green_function(fermi_energy, h00, broadening)
for i1 in range(N1): for i1 in range(N1):
green_nn_n_minus = green_11_1 green_nn_n_minus = green_11_1
green_in_n_minus = green_11_1 green_in_n_minus = green_11_1
green_ni_n_minus = green_11_1 green_ni_n_minus = green_11_1
green_ii_n_minus = green_11_1 green_ii_n_minus = green_11_1
for i1_0 in range(i1): for i1_0 in range(i1):
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
if i1!=0: if i1!=0:
green_in_n_minus = green_nn_n green_in_n_minus = green_nn_n
green_ni_n_minus = green_nn_n green_ni_n_minus = green_nn_n
green_ii_n_minus = green_nn_n green_ii_n_minus = green_nn_n
for size_0 in range(N1-1-i1): for size_0 in range(N1-1-i1):
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
green_ii_n = green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus) green_ii_n = guan.green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus)
green_ii_n_minus = green_ii_n green_ii_n_minus = green_ii_n
green_in_n = 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)
green_in_n_minus = green_in_n green_in_n_minus = green_in_n
green_ni_n = green_function_ni_n(green_nn_n, h01, green_ni_n_minus) green_ni_n = guan.green_function_ni_n(green_nn_n, h01, green_ni_n_minus)
green_ni_n_minus = green_ni_n green_ni_n_minus = green_ni_n
for i2 in range(N2): for i2 in range(N2):
for i3 in range(N3): for i3 in range(N3):
@ -105,7 +105,7 @@ def local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy,
def 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): def 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):
# dim_h00 = N2*internal_degree # dim_h00 = N2*internal_degree
local_dos = np.zeros((N2, N1)) local_dos = np.zeros((N2, N1))
green_11_1 = green_function(fermi_energy, h00+left_self_energy, broadening) green_11_1 = guan.green_function(fermi_energy, h00+left_self_energy, broadening)
for i1 in range(N1): for i1 in range(N1):
green_nn_n_minus = green_11_1 green_nn_n_minus = green_11_1
green_in_n_minus = green_11_1 green_in_n_minus = green_11_1
@ -113,9 +113,9 @@ def local_density_of_states_for_square_lattice_with_self_energy_using_dyson_equa
green_ii_n_minus = green_11_1 green_ii_n_minus = green_11_1
for i2_0 in range(i1): for i2_0 in range(i1):
if i2_0 == N1-1-1: if i2_0 == N1-1-1:
green_nn_n = green_function_nn_n(fermi_energy, h00+right_self_energy, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00+right_self_energy, h01, green_nn_n_minus, broadening)
else: else:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
if i1!=0: if i1!=0:
green_in_n_minus = green_nn_n green_in_n_minus = green_nn_n
@ -123,15 +123,15 @@ def local_density_of_states_for_square_lattice_with_self_energy_using_dyson_equa
green_ii_n_minus = green_nn_n green_ii_n_minus = green_nn_n
for size_0 in range(N1-1-i1): for size_0 in range(N1-1-i1):
if size_0 == N1-1-i1-1: if size_0 == N1-1-i1-1:
green_nn_n = green_function_nn_n(fermi_energy, h00+right_self_energy, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00+right_self_energy, h01, green_nn_n_minus, broadening)
else: else:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening)
green_nn_n_minus = green_nn_n green_nn_n_minus = green_nn_n
green_ii_n = green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus) green_ii_n = guan.green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus)
green_ii_n_minus = green_ii_n green_ii_n_minus = green_ii_n
green_in_n = 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)
green_in_n_minus = green_in_n green_in_n_minus = green_in_n
green_ni_n = green_function_ni_n(green_nn_n, h01, green_ni_n_minus) green_ni_n = guan.green_function_ni_n(green_nn_n, h01, green_ni_n_minus)
green_ni_n_minus = green_ni_n green_ni_n_minus = green_ni_n
for i2 in range(N2): for i2 in range(N2):
for i in range(internal_degree): for i in range(internal_degree):

View File

@ -4,7 +4,7 @@
import numpy as np import numpy as np
import copy import copy
from .calculate_Green_functions import * import guan
def if_active_channel(k_of_channel): def if_active_channel(k_of_channel):
if np.abs(np.imag(k_of_channel))<1e-6: if np.abs(np.imag(k_of_channel))<1e-6:
@ -18,7 +18,7 @@ def get_k_and_velocity_of_channel(fermi_energy, h00, h01):
dim = 1 dim = 1
else: else:
dim = np.array(h00).shape[0] dim = np.array(h00).shape[0]
transfer = transfer_matrix(fermi_energy, h00, h01) transfer = guan.transfer_matrix(fermi_energy, h00, h01)
eigenvalue, eigenvector = np.linalg.eig(transfer) eigenvalue, eigenvector = np.linalg.eig(transfer)
k_of_channel = np.log(eigenvalue)/1j k_of_channel = np.log(eigenvalue)/1j
ind = np.argsort(np.real(k_of_channel)) ind = np.argsort(np.real(k_of_channel))
@ -104,17 +104,17 @@ def calculate_scattering_matrix(fermi_energy, h00, h01, length=100):
left_self_energy = np.dot(h01.transpose().conj(), np.linalg.inv(f_left)) left_self_energy = np.dot(h01.transpose().conj(), np.linalg.inv(f_left))
for i0 in range(length): for i0 in range(length):
if i0 == 0: if i0 == 0:
green_nn_n = green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy) green_nn_n = guan.green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy)
green_00_n = copy.deepcopy(green_nn_n) green_00_n = copy.deepcopy(green_nn_n)
green_0n_n = copy.deepcopy(green_nn_n) green_0n_n = copy.deepcopy(green_nn_n)
green_n0_n = copy.deepcopy(green_nn_n) green_n0_n = copy.deepcopy(green_nn_n)
elif i0 != length-1: elif i0 != length-1:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0)
else: else:
green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy)
green_00_n = green_function_ii_n(green_00_n, green_0n_n, h01, green_nn_n, green_n0_n) green_00_n = guan.green_function_ii_n(green_00_n, green_0n_n, h01, green_nn_n, green_n0_n)
green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n)
green_n0_n = green_function_ni_n(green_nn_n, h01, green_n0_n) green_n0_n = guan.green_function_ni_n(green_nn_n, h01, green_n0_n)
temp = np.dot(h01.transpose().conj(), np.linalg.inv(f_right)-np.linalg.inv(f_left)) temp = np.dot(h01.transpose().conj(), np.linalg.inv(f_right)-np.linalg.inv(f_left))
transmission_matrix = np.dot(np.dot(np.linalg.inv(u_right), np.dot(green_n0_n, temp)), u_right) transmission_matrix = np.dot(np.dot(np.linalg.inv(u_right), np.dot(green_n0_n, temp)), u_right)
reflection_matrix = np.dot(np.dot(np.linalg.inv(u_left), np.dot(green_00_n, temp)-np.identity(dim)), u_right) reflection_matrix = np.dot(np.dot(np.linalg.inv(u_left), np.dot(green_00_n, temp)-np.identity(dim)), u_right)

View File

@ -5,7 +5,7 @@
import numpy as np import numpy as np
import cmath import cmath
from math import * from math import *
from .calculate_band_structures_and_wave_functions import * import guan
def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100): def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100):
if np.array(hamiltonian_function(0, 0)).shape==(): if np.array(hamiltonian_function(0, 0)).shape==():
@ -17,13 +17,13 @@ def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=10
for kx in np.arange(-pi, pi, delta): for kx in np.arange(-pi, pi, delta):
for ky in np.arange(-pi, pi, delta): for ky in np.arange(-pi, pi, delta):
H = hamiltonian_function(kx, ky) H = hamiltonian_function(kx, ky)
vector = calculate_eigenvector(H) vector = guan.calculate_eigenvector(H)
H_delta_kx = hamiltonian_function(kx+delta, ky) H_delta_kx = hamiltonian_function(kx+delta, ky)
vector_delta_kx = calculate_eigenvector(H_delta_kx) vector_delta_kx = guan.calculate_eigenvector(H_delta_kx)
H_delta_ky = hamiltonian_function(kx, ky+delta) H_delta_ky = hamiltonian_function(kx, ky+delta)
vector_delta_ky = calculate_eigenvector(H_delta_ky) vector_delta_ky = guan.calculate_eigenvector(H_delta_ky)
H_delta_kx_ky = hamiltonian_function(kx+delta, ky+delta) H_delta_kx_ky = hamiltonian_function(kx+delta, ky+delta)
vector_delta_kx_ky = calculate_eigenvector(H_delta_kx_ky) vector_delta_kx_ky = guan.calculate_eigenvector(H_delta_kx_ky)
for i in range(dim): for i in range(dim):
vector_i = vector[:, i] vector_i = vector[:, i]
vector_delta_kx_i = vector_delta_kx[:, i] vector_delta_kx_i = vector_delta_kx[:, i]
@ -45,7 +45,7 @@ def calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=1
for i in range(dim): for i in range(dim):
eigenvector_array = [] eigenvector_array = []
for k in k_array: for k in k_array:
eigenvector = calculate_eigenvector(hamiltonian_function(k)) eigenvector = guan.calculate_eigenvector(hamiltonian_function(k))
if k != k_max: if k != k_max:
eigenvector_array.append(eigenvector[:, i]) eigenvector_array.append(eigenvector[:, i])
else: else: