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()
###############################################################################################################
On Mon, May 25, 2020 at 1:34 AM Zhou Jiaqi
Dear all,
We all know that it is easy to realize the energy-resolved transmission spectrum using Kwant. I am looking for the method to realize kpoint-resolved transmission spectrum using Kwant, like the output of non-equilibrium Greens function - density functional theory (NEGF-DFT) in the following link :
https://www.researchgate.net/figure/shows-that-the-features-of-k-resolved-tr...
I note that we can use “params” to use the selected kpoint in 'kwant_model.hamiltonian_submatrix'. Take Gamma (0, 0, 0) as an example :
Input : kwant_model.hamiltonian_submatrix(params={'k_x': 0, 'k_y': 0, 'k_z': 0})
Output : (the hamiltonian at Gamma kpoint) array([[-0.91848142+0.j , -3.13863545+0.05174286j, 0.01464058-0.12995645j, 5.49753359+1.2518773j ], [-3.13863545-0.05174286j, -0.91858637+0.j, -5.63827375-0.00282617j, 0.01464063-0.1299569j ], [ 0.01464058+0.12995645j, -5.63827375+0.00282617j, -0.91851442+0.j , -3.13862945+0.05174286j], [ 5.49753359-1.2518773j , 0.01464063+0.1299569j , -3.13862945-0.05174286j, -0.91857308+0.j ]])
Then after diagonalization we can get eigenvalues at Gamma point and k-resolved band.
I wonder if we can use this method to get k-resolved transmission spectrum. I tried the following instruction :
kwant.smatrix(kwant_model, params={'k_x': 0, 'k_y': 0, 'k_z': 0})
However, it does not work, i.e., the output does not vary with different kpoint (I am sure it should vary in physics). So here is the question: how to (maybe use ‘params’ in SMatrix) study transport at different kpoint using Kwant?
Any suggestions will be greatly appreciated, thanks a lot!
Sincerely, Jiaqi
-- Abbout Adel