新闻动态

News Center

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

发布日期:
2026-05-14

浏览次数:

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


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


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 方向进行周期性重复。

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


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 | AR光波导:空间渐变光栅设计


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


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


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


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


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


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


Appendix - 自定义你的光栅

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


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


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


A.1 topcell

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


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


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

Structure Groups - Simulation object

链接:https://optics.ansys.com/hc/en-us/articles/360034382434-Structure-Groups-Simulation-object

Understanding mesh order for overlapping objects

链接:https://optics.ansys.com/hc/en-us/articles/360034915233-Understanding-mesh-order-for-overlapping-objects


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


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


A.2 topcell 中的结构

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


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


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


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


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


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


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


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


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


A.3 topcell 的属性

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

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

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


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


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


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


A.4 topcell 的脚本

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


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


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


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

  • 我们必须使用变量 n_pos 和 n_neg 来设置 positive_z_material 和 negative_z_material 的折射率。需要注意的是,这正是用户在自定义光栅时最常见的首要问题之一:忘记加入这一设置。


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


  • 如果光栅在 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 的范围内生成完整的光栅几何结构。需要注意的是,这有时意味着为了在该周期范围内得到完整几何,我们需要将同一结构重复两次或更多次。


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


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

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

A.5 RCWA 对象

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


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


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


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


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


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


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


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


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


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


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


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 的数量,那么网格数量也会随之增加。


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


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

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


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


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

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

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

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


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


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


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

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


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


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


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


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


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


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

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

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

相关阅读

Lumerical案例 | OLED显示中的反射式偏振片

Lumerical案例 | INTERCONNECT和photonic Verilog-A紧凑模型的说明和应用

Ansys 2026 R1 | Ansys Lumerical功能更新

Lumerical案例 | 获得理想FDTD性能

Lumerical案例 | 使用Synopsys OptoCompiler和Lumerical工具进行光子器件版图绘制和紧凑模型仿真


相关推荐

Lumerical | AR光波导:空间渐变光栅设计
1. 简介此前,OpticStudio 为一维光栅仿真提供了一维 RCW...
Zemax案例 | 基于Zemax相机多自由度主动对准技术研究
引言在消费电子、自动驾驶、工业视觉等领域高速发展的今天,相机模块已成为核...
Lumerical案例 | OLED显示中的反射式偏振片
引言反射式偏振片是一种应用于现代电视的光学层,用于提升亮度和能效。其工作...
Zemax案例 | 一种具有匀光变焦的激光切割光学系统设计
引言激光切割与焊接技术凭借高精度、高效率的优势,已成为汽车、新能源、航空...