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 <jiaqi.z...@uclouvain.be> wrote: > 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-transmission-are-different-from-those-of-the_fig4_326818698 > > 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