AR光波导:空间渐变光栅设计

1. 简介

此前,OpticStudio 为一维光栅仿真提供了一维 RCWA 插件。本文介绍了一种类似但功能强大得多的工作流程,该流程基于 Zemax OpticStudio 与 Lumerical RCWA 之间的动态链接。

在这一工作流程中,设计人员在 Zemax OpticStudio 中构建宏观光学系统,并在 Lumerical 中构建光栅的微结构。两款软件中的仿真可无缝连接。在 Zemax OpticStudio 的光线追迹过程中,如果某条光线打到光栅上,系统会自动调用 Lumerical RCWA 来求解电磁场响应,并返回相应数据。

该工作流程具有以下几个优势:

1.**复杂的一维/二维光栅建模:**借助强大的几何编辑器,用户可以轻松构建并仿真任意的一维或二维光栅。

2.**快速原型设计:**Lumerical 中的参数会暴露给 OpticStudio。在 OpticStudio 中所做的任何修改,都可以自动触发 Lumerical 针对新的光栅结构计算更新后的数据,并返回新结果,无需进行数据导入和导出。

3.**优化能力:**用户可以在 Lumerical 中方便地定义自定义参数化模型,并结合整个系统的性能对光栅形状进行优化。

4.**光栅结构的导入与导出:**该工作流程支持以 STEP、STL 和 GDS II 文件格式对光栅几何结构进行标准导入与导出。

5.**空间变化:**用户可以定义光栅参数在光栅不同位置处的变化方式。

1.1 静态工作流程与动态工作流程

值得一提的是,目前 Lumerical 与 OpticStudio 之间已有两种数据交换工作流程。其中一种是本文将要介绍的动态工作流程;另一种是以不同方式运行的静态工作流程。这两种工作流程在灵活性方面各有特点,并不存在绝对优劣之分。用户应根据具体的设计案例来选择使用哪一种工作流程。

2. 系统要求

要使用这一动态工作流程,Zemax OpticStudio 和 Lumerical 必须安装在同一台以 Windows 为操作系统的电脑上。

Zemax OpticStudio 的版本必须为 Ansys Zemax OpticStudio Premium 或 Ansys Zemax OpticStudio Enterprise。不支持 Legacy Zemax OpticStudio。Lease 和 Paid-Up 两类 Ansys Zemax 许可证均可用于使用该工具。

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

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

附件中提供了 6 个简单的光栅文件。用户可以将这些文件保存到 \Zemax\DLL\Diffractive\ 路径下,以便读取。下表对各个文件进行了说明。

|--------------------------------------------|------------------------------------------------------------------|
| 文件名 | 描述 |
| lswm_1D_slant_221210.fsp | 这是一个具有倾斜矩形结构的一维光栅。它包含 10 个参数,允许用户对细节变化进行定义。参数的定义见附录中的图示。 |
| lswm_2D_hex_cylinder_221210.fsp | 这是一个二维光栅,其中圆柱结构以六边形排布方式进行周期性重复。 |
| lswm_2D_hex_polygon4_221210.fsp | 这是一个二维光栅,其中四边形柱结构以六边形排布方式进行周期性重复。 |
| lswm_2D_hex_rectangular_ pillar_221210.fsp | 这是一个二维光栅,其中矩形柱结构以六边形排布方式进行周期性重复。 |
| lswm_2D_hex_rhombus_221210.fsp | 这是一个二维光栅,其中矩形柱结构以六边形排布方式进行周期性重复。这是一个二维光栅,其中菱形柱结构以六边形排布方式进行周期性重复。 |
| lswm_2D_rec_cylinder_221210.fsp | 这是一个二维光栅,其中圆柱结构沿 x 和 y 方向进行周期性重复。 |

3.1 提示

• 对于六边形二维光栅,在搭建系统时,用户需要手动确保 period_y = sqrt(3) * period_x,这样才能形成六边形晶格。

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

如果这 6 种结构不能满足用户需求,用户可以按照附录中的说明自定义自己的光栅。

4.空间变化参数

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

注意:该文件只会被加载一次。如果用户在文件加载后又对其进行了编辑,这些更改将不会生效。

4.1 输入文件 spatial_vary_#.txt 的格式

在 spatial_vary_#.txt 文件中,任何以 # 符号开头的行都会被忽略,所有空白字符也都会被跳过。

用户可以定义如下形式的方程,例如:p# = v0 * (1 + y/150 + v1),其中 p# 是需要进行空间变化的参数。变量 v0、v1、v2......对应于 DLL 插件界面中定义的数值,这些数值可以手动调整,也可以在优化过程中调整。变量 x 和 y 表示应用该 DLL 插件的对象的局部坐标。除基本算术运算符(+、-、*、/)外,解析器还支持三角函数(sin、cos、tan、asin、acos、atan)、高级函数(log、log10、sqrt、abs),以及常数π(pi)和e(e)。

Spatial Vary Mode = 0 ------ 在 XY 空间中采样

Spatial Vary Mode 设置为 0 时,DLL 插件会在 x--y 位置空间中进行采样。

此时,spatial_vary_#.txt 文件中必须包含一行,格式如下:

xmin, xmax, xinterval, ymin, ymax, yinterval

其中,xmin/xmax 和 ymin/ymax 定义空间边界(单位为毫米),xinterval 和 yinterval 定义采样间隔。

如果某条光线在这些边界之外与光栅相交,则该光线会报错并停止。如果光线在边界之内与光栅相交,则 RCWA 只会在由上述六个数值定义的离散网格点上进行评估。

参数 Spatial Vary Interp 对采样的影响如下:

• 如果 Spatial Vary Interp = 0 ,则使用距离最近的采样网格点处的 RCWA 数据。

• 如果 Spatial Vary Interp ≠ 0,则使用最近四个网格点处的数据进行插值。

Spatial Vary Mode = 1 ------ 在参数空间中采样

Spatial Vary Mode 设置为 1 时,DLL 插件会在参数空间中进行采样。

此时,spatial_vary_#.txt 文件中的每个方程后都必须跟随如下内容:

; min, max, interval

这些数值分别指定该参数的下限、上限和采样间隔。

示例:

p# = v0*(1 + y/150 + v1); -10, 10, 2.5

当一条光线打到光栅上时,系统会先根据所定义的方程计算交点处的参数值。如果某个参数超出了其定义的范围,则该光线会报错并停止。否则,RCWA 只会在由 min、max 和 interval 所定义的参数空间采样点上进行评估。

参数 Spatial Vary Interp对采样的影响如下:

• 如果 Spatial Vary Interp = 0,则使用最近的参数空间采样点。

• 如果 Spatial Vary Interp ≠ 0,则在最近的参数采样点之间执行线性插值。

示例

1 个变化参数 → 2 个点

2 个变化参数 → 4 个点

3 个变化参数 → 8 个点

注意: 由于采样点数量会随着发生空间变化的参数数量增加而呈指数增长,因此当存在较多参数发生空间变化时,建议用户使用Spatial Vary Mode 0,以避免计算量过大。

5. 示例

在 OpticStudio 中打开附件 "Demo_simple_grating_test.zar "。然后进入该对象的 Diffraction 属性设置。将 Link Lumerical 参数改为非零值,并更新系统中的 3D Layout

Lumerical FDTD 窗口会自动建立链接,随后 3D Layout 将如下图所示:

如果进行光线追迹,我们可以在探测器中看到如下所示的结果:

此外,在附件文件中,用户还可以找到更多应用示例,包括 AR 波导、Flash LiDAR 以及曲面上的光栅。

Appendix - 自定义你的光栅

请注意,如果光栅文件(.fsp)设置不正确,可能会导致仿真失败。我们已提供故障排查步骤,用于检查 .fsp 文件中可能存在的问题。

每个周期单元中的光栅几何结构都需要在 Lumerical 的 .fsp 文件中进行定义。在动态工作流程中,OpticStudio 会自动调用该 Lumerical .fsp 文件,应用由 OpticStudio 传入的参数,然后计算电场响应。建议 .fsp 文件名长度小于 50。

如果用户遵循以下规则,也可以自定义自己的参数化模型。

A.1 topcell

必须在 .fsp 文件中定义一个名为 "topcell" 的结构组。

Structure group 是 Lumerical 中一种对象组类型。简单来说,structure group 可以看作一个复合对象,它由多个基本结构构成,例如 Polygon 和 Rectangle。当两个结构发生重叠时,其优先级由对象的 mesh order 决定。更多信息可参见 Lumerical 知识库中的以下内容:

Structure Groups - Simulation object

Understanding mesh order for overlapping objects

在 Lumerical 的 structure group 中,我们可以定义 "Properties" 和 "Script"。其中,Properties 类似于对象的参数。我们可以编写脚本,使其读取这些属性值,并更新组内的基本结构。该脚本非常灵活,甚至可以在组内添加或删除结构。这使得 structure group 本身就像一个新对象一样,你可以通过 Properties 来设置它的形状和材料。

A.2 topcell 中的结构

在 topcell 组中,除了光栅结构本身之外,还必须定义两个 Rectangle 对象,用于表示正侧和负侧的材料。

这两个对象应以 (x=0, y=0) 为中心,其 x 和 y 尺寸应大于 period_x 和 period_y。如下面的示意图所示,它们应位于"仿真区域"之外的顶部(+z)和底部(-z)。

这两个 Rectangle 对象的名称可以任意指定。为了便于阅读并保持中性,在我们提供的示例中,分别使用了 "negative_z_material" 和 "positive_z_material"。

需要注意的是,这里所说的 "simulation region",是指在 RCWA 对象设置中,由最上层和最下层所定义的区域。这是我们在 RCWA 计算中考虑结构的区域。

还需要特别注意,实际的 RCWA 对象尺寸必须略大于 simulation region。在动态链接中,RCWA 对象区域始终会比 simulation region 大 0.1 µm。因此,我们建议将 positive_z_material 和 negative_z_material 在 z 方向上的尺寸设置为 0.2 µm。

下图展示了 positive_z_material、negative_z_material 以及 RCWA 对象区域的三维视图。simulation region 应位于 positive_z_material 与 negative_z_material 之间。RCWA 对象区域则应始终略大于 simulation region。

A.3 topcell 的属性

我们必须定义如下红框所示的 4 个用户属性。这些用户属性将由动态链接进行设置。在脚本中,我们会读取这些属性的值,以修改该组中的结构。需要使用的 4 个属性如下:

•period_x、period_y:x 和 y 方向上的周期

•n_neg、n_pos:基底(n_neg)和超基底(n_pos)的折射率

还可以定义更多属性。如果将它们的名称写成 p#_* 的形式,其中 # 为数字,*** 为任意字符串,那么这些参数就会被动态链接读取,并显示在 OpticStudio 的界面中。

A.4 topcell 的脚本

我们可以像下图所示那样,在 topcell 中定义脚本。

脚本定义不是可选项,有一些必须编写的必要脚本。我们建议用户打开本文提供的示例文件,并将其中的脚本作为模板使用。

以下是必须包含的脚本内容:

  • 我们必须使用变量 n_posn_neg 来设置 positive_z_materialnegative_z_material 的折射率。需要注意的是,这正是用户在自定义光栅时最常见的首要问题之一:忘记加入这一设置。
  • 如果光栅在 z 方向上的尺寸发生变化,也就意味着 simulation zone 会随之变化,那么我们还需要同时修改 positive_z_material 和 negative_z_material 的位置。这两个对象的厚度(即 z 方向尺寸)必须大于 200 nm。

  • 脚本必须确保在 x = -period_x/2 ~ period_x/2 和 y = -period_y/2 ~ period_y/2 的范围内生成完整的光栅几何结构。需要注意的是,这有时意味着为了在该周期范围内得到完整几何,我们需要将同一结构重复两次或更多次。

  • 最后,用户也可以选择性地定义更多用户属性,并在脚本中利用这些属性对应的数值,动态改变光栅几何结构。如下图所示,就是我们在附件中同样提供的一个示例。

A.5 RCWA 对象

这里仅说明 RCWA 对象中必须设置的内容。关于该求解器对象的更多细节,可参见这篇文章:RCWA Solver - Simulation Object -- Ansys Optics。

对这个 .fsp 文件的最后一项要求是:必须定义一个 RCWA 区域。该区域可通过点击 "Simulation > Add RCWA" 来添加。

用户唯一必须仔细检查的设置是 interfaces。该设置与 z 方向上的网格数量有关。如果用户未正确设置该值,仿真结果可能会不准确。可以通过右键单击 RCWA 对象并选择 Edit object 来访问 RCWA 的相关设置。

在编辑 interfaces 之前,请先确保你已经打开了 simulation region 的网格视图。

interfaces 的设置有两种方式。用户可以直接定义其绝对位置 ,但这意味着光栅的最高和最低位置不能发生变化。另一种方式是使用参考位置(reference positions)。采用这种方式时,当你在 OpticStudio 界面中修改光栅参数、导致光栅形状发生变化时,界面位置也会自动更新。

用户可以尝试调整 interfaces 的取值;一般来说,interfaces 的数值越大,也就意味着网格数量越多。

A.6 可忽略的参数

以下参数会由动态链接自动控制,用户无需在 .fsp 文件中修改它们的取值。

  1. topcell 结构中的 p#_** 参数**。

  2. topcell 结构中的 period_x、period_y、n_neg、n_pos。其中,period_x 和 period_y 会跟随 OpticStudio 界面中的设置;n_neg 和 n_pos 则由 OpticStudio 中的 Material 设置决定。

  3. RCWA 对象的 x、y、z 尺寸。其中,x 和 y 尺寸跟随 OpticStudio 界面中的 period_x 和 period_y 设置;z 尺寸则通过在 RCWA 对象中最上层和最下层设置的基础上额外增加 0.1 µm 的裕量来确定。

  4. RCWA 对象中 excitation(入射光) 的全部设置。这些设置将基于 OpticStudio 中入射光线的数据自动确定。

  5. RCWA 对象中的 k 空间离散化(k-space discretization) 设置。关于这一点,请参见下文 "Max Order" 的说明。

A.7 如何修改 x/y 方向网格

我们无法直接编辑 x/y 方向的网格,而且通常也没有必要修改 x/y 方向的网格。不过,如果用户确实希望改变网格尺寸,那么这些数值实际上是由 k 矢量域(k vector domains) 的数量自动决定的。如果用户增加 k 的数量,那么网格数量也会随之增加。

A.8 如何在光栅中支持色散(折射率随波长变化)

如下图所示,本文提供的示例 .fsp 文件,例如 lswm_2D_hex_cylinder_221210.fsp,其设计方式是让用户能够精确指定柱体的折射率,并且该折射率不随波长变化。

不过,用户也可以对这些 .fsp 文件进行修改,使折射率能够根据波长自动变化。下面给出实现这一修改的简要说明。

1.首先,需要从topcell 对象中删除对应的属性,例如 "p4_pillar_index"。

2.然后,需要从 topcell 的脚本中删除相关代码。例如,如果我们从 topcell 中删除了属性 "p4_pillar_index",那么也需要从 topcell 脚本中删除下面这一行:

setnamed("circle_"+lbls{j},"index",p4_pillar_index);

3.最后,需要将 topcell 组中对应的对象修改为使用正确的材料,如下所示。

A.8 如何考虑切向矢量(tangential vector)

为了使 .fsp 文件支持 lattice vector angle ,需要在 topcell 对象中添加一个名为**"lattice_vector_angle"**的参数。

脚本还应正确考虑该角度变化,并相应修改光栅结构。下面仅给出一段示例代码,用于说明如何修改上方和下方的块结构。这只是一个示例。作为一种省事的方法,设计人员也可以直接将上方和下方的块尺寸做成原来的 2~3 倍 ,这样通常可以覆盖大多数可能的 lattice vector angle设置。

设计人员还需要特别注意一点:当在 RCWA 设置中修改 lattice vector angle 时,RCWA 区域会以左下角锚点为基准发生倾斜。因此,RCWA 区域看起来会像是在 x 方向上发生了偏移。

为方便起见,当动态链接插件修改 RCWA 设置中的 lattice vector angle 时,它还会像下面这样为 RCWA 区域设置一个 x shift,使其在 x 方向上始终保持"居中":

setnamed('RCWA', 'x', -tan((90-latticeVectorAngle)/180*pi) * period_y / 2);

换句话说,如果 lattice vector 是通过动态链接插件来设置的,那么 RCWA 区域将会如下图所示。

相关推荐
摩尔芯创1 天前
Lumerical | 基于MIM双环谐振器的等离子体光学生物传感器
软件需求·ansys·光学设计·光学软件
摩尔芯创4 天前
Zemax案例 | 基于Zemax实现AR波导全视野高均匀性设计方案
ar·软件需求·ansys·光学设计·zemax仿真·ansys zemax
ueotek8 天前
Ansys Zemax | 在 OpticStudio 中将干涉仪数据附加到光学表面 – 第二部分
ansys·zemax·光学仿真·光学设计·光学软件
湖南精循科技10 天前
线上研讨会 | Ansys Mechanical & nCode 车灯振动疲劳分析
汽车·仿真·ansys·有限元分析·cae·结构·工程师
湖南精循科技24 天前
Ansys Mechanical & Zemax STAR模块光机热耦合分析
仿真·ansys·光机·有限元分析·cae·工程师
湖南精循科技1 个月前
Ansys 案例研究 | 汽车悬架系统的谐波分析
仿真·ansys·机械·cae·工程师
湖南精循科技1 个月前
Ansys | 什么是表面等离子体光子学?
仿真·ansys·光学·光子学
ueotek1 个月前
Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理
python·matlab·ansys·zemax·光学软件
Binary_ey1 个月前
车载 AR-HUD 虚像不清晰?OAS软件跨尺度仿真来助力
人工智能·ar·软件需求·光学设计·光学软件