Dear all, I am using kwant to calculate the transmission of a bulk system. I use " sys = kwant.wraparound.wraparound(sys) and lead = kwant.wraparound.wraparound(lead, keep=0)" to change my tight-binding ribbon system to a bulk system. The transmission is obtained using: kys = np.arange(-0.5, 0.5, 0.001) for ky in kys: smatrix = kwant.smatrix(sys, energy, [ky]) transmission.append(smatrix.transmission(1, 0)) I want to obtain the Transmission vs the incident angle of an electron, and I also need to do the integration ∫T(ky, E) dky or ∫T(θ,E)cosθdθ. I do not undstand the ky in the system with kwant.wraparoun, what is the unit of ky, what is k here for the system. Can you give me some advices on this?Thanks in advance. The definition of incident angle is shown in the attached Fig.1, the band structure for my bulk system is shown in attached Fig.2 and the Tranmission vs ky is shown in Fig.3 (I do not know how the set the values for ky). Regards, Hosein Khani
Dear Hosein, Let me give you my understanding of the problem and then give you an example with kwant. I would love to hear a feedback on this matter. The best way to deal with this problem is to start with the easiest case: 2D square lattice. The transmission of an infinite 2D system is the limit of a waveguide with width W when W goes to infinity. but we know that the transmission, in this case, is: 2*W/lambda, where lambda is the electron wavelength. So you can see that the conductance (transmission) goes to infinity when W---> infinity! So, it is better to talk about conductivity rather than conductance (conductivity =conductance/W) I remember that I calculated this for a square lattice during my thesis and found: T(E)/W =-1/pi arcos(-1+abs(E/2)) (onsite potential v=0) That means if you do just T(E)=0Intgral T(E, ky) dky , it should diverge in 2D! Let us go back to kwant and see why we get a finite result with a program as yours. For a uniform 2D system you need to do: sys=kwant.wraparound.wraparound(sys) lead=kwant.wraparound.wraparound(lead, keep=0) The problem with this is that when you call the scattering matrix: Sm=kwant.smatrix(sys.finalized(),energy,[ky]) Only the lead gets the argument ky! (I don't know why). This means that only the lead was wraparounded and got an effective onsite potential (-2t cos(ky)) but not the system! I checked this analytically for the transmission and found T(E=-1, ky=pi/4)=(1+2*sqrt(2))/(3+2*sqrt(2)) which is the same as obtained by kwant :0.6568 This confirms my understanding. (I didn't have enough time to think about how to correct this) Another way of accessing the transmission and avoiding what I described above is s just to look at the self energy for each ky and each time you have an eigenvalue with an imaginary part you have one conducting mode. Your question about the angle: since you have ky, you find the corresponding kx at E from the conducting modes and the angle between them is what you are searching. I hope this helps, Regards from numpy import array,linspace,sqrt,sin,cos,pi,exp import kwant from matplotlib import pyplot lat=kwant.lattice.square() sym1=kwant.TranslationalSymmetry((0,1)) sys=kwant.Builder(sym1) sys[lat(0,0)]=0 sym2=kwant.TranslationalSymmetry((1,0),(0,1)) lead=kwant.Builder(sym2) lead[lat(0,0)]=0 lead[lat.neighbors()]=-1 sym3=kwant.TranslationalSymmetry((-1,0),(0,1)) lead2=kwant.Builder(sym3) lead2[lat(0,0)]=0 lead2[lat.neighbors()]=-1 sys=kwant.wraparound.wraparound(sys) lead=kwant.wraparound.wraparound(lead,keep=0) sys.attach_lead(lead) sys.attach_lead(lead.reversed()) kwant.plot(sys) def Trans(E): transmission=[] Ky=linspace(0,2*pi,100) for ky in Ky : Sm=kwant.smatrix(sys.finalized(),energy,[ky]) transmission.append(Sm.transmission(0,1)) return trapz(transmission,Ky) Energies=linspace(-1.99,-0.0001,30) Result=[] for energy in Energies: Result.append(Trans(energy)) pyplot.plot(Energies,Result) pyplot.show() On Fri, Oct 25, 2019 at 12:50 PM Khani Hosein <hoseinkhaniphy@gmail.com> wrote:
Dear all, I am using kwant to calculate the transmission of a bulk system. I use " sys = kwant.wraparound.wraparound(sys) and lead = kwant.wraparound.wraparound(lead, keep=0)" to change my tight-binding ribbon system to a bulk system. The transmission is obtained using: kys = np.arange(-0.5, 0.5, 0.001) for ky in kys: smatrix = kwant.smatrix(sys, energy, [ky]) transmission.append(smatrix.transmission(1, 0))
I want to obtain the Transmission vs the incident angle of an electron, and I also need to do the integration ∫T(ky, E) dky or ∫T(θ,E)cosθdθ. I do not undstand the ky in the system with kwant.wraparoun, what is the unit of ky, what is k here for the system. Can you give me some advices on this?Thanks in advance. The definition of incident angle is shown in the attached Fig.1, the band structure for my bulk system is shown in attached Fig.2 and the Tranmission vs ky is shown in Fig.3 (I do not know how the set the values for ky). Regards, Hosein Khani
-- Abbout Adel
Dear khani, I would like to correct my answer and complete it by answering your request. I stated that for an infinite system the conductance is infinite and one should study something like T(E)/W where W is the width of the system which we take to infinity. This is correct. I stated also that we deduce that integral T(E,ky) dky should also be infinite! That is not correct. Indeed, as long as the integral is on one Brillouin zone, it will be finite. (W/pi is the number of Brillouin zones in the finite case!) I also mentioned that the program I shared ls last time does not wraparound the scattering region correctly: the reason is that I did a stupid question. I forgot to put sys[lat.neighbors()]=-1 ! (although the system is one site, we need to put the hoppings since it has a translational symmetry. ) Below, you can find the correct program which verifies the analytical formula I proposed. You can also find how to put a potential in the scattering region. The generalization to Graphene is straightforward. 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 Sun, Oct 27, 2019 at 2:42 PM Abbout Adel <abbout.adel@gmail.com> wrote:
Dear Hosein,
Let me give you my understanding of the problem and then give you an example with kwant. I would love to hear a feedback on this matter. The best way to deal with this problem is to start with the easiest case: 2D square lattice. The transmission of an infinite 2D system is the limit of a waveguide with width W when W goes to infinity. but we know that the transmission, in this case, is: 2*W/lambda, where lambda is the electron wavelength.
So you can see that the conductance (transmission) goes to infinity when W---> infinity! So, it is better to talk about conductivity rather than conductance (conductivity =conductance/W)
I remember that I calculated this for a square lattice during my thesis and found: T(E)/W =-1/pi arcos(-1+abs(E/2)) (onsite potential v=0)
That means if you do just T(E)=0Intgral T(E, ky) dky , it should diverge in 2D!
Let us go back to kwant and see why we get a finite result with a program as yours. For a uniform 2D system you need to do:
sys=kwant.wraparound.wraparound(sys) lead=kwant.wraparound.wraparound(lead, keep=0)
The problem with this is that when you call the scattering matrix: Sm=kwant.smatrix(sys.finalized(),energy,[ky])
Only the lead gets the argument ky! (I don't know why). This means that only the lead was wraparounded and got an effective onsite potential (-2t cos(ky)) but not the system! I checked this analytically for the transmission and found T(E=-1, ky=pi/4)=(1+2*sqrt(2))/(3+2*sqrt(2)) which is the same as obtained by kwant :0.6568
This confirms my understanding. (I didn't have enough time to think about how to correct this)
Another way of accessing the transmission and avoiding what I described above is s just to look at the self energy for each ky and each time you have an eigenvalue with an imaginary part you have one conducting mode.
Your question about the angle: since you have ky, you find the corresponding kx at E from the conducting modes and the angle between them is what you are searching.
I hope this helps, Regards
from numpy import array,linspace,sqrt,sin,cos,pi,exp import kwant from matplotlib import pyplot lat=kwant.lattice.square() sym1=kwant.TranslationalSymmetry((0,1)) sys=kwant.Builder(sym1)
sys[lat(0,0)]=0
sym2=kwant.TranslationalSymmetry((1,0),(0,1)) lead=kwant.Builder(sym2) lead[lat(0,0)]=0 lead[lat.neighbors()]=-1
sym3=kwant.TranslationalSymmetry((-1,0),(0,1)) lead2=kwant.Builder(sym3) lead2[lat(0,0)]=0 lead2[lat.neighbors()]=-1 sys=kwant.wraparound.wraparound(sys) lead=kwant.wraparound.wraparound(lead,keep=0) sys.attach_lead(lead) sys.attach_lead(lead.reversed())
kwant.plot(sys) def Trans(E): transmission=[] Ky=linspace(0,2*pi,100) for ky in Ky : Sm=kwant.smatrix(sys.finalized(),energy,[ky]) transmission.append(Sm.transmission(0,1)) return trapz(transmission,Ky)
Energies=linspace(-1.99,-0.0001,30) Result=[] for energy in Energies: Result.append(Trans(energy))
pyplot.plot(Energies,Result) pyplot.show()
On Fri, Oct 25, 2019 at 12:50 PM Khani Hosein <hoseinkhaniphy@gmail.com> wrote:
Dear all, I am using kwant to calculate the transmission of a bulk system. I use " sys = kwant.wraparound.wraparound(sys) and lead = kwant.wraparound.wraparound(lead, keep=0)" to change my tight-binding ribbon system to a bulk system. The transmission is obtained using: kys = np.arange(-0.5, 0.5, 0.001) for ky in kys: smatrix = kwant.smatrix(sys, energy, [ky]) transmission.append(smatrix.transmission(1, 0))
I want to obtain the Transmission vs the incident angle of an electron, and I also need to do the integration ∫T(ky, E) dky or ∫T(θ,E)cosθdθ. I do not undstand the ky in the system with kwant.wraparoun, what is the unit of ky, what is k here for the system. Can you give me some advices on this?Thanks in advance. The definition of incident angle is shown in the attached Fig.1, the band structure for my bulk system is shown in attached Fig.2 and the Tranmission vs ky is shown in Fig.3 (I do not know how the set the values for ky). Regards, Hosein Khani
-- Abbout Adel
-- Abbout Adel
participants (2)
-
Abbout Adel
-
Khani Hosein