Dear Christoph,
I simplified the posted program in order to track the error. It seems that it comes from this part:
######################################
for site in lead2.sites():
(x,y) = site.tag
if str(site.family) == "<Monatomic lattice e0>":
lead2[c(x,y),a(x,y)] =1
if str(site.family) == "<Monatomic lattice e1>":
lead2[d(x,y),b(x,y)] = 1
######################################
I could not go deeper to find the source of the error.
The simplified program which shows the difference between"norbs=None" and "norbs=1" is pasted below:
import kwant
from matplotlib import pyplot
from math import pi, sqrt, tanh, cos, ceil
from cmath import exp
import numpy as np
import time
import textwrap as tw
sin_30, cos_30, tan_30 = (1 / 2, sqrt(3) / 2, 1 / sqrt(3))
def create_system(N=31, Norbs=None ):
def rectangle(pos):
x,y = pos
if (0 < x <= 0.4*6.5) and (-3<= y <= 3):
return True
return False
def lead_shape(pos):
x, y = pos
return - 3 <= y <= 3
graphene_e = kwant.lattice.honeycomb(a=1,name='e', norbs=Norbs)
graphene_h = kwant.lattice.honeycomb(a=1,name='h', norbs=Norbs)
a, b = graphene_e.sublattices
c, d = graphene_h.sublattices
sys = kwant.Builder()
sys[graphene_e.shape(rectangle, (0.5, 0))] = 0.3
sys[graphene_h.shape(rectangle, (0.5, 0))] = -0.3
sys[graphene_e.neighbors()] = -1
sys[graphene_h.neighbors()] = 1
# Symmetry of the left and right leads
sym_l = kwant.TranslationalSymmetry((-1, 0))
sym_r = kwant.TranslationalSymmetry((1, 0))
lead0 = kwant.Builder(sym_l) # Left electron
lead0[graphene_e.shape(lead_shape, (1,1))] = -1
lead0[graphene_e.neighbors()] = -1
lead1 = kwant.Builder(sym_l) # Left hole
lead1[graphene_h.shape(lead_shape, (1,1))] = 1
lead1[graphene_h.neighbors()] = 1
lead3 = kwant.Builder(sym_r) # Right electron
lead3[graphene_e.shape(lead_shape, (1,1))] = -0.3
lead3[graphene_e.neighbors()] = -1
lead4 = kwant.Builder(sym_r) # Right hole
lead4[graphene_h.shape(lead_shape, (1,1))] = 0.3
lead4[graphene_h.neighbors()] = 1
lead2 = kwant.Builder(sym_r) # Right superconducting
lead2.update(lead3)
lead2.update(lead4)
# Hopping between electron and hole lead lattices in superconducting lead
for site in lead2.sites():
(x,y) = site.tag
if str(site.family) == "<Monatomic lattice e0>":
lead2[c(x,y),a(x,y)] =1
if str(site.family) == "<Monatomic lattice e1>":
lead2[d(x,y),b(x,y)] = 1
# Attaching the left electron, left hole and right superconducting lead
sys.attach_lead(lead0)
sys.attach_lead(lead1)
sys.attach_lead(lead2)
return sys, [lead0, lead1, lead2]
def plot_conductance(syst, energies, lead_in, lead_out):
data = []
for energy in energies:
smatrix = kwant.smatrix(syst, energy)
data.append(smatrix.transmission(lead_out, lead_in))
pyplot.figure()
pyplot.plot(energies, data)
return data
def main():
#case 1
sys, leads = create_system(Norbs=None )
sys = sys.finalized()
kwant.plot(sys,fig_size=(20,20))
Es = np.linspace(0.0001, 2.00, 10)
data = plot_conductance(sys, Es, 0,1)
#case 2
sys, leads = create_system(Norbs=1 )
sys = sys.finalized()
kwant.plot(sys,fig_size=(20,20))
Es = np.linspace(0.0001, 2.00, 10)
data = plot_conductance(sys, Es, 0,1)
if __name__ == "__main__":
main()