假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵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', get(h,'LevelStep')*2);费米面
附录给出的是TaS2的k空间哈密顿量
function H=Hamiltonian_TaS2_k(kx,ky) e1 = 1.4052; e2 = 1.3440; t0 = -0.1046; t11 = 0.2406; t22 = -0.5320; t2 = -0.3701; rt3 = sqrt(3); a = 0.5*kx; b = rt3/2*ky; h0 = 2*t0*(cos(2*a)+2*cos(a)*cos(b))+e1; h1 = -2*rt3*t2*sin(a)*sin(b); h2 = 2*t2*(cos(2*a)-cos(a)*cos(b)); h11 = 2*t11*cos(2*a)+(t11+3*t22)*cos(a)*cos(b)+e2; h22 = 2*t22*cos(2*a)+(3*t11+t22)*cos(a)*cos(b)+e2; h12 = rt3*(t22-t11)*sin(a)*sin(b); H = [h0,h1,h2;h1',h11,h12;h2',h12',h22];