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 入门其实不难,关键是把原理搞清楚,参数设对,然后多跑几个例子找感觉。下一章我们会聊更具体的仿真案例,到时候我会拿一个实际的 MZI 结构来演示整个流程。
公众号:蓝海资料掘金营,微信deep3321