光学仿真这个圈子里有个挺有意思的现象:做传统光子器件的人往往对“拓扑”两个字既好奇又发怵,好奇的是它确实能带来一些反直觉的鲁棒特性,发怵的是文献里动不动就是哈密顿量、陈数、能带翻转,仿佛不先把凝聚态物理啃一遍就没法动手。我最初接触拓扑光子仿真的时候也走过这个弯路,抱着几篇理论文章硬读了两周,结果打开仿真软件还是一脸茫然——因为理论文章告诉你“要寻找狄拉克点”,但没人告诉你网格步长设多少、边界条件怎么选、光源放哪里才能在透射谱里看到那个该死的谷。
这篇前言就是想把这条路重新铺一遍。我不打算从布洛赫定理讲起,而是从“你打开FDTD软件之后第一分钟该干什么”讲起。核心关键词是FDTD仿真、拓扑光子、能带结构、边界条件和鲁棒性验证,这几个词基本串起了整个工作的主线。适合的读者是:有基本电磁仿真经验、听说过拓扑绝缘体但没真正算过、想用FDTD把理论上的拓扑边界态在时域里“看”出来的人。如果你连FDTD的激励源怎么加都还不熟,建议先补一补基础操作再回来,因为拓扑结构的仿真对参数设置比常规波导要敏感得多。
我先把结论性的判断放在前面:FDTD不是算能带的首选工具,但它是验证拓扑边界态鲁棒性最直观的工具。能带图用频域方法(比如平面波展开或者本征模求解)算起来又快又干净,而FDTD的价值在于,当你把两种拓扑性质不同的晶格拼在一起、在界面处放一个点源、然后看电磁波怎么沿着界面绕过一个缺陷继续走——这个画面是任何能带图都给不了你的。所以整个系列的分工是:能带用频域算,时域传播用FDTD验,两者互相印证。这篇前言先把FDTD这条线的准备工作讲透。
1. 为什么拓扑光子的验证非要落到时域仿真上
1.1 能带图能告诉你“有态”,但告诉不了你“有多稳”
很多人第一次接触拓扑光子,是从一张能带图开始的:两条能带在某个点交叉,打开简并之后中间出现带隙,然后在带隙里画出一条连接上下能带的边界态色散曲线。这张图确实漂亮,也确实说明了边界态的存在。但问题在于,能带图是一个无限周期结构的本征值问题,它假设你的结构在两个方向上都是无限延伸的,或者至少是严格周期边界。真实器件是有边界的,边界上有没有缺陷、缺陷有多大、缺陷会不会破坏边界态,能带图一概不回答。
拓扑边界态的核心卖点恰恰是“对缺陷免疫”。这个免疫不是说缺陷不存在,而是说只要缺陷不破坏系统整体的拓扑性质(比如不引入背散射通道),边界态就能绕过去继续传播。要验证这一点,你必须让电磁波真的在有限结构里跑一遍,看它在遇到缺陷前后的透射率变化、看场分布有没有被反射回来。这就是时域仿真的用武之地。
我做过一个对比实验,同一个界面结构,用频域本征模求解算出来的边界态色散和用FDTD点源激发测出来的透射谱,在带隙位置上是吻合的,但FDTD的透射谱在缺陷引入后会出现一些频域方法看不到的细节——比如某些频率上透射率掉得比预期多,回头查场分布才发现是缺陷附近的局部谐振把能量“吸”走了。这种信息对器件设计非常关键,而它只存在于时域仿真里。
1.2 FDTD看的是“过程”,频域方法看的是“结果”
打个比方,频域方法像是给结构拍一张静态照片,告诉你哪些频率能存在、哪些不能;FDTD像是拍一段视频,你能看到波从源出发、碰到界面、沿着界面爬行、遇到拐角转弯、最后从另一端出来的全过程。对于拓扑光子这种强调“传播行为”的课题,视频的信息量远大于照片。
具体到操作层面,FDTD里你可以放多个时间监视器,记录波前到达不同位置的时间,从而算出群速度;你可以放场分布监视器,看能量是不是真的被束缚在界面附近而不是泄漏到体材料里;你还可以在界面路径上故意挖一个空腔或者加一段无序,然后对比有无缺陷时的透射谱。这些操作在频域框架下要么做不了,要么需要额外的微扰计算,而在FDTD里就是加几个监视器的事。
当然,FDTD的代价是计算量大。一个二维拓扑界面结构,网格步长取到波长的二十分之一,仿真区域几个波长见方,跑一次透射谱可能要几分钟到几十分钟,取决于你的硬件和收敛设置。这个代价是值得的,因为你要的正是那些频域方法给不了的过程信息。
1.3 时域仿真里“看见”拓扑保护的三个判据
我在实际项目里总结了一套判断标准,用来确认FDTD结果里看到的确实是拓扑边界态而不是别的什么局域模式。这三个判据缺一不可:
- 单向性:在界面一端激发,能量主要从另一端出来,反向泄漏很小。这排除了普通驻波模式。
- 绕过缺陷的连续性:在界面路径上放一个尺寸明显大于波长的障碍物(比如一个介质柱或者一段空气槽),透射谱在带隙内的下降幅度有限,场分布显示波前绕过了障碍物。
- 体材料里的衰减:场分布在垂直于界面的方向上应该快速衰减,衰减长度和带隙大小相关。如果场一直延伸到体材料深处,那说明你看到的可能是体态而不是边界态。
这三个判据在后面的实操章节里会对应到具体的监视器设置和数据处理方法。这里先点出来,是为了让你在动手之前心里有个“要看到什么”的预期,而不是跑完仿真对着一堆曲线发呆。
2. 动手之前必须想清楚的几个建模决策
2.1 二维还是三维:先别急着上三维
拓扑光子的经典模型大多是二维的,比如蜂窝晶格、正方晶格加人工规范场、以及各种基于介质柱或空气孔的排列。二维仿真的计算量比三维小一到两个数量级,而且二维结构在实验上也有对应的实现方式(比如平板刻蚀或者介质柱阵列的横截面)。我的建议很明确:第一轮验证一律用二维。
二维仿真里你只需要关心TE或者TM一个偏振,网格只在两个方向上离散,监视器布置也简单。等你把二维的界面传播、缺陷绕过、透射谱都跑通了,对结构的色散关系和带隙位置有了直觉,再考虑上三维。三维仿真的坑多得多——网格色散、材料拟合、边界条件的斜入射反射,每一个都能让你调半天。拓扑结构的带隙通常不会特别宽,三维里网格色散很容易把带隙边缘搞模糊,到时候你连“带隙到底在哪”都说不清楚。
有一个例外情况:如果你的目标结构本身就是三维的(比如螺旋结构或者三维层状结构),那二维简化可能丢失关键物理。但这种情况下我建议先用小尺寸的三维模型做单频点验证,确认边界态存在,再扩大仿真区域做透射谱,不要一上来就铺大网格。
2.2 网格步长:拓扑结构比常规波导更挑网格
常规介质波导仿真,网格步长取波长的十分之一到十五分之一通常够用。拓扑结构不行,因为带隙的位置和宽度对结构参数的微小变化很敏感,网格太粗会把带隙“抹平”或者让带隙位置偏移。我的经验值是在最高关注频率对应的介质波长上取至少二十分之一,最好二十五分之一。
举个例子,假设你的工作频率对应真空波长1550纳米,结构材料折射率3.5,那介质内波长大约是443纳米。二十分之一就是22纳米左右。如果你的结构最小特征尺寸(比如介质柱之间的间隙)小于这个值,那网格还得更细,或者你需要重新审视结构参数是否合理——特征尺寸接近网格步长的结构,仿真结果基本不可信。
网格步长确定之后,还要检查网格色散。FDTD的数值色散会让不同频率的波以略微不同的速度传播,在宽带仿真里表现为脉冲展宽。对于拓扑边界态的透射谱测量,这个影响通常可以接受,但如果你要算群速度或者做时域波形分析,就得做网格收敛测试:把步长缩小一半,看结果变化是否在可接受范围内。我一般要求关键结果(比如带隙内透射率)在两次网格设置下的差异小于5%。
2.3 边界条件:PML不是万能挡板
完美匹配层(PML)是FDTD里最常用的吸收边界,但它在拓扑结构仿真里有几个容易踩的坑。第一,PML的反射率和入射角有关,拓扑边界态如果以较大的角度斜着打到PML上,反射可能比你预期的高。第二,PML层数不够或者电导率分布设置不当,会在带隙频率附近引入伪反射,让你误以为边界态被散射了。
我的做法是:PML层数至少取八个网格以上,并且在正式测量透射谱之前,先跑一个空场测试——也就是结构里不放任何散射体,只放源和监视器,看能量是不是干净地被PML吸收掉。如果空场测试里监视器读到的反射能量超过入射能量的百分之一,那就得加厚PML或者调整其参数。
另一个选择是周期性边界条件加吸收的组合。如果你的结构在垂直于界面的方向上是周期的(比如一维界面沿着周期方向延伸),可以在那个方向上用周期边界,在传播方向上用PML。这样能减少仿真区域,但要注意周期边界会引入人工的周期性镜像,如果界面附近有缺陷,镜像可能会干扰结果。这种情况下还是老老实实用PML把整个结构包起来比较稳妥。
2.4 材料模型:色散材料会让拓扑带隙“漂移”
拓扑光子结构里常用高折射率介质(比如硅、氮化硅或者某些化合物半导体),这些材料在光频段是有色散的。如果你在FDTD里用单频点的折射率做仿真,宽带结果里带隙位置会和真实情况有偏差。更麻烦的是,色散材料需要用多极点模型拟合,拟合误差会直接反映到带隙边缘的模糊程度上。
我的建议分两种情况:如果你的关注频率范围不宽(比如带隙宽度只有中心频率的百分之几),可以用中心频率处的折射率做近似,然后在结果讨论里注明这个近似;如果要做宽带对比或者带隙边缘的精细分析,就必须用拟合模型。拟合的时候注意检查拟合曲线和原始数据在带隙频率范围内的偏差,我一般要求折射率实部偏差小于0.5%,虚部(如果有损耗)偏差小于一个数量级。
还有一个容易被忽略的点:拓扑结构的带隙对材料折射率的整体缩放很敏感。你把折射率从3.4改成3.5,带隙可能整体移动几个百分点。所以在做参数扫描或者对比不同结构时,材料参数必须严格一致,不能一个结构用文献值、另一个用拟合值。
3. 从零搭建第一个拓扑界面模型的完整流程
3.1 结构参数的确定:从无量纲化到具体尺寸
理论文章里的拓扑光子结构通常用无量纲参数描述,比如晶格常数a、介质柱半径r与a的比值、介电常数比。你拿到一个模型,第一步是把这些无量纲参数翻译成具体尺寸。翻译的依据是你的工作波段和加工可行性。
假设工作波长定在1550纳米附近,晶格常数通常取在波长量级,比如a等于600到800纳米。介质柱半径比r/a取0.2到0.3之间,具体值决定了带隙的位置和宽度。介电常数取12左右(对应折射率约3.46)。这些数值不是随便定的,它们来自能带计算:你需要先用频域方法扫一遍r/a和介电常数的组合,找到带隙最宽、边界态色散最线性的参数点。
这一步很多人想跳过,直接拿文献里的参数开跑。但文献里的参数是针对特定材料和特定波段的,你的仿真条件未必匹配。我吃过这个亏:照搬一组参数,结果带隙正好落在PML吸收特性不好的频段上,透射谱里全是伪影。后来老老实实自己扫了一遍参数空间,虽然多花了两天,但后面所有仿真都顺了。
参数确定之后,把结构画进仿真软件。二维情况下就是一系列圆(介质柱)或者圆孔(空气孔)按晶格排列。画的时候注意结构边界要和网格对齐,否则阶梯近似会引入额外的散射。大多数FDTD软件支持把结构边界吸附到网格线上,这个选项一定要打开。
3.2 源的选择:点源、偶极子还是模式源
拓扑界面仿真的源选择取决于你要测什么。如果只是看边界态存不存在,一个宽带点源(或者偶极子源)放在界面附近就够了,它的辐射谱覆盖整个带隙,激发效率虽然不高但胜在简单。如果要定量测透射率,最好用模式源——也就是先算出界面态在某个频率上的场分布,然后把它作为注入源。这样激发效率高,透射谱的信噪比也好。
模式源的获取方式因软件而异。有的软件支持从本征模求解器导入模式场,有的需要你自己用脚本生成。我常用的做法是:先用频域本征模求解算出一个频率点上的界面态场分布,导出场数据,然后在FDTD里用自定义源注入。这个过程稍微麻烦一点,但对于定量分析是值得的。
源的带宽也要注意。拓扑带隙通常只占中心频率的百分之几到十几,源频谱要覆盖带隙并且两边留有余量。如果源带宽太窄,带隙边缘的透射率测不准;带宽太宽,高频和低频的数值色散又会污染结果。我一般取中心频率的百分之三十到四十作为源带宽,然后用监视器记录的源频谱做归一化。
3.3 监视器布置:透射、反射和场分布一个都不能少
一个完整的拓扑界面仿真至少需要三类监视器:
- 透射监视器:放在界面另一端,记录通过界面的能流。位置要离界面出口足够远,避免近场耦合影响。
- 反射监视器:放在源和界面入口之间,记录被反射回来的能量。拓扑边界态的理想情况是反射很小,但实际结构里总有一些。
- 场分布监视器:一个二维的频域场监视器,记录整个仿真区域在特定频率上的场分布。这个监视器是“看”拓扑保护的关键——你要从场图上确认能量确实沿着界面走,而不是从体材料里漏过去。
监视器的频率点设置也有讲究。不要只设一个中心频率,至少在带隙内设三到五个频点,带隙外各设一两个作为参考。这样你得到的透射谱才有形状,能看出带隙内的透射平台和带隙边缘的下降。
场分布监视器记录的是频域场,也就是对时域信号做傅里叶变换之后的结果。大多数软件默认记录所有频率的场,数据量很大。我建议只记录你关心的那几个频点,减少存储压力,也方便后续处理。
3.4 一次完整的仿真运行与初步结果判读
结构、源、监视器都设好之后,先别急着跑长仿真。做一个短时间的试运行,比如只跑几百个时间步,看看场是不是正常辐射出去了,有没有明显的数值不稳定(场值指数增长)。如果试运行正常,再把仿真时间加长到能量衰减到可忽略为止。
仿真时间的判据是:透射监视器记录的能量随时间的变化曲线应该趋于平缓,反射监视器也是。如果曲线还在振荡,说明还有能量在结构里来回反射,需要继续跑。我一般设置一个自动停止条件——当监视器能量在某个时间窗口内的变化小于总能量的千分之一时停止。
跑完之后,第一件事是看场分布图。如果场图显示能量沿着界面传播、在体材料里快速衰减,那基本就对了。如果场图显示能量均匀铺满整个结构,那要么是源放错了位置,要么是频率不在带隙里,要么是结构参数不对。第二件事是看透射谱。带隙内的透射率应该有一个平台,平台的高度取决于结构的透射效率和源的激发效率,不一定是百分之百,但应该明显高于带隙外的体态透射。
这里有个容易误判的地方:带隙外的透射率不一定低。体材料在带隙外是允许传播态的,所以透射率可能很高。判断拓扑边界态的关键不是“带隙内透射高、带隙外透射低”,而是“带隙内透射来自界面态、带隙外透射来自体态”。区分这两者要靠场分布图,不能只看透射谱。
4. 那些让新手卡住半天的典型问题
4.1 透射谱里带隙位置和文献对不上
这是最常见的问题。原因通常有三个:材料参数不一致、结构尺寸有偏差、网格色散。排查顺序应该是先查材料参数——你的折射率是不是和文献一致?如果文献用的是色散模型而你用的是单频折射率,带隙位置偏移几个百分点很正常。再查结构尺寸——晶格常数和半径比是不是严格一致?画结构的时候有没有因为网格吸附导致实际尺寸偏离设计值?最后查网格色散——把网格步长缩小一半再跑一次,看带隙位置是否移动。如果移动明显,说明你的网格太粗。
我遇到过一次特别隐蔽的情况:结构画的时候用了圆孔,但软件的圆孔近似算法在网格较粗时会把孔画成多边形,实际填充率偏离设计值,带隙整体偏移。后来把网格加密并且换了一种圆孔定义方式才解决。这个教训是:画完结构之后,导出一张结构折射率分布图看一眼,确认形状和尺寸符合预期,再开始跑仿真。
4.2 场分布看起来“糊”成一片,找不到界面态
如果场分布图里能量没有明显局域在界面上,先确认三件事:源的位置是不是在界面附近?源的频率是不是在带隙内?界面两侧的结构是不是真的拓扑性质不同?前两个好查,第三个容易被忽略——有时候你以为自己拼了两种拓扑性质不同的晶格,但实际上参数没调对,两侧的带隙位置和拓扑性质是一样的,界面处根本没有边界态。
验证方法是:分别对界面两侧的体结构做能带计算,确认它们的带隙有重叠,并且拓扑不变量不同。这个计算用频域方法做,很快。如果两侧拓扑性质相同,那界面处只有普通折射率失配引起的局域模式,不是拓扑边界态。
4.3 仿真跑着跑着发散了
FDTD发散通常是因为库朗条件不满足或者材料模型不稳定。检查时间步长是不是满足库朗条件(大多数软件会自动设置,但如果你手动改过就要注意)。如果用了色散材料模型,检查拟合的极点是不是在虚轴上引入了不稳定的增益。还有一种情况是PML参数设置过激,导致数值反射放大。把PML电导率分布调平滑一些,或者增加PML层数,通常能解决。
发散有时候是渐进的,前几百步看不出来,跑久了才指数增长。所以试运行阶段要盯着场值最大值的时间曲线,一旦发现单调增长就停下来查原因,别等跑完几小时才发现结果全废了。
4.4 透射率算出来大于一
这通常是归一化出了问题。透射率应该用透射监视器记录的能流除以源注入的总能量,而不是除以源监视器记录的能流——因为源监视器记录的是源附近的场,包含了向各个方向辐射的能量,和真正注入到界面态的能量不是一回事。正确的归一化方法是用一个参考仿真:同样的源、同样的监视器位置,但去掉界面结构(或者换成均匀介质),测到的透射能量作为分母。这个参考仿真还能顺便帮你检查PML的吸收效果。
5. 把仿真结果和物理图像对上的几个经验
5.1 用群速度验证边界态的色散斜率
拓扑边界态的色散曲线在带隙内通常是单调的,群速度(色散曲线的斜率)在一个较宽的频率范围内保持同号。你可以在FDTD里用两个相距一定距离的监视器记录波前到达时间,算出群速度,然后和频域方法算出的色散斜率对比。如果两者吻合,说明你看到的确实是那个边界态,而不是别的局域模式。
这个验证在带隙边缘特别有用,因为带隙边缘的色散往往是非线性的,群速度变化快。如果FDTD测出的群速度在带隙边缘出现反常(比如符号翻转或者急剧变化),那可能是带隙边缘和体态耦合导致的,需要回头检查结构参数。
5.2 缺陷实验的设计要“够狠”
验证拓扑保护的时候,缺陷不能太小。我见过有人放了一个半径只有波长十分之一的介质柱在界面路径上,然后说“透射率几乎没变,拓扑保护验证成功”。这个缺陷太小了,普通波导也能绕过去,说明不了问题。缺陷尺寸至少要能和波长相比,比如一个半径等于半波长的空气孔,或者一段长度几个波长的无序区域。
缺陷的位置也要讲究。放在界面路径的正中间是最直接的,但如果你想看更细致的物理,可以在路径上放多个缺陷,观察透射率随缺陷数量的变化。拓扑保护的特点是透射率随缺陷数量增加下降很慢,而普通波导会快速下降。这个对比实验做出来,比单点验证有说服力得多。
5.3 别忽略体材料损耗的影响
实际材料总有损耗,拓扑边界态虽然对结构缺陷免疫,但对材料损耗并不免疫。损耗会让边界态的传播长度受限,透射率随界面长度指数下降。在仿真里加损耗很简单,把材料的折射率虚部设成非零就行。但要注意,损耗会改变带隙的位置和宽度(因为色散关系的实部和虚部通过克拉默-克勒尼希关系耦合),所以加损耗之后要重新确认带隙范围。
我的做法是:先做无损耗仿真确认拓扑性质,再加一个合理的损耗值(比如对应传播长度几百微米到几毫米)看透射率下降是否在可接受范围。如果损耗导致透射率太低,那说明这个结构在实际材料体系里可能不实用,需要换材料或者改设计。
6. 这个系列后续要展开的内容
前言写到这里,该说的准备工作基本齐了。后面几篇会按这个顺序展开:先讲怎么用频域方法算能带和拓扑不变量,把“为什么这个结构有带隙、为什么界面处有边界态”从理论上说清楚;然后回到FDTD,手把手搭一个完整的界面传播模型,从画结构到出透射谱一步一步来;再往后是缺陷实验和鲁棒性定量分析,包括怎么设计缺陷、怎么处理数据、怎么判断结果是否可信;最后会聊一聊从二维到三维的过渡,以及仿真结果和实验测量之间的对应关系。
我个人在实际操作中的体会是,拓扑光子的FDTD仿真,难点不在软件操作,而在“知道该看什么”。软件谁都会点,但如果你不知道带隙内透射平台意味着什么、不知道场分布局域化到什么程度算合格、不知道缺陷尺寸取多大才有说服力,那跑再多仿真也只是在生成彩色图片。希望这篇前言能帮你把“该看什么”这件事先想清楚,后面的操作自然就顺了。