Dear Kristjan,
>>> " And the conductance is the sum of the transmission probabilities of
the conduction channels, right? "
Yes this is correct.
The number of conducting channels goes to zeros at higher energies because
you work in a lattice: the dispersion relation is not anymore E=k^2 .
In a lattice, the dispersion relation for a mode 'm' is
E_m=4t-e_m-2*cos(k) (where e_m=-2*cos(m*pi/(W+1)))
in order to recover the results of the continuum, you need to work at low
energies.
in your case, you need to change the theoretical relation by putting a
shift 2-2*cos(pi/(W+1)) for the energies and this will work for the first
mode. you need to do the same thing (shift 2-e_m) for the other modes and
make a sum of the transmissions to obtain the results for higher modes.
a script is included below to show how we recover the exact result.
I hope that this helps
Adel
import kwant
from numpy import sqrt,sin,cos,pi,sinh
# For plotting
from matplotlib import pyplot
def make_system(a=1, t=1.0, W=10, L=30,V0=0):
lat = kwant.lattice.square(a)
sys = kwant.Builder()
sys[(lat(x, y) for x in range(L) for y in range(W))] = 4*t+V0
sys[lat.neighbors()] = -t
#### Define and attach the leads. ####
lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))
lead[(lat(0, j) for j in range(W))] = 4 * t
lead[lat.neighbors()] = -t
sys.attach_lead(lead)
sys.attach_lead(lead.reversed())
return sys
def plot_conductance(sys, energies):
# Compute conductance
data = []
for energy in energies:
smatrix = kwant.smatrix(sys, energy)
data.append(smatrix.transmission(1, 0))
# pyplot.figure()
pyplot.plot(energies, data,lw=2,label="numerics")
pyplot.xlabel("well depth [t]")
pyplot.ylabel("conductance [e^2/h]")
pyplot.legend()
pyplot.show()
def main():
V0=0.1
sys = make_system(V0=V0)
# Check that the system looks as intended.
# kwant.plot(sys)
# Finalize the system.
sys = sys.finalized()
e1=2-2*cos(pi/11) #energy of the first transverse mode
def Cond(E,V0,L=30):
if E-e1-V0<=0:
k=sqrt(-E+e1+V0)
return 1/(1+((V0*sinh(k*L))**2 )/(4*(E-e1)*(-E+e1+V0)))
else:
k=sqrt(E-e1-V0)
return 1/(1+((V0*sin(k*L))**2 )/(4*(E-e1)*(E-e1-V0)))
energies=[0.1+0.001 * i for i in range(300)]
Cond_analytic=[Cond(E,V0) for E in energies]
pyplot.plot(energies,Cond_analytic,"ro",label="analytic")
# We should see conductance steps.
plot_conductance(sys, energies)
# Call the main function if the script gets executed (as opposed to
imported).
# See <http://docs.python.org/library/__main__.html>.
if __name__ == '__main__':
main()
On Mon, Dec 19, 2016 at 4:25 PM, Kristjan Eimre <[email protected]>
wrote:
> Hello again,
>
> Thanks for the ideas. I have fiddled around with Kwant a bit now, and I'm
> trying to recreate quantum tunneling through rectangular potential barrier
> (see [1] for analytical solution). I have also added a figure of the
> analytical solution (rect_trans.png), which shows the transmission
> probability dependence on electron energy.
>
> I modified the 1st tutorial code to include the rectangular barrier (see
> my code in [2]). I have attached the figures i got from the code
> (conductance.png and rect_trans.png). If i have understood correctly, then
> Kwant outputs the conductance depending on excitation energy. And the
> conductance is the sum of the transmission probabilities of the conduction
> channels, right?
>
> I probably should delve deep into books on quantum transport to understand
> some of these things, but perhaps you could give me some answers for a good
> start. I have also calculated the number of conduction channels, but this
> goes to 0 at higher energies. Why does this occur? In the simple analytical
> case, there is no upper bound on electron energies.
>
> Is it even possible to recreate the analytical quantum tunneling result
> for the rectangle barrier in Kwant?
>
> Best regards,
> Kristjan
>
> [1] - https://en.wikipedia.org/wiki/Rectangular_potential_barrier
>
> [2] - http://pastebin.com/jq7CKfSP
>
>
>
>
--
Abbout Adel