1. 二维SSH模型基础理论
二维SSH(Su-Schrieffer-Heeger)模型是凝聚态物理中研究拓扑相变的重要模型体系。作为一维SSH模型的自然扩展,它在描述二维材料中的拓扑绝缘体、量子霍尔效应等方面具有独特价值。这个模型本质上是一个简化的紧束缚模型,通过交替变化的跃迁强度来模拟电子在晶格中的特殊行为。
1.1 紧束缚模型框架
紧束缚近似是处理固体中电子行为的有效方法,其核心思想是:电子主要局域在原子附近,但可以通过量子隧穿效应在相邻原子间跃迁。对于二维SSH模型,我们考虑一个具有两种不等价格点的方形晶格,其哈密顿量可以表示为:
H = ∑_(〈i,j〉) t_ij c_i^† c_j + h.c.
其中t_ij表示相邻格点i和j之间的跃迁强度,c_i^†和c_j分别是产生和湮灭算符。在SSH模型中,t_ij会呈现周期性的强弱交替变化,这种调制正是拓扑非平庸能带结构的来源。
1.2 晶格结构与布里渊区
典型的二维SSH模型采用方形晶格,每个原胞包含两个不等价的原子位点(A和B)。这种结构导致第一布里渊区缩小为原始布里渊区的一半,我们称之为折叠布里渊区。在倒空间中,高对称点通常标记为Γ(0,0)、X(π/a,0)、Y(0,π/a)和M(π/a,π/a),其中a是晶格常数。
关键提示:二维SSH模型的拓扑性质强烈依赖于跃迁强度的调制方式。常见的调制模式包括交错型、棋盘型和条纹型,每种模式会产生不同的边缘态特征。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Matlab实现准备
2.1 开发环境配置
建议使用Matlab R2020b或更新版本,因其对矩阵运算和并行计算有更好的优化。必须安装的工具箱包括:
- Parallel Computing Toolbox(用于加速大矩阵运算)
- Signal Processing Toolbox(用于傅里叶分析)
- PDE Toolbox(可选,用于可视化)
在脚本开头应进行环境检查:
matlab复制% 检查必要工具箱
required_toolboxes = {'parallel', 'signal'};
for i = 1:length(required_toolboxes)
if isempty(ver(required_toolboxes{i}))
error('缺少必要工具箱: %s', required_toolboxes{i});
end
end
2.2 核心参数设置
二维SSH模型需要定义以下关键参数:
matlab复制% 基本参数
a = 1; % 晶格常数(无量纲化)
Nx = 50; Ny = 50; % x和y方向原胞数
t1 = 0.8; t2 = 1.2; % 交替跃迁强度
phase = 0; % 相位调制因子(用于研究拓扑相变)
% k空间采样
nk = 100; % 每个方向的k点采样数
kx = linspace(-pi/a, pi/a, nk);
ky = linspace(-pi/a, pi/a, nk);
[KX, KY] = meshgrid(kx, ky);
3. 紧束缚模型实现
3.1 实空间哈密顿量构建
对于Nx×Ny个原胞的系统,每个原胞含2个原子,总哈密顿量维度为2NxNy × 2NxNy。采用稀疏矩阵存储可显著节省内存:
matlab复制function H = build_real_space_H(Nx, Ny, t1, t2)
total_sites = 2*Nx*Ny;
H = spalloc(total_sites, total_sites, 5*total_sites); % 预分配
% 格点索引映射:site = 2*( (x-1)*Ny + (y-1) ) + [1 or 2]
for x = 1:Nx
for y = 1:Ny
% 当前原胞内跃迁
idx = 2*( (x-1)*Ny + (y-1) );
H(idx+1, idx+2) = t1;
H(idx+2, idx+1) = t1';
% x方向相邻原胞
x_next = mod(x, Nx) + 1;
idx_next = 2*( (x_next-1)*Ny + (y-1) );
H(idx+1, idx_next+2) = t2;
H(idx_next+2, idx+1) = t2';
% y方向相邻原胞
y_next = mod(y, Ny) + 1;
idx_next = 2*( (x-1)*Ny + (y_next-1) );
H(idx+1, idx_next+2) = t2;
H(idx_next+2, idx+1) = t2';
end
end
end
3.2 能带计算与可视化
对角化哈密顿量后,我们可以绘制能带结构:
matlab复制% 计算实空间能谱
H = build_real_space_H(Nx, Ny, t1, t2);
[psi, E] = eigs(H, 10, 'smallestreal');
E = diag(E);
% 绘制能级分布
figure;
plot(sort(E), 'o');
xlabel('状态索引');
ylabel('能量');
title('实空间能谱');
4. 动量空间分析
4.1 投影能带计算
在周期性边界条件下,利用布洛赫定理可将问题转换到动量空间:
matlab复制E_bands = zeros(nk, nk, 4); % 存储四个能带
for i = 1:nk
for j = 1:nk
k = [KX(i,j), KY(i,j)];
Hk = build_k_space_H(k, t1, t2);
E_bands(i,j,:) = eig(Hk);
end
end
function Hk = build_k_space_H(k, t1, t2)
% 构建k空间2×2哈密顿量
Hk = zeros(2);
Hk(1,2) = t1 + t2*(exp(1i*k(1)*a) + exp(1i*k(2)*a));
Hk(2,1) = conj(Hk(1,2));
end
4.2 能带可视化技巧
使用isosurface展示三维能带结构:
matlab复制figure;
for band = 1:4
surf(KX, KY, E_bands(:,:,band), 'EdgeColor', 'none');
hold on;
end
xlabel('k_x'); ylabel('k_y'); zlabel('能量');
title('二维SSH模型能带结构');
colormap jet;
light; lighting gouraud;
5. 拓扑性质分析
5.1 陈数计算
陈数是表征二维系统拓扑性质的重要指标:
matlab复制function C = compute_chern_number(E_bands, dkx, dky)
[nx, ny, nb] = size(E_bands);
C = zeros(1, nb/2); % 假设每个能带对应一个陈数
for b = 1:2:nb
F = zeros(nx, ny);
for i = 1:nx
for j = 1:ny
% 使用离散贝里曲率公式
im1 = mod(i-2, nx)+1; ip1 = mod(i, nx)+1;
jm1 = mod(j-2, ny)+1; jp1 = mod(j, ny)+1;
dEx = (E_bands(ip1,j,b)-E_bands(im1,j,b))/(2*dkx);
dEy = (E_bands(i,jp1,b)-E_bands(i,jm1,b))/(2*dky);
F(i,j) = dEx.*dEy - dEy.*dEx;
end
end
C((b+1)/2) = sum(F(:))*dkx*dky/(2*pi);
end
end
5.2 边缘态观测
通过构造纳米带结构观察边缘态:
matlab复制function [H_ribbon, pos] = build_nanoribbon(Nx, Ny, t1, t2, direction)
if direction == 'x'
% x方向为周期方向,y方向有限
H_ribbon = spalloc(2*Nx*Ny, 2*Nx*Ny, 5*2*Nx*Ny);
% ... (类似实空间构建但一个方向开放)
else
% y方向为周期方向,x方向有限
% ...
end
end
6. 性能优化技巧
6.1 并行计算加速
利用parfor并行化k空间计算:
matlab复制E_bands = zeros(nk, nk, 4);
parfor i = 1:nk
for j = 1:nk
k = [kx(i), ky(j)];
Hk = build_k_space_H(k, t1, t2);
E_bands(i,j,:) = eig(Hk);
end
end
6.2 稀疏矩阵技巧
对于大系统,使用稀疏矩阵存储和运算:
matlab复制H = spalloc(2*Nx*Ny, 2*Nx*Ny, 5*2*Nx*Ny);
% ... 填充矩阵时保持稀疏性
[psi, E] = eigs(H, 10, 'smallestreal'); % 只计算最低10个能级
7. 常见问题排查
-
能带出现间断:
- 检查k空间采样是否足够密集
- 确认布里渊区路径正确连接高对称点
-
陈数不为整数:
- 增加k空间采样密度
- 检查能带是否有交叉或简并
-
内存不足:
- 使用稀疏矩阵格式
- 分块计算能带结构
-
边缘态不明显:
- 调整系统尺寸(通常需要宽度>50个原胞)
- 检查边界条件实现是否正确
调试建议:从小系统开始(如4×4原胞),先验证基本性质再扩展。使用
spy(H)可视化哈密顿量非零元分布,确保矩阵构建正确。
