Create Kane_Mele_model.m
This commit is contained in:
parent
9f26886125
commit
6e8829b728
@ -0,0 +1,101 @@
|
||||
% Purpose: Plot Kane-Mele's bands
|
||||
% Date: Dec 07, 2021 @HNU
|
||||
% Author: Ji-Huan Guan;
|
||||
% Modify by Zhong-Fu Li;
|
||||
% More code can be found in https://www.guanjihuan.com/
|
||||
|
||||
close all
|
||||
clc
|
||||
clear all
|
||||
tic;
|
||||
|
||||
k0 = linspace(0,2*pi,100);
|
||||
for kk = 1:100
|
||||
k = k0(kk);
|
||||
H1 = HH(k);
|
||||
[VV,DD] = eig(H1);
|
||||
Ds(:,kk) = sort(diag(DD),'ascend'); % sort eigenvalue
|
||||
end
|
||||
plot(k0/2/pi,Ds,'k.');
|
||||
ylim([-1 1])
|
||||
set(gca,'xtick',[0:0.5:1])
|
||||
set(gca,'XTickLabel',{'\bf 0','\bf \pi','\bf 2\pi'})
|
||||
set(gcf,'color','w');
|
||||
set(gca,'fontsize',16,'LineWidth',1.1);
|
||||
ylabel('Energy(a.u.)','fontname','Arial');
|
||||
toc
|
||||
|
||||
% define Hamiltonian
|
||||
function H = HH(k)
|
||||
N = 10;
|
||||
M = 0;
|
||||
t1 = 1;
|
||||
t2 = 0.03;
|
||||
phi = pi/2;
|
||||
h00 = zeros(2 * 4 * N, 2 * 4 * N);
|
||||
h01 = zeros(2 * 4 * N, 2 * 4 * N);
|
||||
for spin = 1:2
|
||||
for ii = 0:N-1
|
||||
% nearest neighbor couplings
|
||||
h00(ii * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 1 * 2 + spin) = t1;
|
||||
h00(ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 0 * 2 + spin) = t1;
|
||||
|
||||
h00(ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin) = t1;
|
||||
h00(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 1 * 2 + spin) = t1;
|
||||
|
||||
h00(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t1;
|
||||
h00(ii * 4 * 2 + 3 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin) = t1;
|
||||
%next nearest neighbor couplings
|
||||
h00(ii * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin) = t2 * exp(-1j * phi) * sign_spin(spin);
|
||||
h00(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 0 * 2 + spin) = conj(h00(...
|
||||
ii * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin));
|
||||
h00(ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t2 * exp(-1j * phi) * sign_spin(spin);
|
||||
h00(ii * 4 * 2 + 3 * 2 + spin, ii * 4 * 2 + 1 * 2 + spin) = conj(h00(...
|
||||
ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin));
|
||||
%
|
||||
end
|
||||
for ii = 0:N-2
|
||||
% nearest neighbor couplings
|
||||
h00(ii * 4 * 2 + 3 * 2 + spin, (ii + 1) * 4 * 2 + 0 * 2 + spin) = t1;
|
||||
h00((ii + 1) * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t1;
|
||||
|
||||
% next nearest neighbor couplings
|
||||
h00(ii * 4 * 2 + 2 * 2 + spin, (ii + 1) * 4 * 2 + 0 * 2 + spin) = t2 *exp(1j * phi) * sign_spin(spin);
|
||||
h00((ii + 1) * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin) = conj(h00(...
|
||||
ii * 4 * 2 + 2 * 2 + spin, (ii + 1) * 4 * 2 + 0 * 2 + spin));
|
||||
h00(ii * 4 * 2 + 3 * 2 + spin, (ii + 1) * 4 * 2 + 1 * 2 + spin) = t2 * exp(1j * phi) * sign_spin(spin);
|
||||
h00((ii + 1) * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = conj(h00(...
|
||||
ii * 4 * 2 + 3 * 2 + spin, (ii + 1) * 4 * 2 + 1 * 2 + spin) );
|
||||
end
|
||||
% hopping of intercell h01
|
||||
for ii = 0:N-1
|
||||
% nearest neighbor couplings
|
||||
h01(ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 0 * 2 + spin) = t1;
|
||||
h01(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t1;
|
||||
|
||||
% next nearest neighbor couplings
|
||||
h01(ii * 4 * 2 + 0 * 2 + spin, ii * 4 * 2 + 0 * 2 + spin) = t2 * exp(1j * phi) * sign_spin(spin);
|
||||
h01(ii * 4 * 2 + 1 * 2 + spin, ii* 4 * 2 + 1 * 2 + spin) = t2 * exp(-1j * phi) * sign_spin(spin);
|
||||
h01(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 2 * 2 + spin) = t2 * exp(1j * phi) * sign_spin(spin);
|
||||
h01(ii * 4 * 2 + 3 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t2 * exp(-1j * phi) * sign_spin(spin);
|
||||
|
||||
h01(ii * 4 * 2 + 1 * 2 + spin, ii * 4 * 2 + 3 * 2 + spin) = t2 * exp(1j * phi) * sign_spin(spin);
|
||||
h01(ii * 4 * 2 + 2 * 2 + spin, ii * 4 * 2 + 0 * 2 + spin) = t2 * exp(-1j * phi) * sign_spin(spin);
|
||||
if ii ~= 0
|
||||
h01(ii * 4 * 2 + 1 * 2 + spin, (ii - 1) * 4 * 2 + 3 * 2 + spin) = t2 * exp(1j * phi) * sign_spin(spin);
|
||||
end
|
||||
end
|
||||
for ii = 0:N-2
|
||||
h01(ii * 4 * 2 + 2 * 2 + spin, (ii + 1) * 4 * 2 + 0 * 2 + spin) = t2 *exp(-1j * phi) * sign_spin(spin);
|
||||
end
|
||||
end
|
||||
H = h00 + h01 * exp(1j * k) + h01' * exp(-1j * k);
|
||||
end
|
||||
|
||||
function sign = sign_spin(spin)
|
||||
if spin == 0
|
||||
sign = 1;
|
||||
else
|
||||
sign = -1;
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user