# 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

${\bf{b}(k)}={\bf\nabla\times a(k)}$

as

$\Phi=\oint d^2\bf{k}\bf{z}\cdot \bf{b}(\bf{k}).$

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

$\Phi=\sum_n \oint_{\Gamma_n} d^2\bf{k}\bf{z}\cdot \bf{b}(\bf{k})=\sum_n \oint_{\Gamma_n} d{\bf k}\cdot {\bf a(k)},$

is broken down into chunks

$\Phi_n=i\oint_{\Gamma_n} d{\bf k}\cdot {\langle u(\bf{k})|\bf{\nabla}(|u(\bf{k})\rangle)}.$

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

$e^{i\Phi_n}=e^{\oint_{\Gamma_n} d{\bf k}\cdot {\langle u(\bf{k})|\bf{\nabla}(|u(\bf{k})\rangle)}}=\prod_p e^{\delta{\bf k}_{n,p}\cdot {\langle u(\bf{k}_{n,p})|\bf{\nabla}(|u(\bf{k}_{n,p})\rangle)}}\approx \prod_p (1+\delta k_{n,p}\langle u(\bf{k}_{n,p})|\bf{\nabla}(|u(\bf{k}_{n,p})\rangle)\approx \prod_p \langle u(\bf{k}_{n,p})|u(\bf{k}_{n,p+1})\rangle.$

The flux on the small plaquette can be computed as

$\Phi_n=\textrm{Arg}(\prod_p \langle u({\bf k}_{n,p})|u({\bf k}_{n,p+1})\rangle).$

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

$e^{i\Phi_n}\approx \prod_p\prod_s \langle u_s(\bf{k}_{n,p})|u_s(\bf{k}_{n,p+1})\rangle=\prod_p Det[\langle u_s(\bf{k}_{n,p})|u_s(\bf{k}_{n,p+1})\rangle],$

where $$s$$ labels the band index.

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

$e^{i\Phi_n}=\prod_p Det[\langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle],$

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

$\Phi_n=Arg[\prod_p Det[\langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle]],$

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

• The Chern number is calculated as

$\nu=(2\pi)^{-1}\sum_n \Phi_n.$