clear;clc; global N len t m0 N = 40;%一个元胞内的重复结构的数目 len = 4*N; t = 1.0; m0 = 0; dlist = 300; val = zeros(len,dlist); klist = linspace(-2*pi,2*pi,dlist); fori = 1:length(klist) ham = f1(klist(i)); val(:,i) = eig(ham); end plot(klist,val) xlabel('k_y') title('Zigzag Boundary') axis([-2*pi2*pi-3*t 3*t]) functionham = f1(kx) global N t m0 len ham = zeros(len,len); for m = 0:N-1 % on-site mass term ham(m*4+1,m*4+1) = m0; ham(m*4+2,m*4+2) = -m0; ham(m*4+3,m*4+3) = m0; ham(m*4+4,m*4+4) = -m0; % intra-cell hopping %在实际考虑中可以将整个元胞当作一个压平的线,这样intra-cell就不用涉及到位相问题 %虽然从图形上看他们确实有不同的取向 ham(m*4+1,m*4+2) = t; ham(m*4+2,m*4+1) = t;
ham(m*4+2,m*4+3) = t; ham(m*4+3,m*4+2) = t;
ham(m*4+3,m*4+4) = t; ham(m*4+4,m*4+3) = t; end for m = 1:N-1 % 在一个cell中,由于存在这相同的重复结构,所以这些重复的结构之间首尾相连处也应该存在这hopping % 这样才能构成一个完整的元胞链 ham(m*4,m*4+1) = t; ham(m*4+1,m*4) = t; end %---------------------------------------- % intra-cell 之间的问题已经考虑完全,现在开始考虑inter-cell之间的hopping % 既然每一个cell被看作是一个点,那么现在cell与cell之间的hopping则就有位相了 % 相邻的两个cell之间会有两个位置是重叠在一起的,所以标号为1 的原子位置可以hopping到 标号为0的位置上 % 同理2--->3 % 一定要在原来的intre-cell的基础上加上inter-cell的hopping for m = 0:N-1 ham(m*4+2,m*4+1) = ham(m*4+2,m*4+1)+t*exp(1i*kx); ham(m*4+1,m*4+2) = ham(m*4+1,m*4+2)+t*exp(-1i*kx);
ham(m*4+3,m*4+4) = ham(m*4+3,m*4+4)+t*exp(-1i*kx); ham(m*4+4,m*4+3) = ham(m*4+4,m*4+3)+t*exp(1i*kx); end end