Graphene and the Haldane Model#
This tutorial builds up from the semimetallic Dirac cones of graphene to the first Chern insulator: Haldane’s 1988 model of the quantum anomalous Hall effect without a net magnetic field.
Graphene’s Dirac cones#
physicskit.condensed.models.graphene_hamiltonian() is the nearest-neighbor
tight-binding Bloch Hamiltonian on the honeycomb lattice, in the reduced
crystal-momentum convention used throughout physicskit.condensed
(see physicskit.condensed.tight_binding). Its two bands touch
linearly at the corners of the Brillouin zone:
import numpy as np
from physicskit.condensed.models import graphene_hamiltonian
K = np.array([2 * np.pi / 3, 4 * np.pi / 3])
print(np.linalg.eigvalsh(graphene_hamiltonian(*K))) # ~[0, 0]
print(np.linalg.eigvalsh(graphene_hamiltonian(*(K + [1e-3, 0])))) # +-0.00087
The vanishing gap at K and its time-reversed partner is protected by
inversion and time-reversal symmetry together. Breaking either one opens a gap.
Breaking time reversal: the Haldane model#
physicskit.condensed.models.haldane_model() adds a complex
next-nearest-neighbor hopping \(t_2 e^{i\phi}\), circulating in
opposite senses on the two sublattices. This breaks time-reversal symmetry
without any net magnetic flux through the unit cell – the hallmark of
the quantum anomalous Hall effect:
from physicskit.condensed.models import haldane_model
from physicskit.condensed.topology import compute_chern_number
H = lambda k1, k2: haldane_model(k1, k2, t=1.0, t2=0.2, phi=np.pi / 2, M=0.0)
print(compute_chern_number(H, grid_size=30)) # [1, -1]
The lower band now carries Chern number \(C = +1\): a topological
invariant that cannot change under any smooth, gap-preserving deformation
of the Hamiltonian. Adding a large enough sublattice mass M closes and
reopens the gap in a trivial way, driving the system back to
\(C = 0\):
H_trivial = lambda k1, k2: haldane_model(k1, k2, t=1.0, t2=0.2, phi=np.pi / 2, M=2.0)
print(compute_chern_number(H_trivial, grid_size=30)) # [0, 0]
Visualizing the Berry curvature#
The Chern number is the integral of the Berry curvature over the
Brillouin zone. physicskit.condensed.topology.compute_berry_curvature()
exposes the curvature field itself, which
physicskit.condensed.visualizers.plot_berry_curvature() renders as a
heatmap – the curvature concentrates near the (former) Dirac points:
from physicskit.condensed.topology import compute_berry_curvature
from physicskit.condensed.visualizers import plot_berry_curvature
F = compute_berry_curvature(H, grid_size=40, band_index=0)
fig, ax = plot_berry_curvature(F)
See Also#
The SSH Model and Topological Edge States for the 1D analog (SSH chain).
Breakthroughs in Condensed Matter Physics for the historical context of the TKNN invariant and Haldane’s 1988 construction.