Aharonov-Bohm effect

Image [CC-BY-SA-3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.en), original by [Kismalac](https://commons.wikimedia.org/wiki/File:AharonovBohmEffect.svg)

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) + ...$$

  • How can we get just one harmonics (as in most experiments)?
  • Try L = 100 and W= 12, what do you see?
  • The results should not depend on the position of the gauge transform, can you check that?
  • Can you make a different sample with an assymetric shape, say a rectangular shape?

In [ ]:

Real magnetic field

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')
  • Do you understand why the x - scale is so much smaller?
  • What should happen at higher field?