The SSH Model and Topological Edge States#

The Su-Schrieffer-Heeger (SSH) chain is the simplest possible topological band model: a 1D dimerized chain with alternating hopping amplitudes \(v\) (intracell) and \(w\) (intercell). It is the standard introduction to bulk-boundary correspondence.

Bulk bands and the Zak phase#

physicskit.condensed.models.ssh_hamiltonian() gives the 2x2 Bloch Hamiltonian. Its gap closes only at \(v = w\); away from that point, the chain is in one of two gapped phases distinguished by the physicskit.condensed.topology.zak_phase(), quantized by chiral symmetry to \(0\) or \(\pi\):

from physicskit.condensed.models import ssh_hamiltonian
from physicskit.condensed.topology import zak_phase

trivial = lambda k: ssh_hamiltonian(k, v=1.0, w=0.5)       # v > w
topological = lambda k: ssh_hamiltonian(k, v=0.5, w=1.0)   # v < w

print(zak_phase(trivial))       # ~0
print(zak_phase(topological))   # ~pi

Cutting the chain open#

Bulk topology alone is not directly observable. The signature of a nontrivial Zak phase appears at the boundary, once translational symmetry is broken. physicskit.condensed.models.ssh_lattice_hamiltonian() builds the same chain as a real-space Hamiltonian, and physicskit.condensed.tight_binding.build_ribbon() truncates it into a finite, open wire:

import numpy as np
from physicskit.condensed.models import ssh_lattice_hamiltonian
from physicskit.condensed.tight_binding import build_ribbon

H = ssh_lattice_hamiltonian(v=0.5, w=1.0)
H_wire = build_ribbon(H, open_direction=0, n_cells=30)
spectrum = np.linalg.eigvalsh(H_wire(np.array([])))
print(np.abs(spectrum).min())  # ~1e-9: a mid-gap, near-zero mode

In the topological phase (\(v < w\)), a pair of eigenvalues sit exponentially close to zero energy, split only by the finite length of the chain – one state localized at each end. In the trivial phase (\(v > w\)), no such state exists; the spectrum is fully gapped.

Visualizing the edge state#

physicskit.condensed.visualizers.plot_edge_state_density() plots the probability density of the closest-to-zero eigenstate, revealing the expected exponential localization \(|\psi(x)|^2 \sim e^{-2x/\xi}\) at the chain’s boundary:

from physicskit.condensed.visualizers import plot_edge_state_density

fig, ax, density = plot_edge_state_density(H_wire, k_parallel=[])

See Also#