In this tutorial, we are going to discuss one of the cornerstone of quantum nanoelectronics, the Aharonov-Bohm effect. We are going to calculate the conductance of a ring through which one applies a magnetic field. One interesting aspect of the Aharonov-Bohm effect is that the magnetic field can actually vanish in the sample itself. All that is required is that the potential vector does not. This is a very nice proof that in quantum mechanics the electron motion indeed couples to the potential vector, not the magnetic field. This can be seen from the following Gauge transformation: let us consider the Schrodinger equation $H\Psi = E\Psi$ with following Hamiltonian,
$$H = \frac{1}{2m} [ P - eA(R)]^2 + V(R)$$where $B(r) = \nabla \times A(r) = 0$ inside the sample itself (but not in the hole of the ring). Then the function
$$F(r) = \int_{r_-}^r A(r).dr $$is well defined independently of the path from $r_-$ to $r$. Let us define,
$$\tilde \Psi(r) = e^{iF(r)} \Psi(r)$$.
We find that $\tilde \Psi$ obeys the free equation with $H = P^2/2m + V(R)$ to which we add the boundary condition,
$$\tilde \Psi(r_+) = e^{iF(r_+)} \tilde \Psi(r_-)$$with $$F(r_+) = \frac{B S}{\hbar/e}$$
In [ ]:
from math import pi
%run matplotlib_setup.ipy
from matplotlib import pyplot
import numpy as np
import kwant
In [ ]:
lat=kwant.lattice.square()
L,W=30,16
def myshape(R): return (
(R[0]**2 + R[1]**2) > (L-W/2)**2 and
(R[0]**2 + R[1]**2) < (L+W/2)**2)
#L,W=30,16
#def myshape_ellipse(R): return (
# (R[0]**2/2. + R[1]**2) > (L-W/2)**2 and
# (R[0]**2/2. + R[1]**2) < (L+W/2)**2)
H=kwant.Builder()
H[lat.shape(myshape,(L,0) )]=4
#H[lat.shape(myshape_ellipse,(int(L*1.14),0)) ]=4
H[lat.neighbors()]=1
def Aharonov_Bohm(site1,site2,phi): return np.exp(-2j*pi*phi)
for hop in H.hoppings():
if hop[0].tag[0]==1 and hop[0].tag[1]>0 and hop[1].tag[0]==0:
H[hop]=Aharonov_Bohm
sym=kwant.TranslationalSymmetry(lat.vec((1,0)))
def lead_shape(R): return abs(R[1]) < W/2 and abs(R[0]) <3
Hlead =kwant.Builder(sym)
Hlead[lat.shape(lead_shape,(0,0) )]=4
Hlead[lat.neighbors()]=1
H.attach_lead(Hlead)
H.attach_lead(Hlead.reversed())
kwant.plot(H);
In [ ]:
Hf=H.finalized()
data = []
phis = np.linspace(0,1.,50)
for phi in phis:
smatrix = kwant.smatrix(Hf, 3.3,args=[phi])
data.append(smatrix.transmission(1, 0))
pyplot.plot(phis, data,'o');
pyplot.xlabel('$\phi = BS/(h/e)$')
pyplot.ylabel('g in unit of $(2e^2/h)$');
pyplot.title('Aharonov-Effect')
We see that the Aharonov-Bohm effect contains several harmonics $$ g = g_0 + g_1 cos(\phi) + g_2 cos(2\phi) + ...$$
In [ ]:
In real life it is difficult to put the field only in the hole so experimentalists tend to apply a uniform field everywhere. Let us modify the script to just do that. You need now to pick up a phase $\phi$ on each small square. This can be done with the following piece of code - try to modify your code to incorporate this new pieces.
In [ ]:
%matplotlib inline
import numpy as np
from math import pi
from matplotlib import pyplot
import kwant
lat=kwant.lattice.square()
L,W=100,12
def myshape(R): return (
(R[0]**2 + R[1]**2) > (L-W/2)**2 and
(R[0]**2 + R[1]**2) < (L+W/2)**2)
H=kwant.Builder()
H[lat.shape(myshape,(L,0) )]=4
def Field(site1,site2,phi):
x1,y1=site1.pos
x2,y2=site2.pos
return -np.exp(-0.5j * phi * (x1 - x2) * (y1 + y2))
H[lat.neighbors()] = Field
sym=kwant.TranslationalSymmetry(lat.vec((1,0)))
def lead_shape(R): return abs(R[1]) < W/2 and abs(R[0]) <3
Hlead =kwant.Builder(sym)
Hlead[lat.shape(lead_shape,(0,0) )]=4
Hlead[lat.neighbors()]=Field
H.attach_lead(Hlead)
H.attach_lead(Hlead.reversed())
kwant.plot(H);
In [ ]:
Hf=H.finalized()
data = []
phis = np.linspace(0.,0.0005,50)
for phi in phis:
smatrix = kwant.smatrix(Hf, 3.3,args=[phi])
data.append(smatrix.transmission(1, 0))
pyplot.plot(phis, data);
pyplot.xlabel('$\phi = Ba^2/(h/e)$')
pyplot.ylabel('g in unit of $(2e^2/h)$');
pyplot.title('Aharonov-Effect')