1. 为什么大家都在做BIC:先把物理图像理清楚
BIC(连续谱束缚态)这几年在光子学里火得一塌糊涂,做超表面、微纳激光、高灵敏传感的课题组基本都在往这个方向靠。我最早接触这个题目,是在做硅基超表面的过程中被高损耗逼得没办法,然后发现BIC这个机制可以在理论上把辐射通道完全关死。一句话解释BIC的本质:它和扩展连续谱处在同一个频率区间的束缚态,却在理想情况下没有任何向外辐射的通道,所以品质因子可以做到无限大。
但理想归理想,实际做起来,材料损耗、加工误差、衬底泄漏都会把Q值从“无限大”拉回现实。这时仿真就变成了你唯一能控制变量的地方。COMSOL做BIC仿真,核心链条就三条:能带计算给你找对称性保护BIC的位置,Q因子计算告诉你这个模式到底能活多久,远场偏振投影则帮你判断它在真实测量里会呈现什么偏振响应。把这三件事串起来,你才算真正拿下一个完整的BIC设计闭环。
这篇文章我按自己的实操流程来写,从模型搭建到后处理,再到做教学录屏时需要注意的坑,全部讲透。适合刚入门COMSOL微纳光学仿真、对BIC感兴趣但被文献里那些含混步骤卡住的研究生和工程师。我的建议是,读之前先把Floquet周期性边界条件、本征频率求解器和远场变换这几个概念翻一下,后面理解起来会顺手得多。
2. 能带计算全流程:从晶胞几何到高对称点色散曲线
2.1 几何建模与材料设置的“隐形雷区”
能带计算的起点是单胞建模。无论是正方形的、六角形的超表面,还是简单的介质光栅,第一件事都是确定晶格常数和填充材料。我推荐先在COMSOL的Component定义里建好参数表,把晶格常数a、结构高度h、填充半径r全部参数化,别用硬编码的数字。原因很实际——后面扫描参数、优化能带时,改一个变量比满屏找数字快得多。
材料设置上用Optical或者Wave Optics模块里的Refractive Index材料模型就够了,注意折射率要填复数。对于全介质体系,比如Si或SiN,虚部会给一个很小的本征损耗。很多新手直接填实数折射率,结果BIC的Q因子收敛到一个假的高值,后面算Q时才发现不对。另一个容易出问题的是结构周围的环境介质,通常设置成Air,折射率1.0,但在查找最终Q因子时会发现环境介质厚度不够也会导致虚假泄漏。
几何模型里还有个优先级问题:先建整个单胞结构,再用Union操作合并成单一域,最后应用周期性边界条件。合并操作可以把界面数量减少,避免后面网格生成时在内部界面浪费节点。尤其是在做高对称性BIC时,结构内部的微小网格分页会直接干扰模式对称性,导致本应保护的BIC变成准BIC。
2.2 Floquet边界条件与波矢扫描
BIC的能带计算核心在k空间扫描。COMSOL的电磁波、频域(Electromagnetic Waves, Frequency Domain)接口提供了Floquet周期性边界条件,它可以设置两个周期性方向。具体设置时需要在Periodic Condition里选择Floquet周期,并输入两个方向上的Bloch波矢分量k_x和k_y。
我习惯的做法是扫描路径覆盖第一布里渊区的高对称路径,比如常见的Γ-X-M-Γ或者Γ-M-K-Γ。每一个离散的k点都对应一次本征频率求解。这里要特别提醒,BIC通常出现在能带交叉附近或高对称点上,因此加密离Γ点和高对称点附近的k扫描密度。一般粗扫可以设置40个k点,发现候选区域后再加密到100到200个点。
波矢的输入方式在COMSOL里通常是用参数扫描做连续性求解。不要把k_x和k_y同时都扫描成一维数组,而是用一个pair。可以用两个参数k_i来表示路径的插值参数,再通过辅助函数转化为实际的k_x、k_y。比如Γ-X路径,k_y保持0,k_x从0变到π/a。如果直接扫描两个参数,会生成二维扫描网格,处理起来又慢又乱。
2.3 本征频率求解器参数该怎么调
求解器这块是新手翻车重灾区。默认的直接求解器(MUMPS或PARDISO)在3D模型下非常吃内存,尤其是多模本征求解。建议把特征值求解的搜索基准点设在预期的工作频率附近,COMSOL里的Eigenfrequency Search Around Parameter这个输入框就派上用场了。如果你预期第一束能带在200 THz左右,基准点就填一个靠近该频率的值,这样求解器会优先找它附近的特征模。
我建议每次扫描k点时不求太多本征模式,6到12个就够了。BIC所在的模式通常可以靠参与因子和电场强度分布来识别,求太多反而拉慢速度,还会把SPURIOUS模式给你捞出来。特征值求解器类型用默认的ARPACK即可,配合区域光滑网格。
一个很有用的技巧是开启模式追踪(Eigenfrequency Tracking)。在参数扫描k点变化间隔较小时,相邻k点的本征模式可以根据电场斑图的相关系数进行追踪。这可以让你在后处理时自动画出一条连续色散曲线,不需要手动挑根。
2.4 后处理:把“点云”连成能带图
求解完成后,COMSOL的数据组里会多出一批本征频率,按k点分组。我最常用的后处理方式是在全局计算中新建一个一维绘图组,x轴取k参数,y轴取本征频率,然后用点样式把所有根画出来,再用颜色区分不同模式。这种方法虽然朴素,但直观。
如果你要求得更精细的能带图,可以在“派生值”中用Withu()提取某个已知模式的场并追踪其频率,这样能得到单条连续色散线。还有个常见需求是同时把光锥(Light Cone)画上去。在二维能带图上加一条ω = c*k/n_substrate的线,BIC离光锥边缘的距离直接影响准BIC的Q值。
这里要提醒一句,能带图的标准单位建议转成THz或者eV,别用rad/s。尤其是要跟实验测量对比的话,用eV或THz是最容易对齐的。后处理时可以先在Global Parameters里定义单位转换,避免每张图都手动算一遍。
3. Q因子计算的实操细节与收敛性排查
3.1 从复本征频率提取Q值的公式与方法
COMSOL的本征频率求解器给出的是复数频率,实部对应谐振频率,虚部对应辐射和吸收损耗。Q因子的定义非常简单:
Q = Re(f) / (2 * |Im(f)|)
我在实际操作中一般不是直接看COMSOL默认的Q变量,而是手动新建一个表达式。原因是默认变量在不同版本和不同物理接口下出现过含义偏差,我吃过大亏。手动定义后,每次求解结束后都能在结果里看到频率和Q值成对出现。
要特别注意,这里Im(f)的单位是Hz而不是rad/s。COMSOL的默认特征值内部单位有时会让人混淆,建议在设置里统一单位。你们可以试着先拿一个已知解析解的介质平板微腔验证一下,确认Im(f)的提取方式没毛病,再放心的用这个流程处理BIC结构。
3.2 网格收敛性测试:Q值没有上限,但网格有
BIC最大的数值陷阱在于,理论上Q可以无限大,但在离散网格下,数值误差会带来一个“伪辐射”通道。这个伪辐射不会因为网格细化而彻底消失,只会不断降低。所以算Q时,网格收敛性测试不是可选项,是必须项。
我的做法是至少做三套网格:粗网格、默认网格、加密网格。观察目标模式的本征频率和Q值变化。如果Q值随网格加密单调上升,说明你看到的Q是网格限制下的伪值,还需要继续加密。如果Q值稳定在某个量级不再显著变化,基本可以认为网格带来的误差可以忽略。
在BIC附近,模式场通常在倒空间里有非常尖锐的分量,需要网格能解析这个高空间频率成分。我的经验是最大网格尺寸取工作波长的八分之一到十分之一开始试,如果目标Q超过1e5,可能要细化到波长的十五分之一甚至二十分之一。这个网格量在二维问题下负担不大,但准三维结构或者使用PML时就要注意内存了。
3.3 PML边界与衬底泄漏的处理技巧
在Floquet周期性边界条件下,理想BIC没有向外辐射,不需要PML。但实际建模仿真里往往存在衬底,或者用有限尺寸模拟准BIC,这时就必须在结构上边界和下边界添加PML层。PML的厚度一般大于中心波长的三分之一,PML内部网格要拉伸,不能是均匀网格。
一个经常被忽略的细节是PML与物理域之间的过渡层宽度。如果PML紧贴单胞的话,模式场的渐逝尾会截断,导致Q值被人工压低。我建议在结构域和PML之间留至少半个波长的间距,让渐逝波自然衰减。
如果你是用全三维结构算Q,PML必须加到至少三个方向(上下两个辐射面)。因为BIC虽然理论上无辐射,但准BIC仍会有微弱的上下出射分量。有些情况下需要用对称性边界条件把一半计算域切掉,这样可以大幅减少内存需求。再配合PML,一套收敛的网格节点可能只有原来的三分之一。
3.4 高Q模式的数值清洗:别把虚模当物理
求解器在搜高频Q模式时,偶尔会蹦出一些非常离谱的“高Q”杂模。这些杂模的电场分散在整个计算域里,没有明确的物理局域,Q值高纯粹是因为模式没有耦合到辐射通道。排查方法是直接看电场强度分布图,如果是BIC模式,场通常集中在结构内部,且有明确的对称性特征。
另外要小心被漏掉的“数值截止模式”。COMSOL在粗网格下会在PML区域产生伪模式。通常伪模式的频率低得离谱,或者Q值非常低。你可以把PML区域的模式过滤掉:在后处理中限定模式能量集中在物理域的比例。我用一个筛选表达式,计算物理域中的总电场能量除以全计算域总能量,低于0.95的模式直接不采信。
3.5 我常用的Q因子验证流程
整套算下来之后,我会做一个交叉验证。正结构有无衬底,Q值会有数量级差异;有衬底时,BIC下方衬底侧的泄漏不可忽略。这时我会手动用FDTD或者RCWA方法做个对比,如果两者偏差在一个数量级以内就接收。如果偏差巨大,优先怀疑边界条件或PML设置,再检查材料折射率虚部。
另外一个快速验证是,把结构的尺寸比例做微小扰动(比如把正方形的边长稍微改成矩形),观看Q值从无穷大变为有限值的趋势是否与理论(1/Δk^2或1/Δn^2)吻合。这种趋势验证虽然朴素,但极其有效。
4. 远场偏振投影:让仿真数据能和实验对照说话
4.1 为什么BIC仿真必须做远场分析
能带和Q因子解决的是模式“存不存在”和“能活多久”的问题,但实验测量通常是在远场进行的。你和实验同学对数据的第一个问题往往是:“这个模式的共振峰在偏振分辨反射谱里长什么样?”这就需要远场投影了。
COMSOL的电磁波接口中提供了远场域(Far-Field Domain)功能。它的作用是把近场解算数据通过格林函数积分投影到任意方向的远场辐射花样上。对于BIC体系,远场行为特别有意思:BIC在远场完全消失,表现为一个暗态;但准BIC则会出现一个尖锐的Fano线型。你从远场投影里看不到真正的BIC,但能看到BIC附近的光谱演化。
4.2 远场投影设置:物理距离与方向坐标
远场计算在COMSOL里不增加求解负担,它是一个后处理步骤。你要做的第一件事是在模型中加入Far-Field Domain节点,选择需要投影的电场面。这里建议选择包围结构的一个虚拟面,这个面要离结构足够远,处于辐射远场条件,但不一定要包含PML。
方向坐标设置上有两种做法:使用球坐标角度,直接用θ和φ定义出射方向;或者使用动量空间坐标(kx, ky)来定义倒空间。做能带研究时,我更推荐后者,因为远场投影到动量空间之后,你可以直接看到BIC在Γ点附近的远场奇点,直观理解为“这个方向没有辐射”。
在远场表达式的长远计算里,要选对电场分量。默认的远场输出是矢量表达式,可以提取出E_theta和E_phi两个分量。对线偏振分析只需要其中一个分量,对圆偏振分析则需要同时提取并做相位延迟关系。
4.3 远场偏振投影:从斯托克斯参数到偏振度
偏振投影的核心逻辑是把远场电场矢量投影到特定的偏振基上。比如你想知道远场在该方向上是x偏振还是y偏振占主导,可以定义投影表达式P_x = |E_theta|^2 / (|E_theta|^2 + |E_phi|^2)。如果要分析的是更一般的偏振态,就需要斯托克斯参数。
COMSOL内置变量里并不直接给出斯托克斯参数,需要手动定义。四个参数的表达式分别是:
S0 = |Ex|^2 + |Ey|^2 S1 = |Ex|^2 - |Ey|^2 S2 = 2 * Re(Ex * conj(Ey)) S3 = -2 * Im(Ex * conj(Ey))
这里的Ex和Ey可以是远场球坐标分量的x和y线性组合,也可以直接用全局坐标系的电场分量。用全局坐标更方便,但注意远场输出通常定义在球坐标下,需要转换。
算出斯托克斯参数后,偏振度(DOP) = sqrt(S1^2 + S2^2 + S3^2) / S0。如果某个方向上的DOP接近1,说明远场基本是纯偏振态;在BIC的奇点处,DOP奇异甚至不连续,这是实验确认BIC的重要证据。
4.4 动量空间辐射图与偏振图的绘制方案
我在后处理中一般画两张图:一张是远场辐射强度在(kx, ky)平面上的分布图,另一张是偏振椭圆分布叠加图。第一张图能直接看到暗点,第二张图能看到围绕暗点的旋向变化,这是拓扑荷的直接表现。
具体做法是,在结果里新建二维表面图,x轴取kx,y轴取ky,颜色取S0。再把S1、S2的值按比例化成箭头或者椭圆。COMSOL里可以用Arrow Surface或Line plot来表现。如果版本支持,也可以把椭圆画在二维平面中,但需要手动写一点辅助函数。
这套表现方式很适合放到论文里。审稿人对“远场偏振奇点”非常认可。我见过好几个工作,数据创新平平,但就是靠一张漂亮的偏振辐射图给加了不少印象分。所以,别省这个后处理功夫。
4.5 归一化与强度校正问题
远场结果的绝对值没有意义,必须归一化。常见做法是取所有方向中的最大强度为1。如果做实验对比,还需要把数值孔径的因素考虑进去。实验物镜的收集角有限,在动量空间里对应一个圆形范围。我建议在远场投影后加一个圆形掩膜,只输出NA范围内的数据,这样与实验测量的相关性会好很多。
另一个细节是远场投影的球半径。COMSOL默认的远场域半径是自动设置的,但为了准确,确保投影面处于从结构表面看过去的辐射远场区。如果结构尺寸太大,比如几十微米量级,远场条件距离可能就很大,计算量增加不少。一般微纳光子学结构的尺寸都在亚微米到几微米,问题不大。
5. 录屏指导与教学演示:把仿真流程变成可复现的课程
5.1 录屏在BIC仿真教学中的独特定位
BIC仿真流程里包含大量参数设置、后处理细节和迭代排查,任何一个步骤没看到,后面就很难复现。纯文字描述能承载的信息量非常有限,这时候录屏指导是效率最高的载体。
我录这类教学视频时给自己定了一条要求:每个视频解决一个特定任务,绝不要从软件安装开始讲到远场偏振。比如“5分钟完成Floquet边界条件设置并跑通能带粗扫”,这就是一个合格的视频主题。录屏教学的目的不是替代文档,而是“看着我做一遍”,让学习者建立完整的手感。
5.2 录屏工具选型和基本参数设置
录屏工具方面,Windows上用OBS Studio,免费、无损、支持多轨录音,足够专业。macOS则可以用自带的QuickTime Player做简单录屏,或者ScreenFlow做更细的剪辑。不建议直接用COMSOL内置的Record功能,它录出来的文件体积大,还会把无关系统消息也收进去。
录屏分辨率必须匹配你的操作习惯。COMSOL界面在高DPI屏下字体较小,若录屏只设1080p,学员在手机上看时细节会糊掉。推荐录2K或者4K分辨率,编码用H.264,码率不低20 Mbps。音频用独立麦克风,不要用笔记本内置麦克风,键盘音和风扇声会严重干扰学习体验。
还要提一下鼠标高亮设置。在OBS里可以开启鼠标高亮效果,同时放大鼠标光标尺寸。操作仿真软件时,鼠标位置是关键信息,学员需要清楚地看到你点击的是哪个菜单。我用的是放大两倍加黄色高亮圈。这个细节做得好的教程,观感提升非常明显。
5.3 录屏内容的结构设计与讲解节奏
录屏不是开软件就点,而是要先在纸上写脚本。我的脚本模板包含四个部分:这步要完成什么、涉及哪个物理概念、操作路径是什么、可能出现什么问题。每段操作最前面用一句十几秒的“预告”概览,让学员带着目标看操作,比边做边说要好得多。
讲解节奏上,我坚持“慢就是快”。关键节点上的重复说明是必要的,但绝不重复废话。比如设置PML的时候可以强调一次“这里必须用拉伸网格,不是自由网格”,然后闭环操作。操作速度快时,要在剪辑时对关键步骤打上暂停提示,建议用渲染字幕来实现,不要依赖口播速度。
还要注意录屏时关闭无关弹窗和浏览器通知,否则很容易让学员分心。我有一次录屏时弹出系统更新提醒,视频发出去之后收到不少评论都在问弹窗内容,这显然会让教学效果打折扣。录制前用OBS的场景预览检查一遍桌面,再开始正式录制。
5.4 关键步骤的演示重点排序
在BIC仿真录屏教程里,我的演示重点按物理流程分为四块:
一是Floquet边界条件设置,讲清楚周期性方向的指定和波矢参数化方式。这里要放慢节奏,因为这是新手最容易在这里弄混模棱两可的地方。
二是参数扫描的配置,强调必须使用“参数化扫描”并在求解器配置中开启模式追踪。扫描类型(指定组合还是全部组合)也要说清楚,避免学员多扫了一个数量级的组合。
三是Q因子的提取与收敛性分析,演示至少要跑两套网格对比Q值。要让学员直观看到Q值随网格加密而变化的过程,这个过程才有教学意义。
四是远场偏振投影,讲清楚如何定义斯托克斯参数和绘制动量空间偏振图。这一块的后处理操作比较繁琐,建议分两步走:先画远场强度分布,再叠加偏振信息。
5.5 视频剪辑与发布细节
录完素材后,处理三条线:视频轨、音频轨、字幕轨。我一般先用LosslessCut做粗剪,把无效操作片段裁掉,再用DaVinci Resolve做字幕和导出。原速操作浪费太多时间,学物理的人看两倍速完全能看懂操作路径。
字幕我强烈建议上。一是COMSOL的专业术语多,语音转文字容易出错,人工校对字幕能同时帮你确认术语用词;二是学员经常在无法开声音的环境下看视频,纯字幕版本依然能传达完整操作步骤。在DaVinci里用SRT文件直接导入即可。
视频发布时的标题和摘要也要规划好。标题里把核心目标写清楚,比如“COMSOL BIC仿真教程:Floquet边界条件与能带粗扫”,摘要中列出本次用到的所有关键菜单,比如“参数化扫描、本征频率、模式追踪”。这样后续检索起来非常方便。
6. BIC仿真常见问题速查表与私有心得
我在做BIC仿真的过程中积累了不少排查经验。这里整理成一个速查表,按症状、原因、解决方案的格式列出,方便直接对照。
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 能带曲线同一位置出现断点 | k点扫描步长过大 | 加密k点采样,尤其是高对称点附近 |
| 相邻k点模式跳变 | 模式追踪未开启或步长过大 | 开启Eigenfrequency Tracking,减小k间隔 |
| 计算得到的Q因子为负值 | 本征频率虚部符号取反 | 检查Im(f)的正负约定,改用abs()提取 |
| Q值不随网格加密收敛 | PML边界离结构太近 | 增加结构域与PML间距至半个波长以上 |
| 远场强度全为零 | 远场域未覆盖目标方向 | 检查远场域节点设置,扩大投影球范围 |
| 偏振图全是噪声 | 斯托克斯参数定义有误 | 检查电场分量是否用了球坐标分量 |
| 求解器内存不足 | 全局直接求解器吃内存 | 改用迭代求解器,或利用对称性裁剪计算域 |
| 伪高Q模混入结果 | 数值杂模未被识别 | 过滤物理域能量占比低于0.95的模式 |
| 周期边界方向设置错 | 周期方向与几何坐标不对应 | 重新核对Floquet边界的方向选择 |
6.1 我踩过的两个大坑
第一个坑是PML设置中的“过度约束”。我早期做准BIC中的衬底泄漏时,给上、下、左、右全加了PML,结果模式被PML的人工反射干扰,Q值计算失真。后来我发现,在周期边界条件下,四个侧面本来就没有向外辐射通道,侧面加PML反而是画蛇添足。正确的做法是只在上、下两个非周期方向加PML,侧面用周期边界对应结构本身。
第二个坑是高对称点附近的模式能量泄漏。在Γ点上,BIC的对称性保护要求结构具有相应的对称性。我有时为了加速模型求解,会手动把模型简化成四分之一或二分之一对称。这个操作对普通模式没问题,但对BIC模式要特别小心——如果对称化操作意外破坏了模式的对称性,BIC就会变成一个准BIC,Q值从理论无穷大直接掉到几百。后来我改成先在完整结构上确认BIC模式存在,再考虑对称化优化计算。
6.2 个人的BIC仿真习惯清单
我在长期工作中形成了几个固定习惯,这里分享给大家参考。
第一,所有的几何尺寸和材料参数全部先定义成全局参数,并且参数命名带物理含义,比如a_lattice、h_thick、n_si。
第二,每次求解前保存一份配置文件。这个习惯帮我应对过不少次误操作,尤其是参数扫描中途改了几何参数导致整个数据集作废的情况。
第三,每次新建模型时,第一步就把网格细化级别的收敛性测试流程准备好。有这样一个基线方案,后面所有的BIC模式验证都会快很多。
第四,远场分析一定同时输出强度和偏振度,只用强度图会后知后觉地发现实验数据对不上。
6.3 录屏里的“经验值”如何传递
我在做录屏教程时,一直都在想一个问题:怎么才能让学习者在看视频时获得“跟我一起做”的体验,而不只是“看别人操作”的旁观感。
目前我会在关键步骤前设计一个小问题,比如“先思考一下,这个模式的对称性在Γ点是否匹配BIC条件?”然后暂停5秒,让学习者自己思考,再继续演示。这种方式能有效唤醒学习者的主动认知,而不是被动接收。这个做法在研究生教学里反馈很好,推荐尝试。
另外,录屏中要加入一个“如果这里出错”的小分支。比如我在演示Q因子收敛性测试的时候,会故意展示一次错误的画法——直接看默认Q变量而不是手动表达式——然后解释为什么错。实际证明,这种“负向教学”的知识留存效果往往比正向演示更好。
6.4 关于“录屏指导”的边界认知
录屏不是万能的。它适合传递操作流程、软件交互、后处理技巧,但不适合承载更深的物理推导。我在课程里始终提醒学习者,在仿真之前必须先独立推导出预期的能带形状或Q值量级。如果你带着理论预期来仿真,那么COMSOL对你来说就是一个验证工具,而不是一个黑箱测试仪。这一条对BIC这类“数值上极易出假象”的课题来说,尤其重要。
我自己在实际操作中最大的体会是,BIC仿真成功的关键往往不在软件操作本身,而在于你对物理模型的理解深度。Floquet边界条件、PML、远场投影,这些工具实现的只是麦克斯韦方程的数值解法,它们的共同目标始终是获得一个可解释、可复现、可实测对照的物理结果。最后再分享一个小技巧:把COMSOL生成的数据定时导出,用Python做二次处理,尤其是能带图。我不喜欢COMSOL自带的默认配色风格,所以后期的几乎所有图都交给Matplotlib画,效果反而更契合论文排版。只要能带数据是连续且完整的,格式转换和数据输出过程并不复杂,这一步值得自动化和模板化。