使用平面波进行反射和透射计算
前言
对于横向均匀、仅在厚度方向存在折射率变化的多层介质结构,stack脚本提供了一种高效的解析计算手段。基于传输矩阵法(transfer matrix method,TMM),stack脚本将每一层介质对应一个传输矩阵,通过矩阵连乘得到整体传输矩阵,最终求解结构的反射率、透射率以及场分布。本文以四层介质结构为例,分别利用stackrt脚本与 FDTD 仿真,计算平面波在不同入射角下的的透过率和反射率,并将二者结果进行对比。此外,还利用stackrt脚本分析了中间层厚度发生 变化时对反射率的影响。

仿真设置
模型简介
如上图所示,波长为 的平面波沿 y 轴正向从空气( Air, )入射到一个由三层介质材料堆叠的结构上,各层折射率依次为 、 和 ,其中,Layer 2 层和 Layer 3 层的厚度为 。
仿真使用 uniform 网格,网格大小为 。边界条件方面,在 x 方向采用 Bloch 边界条件以模拟横向无限大平面结构;在光传播方向( y 方向)采用 PML 边界条件,同时为了防止入射光斜入射到 PML 层产生反射干扰,将 PML 配置类型(PML profile type)设为custom,具体参数设置如下。

本案例给出了 s 偏振(电场垂直入射面)的计算结果,通过设置偏振方向也可得到 p 偏振的结果。
仿真结果
在 FDTD 仿真中,每次仿真仅能得到单一入射角下的结果,因此需要利用参数扫描(parameter sweep)进行多次仿真来获得透过率、反射率与入射角的关系。需要注意,当结构复杂或网格精细时,会导致参数扫描耗时较长。附件中的 planewave_4layer.mpps 工程已预设好一个参数扫描,扫描点数为 ,入射角从 扫描至 ,具体设置如下图所示。

运行附件中的 planewave_4layer.msf 脚本,在扫描完成后脚本会绘制出利用 FDTD 仿真与利用stackrt脚本命令计算的透过率与反射率,如图所示,FDTD 与 stackrt 的结果总体吻合较好,但在部分角度仍存在一定偏差。此外,脚本还给出了当中间两层厚度发生 变化时,stackrt 所预测的反射率最大与最小变化范围。


下面给出利用 stackrt 计算透过率与反射率的核心脚本命令,可以看出,在定义了介质折射率、介质厚度、入射光频率和入射角度后,仅用三行脚本就可以快速计算出所有角度的透过率和反射率,简单好用,快速便捷。
RT_stack = stackrt(n,d,f,theta);
R_stack = RT_stack.Rs;
T_stack = RT_stack.Ts
为进一步提高 FDTD 与 stackrt的一致性,将网格大小修改为 ,并将参数扫描点数增加至 ,使曲线更加平滑,结果如下图所示。可以看到,减小网格大小后 FDTD 仿真结果与stackrt解析计算结果更加接近。

stack脚本函数无需网格剖分,计算速度快且数值精度高,尤其适合参数扫描和优化迭代。仅需输入各层折射率、厚度、频率及入射角,即可快速获取结果,适用于膜系设计、VCSEL、OLED、布拉格光栅反射镜等场景的快速前期评估。

