本篇内容主要参考这篇文献:A Short Course on Topological Insulators: Band-structure topology and edge states in one and two dimensions。
1. 模型
SSH模型示意图如下[1]:

SSH(Su-Schrieffer-Heeger)模型的哈密顿量为:
当v=w时,该体系为一维的简单晶格链模型。
2. 能带图
SSH模型哈密顿量经过傅里叶变换后,得到:
该模型具有手征对称性。可参考这篇:手征对称性 Chiral Symmetry。
画能带图的Python代码为:
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/5025
"""
import numpy as np
import matplotlib.pyplot as plt
from math import *
import cmath
def hamiltonian(k): # SSH模型
v=0.6
w=1
matrix = np.zeros((2, 2), dtype=complex)
matrix[0,1] = v+w*cmath.exp(-1j*k)
matrix[1,0] = v+w*cmath.exp(1j*k)
return matrix
def main():
k = np.linspace(-pi, pi, 100)
plot_bands_one_dimension(k, hamiltonian)
def plot_bands_one_dimension(k, hamiltonian):
dim = hamiltonian(0).shape[0]
dim_k = k.shape[0]
eigenvalue_k = np.zeros((dim_k, dim))
i0 = 0
for k0 in k:
matrix0 = hamiltonian(k0)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue_k[i0, :] = np.sort(np.real(eigenvalue[:]))
i0 += 1
for dim0 in range(dim):
plt.plot(k, eigenvalue_k[:, dim0], '-k')
plt.show()
if __name__ == '__main__':
main()
画出的能带为(该结果来源于文献[1]):

其中,两个极限的情况是w=0或v=0,如下图所示[1]:

3. 卷绕数
这里先给出结论:当v>w时,SSH模型的卷绕数为0;当v<w时,SSH模型的卷绕数为1。
对于具有手征对称性(chiral symmetry)的两带模型,卷绕数(Winding number)的公式为[1]:

计算的Python代码为:
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/5025
"""
import numpy as np
import matplotlib.pyplot as plt
from math import *
import cmath
import time
def hamiltonian(k): # SSH模型
v=0.6
w=1
matrix = np.zeros((2, 2), dtype=complex)
matrix[0,1] = v+w*cmath.exp(-1j*k)
matrix[1,0] = v+w*cmath.exp(1j*k)
return matrix
def main():
start_clock = time.perf_counter()
delta_1 = 1e-9 # 求导的步长(求导的步长可以尽可能短)
delta_2 = 1e-5 # 积分的步长(积分步长和计算时间相关,因此取一个合理值即可)
W = 0 # Winding number初始化
for k in np.arange(-pi, pi, delta_2):
H = hamiltonian(k)
log0 = cmath.log(H[0, 1])
H_delta = hamiltonian(k+delta_1)
log1 = cmath.log(H_delta[0, 1])
W = W + (log1-log0)/delta_1*delta_2 # Winding number
print('Winding number = ', W/2/pi/1j)
end_clock = time.perf_counter()
print('CPU执行时间(min)=', (end_clock-start_clock)/60)
if __name__ == '__main__':
main()
当v=0.6, w=1时,计算结果为(-1):

当v=1, w=0.6时,计算结果为(0):

参考资料:
[2] Berry phase effects on electronic properties
[3] 知乎:winding number 的计算公式是怎么来的?
[4] 知乎:陈数(Chern number)与卷绕数(winding number)的区别与联系?
[5] https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%BB%95%E6%95%B0
【未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】
6,114 次浏览
您好,这个程序只适用于手对称两能带系统是吗?
从定义来看,是只适用于手对称的系统,但不一定是两能带系统。
如果不满足手对称,可能有其他的拓扑不变量。
好的,谢谢
请问高维度缠绕数的计算是需要先用投影算符降维吗?
没算过,不清楚。可以找下相关文献。
你好,算winding number 的时候选取 的是h(k),如果选取h(k)*的话计算结果是前者的相反数,请问应该选取哪一个?还是只关注其绝对值大小,选取任何一个都可以?
符号其实也跟积分的路径方向有关,一般会用来区分两个路径方向。其他时候只关注绝对值大小,负号影响不大。
你好,我在求解winding number时,加入了一个循环,看u对于winding number的影响,大多数据很正常,为什么中间会出现一个两千多的数字呢?
是v=w的位置吗,这时候带隙为零,能带相交的地方波函数不好区分开。
你好,我想问一下SSH模型那个哈密顿量您知道怎么推导出来的吗?一直很困惑
我谷歌找到了understanding basic concepts of topological insulators through SSH model这篇论文,还找了其中的参考文献[3]oxford solid state physics书,差不多弄懂了这个哈密顿量的来源。不用麻烦您了,打扰了。
嗯嗯,最明显的特征就是交替的跃迁项。