
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

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.zhou@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-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

Dear Adel, Thank you very much for your kind help. As you point out, wraparound can be the key to this problem. I learned a lot from your codes, and I am trying to convert it to my system. BTW, could you please explain why you used 'trapz(transmission,Ky)' ? In my mind, 'transmission.append(Sm.transmission(0,1))' is enough for the transmission spectrum. So, what's the meaning of the integral using 'trapz' ? (In fact there is a code error for this instruction in my laptop even though I noticed the indentation) Thanks again for your help! Sincerely, Jiaqi

Dear Zhou, The band structure can be divided into subgroups: the curves due to the translation in the y direction and the curves due to the number of sites in the unit cell. When you do wraparound, you are fixing ky. So, the modes that remain are those due to the number of sites in the unit cell. transmission.append(Sm.transmission(0,1)) sums over those modes since now ky is a parameter. That is why it is a resolved transmission. I you want to get the total transmission, you need to sum over the all possible ky (integrating over the Brillouin zone). I hope this helps, Adel On Mon, May 25, 2020 at 9:20 PM Zhou Jiaqi <jiaqi.zhou@uclouvain.be> wrote:
Dear Adel,
Thank you very much for your kind help. As you point out, wraparound can be the key to this problem. I learned a lot from your codes, and I am trying to convert it to my system.
BTW, could you please explain why you used 'trapz(transmission,Ky)' ? In my mind, 'transmission.append(Sm.transmission(0,1))' is enough for the transmission spectrum. So, what's the meaning of the integral using 'trapz' ? (In fact there is a code error for this instruction in my laptop even though I noticed the indentation)
Thanks again for your help!
Sincerely, Jiaqi
-- Abbout Adel

Dear Adel, Thanks for your explanation. I realized that 'trapz' is used for the transmission integral over all ky points, that can be a key to check if I got a meaningful k-resolved transmission. Moreover, I find your previous discussions about angle-resolved transport (https://mail.python.org/archives/list/kwant-discuss@python.org/message/V2PM6...), from which I learned a lot. Thank you again for your help ! Sincerely Yours, Jiaqi
participants (2)
-
Abbout Adel
-
Zhou Jiaqi