Haldane-Hubbard Model: Topological Phase Transition

Introduction

The Haldane-Hubbard model describes spinful fermions on a honeycomb lattice with nearest-neighbor hopping $t$, next-nearest-neighbor hopping $t'$ with a $\phi$-flux phase, and on-site Coulomb interaction $U$. By taking $\phi = \pi/2$ as an example, we demonstrate how the system evolves from a topological phase to a trivial insulator as $U$ increases. Using CPT, we show:

  • Bulk band structure evolution across the transition (gap closing at $U_c$ and reopening)
  • Edge state behavior before and after the transition (gapless edge states appear and disappear)
  • Bulk-edge correspondence: the change of bulk topology is accompanied by the appearance/disappearance of gapless edge states at the boundary

The results presented here are based on our work published in New J. Phys. 21, 073016 (2019).

Bulk Model Setup

using QuantumLattices
using QuantumClusterTheories
using TightBindingApproximation
using ExactDiagonalization
using Plots

# Model parameters
parameters = (t=Complex(-1.0), t′=Complex(-0.2), U=4.0)
@inline parammap(parameters::NamedTuple) = (μ=-parameters.U/2, U=parameters.U)

# Honeycomb lattice unitcell
unitcell = Lattice([0.0, 0.0], [0.0, √3/3]; vectors=[[1.0, 0.0], [0.5, √3/2]])

# Finite cluster with periodic boundary conditions
lattice = Lattice(
    [0.0, 0.0], [0.0, √3/3], [0.5, √3/2], [0.5, -√3/6], [1.0, 0.0], [1.0, √3/3];
    vectors=[[1.5, √3/2], [1.5, -√3/2]]
)

# Hilbert space: single-orbital spinful fermions
hilbert = Hilbert(Fock{:f}(1, 2), length(lattice))

# Hopping terms
t = Hopping(:t, parameters.t, 1; ismodulatable=false)
t′ = Hopping(:t′, parameters.t′, 2;
    amplitude=bond::Bond->1im*cos(3*azimuth(rcoordinate(bond)))*(-1)^(bond[1].site%2),
    ismodulatable=false
)

# Chemical potential and Hubbard interaction
μ = Onsite(:μ, parammap(parameters).μ)
U = Hubbard(:U, parammap(parameters).U)

# Quantum number for the sub-Hilbert space
quantumnumber = ℕ(length(lattice)) ⊠ 𝕊ᶻ(0)

# CPT algorithm setup
haldane = Algorithm(
    :HaldaneHubbard,
    CPT(unitcell, lattice, hilbert, (t, t′, μ, U), quantumnumber),
    parameters,
    parammap
)

# Energy range and Brillouin zone path
es = LinRange(-4.0, 4.0, 201)
path = ReciprocalPath(unitcell, hexagon"Γ-K-M-Γ"; length=100);

Edge Model Setup

To access edge states, we construct an open boundary geometry by stitching together multiple copies of the bulk cluster. The ntuple below specifies which sites belong to each cluster and their corresponding quantum number sector.

# Number of clusters in the edge geometry
num = 8
edge = Lattice(lattice, (1, num), ('P', 'O'))
hilbert_edge = Hilbert(Fock{:f}(1, 2), length(edge))

# CPT for edge geometry: stitching 6-site cluster together
haldane_edge = Algorithm(
    :HaldaneHubbardEdge,
    CPT(
        edge, edge, hilbert_edge,
        (t, t′, μ, U),
        ntuple(i->(6(i-1)+1, 6(i-1)+2, 6(i-1)+3, 6(i-1)+4, 6(i-1)+5, 6(i-1)+6), num)=>quantumnumber
    ),
    parameters,
    parammap
);

# Path along the edge direction
path_edge = ReciprocalPath(edge, -0.5=>0.5; length=100);

Spectral Functions Across the Phase Transition

Topological Phase ($U = 4.0 < U_c$)

In the topological phase, the system has a finite bulk gap and hosts gapless chiral edge states within the gap. These edge states are protected by the nonzero Chern number of the bulk.

Bulk spectrum:

update!(haldane; U=4.0)
spectra_topological = haldane(:EB, DynamicalSpectra(path, es); η=0.04);
plot(spectra_topological, title="Bulk (U=4.0, Topological)")
Example block output

Edge spectrum:

update!(haldane_edge; U=4.0)
spectra_edge_topological = haldane_edge(:Edge, DynamicalSpectra(path_edge, es); η=0.04);
plot(spectra_edge_topological, title="Edge (U=4.0, Gapless Edge States)")
Example block output

Critical Point ($U = 4.6 \approx U_c$)

At the critical point, the bulk gap closes at the $K$/$K'$ points, signaling the topological phase transition. The Chern number changes from $\pm 2$ ($\pm 1$ for each spin) to $0$.

Bulk spectrum:

update!(haldane; U=4.6);
spectra_transition = haldane(:EB, DynamicalSpectra(path, es); η=0.04);
plot(spectra_transition, title="Bulk (U=4.6, Gap Closing)")
Example block output

Trivial Phase ($U = 5.0 > U_c$)

In the trivial phase, the bulk gap reopens but there are no gapless edge states within the gap. The system is an ordinary insulator.

Bulk spectrum:

update!(haldane; U=5.0);
spectra_trivial = haldane(:EB, DynamicalSpectra(path, es); η=0.04);
plot(spectra_trivial, title="Bulk (U=5.0, Trivial)")
Example block output

Edge spectrum:

update!(haldane_edge; U=5.0);
spectra_edge_trivial = haldane_edge(:Edge, DynamicalSpectra(path_edge, es); η=0.04);
plot(spectra_edge_trivial, title="Edge (U=5.0, No Edge States)")
Example block output

Summary

Using CPT, we have successfully captured:

  • The bulk topological phase transition in the Haldane-Hubbard model at $U_c \approx 4.6$
  • The gap closing and reopening at the critical point
  • The disappearance of gapless edge states when transitioning from topological to trivial phase

These results illustrate the bulk-edge correspondence: when the bulk is topological ($C \neq 0$), gapless edge states appear at the boundary; when the bulk is trivial ($C = 0$), these edge states disappear.

These results demonstrate that CPT is a powerful method for studying correlation-driven topological phase transitions in interacting fermionic systems.