3、Lumerical FDTD 入门:FDTD求解器原理、仿真区域设置、光源与监视器

好,咱们今天聊聊 Lumerical FDTD。说实话,这工具我用了快十年了。刚入行那会儿,我总觉得 FDTD 就是个黑盒子,参数设好点一下运行就完事了。结果呢?仿真跑出来结果不对,找 bug 找了三天,最后发现是边界条件设错了。嗯,从那以后,我养成了一个习惯——每次建仿真之前,先在心里把 FDTD 的原理过一遍。

3.1 FDTD 求解器原理:时域有限差分到底在算啥?

FDTD,全称是 Finite-Difference Time-Domain。说白了,就是把麦克斯韦方程组在时间和空间上都离散化。你想想看,光在波导里传播,本质上就是电场和磁场在互相激发。FDTD 做的就是:把空间切成一个个小格子,时间切成一小步一小步,然后一步一步地算电场和磁场怎么演化。

我个人习惯把 FDTD 理解成「拍电影」。每一帧(时间步)算一次场分布,最后把所有帧连起来,你就看到了光在器件里怎么跑的。为什么叫时域?因为它直接模拟时间上的变化。频域信息?做一次傅里叶变换就有了。

核心要点:FDTD 的精度取决于网格大小。网格越小越准,但计算量也越大。我一般从 λ/10 开始试,不够密再加密。

这里有个关键参数——Courant 稳定性条件。简单说就是:时间步长不能太大,否则数值会发散。Lumerical 会自动帮你算好,但你要知道这个原理。我曾经遇到过一次仿真跑到一半就报错,一看日志,时间步长设得太大了,数值爆炸了。

3.2 仿真区域设置:你的计算域有多大?

仿真区域,就是 FDTD 要算的那块空间。设小了,光跑出去了算不准;设大了,计算量翻倍。怎么平衡?我一般遵循一个原则:器件周围留出至少半个波长的空间。

Lumerical 里仿真区域有几种常见形状:矩形、圆形、自定义。大部分情况下用矩形就够了。但要注意——边界条件怎么设?

边界类型 适用场景 注意事项
PML(完美匹配层) 大多数情况,模拟开放空间 层数建议 8-16 层,太少会反射
Periodic(周期性边界) 光栅、阵列结构 需要结构严格周期
Metal(金属边界) 腔体、谐振器 电场在边界处为零
Symmetric/Anti-symmetric 对称结构,可减半计算域 模式必须匹配对称性

避坑指南:我曾经在仿真一个 MMI 分束器时,PML 层数只设了 4 层,结果反射回来的光干扰了结果,算出来的分束比完全不对。后来加到 12 层,问题就解决了。PML 层数别省,省了时间赔了精度。

网格设置也很关键。Lumerical 支持均匀网格和自适应网格。均匀网格简单,但计算量大。自适应网格在结构变化大的地方加密,其他地方稀疏,效率高很多。我个人习惯先用粗网格跑一遍看看趋势,再用细网格精算。

3.3 光源设置:怎么把光「注入」到仿真里?

光源,就是仿真的起点。没有光源,FDTD 算个寂寞。Lumerical 里常见的光源类型有几种:

  • 模式光源(Mode Source):注入特定波导模式,最常用
  • 平面波光源(Plane Wave):模拟自由空间入射
  • 偶极子光源(Dipole Source):点光源,用于自发辐射模拟
  • 高斯光束(Gaussian Beam):聚焦光束,用于耦合分析

我用的最多的是模式光源。为什么?因为硅光芯片里大部分器件都是波导结构,注入基模最符合实际情况。但要注意——模式光源需要先算模式分布。Lumerical 会在光源位置做一次模式求解,然后把这个模式作为激励。

小技巧:光源位置不要紧贴着器件边界。留一点距离,让模式稳定传播一段再进入器件。我一般留 0.5-1 μm 的缓冲距离。

光源的偏振方向也要注意。TE 模式电场主要在水平方向,TM 模式在垂直方向。设错了偏振,算出来的结果肯定不对。我记得有一次帮同事排查问题,他仿真一个偏振分束器,结果怎么调都不对。我一看,光源设成了 TE,但器件设计是针对 TM 的。改过来就好了。

3.4 监视器设置:怎么「看」到仿真结果?

监视器,就是 FDTD 里的「摄像头」。没有监视器,你算完了也不知道光在里面怎么跑的。Lumerical 提供几种监视器:

  • 时间监视器(Time Monitor):记录某个点的场随时间变化
  • 频率监视器(Frequency Monitor):记录某个面上的场在特定频率的分布
  • 折射率监视器(Index Monitor):看结构的折射率分布
  • 电影监视器(Movie Monitor):记录场随时间演变的动画

频率监视器是最常用的。你可以在仿真区域里放一个面,然后指定要记录的频率点。Lumerical 会在仿真结束后,把那个面上的场分布输出给你。从这些数据里,你可以提取透射率、反射率、模式分布等等。

我个人习惯在器件的输入和输出端口各放一个监视器。输入端的监视器用来归一化,输出端的监视器用来算传输效率。这样算出来的 S 参数才准确。

重要提醒:监视器不要放在 PML 区域里。我曾经犯过这个错,监视器放在边界附近,结果记录到的场全是反射回来的噪声。数据完全不能用。

还有一个容易被忽略的点——监视器的采样频率。如果你只关心一个波长,那设一个频率点就够了。但如果你要看宽带响应,比如 C 波段(1530-1565 nm),那就要设多个频率点。采样点太少,插值出来的曲线会失真。我一般设 50-100 个点,够用又不至于太慢。

3.5 知识体系总览

下面这张图是我自己整理的 FDTD 入门知识框架。你可以把它当作一个检查清单,每次建仿真之前过一遍,基本不会漏东西。

FDTD 仿真入门知识体系 FDTD 求解器原理 • 时域有限差分法 • 麦克斯韦方程离散化 • Yee 网格 • Courant 稳定性条件 • 时域→频域转换 仿真区域设置 • 区域形状选择 • PML 边界条件 • 周期性边界 • 对称/反对称边界 • 网格设置 • 自适应网格 光源设置 • 模式光源 • 平面波光源 • 偶极子光源 • 高斯光束 • 偏振方向 • 波长/带宽设置 监视器设置 • 时间监视器 • 频率监视器 • 折射率监视器 • 电影监视器 • 采样频率设置 • 数据导出 仿真流程:建结构 → 设区域 → 加光源 → 放监视器 → 运行 → 分析 每一步都有坑,多跑几次就熟了 个人经验:先跑小区域粗网格验证逻辑,再跑全尺寸精算

好了,这一章的内容就这些。FDTD 入门其实不难,关键是把原理搞清楚,参数设对,然后多跑几个例子找感觉。下一章我们会聊更具体的仿真案例,到时候我会拿一个实际的 MZI 结构来演示整个流程。


公众号:蓝海资料掘金营,微信deep3321