COMSOL复现光子晶体光纤:SPR传感器与三芯分束器仿真全流程

COMSOL复现光子晶体光纤:SPR传感器与三芯分束器仿真全流程 做论文复现这件事最难受的往往不是模型算不出来而是熬夜算出来之后和原文图一对差得远到让你怀疑自己这几年的仿真经验是不是都是白积累的。我之前复现的这篇光子晶体光纤工作目标结构其实是两套独立的模型左边是一个基于表面等离子体共振的传感器右边是一个三芯分束器。两个结构都不算多新但真的放进COMSOL里把图还原出来几何参数、材料色散、模式分析设置、PML和网格分层哪一环做得不仔细曲线就立刻给你脸色看。这篇博文就把整个复现过程从头捋一遍重点不是去念论文结论而是讲清楚我在COMSOL里每一步是怎么设置、为什么这么设置、踩了哪些坑给后面准备做同类光学仿真的人一个可以直接照走的参考。1. 复现之前先做减法拆模型、找参数、定目标1.1 一个模型只解决一个物理问题很多人拿到一篇论文就着急在COMSOL里新建模型结果还没开始画几何就已经懵了。我的习惯是先通读摘要和引言把论文里的所有图表列一个清单逐个标注它属于哪个结构、用的是哪套模型。这篇工作里的SPR传感器和三芯分束器虽然都在讲光子晶体光纤但它们各自有独立的几何和物理过程在COMSOL里必须分成两个模型文件来建。SPR传感器的核心是一个泄漏型波导结构某个空气孔内壁镀了一层金属膜光纤芯模沿着轴向传播时光能量会耦合到金属-介质界面的表面等离子体极化激元在特定波长处产生强吸收损耗谱上出现一个峰。三芯分束器则完全走另一条路三个相同的纤芯互相耦合光从其中一个芯注入后功率在三个芯之间周期性转移需要看的是传播方向上的能量分配。这两套东西如果硬塞进同一个模型边界条件、模式搜索策略、后处理指标全部会打架。1.2 参数表里那些默认没写的值光子晶体光纤的几何参数通常很好找论文里一般会写晶格常数Λ、空气孔直径d和占空比d/Λ。SPR传感器的结构则要重点盯三个值镀膜孔的位置、金属膜的厚度、传感通道里填充介质的折射率。膜厚尤其关键20 nm、30 nm、50 nm下的共振波长能差出几十纳米这个在复现时必须仔细对着原文的描述找。三芯分束器这边要确认的是三根纤芯的间距、每个芯的折射率增量、以及背景包层的折射率。光纤芯一般用掺锗二氧化硅论文里给的Δn多是在某个基准波长下的值复现时要注意COMSOL里设置的折射率是单值还是带入Sellmeier色散公式。如果原文没写色散我会先用固定折射率跑通流程再回来补色散模型这样出问题的时候能少一个变量。还有一类参数原文经常不写就是计算波长范围和模式搜索个数。SPR损耗谱要想看到完整的共振峰扫描范围不能只选在论文结果图的那一段应该先大范围粗扫比如1.4到2.0微米看到峰的走向之后再把扫描范围缩小加密。三芯分束器则要关注目标工作波长上的模式间距如果模式搜索个数设少了会把某个超模漏掉耦合长度算出来就完全不对。1.3 先把复现目标写在本子上复现之前我会在纸上写清楚最终要拿到哪张图、这张图的横纵坐标分别是什么、用什么COMSOL后处理能得到它。SPR传感器要的是损耗峰关键变量是波长和模式损耗三芯分束器要的是功率分配关键变量是传播距离或某个超模的间距。目标没定清楚就开始建模后面很可能出现图出来了但不知道对不对的尴尬局面。2. SPR传感器那半边金属膜、模场和损耗峰2.1 孔内镀膜的几何处理两个同心圆和一层不可省略的网格SPR传感器的几何里镀膜孔是整个模型最费心的地方。一个内壁镀金的空气孔在二维截面里就是两个同心圆外圆是二氧化硅包层边界内圆是空气孔边界两个圆之间的圆环就是要建出来的金属膜。这个圆环的厚度通常只有几十纳米相比于整个光纤截面百微米量级跨度非常悬殊。COMSOL里画这种结构没有捷径老老实实建两个圆用差集或者布尔操作把圆环实体切出来。膜的厚度必须严格等于论文里的值差5纳米共振峰就会明显移动。我遇到过一种情况几何画好了但膜太薄导致网格剖分失败最后发现是两个圆的圆心没有完全对齐差了一个极小量导致圆环宽度不均匀。修好圆心坐标之后问题直接消失。金属膜区域的网格是SPR仿真里最不能妥协的点。金膜厚度40纳米的话膜内至少要有两层单元理想是三到四层。我通常的做法是在膜上用映射网格或者细化三角形网格最大单元尺寸设成膜厚的三分之一然后在膜和包层交界处加上边界层网格来过渡。如果网格太粗表面等离子体模式的场分布根本解析不出来损耗峰会变得又矮又平。2.2 金的折射率固定值和色散模型的差距SPR仿真的成败很大程度取决于金属折射率设得对不对。金的介电常数在可见光和近红外波段变化剧烈如果图省事设一个固定折射率比如在1.55微米处查表得到3.20.5i那扫谱的时候其他波长的响应全都会跟着错。COMSOL材料库里自带Johnson and Christy的金和银数据直接在材料节点里选就行。想自己写的话也可以用Drude-Lorentz模型把等离子体频率、碰撞频率、束缚态参数填进去。一个比较实用的检查方法在要复现的波长范围里把COMSOL材料库里的折射率实部和虚部和论文里引用的数据曲线画在同一张图里点对一下。如果趋势一致说明材料模型没问题如果偏差明显就要考虑是不是版本差异导致的数据不同。还有一个容易踩的细节COMSOL里材料属性可以设成波长的函数但如果你在模式分析里用扫频要确保在频率或波长的扫描设置里把参数传给材料否则同一个折射率会被用到所有波长结果就是损耗谱完全错误。检查方法是随便挑两个波长看模型里的折射率数值是否发生了变化。2.3 从模式分析结果里提取共振峰SPR传感器复现到最后要得到的是模式损耗随波长变化的曲线。COMSOL的模式分析研究步骤会解出一堆特征值对应不同的模式。对于光子晶体光纤的SPR结构重点盯的是基模也就是有效折射率实部最大的那一个芯模。损耗的计算我习惯用这个公式损耗值通常是个虚数别把实部和虚部搞反或者漏掉系数。我见过很多人在这一步栽跟头——模式损耗算出来几个数量级地偏大后来发现是把有效折射率虚部当成了衰减系数漏乘了波数或者把λ的单位弄成了微米。计算这一步的时候用一段给定期望损耗量级的估算来验证对于SPR共振峰损耗通常几个到几十dB/cm如果算出来几百上千dB/cm先查单位换算再查是不是选错了模式。共振峰提取方面我的做法是在目标波长附近先用较大扫描步长算出损耗曲线确认峰的大概位置然后在峰值附近加密扫描步长一般加到几十个纳米范围内步长1到2纳米。损耗峰值对应的波长就是共振波长把这个位置和论文图对比就能看出复现得准不准。3. 三芯分束器那半边超模耦合与功率分配3.1 全模型还是对称模型我建议先全模型三芯分束器这个结构截面图看着对称性很好很多教程会鼓励你用对称边界条件把模型缩小到二分之一或者六分之一省计算资源。但做论文复现时我强烈建议第一轮直接建全模型。原因很简单对称边界会滤掉一部分对称性不匹配的模式而三芯结构里的超模有的在对称轴上场为零有的场分布是反对称的你如果在建模的时候用一个对称面把结构砍掉一半很可能会丢模式。漏掉任何一个超模后面算耦合长度和分束比都必然出错。全模型跑通了、能准确找到全部三个类芯模之后再考虑用对称性加速也不迟。复现最关键的是确认物理过程是对的算得快是优化阶段的事项目初期和结果对不对比起来计算时间不是优先考虑项。3.2 三个超模的判别方法三根相同的纤芯排在一起在模式分析里会出现三个相邻的模式它们的有效折射率非常接近。这三个超模分别对应三芯同相耦合、中间芯和两侧芯反相、两侧芯之间反相之类的高阶组合。如果模式分析设置里搜索的基准值不太合适这几个模式很容易混在一起或者只出来一两个。我的经验是把搜索模式数设成8到10个并把搜索基准值设在背景二氧化硅折射率附近稍高一点。解出来之后按有效折射率实部排序逐一查看各模式的场分布图用肉眼判定哪些是超模、哪些是包层模。包层模的场会散在空气孔区域超模的场则集中在三个纤芯里分辨起来并不难。还有一个小技巧是看有效折射率虚部。光纤模式里超模一般损耗较小虚部比较小而表面等离子体模式或者泄漏模的虚部要大很多。三芯分束器同族超模的实部间距可能只有10的负4次方量级虚部差异有时比实部更明显可以帮助排序。3.3 耦合长度和分束比的计算与验证三芯耦合系统的物理图像和双芯波导类似但更复杂。双芯时能量完全转移需要满足相位匹配条件周期长度是λ除以两个超模折射率差的二倍数。三芯系统有三个超模各模式之间干涉功率分配曲线的拍频结构和双芯不一样不是简单的完全转移又完全转回来而是多个周期的叠加。复现论文里那条功率曲线时最直接的做法是在COMSOL里建一个三维模型或者利用有效折射率做传播分析。三维全波仿真比较费资源尤其是在长距离传播时。我更推荐的方案是先通过模式分析拿准所有超模的有效折射率再用耦合模理论的解析公式画功率曲线和论文图对比趋势。如果趋势对得上再用三维仿真抽几个关键传播长度验证数值。后处理提取分束比时需要在每个纤芯区域做坡印廷矢量的面积分用每个芯的功率除以总功率。要注意积分区域要选在核心区域不要包含包层里的能量否则结果会被拉偏。可以把每个芯用圆面选中保证积分区域和不重叠。4. 参数扫描、PML和网格真正拉开差距的地方4.1 辅助扫描与模式跟随避免模式跳跃做波长扫描的时候COMSOL的模式分析会在每个波长上独立求解特征值。这意味着如果某个波长的模式排序变了你盯着的1号模式可能突然从芯模变成了包层模曲线就会出现莫名其妙的跳变。解决这个问题有两条路。第一条在研究设置里使用辅助扫描并且把模式搜索基准值设成从上一个解继承——这样每个波长都会在上一个波长的neff附近搜索模式连续性好很多。第二条如果你发现跳跃已经发生了就在跳跃点附近缩小扫描步长重新算一遍很多时候减小步长就救回来了。辅助扫描不是万能的扫描如果跨过一个较大的折射率色散区域模式仍可能跳。所以我最后确认曲线时除了看损耗曲线连续性还会列一个neff实部随波长变化的表。大的断崖基本能说明模式跳了需要用场图去确认。4.2 PML的厚度和缩放边界不是摆设光子晶体光纤仿真里PML的作用是吸收向外辐射的能量模拟无限开放结构。这个边界设置得好不好直接影响模式损耗的真实性。我的经验是PML厚度取四分之一到二分之一个波长在目标波长下这个值在COMSOL中通常默认是合适的。PML的内边界要离最后的空气孔至少留出半晶格常数到一整个晶格常数的距离太近了PML会扰动临近的模式场。PML缩放因子默认值我没动过但如果你发现边界附近出现异常的能量局部增强就要检查是不是PML入射角太大可以把PML厚度调厚一点。还有一点容易被忽略PML的折射率默认和相邻介质一致如果你在PML域不小心覆盖了不同材料会导致入射界面不匹配产生虚假反射。建完模型之后我会在所有域的颜色图里扫一眼确认PML域里没有意外出现的金属或高折射率材料。4.3 网格策略金属区、纤芯区、包层区的优先级光子晶体光纤的网格划分我按优先级排了个顺序第一是金属膜第二是纤芯和空气孔边界第三才是包层填充。计算资源有限时先在最重要的区域把网格加密其他地方保持较粗的默认网格整体结果不会受到太大影响。金属膜的网格之前提过至少要两三层的厚度。纤芯和空气孔边界处的网格要能忠实表达圆形边界的曲率用COMSOL的自由三角形加曲率分辨率控制就行。空气孔内部不参与传播可以设成较粗的网格包层区域如果比较远用粗网格加边界层就能很好地衔接。网格细化带来的最大问题是计算时间和内存。三芯分束器全模型加上细网格模式分析可能把每个波长所有模式的求解时间拉得比较长。我的做法是先算一个粗网格版本确认模式数量和大致趋势然后加密重新算最终结果。这样调试阶段速度快最终结果也有精度。5. 对不上图时的排查顺序从我没错到原来是我错5.1 先用最简结构验证整条链路复现结果和原文对不上的时候很多人的第一反应是去翻参数表、调材料但我的习惯是反过来——先验证整个仿真链路是不是通的。最简单的验证方法把光子晶体光纤的空气孔全部删掉变成一个纯二氧化硅块然后算基模的有效折射率。理论值就是材料折射率如果COMSOL算出来接近这个值说明物理场、模式分析、单位设置这些基础环节都正常。接下来再一个个加回空气孔每加一步看有效折射率变化是否合理。这个方法看起来笨但真的能帮你快速定位问题出在几何、材料还是模式识别上。5.2 材料色散、单位换算是最大的两个坑论文复现里材料折射率数据不完整或者单位弄错是最常见的失败原因。比如把折射率虚部、吸收系数的单位当成dB/cm去填或者把波长扫描的单位设错结果曲线在横坐标上平移了好几百纳米。排查时我会先把波长的单位换成微米折射率数据逐点对一遍确认材料库里的色散曲线和论文引用的数据是否一致。还遇到过一种情况金属膜折射率数据是实验数据但COMSOL里输入的时候用相对介电常数而不是折射率忘了做平方转换。这种错误很隐蔽损耗曲线整体的形状是对的但数值和峰位就是偏。看模型材料节点的数值显示时要留意当前选中的是相对介电常数还是折射率。5.3 最后一招回到场图用眼睛对所有数值手段都查过一遍还找不出问题我会在故障点附近取一个波长把模式场分布图调出来和论文里的模场图直接对比。这一步虽然不上档次但通常立竿见影。如果论文里的模场图显示能量集中在某一个孔的内壁附近而你算出来的模式能量均匀分布在所有空气孔边界上那大概率是模式认错了你在看的是一个包层模而不是目标芯模。如果场图相似但损耗数值差很多需要考虑是不是PML位置或者网格分层出了问题。场图不会说谎它比任何曲线都能更快地告诉你模型里到底在发生什么。复现的过程也就是这样先拆结构、再定参数、然后一步步把模式算准。我自己的体会是SPR传感器和三芯分束器这两类结构看懂的难度远低于算准的难度最后对不上图的时候十有八九都是细节没抠到位。网格层数、模式搜索基准值、材料色散数据这些平时觉得差不多就行的地方在论文复现里全都会变成决定成败的因素。这套排查顺序我后来用在了不少其他光学结构上每次都能帮我快速把问题从玄学变成可解释的工程问题。