Dear Zhou,
You question is about the transition of the bulk system which of course needs to get the resolved transmission T(E,ky).
To better explain this problem, imagine you have a uniform system with two leads and width =W. You can get the transmission for each mode T(E,m). (the modes do not mix since the system is uniform. The conductance is from a mode m to the same mode m).
here m actually refers the quantized wavenumber ky=m pi/W.
When W becomes infinite, ky becomes a continuous variable and hence T(E,m) becomes T(E, ky), (with some factor due to the variable change).
So if you want an approximated result just take a system with W very large and get T(E,m). (Let us suppose there are no edge states)
If you wan the exact result, you need to do as follow:
1) Define a system with a translational symmetry in 2D.
2) wraparound the system to get rid of the symmetry in the y direction.
3) do the sea thing with the leads and then attach them.
4) Now, ky becomes a parameter in your scattering matrix.
The code below give you a simple example, with the theoretical
verification.
I hope this helps
Adel
################################################################################
from numpy import array,linspace,sqrt,sin,cos,pi,exp,trapz,arccos
import kwant
from matplotlib import pyplot
lat=kwant.lattice.square()
sym1=kwant.TranslationalSymmetry((0,1))
sys=kwant.Builder(sym1)
def sys_pot(site,vg):
return vg
sys[lat(0,0)]=sys_pot
sys[lat.neighbors()]=-1
# in the following put (0,1) first like for sys.
sym2=kwant.TranslationalSymmetry((0,1),(1,0))
lead=kwant.Builder(sym2)
def lead_pot(site,vl):
return vl
lead[lat(0,0)]=lead_pot
lead[lat.neighbors()]=-1
sys=kwant.wraparound.wraparound(sys,coordinate_names='yxz')
lead=kwant.wraparound.wraparound(lead,keep=1,coordinate_names='yxz')
sys.attach_lead(lead)
sys.attach_lead(lead.reversed())
def Trans(E,vg):
transmission=[]
Ky=linspace(0,pi,100)
params={"k_y": 0,"vg":vg, "vl":0}
vg,vl=0,0
for ky in Ky :
params["k_y"]=ky
Sm=kwant.smatrix(sys.finalized(),E,params=params)
transmission.append(Sm.transmission(0,1))
return trapz(transmission,Ky)
Energies=linspace(-2,2,20)
Result=[] #for vg=0
for E in Energies:
Result.append(Trans(E,0))
#Result.append(Trans(E,0.3)) #if you want vg=0.3
pyplot.plot(Energies,Result,'ro')
# theoretical expected transmission
def T(E):
return arccos(-1+abs(E/2))
Energies=linspace(-2,2,200)
pyplot.plot(Energies,T(Energies))
pyplot.show()
###############################################################################################################