{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Aharonov-Bohm effect"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"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)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this tutorial, we are going to discuss one of the cornerstone of quantum nanoelectronics,\n",
"the Aharonov-Bohm effect. We are going to calculate the conductance of a ring through which one applies a magnetic field.\n",
"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,\n",
"\n",
"$$H = \\frac{1}{2m} [ P - eA(R)]^2 + V(R)$$\n",
"\n",
"where $B(r) = \\nabla \\times A(r) = 0$ inside the sample itself (but not in the hole of the ring). Then the function\n",
"\n",
"$$F(r) = \\int_{r_-}^r A(r).dr $$ is well defined independently of the path from $r_-$ to $r$. Let us define,\n",
"\n",
"$$\\tilde \\Psi(r) = e^{iF(r)} \\Psi(r)$$. \n",
"\n",
"We find that $\\tilde \\Psi$ obeys the free equation with $H = P^2/2m + V(R)$ to which we add the *boundary condition*,\n",
"\n",
"$$\\tilde \\Psi(r_+) = e^{iF(r_+)} \\tilde \\Psi(r_-)$$\n",
"\n",
"with $$F(r_+) = \\frac{B S}{\\hbar/e}$$\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from math import pi\n",
"\n",
"%run matplotlib_setup.ipy\n",
"from matplotlib import pyplot\n",
"import numpy as np\n",
"import kwant"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lat=kwant.lattice.square()\n",
"L,W=30,16\n",
"def myshape(R): return ( \n",
" (R[0]**2 + R[1]**2) > (L-W/2)**2 and \n",
" (R[0]**2 + R[1]**2) < (L+W/2)**2)\n",
"\n",
"#L,W=30,16\n",
"#def myshape_ellipse(R): return ( \n",
"# (R[0]**2/2. + R[1]**2) > (L-W/2)**2 and \n",
"# (R[0]**2/2. + R[1]**2) < (L+W/2)**2)\n",
"\n",
"\n",
"H=kwant.Builder()\n",
"\n",
"H[lat.shape(myshape,(L,0) )]=4\n",
"\n",
"#H[lat.shape(myshape_ellipse,(int(L*1.14),0)) ]=4\n",
"\n",
"\n",
"H[lat.neighbors()]=1\n",
"\n",
"def Aharonov_Bohm(site1,site2,phi): return np.exp(-2j*pi*phi)\n",
" \n",
"for hop in H.hoppings():\n",
" if hop[0].tag[0]==1 and hop[0].tag[1]>0 and hop[1].tag[0]==0: \n",
" H[hop]=Aharonov_Bohm\n",
"\n",
"sym=kwant.TranslationalSymmetry(lat.vec((1,0)))\n",
"def lead_shape(R): return abs(R[1]) < W/2 and abs(R[0]) <3\n",
"Hlead =kwant.Builder(sym)\n",
"Hlead[lat.shape(lead_shape,(0,0) )]=4\n",
"Hlead[lat.neighbors()]=1\n",
"H.attach_lead(Hlead)\n",
"H.attach_lead(Hlead.reversed())\n",
"kwant.plot(H);"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\n",
"Hf=H.finalized()\n",
"data = []\n",
"phis = np.linspace(0,1.,50)\n",
"for phi in phis:\n",
" smatrix = kwant.smatrix(Hf, 3.3,args=[phi])\n",
" data.append(smatrix.transmission(1, 0))\n",
"pyplot.plot(phis, data,'o');\n",
"pyplot.xlabel('$\\phi = BS/(h/e)$')\n",
"pyplot.ylabel('g in unit of $(2e^2/h)$');\n",
"pyplot.title('Aharonov-Effect')"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"We see that the Aharonov-Bohm effect contains several harmonics\n",
"$$ g = g_0 + g_1 cos(\\phi) + g_2 cos(2\\phi) + ...$$\n",
"* How can we get just one harmonics (as in most experiments)? \n",
"* Try L = 100 and W= 12, what do you see?\n",
"* The results should not depend on the position of the gauge transform, can you check that?\n",
"* Can you make a different sample with an assymetric shape, say a rectangular shape?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Real magnetic field\n",
"\n",
"In real life it is difficult to put the field only in the hole so experimentalists tend to\n",
"apply a uniform field everywhere. Let us modify the script to just do that. You need now to pick up a\n",
"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."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"from math import pi\n",
"from matplotlib import pyplot\n",
"import kwant\n",
"\n",
"lat=kwant.lattice.square()\n",
"L,W=100,12\n",
"\n",
"def myshape(R): return ( \n",
" (R[0]**2 + R[1]**2) > (L-W/2)**2 and \n",
" (R[0]**2 + R[1]**2) < (L+W/2)**2)\n",
"H=kwant.Builder()\n",
"H[lat.shape(myshape,(L,0) )]=4\n",
"\n",
"def Field(site1,site2,phi):\n",
" x1,y1=site1.pos\n",
" x2,y2=site2.pos\n",
" return -np.exp(-0.5j * phi * (x1 - x2) * (y1 + y2))\n",
"\n",
"H[lat.neighbors()] = Field\n",
"\n",
"sym=kwant.TranslationalSymmetry(lat.vec((1,0)))\n",
"def lead_shape(R): return abs(R[1]) < W/2 and abs(R[0]) <3\n",
"Hlead =kwant.Builder(sym)\n",
"Hlead[lat.shape(lead_shape,(0,0) )]=4\n",
"Hlead[lat.neighbors()]=Field\n",
"H.attach_lead(Hlead)\n",
"H.attach_lead(Hlead.reversed())\n",
"kwant.plot(H);"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"Hf=H.finalized()\n",
"data = []\n",
"phis = np.linspace(0.,0.0005,50)\n",
"for phi in phis:\n",
" smatrix = kwant.smatrix(Hf, 3.3,args=[phi])\n",
" data.append(smatrix.transmission(1, 0))\n",
"pyplot.plot(phis, data);\n",
"pyplot.xlabel('$\\phi = Ba^2/(h/e)$')\n",
"pyplot.ylabel('g in unit of $(2e^2/h)$');\n",
"pyplot.title('Aharonov-Effect')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Do you understand why the x - scale is so much smaller?\n",
"* What should happen at higher field?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "IPython 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.4"
},
"name": "AharonovBohm.ipynb"
},
"nbformat": 4,
"nbformat_minor": 0
}