{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Quantum Hall effect and disorder "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Magnetic field"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### What does a magnetic field do to electrons?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Electrons in a magnetic field experience the Lorentz force, effectively forcing electrons onto circular cyclotron orbits. Hence, electrons in a strong enough magnetic field do not move forward any more. The only exception are electrons near a boundary: the reflection from the boundary leads to so-called skipping orbits where electrons can effectively flow along a boundary (see figure below)\n",
"\n",
"\n",
"\n",
"This is a completely classical picture, but it turns out this picture can be also used to understand quantum. In particular, in a magnetic field, electrons in the bulk get localized (and form the so-called Landau levels). At the boundaries of the system we then find quantum Hall edge states. These are localized towards the boundary, and only flow in one direction, just as the skipping orbits. The stronger the magnetic field, the smaller the cyclotron orbits, and the more localized the edge states are to the boundary."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Magnetic field and tight-binding"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Lorentz force enters quantum mechanics through the magnetic vector potential, given by\n",
"\n",
"$$\\mathbf{B} = \\nabla \\times \\mathbf{A}$$\n",
"\n",
"For a constant magnetic field $B$ in $z$-direction (perpendicular to the 2DEG), we can thus choose\n",
"\n",
"$$\\mathbf{A} = \\begin{pmatrix}-B y\\\\0\\\\0\\end{pmatrix}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"The vector potential enters in the tight-binding model as a so-called Peier's phase,\n",
"where we replace a hopping $t_{ij}$ as\n",
"\n",
"$$t_{ij} \\rightarrow t_{ij} \\times \\exp\\left(i \\frac{e}{\\hbar} \\int_{\\mathbf{x}_j}^{\\mathbf{x}_i} \\mathbf{A}(\\mathbf{x}) d\\mathbf{s}\\right)$$\n",
"\n",
"For our 2D square lattice model this is easy to solve, and we find that all hoppings\n",
"must be multiplied with a phase\n",
"\n",
"$$\\exp\\left(i\\, \\frac{e}{\\hbar} B \\frac{(y_i + y_j)}{2} (x_i-x_j)\\right)$$\n",
"\n",
"Note that we can rewrite this as \n",
"\n",
"$$\n",
"\\exp\\left(i\\, 2 \\pi \\frac{\\phi}{\\phi_0} \\frac{(y_i + y_j)(x_i-x_j)}{2a^2} \\right)\n",
"$$\n",
"\n",
"where $\\phi = B a^2$ is the flux through a unit cell in the square lattice, and $\\phi_0 = h/e$ the flux quantum."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Some subtleties with regards to transport"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You have seen that a lead has to have a translational symmetry. Only then we can define propagating modes!\n",
"\n",
"For a magnetic field in the $z$-direction, we can have different choices for the vector potential. For example, as above,\n",
"\n",
"$$\\mathbf{A} =\\begin{pmatrix}-B y\\\\0\\\\0\\end{pmatrix}$$\n",
"or\n",
"$$\\mathbf{A} =\\begin{pmatrix}0\\\\B x\\\\0\\end{pmatrix}$$\n",
"\n",
"Now imagine I have a lead in $x$-direction: then the second choice breaks translational symmetry!\n",
"\n",
"In order to compute transport, we thus always have to choose a vector potential that *preserves* the translational symmetry of the lead. It turns out that this always means that the \n",
"vector potential must point along the direction of the lead."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Disorder"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Disorder is enters the Hamiltonian as a disorder potential $V_\\text{dis}$. There are various models for such potentials. A very commonly used model is to add a random on-site potential to the tight-binding model:\n",
"\n",
"$$V_\\text{dis} = \\sum_i U_i |\\mathbf{x}_i\\rangle \\langle \\mathbf{x}_i|$$\n",
"\n",
"where the $U_i$ are choosen randomly from a uniform distribution $[-U_0/2, U_0/2]$.\n",
"\n",
"It is worth noting that the disorder strength $U_0$ by itself does not mean much. Instead\n",
"one must quantify the disorder strength by an physical quantitiy. For disorder this is the \n",
"mean free path. From Fermi's golden rule one can compute that for this model\n",
"\n",
"$$l_\\text{mfp} = 48 a\\, \\frac{\\sqrt{E/t}}{(U_0/t)^2}$$\n",
"\n",
"where $a$ is again the lattice constant, $t$ the hopping energy on the square lattice.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Making the kwant system"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's the the magnetic field in action in a kwant system:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import kwant\n",
"from kwant.digest import uniform # a (deterministic) pseudorandom number generator"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%run matplotlib_setup.ipy\n",
"\n",
"import numpy as np\n",
"from cmath import exp\n",
"from types import SimpleNamespace"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Particular about this example is that we have now both the onsite energies and the hoppings position-dependent. Hence, we need to define functions for both:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lat = kwant.lattice.square(a=1)\n",
"\n",
"t = 1\n",
"W = 30\n",
"L = 50\n",
"\n",
"def onsite(site, params):\n",
" return params.U0 * (uniform(repr(site), repr(params.salt)) - 0.5) + 4 * t\n",
"\n",
"def hopping(site_i, site_j, params):\n",
" xi, yi = site_i.pos\n",
" xj, yj = site_j.pos\n",
" return -exp(-0.5j * params.phi * (xi - xj) * (yi + yj))\n",
"\n",
"sys = kwant.Builder()\n",
"sys[(lat(x, y) for x in range(L) for y in range(W))] = onsite\n",
"sys[lat.neighbors()] = hopping\n",
"\n",
"lead = kwant.Builder(kwant.TranslationalSymmetry([-1, 0]))\n",
"lead[(lat(0, y) for y in range(W))] = 4 * t # no disorder in lead!\n",
"lead[lat.neighbors()] = hopping\n",
"\n",
"sys.attach_lead(lead)\n",
"sys.attach_lead(lead.reversed())\n",
"\n",
"sys = sys.finalized()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"kwant.plot(sys);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Formation of edge channels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's first show how the Landau levels are formed by cranking up the magnetic field. We will plot the sum of all the wave function probabilities of all "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from ipywidgets import interact"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"U0 = 0.3\n",
"salt = 13\n",
"energy = 0.2\n",
"\n",
"def plot_wf(phi=0):\n",
" params = SimpleNamespace(phi=phi, U0=U0, salt=salt)\n",
" wfs = kwant.wave_function(sys, energy=energy, args=[params])\n",
" scattering_wf = wfs(0) # all scattering wave functions from lead 0\n",
" kwant.plotter.map(sys, np.sum(abs(scattering_wf)**2, axis=0));\n",
"\n",
"interact(plot_wf, phi=(0, 0.15, 0.002))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One can clearly see how the wave function is very unstructured without a magnetic field. With $B$, the wave functon is forced towards one side of the wire!\n",
"\n",
"If you look very closely, you however see that this does not happen uniformily. There are\n",
"always values of ``phi`` where the wave function starts to spread again into the whole system, although it was already localized to an edge!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The reason for this \"spreading\" is that for these magnetic field values we have Landau level close to our energy. The finite disorder broadens the Landau level, giving rise to a bulk conductance.\n",
"\n",
"We can observe this clearly if we correlate the band structure with the wave function plots:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"U0 = 0.3\n",
"salt = 13\n",
"energy = 0.2\n",
"\n",
"def plot_wf(phi=0):\n",
" params = SimpleNamespace(phi=phi, U0=U0, salt=salt)\n",
" wfs = kwant.wave_function(sys, energy=energy, args=[params])\n",
" scattering_wf = wfs(0) # all scattering wave functions from lead 0\n",
" \n",
" fig = plt.Figure(figsize=(15,7))\n",
" ax1 = fig.add_subplot(121)\n",
" kwant.plotter.bands(sys.leads[0], args=[params], ax=ax1)\n",
" ax1.set_ylim(0, 0.3)\n",
" ax1.set_xlim(-3, 3)\n",
" ax1.plot([-4,4], [energy]*2, \"k--\")\n",
" ax2 = fig.add_subplot(122)\n",
" kwant.plotter.map(sys, np.sum(abs(scattering_wf)**2, axis=0), ax=ax2)\n",
" kwant.plotter.output_fig(fig)\n",
" \n",
"interact(plot_wf, phi=(0, 0.15, 0.002))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Edge states in transport"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Without disorder, we have seen that the conductance of a wire is quantized to the number\n",
"of modes in the wire. With disorder, there is scattering, and the conductance will be smaller than the clean wire case.\n",
"\n",
"Increasing the magnetic field reduces scattering due to the formation of quantum Hall\n",
"edge channels. Hence, we recover conductance quantization:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"energy = 0.2\n",
"U0 = 0.3\n",
"salt = 13\n",
"\n",
"phis = np.linspace(0, 0.1, 51)\n",
"\n",
"Gs = []\n",
"for phi in phis:\n",
" params = SimpleNamespace(phi=phi, U0=U0, salt=salt)\n",
" smat = kwant.smatrix(sys, energy=energy, args=[params])\n",
" Gs.append(smat.transmission(1, 0))\n",
" \n",
"plt.plot(phis, Gs);\n",
"plt.ylabel(\"G [G_0]\")\n",
"plt.xlabel(\"phi\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note how well-defined conductance plateaus form as the magnetic field is increased! \n",
"\n",
"You might ask, why overall conductance goes down: This is due to the Landau level degeneracy and spacing increasing with magnetic field. Hence, for larger field less Landau levels are occupied. As the number of Landau levels determines also the number of edge channels, we have less edge channels for increasing magnetic field"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Your turn!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- add some more structure to the problem, for example by using a more interesting shape. Combine this example with the quantum point contact from the previous tutorial!\n",
"- write a function that computes the disorder strength necessary to obtain a given mean free path. Use this to choose different disorder strengths and see what happens to the wave function.\n",
"- *(probably too long for during the tutorial, but a nice exercise)* Knowing the connection\n",
" between mean free path \n",
" $l_\\text{mfp}$ and disorder strength $U_0$, check the dependence of the conductance at \n",
" zero magnetic field on the mean free path. In particular, you should (roughly) find\n",
" \n",
" $$ G = \\frac{N}{1 + \\frac{2}{\\pi} \\frac{L}{l_\\text{mfp}}} $$\n",
" \n",
" where $N$ is the number of channels in the (clean) wire, and $L$ the wire length (see\n",
" Beenakker, Rev. Mod. Phys. 69, 731 (1997). The factor $\\frac{2}{\\pi}$ is particular for\n",
" 2D)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}