与Zemax动态链接:光栅导入与参数设置

概述

本系列文章系统地介绍了如何通过 Ansys Zemax OpticStudio 与 Lumerical RCWA 之间的动态链接,实现宏观光学系统与微观光栅结构的协同仿真与优化。该工作流突破了传统方法的局限,为复杂衍射光学元件的设计与分析提供了高效、精准的解决方案。

● 无缝集成的动态工作流:文章详细阐述了动态链接的工作原理,即在 OpticStudio 的光线追迹过程中,一旦光线遇到光栅表面,将自动调用 Lumerical RCWA 进行严格的电磁场计算,并实时返回衍射数据,无需手动导入或导出,实现了软件间的无缝数据交互。


● 广泛的适用性与灵活性:该工作流支持对任意1D/2D光栅进行建模,包括复杂的倾斜、柱状、多边形等结构。用户不仅可以使用预置的示例文件,还可以通过自定义参数化模型,灵活定义光栅的几何形状和材料属性,满足多样化的设计需求。


● 全面的参数控制与优化能力:文章逐一解析了 OpticStudio 中动态链接 DLL 的各项参数(如周期、衍射级次、插值方法、随机模式等),赋予用户对仿真精度与速度的精细控制。同时,通过将 Lumerical 中的关键参数暴露在 OpticStudio 界面,用户可以基于整个系统的性能指标,对光栅形状进行高效的局部或全局优化。


● 强大的系统级仿真与调试支持:工作流提供了多种实用工具和高级功能,如空间变化参数设置、阶次滤波、以及用于 AR 波导的快速 2D 耦合器模式等。此外,在之后的文章中将包含了详尽的故障排除指南和性能优化建议,帮助用户在实际应用中定位问题并提升仿真效率。


引言

通过 Ansys Zemax OpticStudio 与 Lumerical RCWA 之间的动态链接,可实现宏观光学系统与微观光栅结构的协同仿真与优化。在此工作流中,设计者在 Zemax OpticStudio 中构建宏观光学系统,并在Lumerical中构建光栅的微结构。两个软件中的模拟无缝连接。在 Zemax OpticStudio 的追迹过程中,如果光线打到光栅,将自动调用 Lumerical RCWA 来求解场响应并提供返回数据。在上一篇文章详细介绍 Lumerical RCWA 光栅建模,本文介绍该工作流中如何导入光栅,以及 Zemax 光栅界面参数。

系统要求

要使用此动态工作流,Zemax OpticStudio 和 Lumerical 都需要安装在同一个 Windows 操作系统的 PC 上。

Zemax OpticStudio 版本必须是 Ansys Zemax OpticStudio Premium 或 Ansys Zemax OpticStudio Enterprise。不支持旧版 Zemax OpticStudio。租赁和已付费的 Ansys Zemax 许可证均可使用此工具。

Lumerical 必须具有 FDTD 许可证,且版本必须是2023 R1.0或更高版本。


Lumerical:准备光栅文件(.fsp)

在官网附件文件中,提供了6个简单的光栅文件。用户可以将这些文件保存在 \Zemax\DLL\Diffractive\ 文件夹中以便读取它们。下表解释了每个文件。

与Zemax动态链接:光栅导入与参数设置的图1
与Zemax动态链接:光栅导入与参数设置的图2

提示:

● 对于六边形2D光栅,在设置系统时,用户需要手动确保 period_y = sqrt(3) * period_x,以构成六边形晶格。

● 对于折射率参数,例如 p4_slab_index,如果其为0,则使用 n_pos 的值;如果为-1,则使用 n_neg 的值。这是通过在 Lumerical 文件中编写脚本实现的。

如果这6种形状不能满足用户的要求,用户可以参考之前的文章定制自己的光栅

Zemax OpticStudio(设置系统)

在 OpticStudio 中,建议使用以下3种对象之一来设置光栅:Diffraction Grating、User Defined Object (DiffractionGrating.DLL) 和 User Defined Object (Polygon_grating.DLL)。


以下对象基本上得到支持,但尚未进行详细验证,在特定情况下可能存在失败的可能性:

Binary 1

Binary 2

Binary 2A

Hologram lens

Lenslet Array 1

Toroidal Hologram

注意:光栅位于面1。

与Zemax动态链接:光栅导入与参数设置的图3


添加上述3个对象之一后,我们使用对象属性...(Object Properties…)> 衍射(Diffraction)选项卡来为添加的衍射对象定义插件 DLL Lumerical_RCWA_dynamic_link.dll(或Lumerical_sub_wavelength_dynamic_link.dll)。该 DLL 创建与 Lumerical 的链接,您将看到它包含几个参数,我们将在下一节中解释。

与Zemax动态链接:光栅导入与参数设置的图4


进行光线追迹,并比较矩形探测器和极探测器上的辐射强度结果。

Zemax OpticStudio 中的参数

下表描述了此 DLL 提供的所有参数:

与Zemax动态链接:光栅导入与参数设置的图5

Start Order X, Y 和 Stop Order X, Y

DLL只考虑介于 -Max Order 和 +Max Order 之间的衍射级次。该值应足够大,以包含所有感兴趣的级次。但是,将 X/Y Start/Stop Order 的范围设置在 -Max Order X/Y ~ +Max Order X/Y 之外是没有意义的。如果用户这样设置,OpticStudio 会尝试向 DLL 请求超出 Max Order 的级次数据,但 DLL 将不会为输出的光线返回能量。

File Name

指定读取哪个文件作为光栅几何形状。注意,文件必须放在指定的文件夹 \Zemax\DLL\Diffractive\ 中才能显示在列表中。

与Zemax动态链接:光栅导入与参数设置的图6


+Period/-Freq X/Y (µm)

光栅在x和y方向上的周期,单位为微米。如果为负值,则 DLL 将其解释为频率,单位为 (1/µm)。

注意,当晶格向量角不为90度时,周期x和y的定义如下。

与Zemax动态链接:光栅导入与参数设置的图7


如果是1D光栅,例如在X方向周期,则周期y可以是任意值,但不能为零。

Max Order X, Y

指定 RCWA 求解器中考虑多少个谐波(级次)。当X和Y都 >= 0时,忽略 Max Order Y,并在谐波空间(衍射级次)中对圆形区域进行采样,如下方左图所示。当X < 0 或 Y < 0时,在谐波空间中对矩形区域进行采样。矩形区域在x和y方向的半宽分别是 Max Order X 和 Y 的绝对值,如下方右图所示。

与Zemax动态链接:光栅导入与参数设置的图8


如果是1D光栅,例如在X方向周期,强烈建议将Max Order Y 设置为零,并将 Max Order X 设置为负数,这能使模拟效率最高。

Link Lumerical

如果此参数为0,OpticStudio 将停止访问 Lumerical 以获取光线追迹数据。

● 光线将在光栅处停止。

● 用户定义的参数名称将不会在UI中显示。

如果此参数是除0和99之外的任何数字,OpticStudio 将执行对 Lumerical 的调用,且 Lumerical 窗口不会打开。

如果此参数为99,OpticStudio 将执行对 Lumerical 的调用,并且 Lumerical 窗口将自动打开。

这在用户设置系统时很有用,因为他们可以暂时停止与 Lumerical 的链接,避免动态链接导致用户界面延迟。

与Zemax动态链接:光栅导入与参数设置的图9


p1 ~ p20

这些参数将映射到 Lumerical.fsp 文件中的用户属性。当我们更改这些参数的值时,对应的用户属性将在 Lumerical 文件中自动更新。

与Zemax动态链接:光栅导入与参数设置的图10


Order Filter File#

此参数允许用户定义在光线追迹期间要考虑哪些级次。物理上,当光线照射到光栅时,所有可能的衍射光线都应该发射。然而,有时为了提高效率,我们可能只想发射某些级次。

当此参数设置为正整数时,它将读取文件夹 \Zemax\DLL\Diffractive\ 中预定义的文本文件。例如,如果设置为8,则DLL搜索 filter_8.txt。


文本文件的格式如下:

● 第一行必须是奇数 n。

● 接下来的两个是用于反射和透射级次的 n x n 块。

● 1 = 允许,0 = 不允许。

● 如果文件编号为负数,则表示始终重新读取过滤器文件。否则,过滤器数据被读取并保存在 RAM 中以供进一步访问。

● 注意:每行中的数字之间不能有空格或逗号。并且在反射和透射块中,两个非空行之间不能有空行。


与Zemax动态链接:光栅导入与参数设置的图11


#Layer

此参数已弃用。层数应在 .fsp 文件中的 RCWA 对象中设置。

Rotate Grating

如果用户想改变光栅的旋转方向但不改变光栅的孔径形状,此参数很有用。

与Zemax动态链接:光栅导入与参数设置的图12


Interpolation & Interp. Pre-sampling

为了提高效率,OpticStudio 将计算出的数据缓存在内存中。对于相同入射角度的相同数据,它不会调用 Lumerical 重新计算。

● 当其为负值时,与正值相同,但将使用能量守恒插值。

● 当其为0或1时,设置为201。

● 当其大于1且小于51时,设置为51。

● 当其大于51时,用户可以自定义采样率。例如,如果设置为101,则采样阵列为101 x 101。

与Zemax动态链接:光栅导入与参数设置的图13


Interp. Pre-sampling 告诉动态链接在每次调用时从 Lumerical 获取更多计算数据。如下图所示,Pre-sampling=0 只考虑4个相邻点,而大于0的值考虑更多点。对于该值应该多大,没有标准答案。这通常在5~10左右最有用,但需要进行一些实验来了解哪个值更适合不同的系统。

与Zemax动态链接:光栅导入与参数设置的图14


Stochastic mode

如果此参数设置为非零值,光线在照射到表面时不会分裂。相反,光线将被随机衍射到一个级次,如下图所示。当一条光线会多次击中衍射表面并分裂成太多段时,这很有用。


当 Stochastic mode 开启时,概率将仅对 Start Order 进行计算。但是,OpticStudio 仍会为定义的每个级次调用 DLL。因此,建议在 Stochastic mode 开启时设置 Start Order = Stop Order(例如,Start Order = Stop Order = 0 或 Start Order = Stop Order = 1)。这确保了DLL只被访问一次,避免了不必要的函数调用时间消耗。

与Zemax动态链接:光栅导入与参数设置的图15


Error Log

如果此参数设置为1,DLL 将在文件夹 Zemax\DLL\Diffractive\ 中导出日志文件,如下所示。当看到来自 Lumerical Dynamic Link DLL 的任何几何错误时,这很有用。

与Zemax动态链接:光栅导入与参数设置的图16


Fast 2D out-coupler

当此参数设置为非零值时,假定为六边形光栅。当光线在k空间中的橙色区域(如下图所示)击中光栅时,它将尝试计算所有相关橙色区域中的数据。


与Zemax动态链接:光栅导入与参数设置的图17


与Zemax动态链接:光栅导入与参数设置的图18


Has metal in grating

当光栅中存在任何具有非零虚部折射率的材料时,此参数应设置为1。如果未设置为1,DLL 将检查能量守恒,判定计算错误,并停止返回光线数据。


Lattice vector angle

此值描述两个晶格向量之间的角度(以度为单位)。对于任何2D光栅,我们总能找到2个晶格向量。


与Zemax动态链接:光栅导入与参数设置的图19


如果此值设置为0,则内部将其视为90度。这保证了在此参数添加到 DLL 之前创建的 .fsp 文件的向后兼容性。


空间变化参数

空间变化功能从2026R1.1版本开始可用。可以通过将参数 Spatial Vary File# 设置为正整数来启用。插件将从 \Document\Zemax\DLL\Diffractive\ 加载 spatial_vary_#.txt,其中#是参数 Spatial Vary File# 处的正整数。用户需要在 spatial_vary_#.txt 文件中定义参数如何变化的方程以及边界。

注意:此文件只会被加载一次。如果用户在文件加载后编辑了该文件,更改将不会生效。


总结

本文围绕 Zemax OpticStudio 中动态链接 DLL 的光栅界面参数展开,帮助用户理解如何通过参数配置实现高效精准的光栅仿真。文章从文件读取、周期、级次范围开始,之后介绍谐波数、插值与预采样,来调节计算精度,最后介绍随机模式、空间变化等高级选项的适用场景。


查看全文
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP