基于拓扑结构的光子晶体研究:文献复现与C6晶胞能带分析
拓扑 光子晶体 文献复现 C6晶胞能带咱们今天来玩点有意思的——用代码暴力破解C6对称光子晶体的拓扑特性。最近复现了篇Nature子刊的拓扑光子晶体论文发现六边形晶胞的能带计算藏着不少魔鬼细节。先扔个简单粗暴的Python实现import meep as mp import numpy as np from matplotlib import pyplot as plt a 1 # 介质柱半径 r 0.35*a # 介电常数对比度 eps 12 geometry [mp.Cylinder(radiusr, materialmp.Medium(epsiloneps))] # 六边形晶格基矢 basis mp.Vector3(1, 0), mp.Vector3(0.5, np.sqrt(3)/2) sim mp.Simulation( cell_size[a, a*np.sqrt(3)], geometrygeometry, resolution32, k_pointsmp.get_kpoints([[0,0], [0.5,0], [0.5,0.5], [0,0]], 20), num_bands6 ) # 暴力计算能带 sim.run_k_points(200) # 提取数据画图骚操作 freaks np.array([b.freq for b in sim.band_data]) plt.plot(freaks[:, :3], r--, freaks[:, 3:], b-) plt.title(C6对称破戒僧的能带结构) plt.show()这段代码的魔鬼藏在basis变量的设置里。注意这里用的是六边形晶格基矢的简化表示实际计算中MEEP会自动处理C6对称操作。不过有个坑当介质柱半径超过0.4a时TM模式的带隙会突然消失这跟拓扑陈数的变化直接相关。代码里那个get_kpoints函数选的路径是Γ-M-K-Γ但实际文献中经常用投影方法处理六边形布里渊区。这里有个骚操作——把k点路径强行压扁到二维平面上其实相当于在倒空间里画了个等边三角形。拓扑 光子晶体 文献复现 C6晶胞能带看输出图中的红蓝线交叉点那就是传说中的双狄拉克锥。当年第一次复现出来时对着屏幕抽了半包烟——这玩意儿居然真的存在不过要注意必须把模拟精度调到32以上才能看到清晰的线性色散否则会出现诡异的能带抖动。再来说说代码里那个num_bands6的玄机。六边形晶胞由于C6对称性能带会有明显的简并分裂。但有时候计算会给出诡异的非对称结果这时候得检查几何相位的积分路径是不是被k点采样玩坏了。最后提醒新手别在能带反交叉点附近强行找拓扑特性那地方的群速度会骗人。真正靠谱的做法是算完陈数再喝咖啡否则可能对着错误的结果怀疑人生一整天。下次可以聊聊怎么用这段代码的变体实现光子量子自旋霍尔效应那才是真正的拓扑骚操作。