ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Lumerical FDTD环形谐振器仿真实战:结构搭建与参数优化详解

Lumerical FDTD环形谐振器仿真实战:结构搭建与参数优化详解 做硅光或者集成光学方向的仿真环形谐振器Ring Resonator是绕不开的结构而Lumerical FDTD Solutions自带的官方案例又是绝大多数人入门时啃的第一个硬骨头。我第一次跟着这个案例跑的时候光是搞懂结构怎么建、网格怎么设、光源怎么加就折腾了好几天网上资料零散官方文档又偏向工具说明很多“为什么这么做”得自己一点点试。这篇文章我把第一部分的核心内容拆开讲清楚从环形谐振器的原理、官方案例的结构搭建到材料设置、网格策略、激励源和监视器配置再到我实际跑仿真时踩过的坑和排查方法给你一条可以直接照着走的路径。适合刚接触Lumerical、想系统搞懂FDTD仿真流程或者已经跑过简单案例但弄不明白环形谐振器仿真参数选择的读者。1. 项目概述环形谐振器仿真到底在做一件什么事1.1 环形谐振器的基本原理与设计目标环形谐振器在集成光子学里的地位相当于电路里的LC振荡回路。它由一根直波导和旁边紧挨着的一个环形波导构成光从直波导一端输入经由直波导与环形波导之间的倏逝波耦合进入环内。光在环内每绕一圈走过的光程为2πR如果这个光程正好等于工作波长的整数倍也就是满足相位条件m × λ n_eff × 2πR这里的n_eff是环形波导模式的有效折射率m是谐振级次也就是整数。满足这个条件时环内的光会相干相长能量不断累积而不满足条件的光在环内绕一圈后相位乱掉没法形成稳定的驻波模式。反映在透射谱上就是谐振波长处直通端Through端出现一个尖锐的凹陷这些光被“关”进了环里。FDTD时域有限差分法擅长处理这类问题因为它是时域方法一次仿真打入一个宽谱脉冲就能覆盖1500nm到1600nm这样一整段频谱。频域响应通过傅里叶变换得到谐振波长、消光比、自由频谱范围FSR、品质因子Q值这些关键参数全都能从一条透射谱里读出来。如果用频域方法比如有限元你得在每个波长点都算一遍效率完全不是一个量级。官方案例的学习目标是搭建一个典型的硅基绝缘体SOI环形谐振器模型并跑出一条可靠的透射谱。这个案例默认的工艺参数很典型顶部硅Si厚度220nm埋氧层BOX厚度2μm环半径5μm波导宽度500nm直波导与环之间的耦合间隙gap150nm。这套参数基本就是当前硅光流片平台的标准值仿真结果具有很好的参考意义。1.2 第一部分案例的学习路径与内容范围很多初学者一上来就急着跑结果结果界面上一堆窗口根本不知道每个是干什么的模型建错了也不知道。这个官方案例分成几个阶段第一部分重点解决“把模型建对、把仿真参数设对”的问题核心内容有四块第一几何结构搭建。用Lumerical的CAD界面或者脚本把直波导、环形波导、衬底和埋氧层建出来设置正确的材料、位置和尺寸。第二材料与网格设置。从材料库中加载硅和二氧化硅的色散数据确定仿真区域的网格精度尤其是波导和耦合间隙这种光场急剧变化的地方。第三激励与检测配置。在直波导一端放置模式光源Mode Source在另一端放置透射监视器在结构中心区域放置场分布监视器设置合理的仿真时间和收敛判据。第四运行与初步验证。跑通仿真检查监视器数据是否合理确认谐振峰是否出现在预期位置为第二部分提取Q值、分析模式场分布打好基础。按我的经验新手最容易在第二和第三部分栽跟头。网格设粗了谐振峰直接“消失”光源模式选错了整个透射谱全是噪声监视器放的位置不对测到的根本不是你需要的光。这些我都会在后面详细展开。2. 仿真环境准备与几何结构搭建2.1 界面布局理解与脚本调用方式Lumerical FDTD Solutions打开后你会看到左侧是结构树和组件库中间是大片的CAD视图区域下方是脚本命令行窗口。很多人刚打开时觉得窗口比例不协调CAD区太小、脚本窗口又太大或者结构树挤占视线。这些布局都可以拖拽调整视图窗口右下角有分割条直接拖动就能改变大小。如果你想要一键恢复默认布局在View菜单下选择Reset Layout或者Load Layout选Default布局即可。关于脚本调用这是Lumerical效率提升的关键。官方案例往往同时提供.lsf脚本文件你在主界面菜单栏File → Open Script打开它或者直接把.lsf文件拖进脚本编辑器然后点击运行按钮快捷键F5就能逐行执行。脚本的好处是可重复、可批量改参数我第一次演示结构搭建用的是GUI但实际做参数扫描时全部依赖脚本。你可以在脚本命令行里逐行输入命令来试试比如addcircle回车后CAD视图上就会多出一个圆这种即时反馈能帮你快速理解每个命令的作用。有一点要提醒Lumerical的脚本语法和MATLAB非常接近注释用#或者%开头支持循环、条件判断、变量定义。如果你之前写过MATLAB上手基本没有障碍。强烈建议不要只点GUI哪怕你不写完整脚本也要会用命令行做快速调整这个习惯能帮你节省大量重复建模时间。2.2 使用CAD图元构建直波导与环形波导环形谐振器的几何模型在Lumerical里建起来不复杂但有几个尺寸关系需要先理清楚。默认的坐标单位是微米um中心波长1550nm即1.55μm所以建模时记住一个换算原则所有尺寸同步缩小到微米量级。直波导是一条长方形的硅条宽度0.5μm即500nm高度0.22μm即220nm长度通常取6μm到8μm保证光源和监视器离环足够远。在CAD界面里用addrect命令创建一个矩形设置x跨度从-4到4即长度8μmy跨度-0.25到0.25即宽度0.5μmz跨度0到0.22。这里z0的位置是硅波导底面和埋氧层顶面重合。环形波导有两种建法。第一种最直接用addring命令内半径4.75μm外半径5.25μm这样环宽正好0.5μmz跨度和直波导一致。第二种是传统做法用两个addcircle圆一个半径5.25μm一个半径4.75μm然后选中两个圆在结构树里做布尔减Subtract同样得到环形。两种方法最终等效但用addring更简单老版本如果找不到addring命令再去用布尔减。关键位置关系是gap也就是直波导侧壁与环外侧壁之间的距离。默认150nm这个距离决定耦合强度。gap越小耦合越强谐振峰的凹陷越深但Q值会下降gap越大耦合越弱Q值高但消光比差。150nm是平衡之后的常用值。最后是衬底和埋氧层。衬底硅厚度可以建一个厚度2μm、范围覆盖整个仿真区域的大方块埋氧层BOX建一个厚度2μm的大方块。注意硅波导在z方向要落在BOX层的顶面上也就是BOX从z-2到z0Si波导从z0到z0.22。这样总体结构从下到上依次是硅衬底、2μm的二氧化硅埋氧层、220nm的硅波导层。空气覆盖层用默认背景折射率1.0即可不必专门建方块。2.3 为什么这些尺寸要这么选很多教程直接给出尺寸数字但不解释为什么导致读者一旦需要改参数就完全没方向。我补一下背后的逻辑。硅波导高度选220nm是因为SOI标准片的顶层硅厚度就是220nm这是商用流片平台最成熟的工艺规格。波导宽度500nm在1550nm波长下刚好能维持单模传输同时保证模式被较强地束缚在波导内。如果宽度减小到400nm模式约束变弱弯曲损耗会明显增加如果增大到600nm就可能出现高阶横模透射谱上会多出额外的模式特征干扰谐振分析。环半径5μm是综合考虑弯曲损耗和FSR的结果。半径越小FSR越大但弯曲损耗也随之增大半径过大FSR变小相邻谐振峰靠得太近不利于实际滤波应用。5μm在1550nm波段是一个折中值弯曲损耗可以控制在可接受范围内同时FSR大约在15nm到20nm之间便于用宽谱光源一次观测多个谐振峰。gap取150nm也有讲究。FDTD仿真里gap区域是网格和控制精度最难处理的地方。gap过大比如300nm以上耦合太弱透射谱的谐振峰很浅甚至看不见gap过小比如50nm耦合极强谐振峰会变得很宽Q值低。150nm在制造工艺和仿真精度上都比较友好。材料分层结构里BOX厚度2μm同样不是随便填的。埋氧层的作用是把光限制在硅波导层内如果BOX太薄光的倏逝场会泄漏到硅衬底里造成额外的辐射损耗。2μm的BOX厚度足以让波导模式的有效折射率不再随BOX厚度变化即“模式充分收敛”。如果你仿真时发现结果与文献对不上先检查BOX层厚度有没有设对。3. 材料定义与网格设置决定仿真成败的两个关键3.1 材料库的使用与色散模型选择结构建好后要给每个几何体赋予材料。点击CAD视图中的结构体在材料Material下拉菜单里选择。Lumerical自带材料库常用的硅和二氧化硅在材料库中都能找到。选择Si (Silicon) - Palik和SiO2 (Silicon Dioxide) - Palik这两项即可。为什么要强调Palik模型因为Palik的数据来自实验测量同时包含了折射率n和消光系数k的色散信息覆盖很宽的波长范围。硅在1550nm附近折射率约为3.476在1500nm到1600nm这个波段内n随波长缓慢变化。如果你的仿真只用固定的n3.476表面上差别不大但在宽谱仿真中材料色散会直接影响谐振峰的位置和FSR的精确度。用常数折射率时我试过谐振峰会整体偏移几个纳米做定性分析可以做定量设计就不行。还有一类情况需要特别注意仿真区域包含金属时比如做等离子体器件材料必须用带复折射率的数据模型这时更要依赖材料库不能手动填一个常数。金属的介电常数虚部很大对网格和时间步长都有额外影响。好在环形谐振器案例是全介质结构材料设置相对简单。材料设置完成后一定要验证折射率赋值是否正确。方法是在脚本命令行运行getindex选中一个结构体或者使用材料浏览器查看指定波长下的n和k。我在第一次建模型时光顾着查看几何结构没有确认材料结果仿真跑出来发现谐振峰位置偏了好几十纳米检查半天才发现材料的折射率数据根本没加载成功结构体还是默认的“etch”即折射率为1的空气材料。3.2 FDTD仿真区域与边界条件仿真区域FDTD solver region定义了实际计算的空间范围。添加一个FDTD区域覆盖整个结构同时四周留出足够的空间给边界条件。推荐设置x从-5到5y从-4.5到6.5z从-2.5到2。z方向的下边界在衬底内部上边界在空气里保证模式的倏逝场完全落在仿真区域内。边界条件使用PML完美匹配层也就是软件的默认设置。PML的作用是吸收射向边界的光模拟“无限大空间”避免反射光干扰仿真结果。PML不是万能的它对入射角敏感光垂直入射时吸收效果好掠入射时效果变差。所以PML距离结构至少要有半个波长的缓冲距离这就是为什么仿真区域尺寸要比结构本身大一圈的原因。如果你发现透射谱上叠加了周期性抖动的小波纹大概率就是PML距离太近反射光没有被完全吸收。3.3 网格策略默认网格与覆盖网格的配合FDTD方法基于空间离散化的Yee网格网格尺寸直接决定精度和计算资源。Lumerical提供自动非均匀网格auto non-uniform默认精度2级。在精度为2级时软件会自动在材料边界加密网格但依然远不足以精确描述波导模式的分布。环形谐振器的弯曲波导和耦合区域的场变化非常剧烈必须使用网格覆盖区域Mesh Override Region来局部细化。全局设置建议网格精度mesh accuracy设置为3或4同时启用保形网格conformal mesh选项。匀称网格的尺寸可以用“Cells per wavelength”来粗调但更精确的做法是手动添加Mesh Override Region定义的区域直接覆盖直波导、环形波导、耦合gap区域以及光源和监视器附近。对于这个案例推荐在该区域内设置dx dy 5nmdz 10nm网格类型选择均匀网格。这个网格尺寸不是空想出来的。500nm宽的波导如果网格5nm宽度方向上有100个网格点220nm高的波导厚度方向上有44个网格点。这样的分辨率足以精确描述基模场分布和倏逝场衰减。如果网格放到20nm模式形状会失真有效折射率计算偏差变大透射谱的谐振峰位置和深度都会出问题。网格与时间步长的关系也要知道。FDTD的稳定性条件CFL条件要求时间步长dt不能超过网格尺寸决定的阈值具体来说是dt ≤ 1/(c√(1/dx²1/dy²1/dz²))约等于0.99 × 最小网格尺寸除以光速。这意味着网格加密一倍dt也要缩小一倍总仿真时间延长不止一倍。所以网格从来不是越细越好而是要在精度和资源之间取平衡。我的习惯是先用较粗的网格比如10nm快速跑通流程、粗略确认谐振峰位置然后再加密到5nm做正式计算。3.4 仿真时间与自动关断判据FDTD仿真是时域的要给足够的仿真时间让光场充分演化直到谐振腔里的能量衰减完毕。仿真时间设多长你当然可以硬设一个很大值但效率太低。Lumerical提供了自动关断Auto Shutoff功能当监视器记录的能量下降到设定阈值时仿真自动停止。默认阈值是1e-5对绝大多数无源器件够用求高Q值时要降低阈值到1e-6甚至更低。这里有一个别人很少提醒的点自动关断能量监测依据的是仿真区域内所有监视器记录的总能量。如果你的监视器设置不当比如监视器面积太小没有覆盖到主要能量分布区域自动关断可能提前触发导致场尚未稳定就停止计算透射谱的谐振峰变得不光滑。所以监视器宁可放得大一些也不要为了省事缩小范围否则会影响仿真收敛判据的可靠性。4. 激励源与监视器配置光源和检测器的正确摆法4.1 模式光源参数设置在直波导的输入端放置一个模式光源Mode Source。光源的位置在直波导左侧x -3.5μm附近注意要离开环形波导至少两三个波长避免光源激发的非目标模式干扰环形耦合区。光源的截面光源所在平面要和波导截面完全重合也就是y方向覆盖整个波导宽度z方向覆盖整个波导高度。光源设置的关键参数有四个第一波长范围。官方案例通常设为1500nm到1600nm中心波长1550nm。太宽的波长范围意味着更短的时域脉冲理论上FFT后能覆盖更宽的频段但也需要更精细的网格来描述高频成分窄带范围可以提高频率分辨率但只能看到少数几个谐振峰。第一遍跑通建议就用1.5到1.6μm。第二模式选择Mode Selection。Lumerical会在光源所在截面处求解本征模式你需要选择正确的模式作为激励。对于标准SOI波导基模是TE模式电场主要沿水平方向偏振选fundamental mode并把偏振设为TE。如果模式列表里TE和TM同时出现选对应neff最大的那个那就是基模。第三传播方向。光源默认向x正方向传播这正是我们需要的让光从直波导左边进入向环形波导方向传播。第四弯曲半径Bending Radius。模式光源的求解默认基于直波导截面不会自动考虑环形的弯曲效应。官方案例中这个选项保持默认值0意味着你用直波导模式近似替代弯曲波导模式。严格来说半径5μm的弯曲波导模式有效折射率和直波导有微小差异但做工程仿真这个差异可以接受完全不会影响你对谐振峰位置的判断。4.2 透射监视器与场监视器配置输出端监视器是关键。在直波导右侧、x 3.5μm处放置一个透射监视器Transmission Monitor类型选为Line覆盖波导截面。这个监视器记录通过该平面的功率通量归一化后就是透射率T。从T的频谱图上你能看到谐振波长的凹陷。另一个建议添加的监视器是折射率监视器Index Monitor它可以在仿真前就显示结构沿某一平面的折射率分布用来确认几何和材料设置没有错误。我的习惯是先在z 0.11μm硅波导层的中间放一个Index Monitor跑仿真之前先看一眼折射率分布图确认波导和环的结构连续、gap尺寸正确再正式运行。场监视器Frequency-Domain Field Profile Monitor用来记录特定波长下的电场或磁场分布位置放在z 0.11μm平面就是硅波导层中间高度。这个监视器会输出|E|²分布图方便你观察谐振时环内的驻波图案也可以用来验证模式是不是从直波导成功耦合进了环。场监视器的频率轮廓frequency profile可以选择中心波长1550nm也可以选谐振峰对应的波长后者能更清楚地看到谐振增强效果。监视器的采样精度由网格决定你不需要额外设置采样间距。但要注意场监视器记录的数据量很大尤其是三维监视器磁盘占用轻松达到数GB。如果跑参数扫描时磁盘被写满优先检查是不是有三维场监视器没关。4.3 归一化与数据导出FDTD的透射监视器默认会对光源功率做归一化所以T值直接就是透射率不需要你再做什么额外处理。不过有一点要注意宽带光源的功率谱不是平直的Lumerical在内部通过参考仿真完成了归一化你看到的T曲线默认已经是可靠的透射谱。如果你想导出一张干净的透射谱图右键点击监视器选择Visualize打开数据可视化窗口横轴选波长纵轴选T。也可以在脚本里用getdata命令提取数据T getresult(monitor_T,T); lambda getdata(monitor_T,lambda); plot(lambda*1e9, T, 波长(nm), 透射率);注意getresult返回的是结构体T.frequency对应频率、T.T对应透射率。波长和频率可以互相换算两者取一个即可。实际跑出来的透射谱你会看到每隔一段波长就出现一个向下的尖峰这些尖峰就是谐振模式。相邻两个峰之间的波长间隔就是FSR峰本身的3dB带宽对应Q值的倒数关系。对于Q值的计算公式是Q λ_res / Δλ其中λ_res是谐振波长Δλ是半高全宽FWHM。在透射谱图上先确认谐振峰位置然后找到峰值下降3dB处的波长范围Δλ直接相除就得到Q值。官方案例中这个结构在1550nm附近的Q值通常在几千到一万之间。如果你算出来Q值只有几百很可能gap太大或者网格太粗需要回过头检查参数。5. 实际运行与问题排查技巧实录5.1 仿真运行中的常见报错与对策跑Lumerical时最让人抓狂的几种情况我基本都遇到过这里逐个说。第一种仿真一直不结束时间步推进极慢。这通常是网格过细或仿真时间设得过长导致的。检查你的Mesh Override Region是不是把范围铺得太大了尤其是z方向如果覆盖了整个仿真区域纵向网格可能远比你需要的细得多。把网格细化区域收窄到波导层上下0.1μm即可。另一个原因是FDTD区域设置过大PML吸收一个宽谱脉冲本不需要这么大的空间但结构周围留了太多空白区白白增加了计算量。第二种仿真过程报“发散”的错误输出结果是NaN。FDTD发散最常见原因是网格质量太差也就是你手动网格设置的尺寸超过了软件稳定性限制。另一个高发原因是PML设置错误比如PML层数太少、边界离结构太近。还有材料数据问题——折射率虚部k为负值、数据不连续也会导致场指数增长。排查顺序先检查网格尺寸是否满足CFL条件再把PML profile从标准改到稳定型Stabilized最后看材料数据是否正常。第三种结果曲线不光滑布满高频振荡。这说明仿真时间不够长时域脉冲还没有完全通过结构频域数据是通过FFT得到的截断效应导致振荡。解决办法是增大仿真时间或者降低Auto Shutoff阈值让仿真跑得更彻底。5.2 透射谱结果异常的排查思路如果在透射谱上完全看不到谐振峰或者谐振峰的位置明显不对先别急着怀疑软件按下面的顺序排查。看折射率监视器。确认直波导和环形波导的折射率确实是你设的材料值。经常有新手选了材料但忘了给结构体赋值导致整个结构区域都是空气折射率1光根本不会形成波导模式自然没有谐振。看一眼Index Monitor的分布图这步三秒钟就能排除一个大坑。看模式光源。确认光源模式选择对了TE还是TM是基模还是高阶模。选错偏振模式时直波导中的光场分布完全不同耦合效率也会改变。你可以在光源附近放一个场监视器跑仿真前先看一眼源平面的场分布图案确认它是我们预期的TE基模。看gap尺寸。gap设得太大会让耦合消失光基本不进入环透射谱就是一条平滑的直线没有任何峰。gap太小则峰值极浅容易被噪声掩盖。用脚本读一下几何体的position和size确认不是某个坐标设置错误导致波导和环实际距离和预期不符。看网格分辨率。网格太粗时谐振峰可能完全被数值色散抹平或者峰位置偏移几十纳米。把Mesh Override Region网格从10nm加密到5nm跑一遍对比如果结果变化很大说明原网格精度不够需要加密。还有一个经常被忽略的因素光源和监视器的位置不要离环形波导太近。如果光源距离gap只有1μm光源发出的高阶倏逝场会直接进入监视器干扰透射谱的干净程度。至少保持2μm以上的间距。5.3 参数扫描与自动化脚本小技巧官方案例跑通之后你一定会想扫gap或者扫半径看Q值怎么变化。Lumerical支持参数扫描可以设置多个参数组合每个组合分别建模仿真。在脚本里写一个循环即可gaps [100e-3, 150e-3, 200e-3]; # 单位微米 for i 1:length(gaps) setnamed(ring,gap, gaps(i)); # 假设gap是一个命名变量 run; # 存储结果 Q(i) getQ; # 自定义函数提取Q值 end参数扫描前一定要先确保单点仿真没问题。扫描过程中如果每个点都从零开始建模型会非常慢更好的做法是在循环前一次性建好几何结构和监视器循环内只修改参数并rerun。Lumerical的switchtolayout模式可以打开布局模式修改几何后保存为单独的.fsp文件再导入新参数运行。这部分逻辑初学时不用写得很高级但养成良好的脚本习惯后批量扫描的效率会有数量级的提升。我自己的经验是每次扫描前先另存一个基础模型文件出问题时可以快速回到已知正常的版本。修改参数尽量用setnamed配合变量不要手动在GUI里改这样脚本可重复也不会因为手误改了某个不该动的参数导致后续结果对不上。5.4 常见问题速查表现象可能原因排查与解决仿真报错/发散/结果全NaN网格过细违反CFL条件PML反射材料数据异常检查网格尺寸改用稳定PML验证材料折射率数据透射谱无谐振峰材料未赋值gap过大光源模式错误查看Index Monitor减小gap重新选择模式谐振峰位置偏移大材料色散未正确加载网格太粗确认Palik数据有效加密Mesh Override透射谱高频振荡不干净仿真时间不够Auto Shutoff过早触发增大仿真时间降低auto shutoff阈值TD计算结果占用磁盘爆满三维场监视器数据量过大关闭不必要的三维监视器改用二维监视器模式光源找不到模式波导截面网格太粗折射率数据缺失模态分析区域添加细网格检查材料设置这张表我建议收藏。表面上看每个问题好像都很基础但实际仿真中它们出现的频率极高尤其是当你换了工艺参数、改了波长范围、换了一个不熟悉的材料体系时同样的坑会反复出现。我个人在做这个环形谐振器案例时最大的体会是仿真结果的可信度取决于你对每一步设置的理解深度而不是软件操作本身。如果你只知道点按钮看着官方案例跑通了一遍换一个参数可能就完全不会了。花点时间把几何尺寸、材料色散、网格收敛性这几个底层逻辑弄清楚后续做微环调制器、滤波器、传感器甚至更复杂的集成光子器件都能很快上手。最后分享一个小技巧每次仿真之前养成先跑一个短时间、粗网格的“快速验证”版本的习惯确认结构、材料、光源和监视器都正常再切到精细网格跑正式版本。这个习惯帮我避免了很多次“精细网格跑了一整晚第二天早上发现模型建错了”的悲剧。
返回列表