update
This commit is contained in:
parent
083669875f
commit
46ee2ec7ce
@ -91,9 +91,9 @@ def conductance(fermi_energy, h00, h01, nx=300): # 计算电导
|
|||||||
else:
|
else:
|
||||||
green_nn_n = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), green_nn_n), h01)-right_self_energy)
|
green_nn_n = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), green_nn_n), h01)-right_self_energy)
|
||||||
green_0n_n = np.dot(np.dot(green_0n_n, h01), green_nn_n)
|
green_0n_n = np.dot(np.dot(green_0n_n, h01), green_nn_n)
|
||||||
right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*(0+1j)
|
gamma_right = (right_self_energy - right_self_energy.transpose().conj())*(0+1j)
|
||||||
left_self_energy = (left_self_energy - left_self_energy.transpose().conj())*(0+1j)
|
gamma_left = (left_self_energy - left_self_energy.transpose().conj())*(0+1j)
|
||||||
transmission = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj()))
|
transmission = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj()))
|
||||||
return transmission # 返回电导值
|
return transmission # 返回电导值
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,13 +80,14 @@ def main():
|
|||||||
H_from_lead_4_to_center = np.zeros((width, width*length), dtype=complex)
|
H_from_lead_4_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
H_from_lead_5_to_center = np.zeros((width, width*length), dtype=complex)
|
H_from_lead_5_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
H_from_lead_6_to_center = np.zeros((width, width*length), dtype=complex)
|
H_from_lead_6_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
|
move = 0 # the step of leads 2,3,6,5 moving to center
|
||||||
for i0 in range(width):
|
for i0 in range(width):
|
||||||
H_from_lead_1_to_center[i0, i0] = 1
|
H_from_lead_1_to_center[i0, i0] = 1
|
||||||
H_from_lead_2_to_center[i0, width*i0+(width-1)] = 1
|
H_from_lead_2_to_center[i0, width*(move+i0)+(width-1)] = 1
|
||||||
H_from_lead_3_to_center[i0, width*(length-1-i0)+(width-1)] = 1
|
H_from_lead_3_to_center[i0, width*(length-move-1-i0)+(width-1)] = 1
|
||||||
H_from_lead_4_to_center[i0, width*(length-1)+i0] = 1
|
H_from_lead_4_to_center[i0, width*(length-1)+i0] = 1
|
||||||
H_from_lead_5_to_center[i0, width*(length-1-i0)+0] = 1
|
H_from_lead_5_to_center[i0, width*(length-move-1-i0)+0] = 1
|
||||||
H_from_lead_6_to_center[i0, width*i0+0] = 1
|
H_from_lead_6_to_center[i0, width*(move+i0)+0] = 1
|
||||||
|
|
||||||
# 自能
|
# 自能
|
||||||
self_energy_1 = np.dot(np.dot(H_from_lead_1_to_center.transpose().conj(), lead_1), H_from_lead_1_to_center)
|
self_energy_1 = np.dot(np.dot(H_from_lead_1_to_center.transpose().conj(), lead_1), H_from_lead_1_to_center)
|
||||||
@ -100,19 +101,19 @@ def main():
|
|||||||
green = np.linalg.inv(fermi_energy*np.eye(width*length)-H_scattering_region-self_energy_1-self_energy_2-self_energy_3-self_energy_4-self_energy_5-self_energy_6)
|
green = np.linalg.inv(fermi_energy*np.eye(width*length)-H_scattering_region-self_energy_1-self_energy_2-self_energy_3-self_energy_4-self_energy_5-self_energy_6)
|
||||||
|
|
||||||
# Gamma矩阵
|
# Gamma矩阵
|
||||||
self_energy_1 = 1j*(self_energy_1-self_energy_1.transpose().conj())
|
gamma_1 = 1j*(self_energy_1-self_energy_1.transpose().conj())
|
||||||
self_energy_2 = 1j*(self_energy_2-self_energy_2.transpose().conj())
|
gamma_2 = 1j*(self_energy_2-self_energy_2.transpose().conj())
|
||||||
self_energy_3 = 1j*(self_energy_3-self_energy_3.transpose().conj())
|
gamma_3 = 1j*(self_energy_3-self_energy_3.transpose().conj())
|
||||||
self_energy_4 = 1j*(self_energy_4-self_energy_4.transpose().conj())
|
gamma_4 = 1j*(self_energy_4-self_energy_4.transpose().conj())
|
||||||
self_energy_5 = 1j*(self_energy_5-self_energy_5.transpose().conj())
|
gamma_5 = 1j*(self_energy_5-self_energy_5.transpose().conj())
|
||||||
self_energy_6 = 1j*(self_energy_6-self_energy_6.transpose().conj())
|
gamma_6 = 1j*(self_energy_6-self_energy_6.transpose().conj())
|
||||||
|
|
||||||
# Transmission
|
# Transmission
|
||||||
transmission_12 = np.trace(np.dot(np.dot(np.dot(self_energy_1, green), self_energy_2), green.transpose().conj()))
|
transmission_12 = np.trace(np.dot(np.dot(np.dot(gamma_1, green), gamma_2), green.transpose().conj()))
|
||||||
transmission_13 = np.trace(np.dot(np.dot(np.dot(self_energy_1, green), self_energy_3), green.transpose().conj()))
|
transmission_13 = np.trace(np.dot(np.dot(np.dot(gamma_1, green), gamma_3), green.transpose().conj()))
|
||||||
transmission_14 = np.trace(np.dot(np.dot(np.dot(self_energy_1, green), self_energy_4), green.transpose().conj()))
|
transmission_14 = np.trace(np.dot(np.dot(np.dot(gamma_1, green), gamma_4), green.transpose().conj()))
|
||||||
transmission_15 = np.trace(np.dot(np.dot(np.dot(self_energy_1, green), self_energy_5), green.transpose().conj()))
|
transmission_15 = np.trace(np.dot(np.dot(np.dot(gamma_1, green), gamma_5), green.transpose().conj()))
|
||||||
transmission_16 = np.trace(np.dot(np.dot(np.dot(self_energy_1, green), self_energy_6), green.transpose().conj()))
|
transmission_16 = np.trace(np.dot(np.dot(np.dot(gamma_1, green), gamma_6), green.transpose().conj()))
|
||||||
|
|
||||||
transmission_12_array.append(np.real(transmission_12))
|
transmission_12_array.append(np.real(transmission_12))
|
||||||
transmission_13_array.append(np.real(transmission_13))
|
transmission_13_array.append(np.real(transmission_13))
|
||||||
|
@ -67,13 +67,14 @@ def main():
|
|||||||
h_lead4_to_center = np.zeros((width, width*length), dtype=complex)
|
h_lead4_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
h_lead5_to_center = np.zeros((width, width*length), dtype=complex)
|
h_lead5_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
h_lead6_to_center = np.zeros((width, width*length), dtype=complex)
|
h_lead6_to_center = np.zeros((width, width*length), dtype=complex)
|
||||||
|
move = 0 # the step of leads 2,3,6,5 moving to center
|
||||||
for i0 in range(width):
|
for i0 in range(width):
|
||||||
h_lead1_to_center[i0, i0] = 1
|
h_lead1_to_center[i0, i0] = 1
|
||||||
h_lead2_to_center[i0, width*i0+(width-1)] = 1
|
h_lead2_to_center[i0, width*(move+i0)+(width-1)] = 1
|
||||||
h_lead3_to_center[i0, width*(length-1-i0)+(width-1)] = 1
|
h_lead3_to_center[i0, width*(length-move-1-i0)+(width-1)] = 1
|
||||||
h_lead4_to_center[i0, width*(length-1)+i0] = 1
|
h_lead4_to_center[i0, width*(length-1)+i0] = 1
|
||||||
h_lead5_to_center[i0, width*(length-1-i0)+0] = 1
|
h_lead5_to_center[i0, width*(length-move-1-i0)+0] = 1
|
||||||
h_lead6_to_center[i0, width*i0+0] = 1
|
h_lead6_to_center[i0, width*(move+i0)+0] = 1
|
||||||
# 自能
|
# 自能
|
||||||
self_energy1, gamma1 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, lead_h00, lead_h01, h_lead1_to_center)
|
self_energy1, gamma1 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, lead_h00, lead_h01, h_lead1_to_center)
|
||||||
self_energy2, gamma2 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, lead_h00, lead_h01, h_lead2_to_center)
|
self_energy2, gamma2 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, lead_h00, lead_h01, h_lead2_to_center)
|
||||||
|
@ -20,18 +20,21 @@ def make_system():
|
|||||||
# lead2 lead3
|
# lead2 lead3
|
||||||
# lead1(L) lead4(R)
|
# lead1(L) lead4(R)
|
||||||
# lead6 lead5
|
# lead6 lead5
|
||||||
|
|
||||||
|
move = 0 # the step of leads 2,3,6,5 moving to center
|
||||||
|
|
||||||
lead1 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))
|
lead1 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))
|
||||||
lead1[(lat(0, j) for j in range(W))] = 0
|
lead1[(lat(0, j) for j in range(W))] = 0
|
||||||
lead1[lat.neighbors()] = -t
|
lead1[lat.neighbors()] = -t
|
||||||
syst.attach_lead(lead1)
|
syst.attach_lead(lead1)
|
||||||
|
|
||||||
lead2 = kwant.Builder(kwant.TranslationalSymmetry((0, -a)))
|
lead2 = kwant.Builder(kwant.TranslationalSymmetry((0, -a)))
|
||||||
lead2[(lat(j, 0) for j in range(W))] = 0
|
lead2[(lat(move+j, 0) for j in range(W))] = 0
|
||||||
lead2[lat.neighbors()] = -t
|
lead2[lat.neighbors()] = -t
|
||||||
syst.attach_lead(lead2)
|
syst.attach_lead(lead2)
|
||||||
|
|
||||||
lead3 = kwant.Builder(kwant.TranslationalSymmetry((0, -a)))
|
lead3 = kwant.Builder(kwant.TranslationalSymmetry((0, -a)))
|
||||||
lead3[(lat(j+(L-W), 0) for j in range(W))] = 0
|
lead3[(lat(j+(L-W-move), 0) for j in range(W))] = 0
|
||||||
lead3[lat.neighbors()] = -t
|
lead3[lat.neighbors()] = -t
|
||||||
syst.attach_lead(lead3)
|
syst.attach_lead(lead3)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user