# Additional notes on computing Chern number¶

Computing the Chern number from the Berry connection \(\bf{a}(\bf {k})=i\langle u(\bf{k})|\bf{\nabla}(|u(\bf{k})\rangle)\) is annoying because one needs to find a gauge where the Bloch wave-functions \(u_n({\bf k})\) are continuous.

On the other hand, the Chern number is really the integral of the Berry curvature

as

Numerically it is more convenient to compute the integral \(\Phi\) by breaking them down into small plaquettes. So that

is broken down into chunks

For sufficiently small chunks \(\Phi_n\) is small and one can get away with computing the exponential

The flux on the small plaquette can be computed as

What is nice about this product is that it is gauge invariant as can be checked by multiplying each wave-function \(|u({\bf k}_{n,p})\rangle\rightarrow e^{i\varphi({\bf k}_{n,p})}|u({\bf k}_{n,p})\rangle\).

The nice thing about this expression is that one can also generalize this to multiband systems to calculate the total Chern number so that the contribution from each plaquette

where \(s\) labels the band index.

What Vanderbilt and coworkers pointed out is that this expression can be written as

is related to determinants of a bunch of matrices \(\langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle\), which in the diagonal basis of eigenstates is nearly diagonal, which takes us back to the previous expression.

The main advantage of this expression is that it is actually \(U(N)\) invariant for any unitary transformation of the \(N\) occupied eigenstates.

## Final recipe¶

So the final recipe to compute the Chern number is as follows:

grid up the BZ into small plaquettes labelled by \(n\)

Compute the flux through each plaquette

where \({\bf k}_{n,p}\) are momenta on the corners of the lattice.

The Chern number is calculated as