假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。
1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。
2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。
因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,并处理边界给出变换到H(kx,ky)的过程,同时给出布里渊区,并按照输入k空间坐标求解。最好原子坐标和K空间求解从配置文件(例如Vasp的POSCAR和KPOINS读取)。原子坐标的给出容易,K空间坐标的给出仍然有部分难度。
这里先给出矩阵边界的解决方法,暂时只画费米面附近的能带
dk = 0.05;
Es =[];
for kx=-2*pi:dk:2*pi
for ky = -2*pi:dk:2*pi
Hk=Hamiltonian_TaS2_k(kx,ky);
[~,Ek]=eig(Hk);
Es = [Es, diag(Ek)];
end
end
kx=-2*pi:dk:2*pi;
ky=-2*pi:dk:2*pi;
[kX,kY]=meshgrid(kx,ky);
dim = size(Es);
for i = 1:1
En = reshape(Es(i,:),length(kx),length(kx));
% mesh(kX,kY,En)
% hold on;
end
[C,h] = contour(kX,kY,En,[0,-0.5,0.5]);
set(h, 'ShowText', 'on', 'TextStep',