Additional notes on computing Chern number
Computing the Chern number from the Berry connection a ( k ) = i ⟨ u ( k ) ∣ ∇ ( ∣ u ( k ) ⟩ ) \bf{a}(\bf {k})=i\langle u(\bf{k})|\bf{\nabla}(|u(\bf{k})\rangle) a ( k ) = i ⟨ u ( k ) ∣ ∇ ( ∣u ( k )⟩) is annoying because one needs to find a gauge where the Bloch wave-functions u n ( k ) u_n({\bf k}) u n ( k ) are continuous.
On the other hand, the Chern number is really the integral of the Berry curvature
b ( k ) = ∇ × a ( k ) {\bf{b}(k)}={\bf\nabla\times a(k)} b ( k ) = ∇ × a ( k ) as
Φ = ∮ d 2 k z ⋅ b ( k ) . \Phi=\oint d^2\bf{k}\bf{z}\cdot \bf{b}(\bf{k}). Φ = ∮ d 2 k z ⋅ b ( k ) . Numerically it is more convenient to compute the integral Φ \Phi Φ by breaking it down into small plaquettes, so that
Φ = ∑ n ∮ Γ n d 2 k z ⋅ b ( k ) = ∑ n ∮ Γ n d k ⋅ a ( k ) , \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)}, Φ = n ∑ ∮ Γ n d 2 k z ⋅ b ( k ) = n ∑ ∮ Γ n d k ⋅ a ( k ) , is broken down into chunks
Φ n = i ∮ Γ n d k ⋅ ⟨ u ( k ) ∣ ∇ ( ∣ u ( k ) ⟩ ) . \Phi_n=i\oint_{\Gamma_n} d{\bf k}\cdot {\langle u(\bf{k})|\bf{\nabla}(|u(\bf{k})\rangle)}. Φ n = i ∮ Γ n d k ⋅ ⟨ u ( k ) ∣ ∇ ( ∣u ( k )⟩) . For sufficiently small chunks Φ n \Phi_n Φ n is small and one can get away with computing the exponential
e i Φ n = e ∮ Γ n d k ⋅ ⟨ u ( k ) ∣ ∇ ( ∣ u ( k ) ⟩ ) = ∏ p e δ k n , p ⋅ ⟨ u ( k n , p ) ∣ ∇ ( ∣ u ( k n , p ) ⟩ ) ≈ ∏ p ( 1 + δ k n , p ⟨ u ( k n , p ) ∣ ∇ ( ∣ u ( k n , p ) ⟩ ) ≈ ∏ p ⟨ u ( k n , p ) ∣ u ( k n , p + 1 ) ⟩ . 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. e i Φ n = e ∮ Γ n d k ⋅ ⟨ u ( k ) ∣ ∇ ( ∣u ( k )⟩) = p ∏ e δ k n , p ⋅ ⟨ u ( k n , p ) ∣ ∇ ( ∣u ( k n , p )⟩) ≈ p ∏ ( 1 + δ k n , p ⟨ u ( k n , p ) ∣ ∇ ( ∣u ( k n , p )⟩) ≈ p ∏ ⟨ u ( k n , p ) ∣u ( k n , p + 1 )⟩ . The flux on the small plaquette can be computed as
Φ n = Arg ( ∏ p ⟨ u ( k n , p ) ∣ u ( k n , p + 1 ) ⟩ ) . \Phi_n=\textrm{Arg}(\prod_p \langle u({\bf k}_{n,p})|u({\bf k}_{n,p+1})\rangle). Φ n = Arg ( p ∏ ⟨ u ( k n , p ) ∣ u ( k n , p + 1 )⟩) . What is nice about this product is that it is gauge invariant as can be checked by multiplying each wave-function ∣ u ( k n , p ) ⟩ → e i φ ( k n , p ) ∣ u ( k n , p ) ⟩ |u({\bf k}_{n,p})\rangle\rightarrow e^{i\varphi({\bf k}_{n,p})}|u({\bf k}_{n,p})\rangle ∣ u ( k n , p )⟩ → e i φ ( k n , p ) ∣ u ( k n , p )⟩ .
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 Φ n ≈ ∏ p ∏ s ⟨ u s ( k n , p ) ∣ u s ( k n , p + 1 ) ⟩ = ∏ p D e t [ ⟨ u s ( k n , p ) ∣ u s ( k n , p + 1 ) ⟩ ] , 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], e i Φ n ≈ p ∏ s ∏ ⟨ u s ( k n , p ) ∣ u s ( k n , p + 1 )⟩ = p ∏ Det [⟨ u s ( k n , p ) ∣ u s ( k n , p + 1 )⟩] , where s s s labels the band index.
What Vanderbilt and coworkers pointed out is that this expression can be written as
e i Φ n = ∏ p D e t [ ⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 ) ⟩ ] , e^{i\Phi_n}=\prod_p Det[\langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle], e i Φ n = p ∏ De t [⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 )⟩] , is related to determinants of a bunch of matrices ⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 ) ⟩ \langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle ⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 )⟩ , 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 ) U(N) U ( N ) invariant for any unitary transformation of the N N N occupied eigenstates.
Final recipe ¶ So the final recipe to compute the Chern number is as follows:
Φ n = A r g [ ∏ p D e t [ ⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 ) ⟩ ] ] , \Phi_n=Arg[\prod_p Det[\langle u_s(\bf{k}_{n,p})|u_{s'}(\bf{k}_{n,p+1})\rangle]], Φ n = A r g [ p ∏ De t [⟨ u s ( k n , p ) ∣ u s ′ ( k n , p + 1 )⟩]] , where k n , p {\bf k}_{n,p} k n , p are momenta on the corners of the lattice.
ν = ( 2 π ) − 1 ∑ n Φ n . \nu=(2\pi)^{-1}\sum_n \Phi_n. ν = ( 2 π ) − 1 n ∑ Φ n .