reproducing simple analytical solution (chain of atoms)
Dear Kwant Community, In my research work I've come to the simple test problem which can be solved both using Kwant and analytically. It's about scattering of the electron wave in the chain of atoms in which hopping integral is t1 for x < 0 and t2 for x > 0. Almost all the solution is in the picture in the attachments. Realization of this analytical solution is presented in testChain.py which plots the dependence on scattering energy of the transmission coefficient |tau|**2 * v2/v1, vj = -2*tj*sin(phi_j) - velocity of the electron. The testChain-kwant.py also plots transmission coefficient versus energy in the same system, but the results are not coincide. So, my question, is it possible to reach the accordance between the solutions in both cases? P.S. Analytical solution seems to be correct, at least |rho|**2 + |tau|**2 * v2/v1 is 1 identically. P.P.S. Is it possible to draw the different hopping kinds with different colors and line styles? It can be useful for controlling errors when building the geometries with hoppings between second-neighbors... Sincerely, Jambulat
Dear Jambulat, Your programs are well written but with no comments it is heavy to follow them. For the system you propose, the analytical result is straightforward using the Landauer -Buttiker formula: After simplification, we get: T= 4*Gamma1*Gamma2/(Gamma1+Gamma2)**2 with Gamma the broadening. You can check this as follows import kwant from matplotlib import pyplot from numpy import * t1,t2=1,1.5 lat = kwant.lattice.square(a) sys = kwant.Builder() sys[lat(0,0) ] = 0 ###system one site x==0 #define and attach the leads lead1 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) lead1[lat(0, 0) ] = 0 lead1[lat.neighbors()] = -t1 lead2 = kwant.Builder(kwant.TranslationalSymmetry((+a, 0))) lead2[lat(1, 0) ] = 0 lead2[lat.neighbors()] = -t2 sys.attach_lead(lead1) sys.attach_lead(lead2) #finalize system syst=sys.finalized() energies=linspace(-1.999,1.999,50) #transmission calculated by Kwant transmission=[] for E in energies: smatrix=kwant.smatrix(syst,E) transmission.append(smatrix.transmission(0,1)) #the linewidth Gamma (Landauer Buttiker formula) def Gamma(E,t): return sqrt(4*t**2-E**2) #analytical result of the conductance using Landauer Buttiker formula def T(E,t1,t2): return 4*Gamma(E,t1)*Gamma(E,t2)/abs(Gamma(E,t1)+Gamma(E,t2))**2 T=[T(E,1.,1.5) for E in energies] pyplot.plot(energies,T) #kwant pyplot.plot(energies,transmission,'ro') #analytical result pyplot.ylabel('Transmission') pyplot.xlabel('Energy') pyplot.show() Hope this helps. Adel On Wed, May 31, 2017 at 7:34 PM, Jambulat Basaev <basaev.ja@gmail.com> wrote:
Dear Kwant Community,
In my research work I've come to the simple test problem which can be solved both using Kwant and analytically. It's about scattering of the electron wave in the chain of atoms in which hopping integral is t1 for x < 0 and t2 for x > 0. Almost all the solution is in the picture in the attachments. Realization of this analytical solution is presented in testChain.py which plots the dependence on scattering energy of the transmission coefficient |tau|**2 * v2/v1, vj = -2*tj*sin(phi_j) - velocity of the electron. The testChain-kwant.py also plots transmission coefficient versus energy in the same system, but the results are not coincide.
So, my question, is it possible to reach the accordance between the solutions in both cases?
P.S. Analytical solution seems to be correct, at least |rho|**2 + |tau|**2 * v2/v1 is 1 identically.
P.P.S. Is it possible to draw the different hopping kinds with different colors and line styles? It can be useful for controlling errors when building the geometries with hoppings between second-neighbors...
Sincerely, Jambulat
-- Abbout Adel
Dear Adel, Thank You very much for your answer. It seems the problem is in my deriving Landauer-Buttiker formula. I should find out why the approach stated in the jpg file doesn't work. I need to derive this formula by myself because my next step is to chek the chain with second- and third-neighbour hoppings. I want to be certain that I set the topology of hoppings in Kwant correctly. Thank You once again, suppose I'll be back with new questions in some time) Sincerely, Jambulat 2017-06-01 1:14 GMT+03:00 Abbout Adel <abbout.adel@gmail.com>:
Dear Jambulat,
Your programs are well written but with no comments it is heavy to follow them.
For the system you propose, the analytical result is straightforward using the Landauer -Buttiker formula:
After simplification, we get: T= 4*Gamma1*Gamma2/(Gamma1+Gamma2)**2
with Gamma the broadening. You can check this as follows
import kwant from matplotlib import pyplot from numpy import *
t1,t2=1,1.5
lat = kwant.lattice.square(a) sys = kwant.Builder() sys[lat(0,0) ] = 0 ###system one site x==0
#define and attach the leads lead1 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) lead1[lat(0, 0) ] = 0 lead1[lat.neighbors()] = -t1
lead2 = kwant.Builder(kwant.TranslationalSymmetry((+a, 0))) lead2[lat(1, 0) ] = 0 lead2[lat.neighbors()] = -t2
sys.attach_lead(lead1) sys.attach_lead(lead2)
#finalize system syst=sys.finalized() energies=linspace(-1.999,1.999,50)
#transmission calculated by Kwant transmission=[] for E in energies: smatrix=kwant.smatrix(syst,E) transmission.append(smatrix.transmission(0,1))
#the linewidth Gamma (Landauer Buttiker formula) def Gamma(E,t): return sqrt(4*t**2-E**2)
#analytical result of the conductance using Landauer Buttiker formula def T(E,t1,t2): return 4*Gamma(E,t1)*Gamma(E,t2)/abs(Gamma(E,t1)+Gamma(E,t2))**2
T=[T(E,1.,1.5) for E in energies]
pyplot.plot(energies,T) #kwant pyplot.plot(energies,transmission,'ro') #analytical result pyplot.ylabel('Transmission') pyplot.xlabel('Energy') pyplot.show()
Hope this helps. Adel
On Wed, May 31, 2017 at 7:34 PM, Jambulat Basaev <basaev.ja@gmail.com> wrote:
Dear Kwant Community,
In my research work I've come to the simple test problem which can be solved both using Kwant and analytically. It's about scattering of the electron wave in the chain of atoms in which hopping integral is t1 for x < 0 and t2 for x > 0. Almost all the solution is in the picture in the attachments. Realization of this analytical solution is presented in testChain.py which plots the dependence on scattering energy of the transmission coefficient |tau|**2 * v2/v1, vj = -2*tj*sin(phi_j) - velocity of the electron. The testChain-kwant.py also plots transmission coefficient versus energy in the same system, but the results are not coincide.
So, my question, is it possible to reach the accordance between the solutions in both cases?
P.S. Analytical solution seems to be correct, at least |rho|**2 + |tau|**2 * v2/v1 is 1 identically.
P.P.S. Is it possible to draw the different hopping kinds with different colors and line styles? It can be useful for controlling errors when building the geometries with hoppings between second-neighbors...
Sincerely, Jambulat
-- Abbout Adel
Dear Adel (and other kwantazing people), I've found the way how to obtain the formula to which you pointed me. If someone is interested, its derivation in terms of scattering theory is in the picture attached. If there will be some issues with reproducing in kwant the solution of system with non-first-neighbour hoppings, I hope you help me once again. Sincerely, Jambulat 2017-06-01 1:14 GMT+03:00 Abbout Adel <abbout.adel@gmail.com>:
Dear Jambulat,
Your programs are well written but with no comments it is heavy to follow them.
For the system you propose, the analytical result is straightforward using the Landauer -Buttiker formula:
After simplification, we get: T= 4*Gamma1*Gamma2/(Gamma1+Gamma2)**2
with Gamma the broadening. You can check this as follows
import kwant from matplotlib import pyplot from numpy import *
t1,t2=1,1.5
lat = kwant.lattice.square(a) sys = kwant.Builder() sys[lat(0,0) ] = 0 ###system one site x==0
#define and attach the leads lead1 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) lead1[lat(0, 0) ] = 0 lead1[lat.neighbors()] = -t1
lead2 = kwant.Builder(kwant.TranslationalSymmetry((+a, 0))) lead2[lat(1, 0) ] = 0 lead2[lat.neighbors()] = -t2
sys.attach_lead(lead1) sys.attach_lead(lead2)
#finalize system syst=sys.finalized() energies=linspace(-1.999,1.999,50)
#transmission calculated by Kwant transmission=[] for E in energies: smatrix=kwant.smatrix(syst,E) transmission.append(smatrix.transmission(0,1))
#the linewidth Gamma (Landauer Buttiker formula) def Gamma(E,t): return sqrt(4*t**2-E**2)
#analytical result of the conductance using Landauer Buttiker formula def T(E,t1,t2): return 4*Gamma(E,t1)*Gamma(E,t2)/abs(Gamma(E,t1)+Gamma(E,t2))**2
T=[T(E,1.,1.5) for E in energies]
pyplot.plot(energies,T) #kwant pyplot.plot(energies,transmission,'ro') #analytical result pyplot.ylabel('Transmission') pyplot.xlabel('Energy') pyplot.show()
Hope this helps. Adel
On Wed, May 31, 2017 at 7:34 PM, Jambulat Basaev <basaev.ja@gmail.com> wrote:
Dear Kwant Community,
In my research work I've come to the simple test problem which can be solved both using Kwant and analytically. It's about scattering of the electron wave in the chain of atoms in which hopping integral is t1 for x < 0 and t2 for x > 0. Almost all the solution is in the picture in the attachments. Realization of this analytical solution is presented in testChain.py which plots the dependence on scattering energy of the transmission coefficient |tau|**2 * v2/v1, vj = -2*tj*sin(phi_j) - velocity of the electron. The testChain-kwant.py also plots transmission coefficient versus energy in the same system, but the results are not coincide.
So, my question, is it possible to reach the accordance between the solutions in both cases?
P.S. Analytical solution seems to be correct, at least |rho|**2 + |tau|**2 * v2/v1 is 1 identically.
P.P.S. Is it possible to draw the different hopping kinds with different colors and line styles? It can be useful for controlling errors when building the geometries with hoppings between second-neighbors...
Sincerely, Jambulat
-- Abbout Adel
participants (2)
-
Abbout Adel
-
Jambulat Basaev