Chern insulator [Qi-Wu-Zhang model; PRB 74, 085308 (2006)]

σ0={{1,0},{0,1}};
σx={{0,1},{1,0}};
σy={{0,-I},{I,0}};
σz={{1,0},{0,-1}};
σp={{0,1},{0,0}};
σm={{0,0},{1,0}};

SetOptions[ListPlot,
Frame->True,Joined->False,FrameStyle->Thick,FrameTicksStyle->30,
BaseStyle->{FontFamily->"Helvetica",FontSize->20},PlotStyle->{{RGBColor[173/255,0,45/255],PointSize[.025]}},AspectRatio->0.7];

Bulk dispersion

t=1.0;
m=-0.8;
H[kx_,ky_]:=t*Sin[kx]*σx+t*Sin[ky]*σy+(m+t*Cos[kx]+t*Cos[ky])*σz;
Eval[kx_,ky_]:=Sqrt[(t*Sin[kx])^2+(t*Sin[ky])^2+(m+t*Cos[kx]+t*Cos[ky])^2];
Evec[kx_,ky_]:=Block[{hx,hy,hz,norm},
hx=t*Sin[kx];
hy=t*Sin[ky];
hz=m+t*Cos[kx]+t*Cos[ky];
norm=Sqrt[2*Eval[kx,ky]*(hz+Eval[kx,ky])];
(1/norm)*{-hx+I*hy,hz+Eval[kx,ky]}
]; (* occupied band: negative eigenenergy *)

m=0.5: topologically nontrivial gapped phase (C=-1)

Plot3D[{Eval[kx,ky],-Eval[kx,ky]},{kx,0,2π},{ky,0,2π},BoxRatios->Automatic]

m = 2.5 : topologically trivial gapped phase (C=0)

Plot3D[{Eval[kx,ky],-Eval[kx,ky]},{kx,0,2π},{ky,0,2π},BoxRatios->Automatic]

m = 2.0 : gapless phase

Plot3D[{Eval[kx,ky],-Eval[kx,ky]},{kx,0,2π},{ky,0,2π},BoxRatios->Automatic]

m = 0.0 : gapless phase

Plot3D[{Eval[kx,ky],-Eval[kx,ky]},{kx,0,2π},{ky,0,2π},BoxRatios->Automatic]

Chern number: pump of polarization

kmesh=50;
δk=2π/kmesh*0.1;
Utab=Table[Evec[kx,ky],{kx,δk,2π+δk,2π/kmesh},{ky,δk,2π+δk,2π/kmesh}]; 
Pxtab=Table[{δk+y*2π/kmesh,Arg[Product[Utab[[x,y]]\[ConjugateTranspose].Utab[[x+1,y]],{x,1,kmesh}]]/(2π)},{y,1,kmesh}];

m = 0.5 : topologically nontrivial gapped phase (C=-1)

ListPlot[Pxtab,PlotRange->{{0,2π},0.5{-1,1}}]

m = 2.5 : topologically trivial gapped phase (C = 0)

ListPlot[Pxtab,PlotRange->{{0,2π},0.5{-1,1}}]

m = -0.8 : topologically nontrivial gapped phase (C = +1)

ListPlot[Pxtab,PlotRange->{{0,2π},0.5{-1,1}}]

Chern number in the discrete Brillouin zone [Fukui-Hatsugai-Suzuki, JPSJ 74, 1674 (2005)]

Sum[-Arg[Utab[[kx,ky]]\[ConjugateTranspose].Utab[[kx+1,ky]]*Utab[[kx+1,ky]]\[ConjugateTranspose].Utab[[kx+1,ky+1]]*Utab[[kx+1,ky+1]]\[ConjugateTranspose].Utab[[kx,ky+1]]*Utab[[kx,ky+1]]\[ConjugateTranspose].Utab[[kx,ky]]],{kx,1,kmesh},{ky,1,kmesh}]/(2π) //Chop

Spectrum under the open boundary conditions (x: OBC, y: PBC)

σ0={{1,0},{0,1}};
σx={{0,1},{1,0}};
σy={{0,-I},{I,0}};
σz={{1,0},{0,-1}};
σp={{0,1},{0,0}};
σm={{0,0},{1,0}};
ChainLength=30;
CMat1=SparseArray[{Band[{1,1}]->1},{ChainLength,ChainLength}];
CMat2=SparseArray[{Band[{1,2}]->1},{ChainLength,ChainLength}];
CMat3=SparseArray[{Band[{2,1}]->1},{ChainLength,ChainLength}];
t=1.0;
m=-0.8;
Ly=100;
kList=Table[2π*n/Ly,{n,0,Ly-1}];
Mass[ky_]:=t*Sin[ky]*σy+(m+t*Cos[ky])*σz;
Hop=t*(-I/2)*σx+t*(1/2)*σz;
Hx[ky_]:=KroneckerProduct[CMat1,Mass[ky]]+KroneckerProduct[CMat2,Hop]+KroneckerProduct[CMat3,Hop\[ConjugateTranspose]];

EvalList[ky_]:=Chop[Eigenvalues[Hx[ky]]];
EvalData=Table[EvalList[kList[[n]]],{n,1,Ly}];

m = 0.5 : topologically nontrivial gapped phase (C = -1)

ListPlot[Transpose[Sort/@EvalData],Joined->True]

m = 2.5 : topologically trivial gapped phase (C = 0)

ListPlot[Transpose[Sort/@EvalData],Joined->True]

m = -0.8 : topologically nontrivial gapped phase (C = +1)

ListPlot[Transpose[Sort/@EvalData],Joined->True]