利用RCWA方法模拟表面浮雕光栅的衍射效率

本文介绍了OpticStudio 20.1中添加的两个动态链接库 ( Dynamic Link Library,DLL ) 文件,两者都是用来模拟表面浮雕光栅的衍射DLL。这两个称为“ rg_step_RCWA.dll ”和“ srg_trapezoid_RCWA.dll ”的DLL建立了阶梯光栅和梯形光栅模型。

本文将首先介绍DLL中使用的方法,然后介绍DLL中的参数,最后展示两个示例。

这些功能只能在OpticStudio的高级订阅版本中使用。

作者 Michael Cheng

附件下载

Article Attachments

简介

表面浮雕光栅 (SRG) 广泛应用于各种传统光学系统,如光谱仪、分束器、三维扫描系统、衍射透镜和脉冲放大系统等。近年来,表面浮雕光栅在平视显示器 (HUD) 、增强现实 (AR)、虚拟现实 (VR) 头戴显示器 (HMD) 等现代设备中得到广泛应用。它们能够以任意角度衍射光线,综合其波长和角度选择性,使得光学系统比传统设计更紧凑、更轻,而传统设计通常需要使用棱镜和自由曲面来达到同样的性能,会导致系统更复杂,体积更庞大。

OpticStudio一直可以模拟光栅,但没有考虑衍射效率。为了准确地反映衍射光线的衍射效率和偏振态,就必须在模拟时考虑光栅的微观结构等特性。

本文将讨论两个用来模拟梯形和阶梯光栅的DLL。

表面浮雕光栅与体全息光栅

在介绍这个模型之前,先简要解释表面浮雕光栅和体全息光栅 (VHG) 之间的区别。这两种光栅在光学系统中的作用几乎相同,但在制作和仿真方面却有很大的不同。

 

图1. (a)表面浮雕光栅折射率分布均匀,但表面微观结构具有周期性。(b)体全息光栅具有周期性变化的折射率分布,但表面光滑。

如图1(a)所示的SRG可以用光刻、纳米压印或金刚石车削等方法制作。与VHG不同的是,SRG的折射率没有空间变化,其表面是由周期性微观结构构成的。需要使用一种类似于傅里叶模态法(也称为RCWA [1])的算法来模拟SRG。

如图1(b)所示的VHG是通过在感光乳胶膜上曝光两束或更多光束来制造的,然后用化学或热显影方法处理制成光栅。体全息光栅表面光滑,但其内部的折射率呈正弦变化。需要使用高效的Kogelnik理论 [2] 或增强型的严格耦合波分析等算法来模拟VHG。

OpticStudio提供了用于模拟SAR和VHG的DLL。本文介绍了用于模拟SRG衍射效率的工具。

用于VHG的工具,参见知识库文章, 使用Kogelnik方法模拟体全息光栅的衍射效率

傅里叶模态法(严格耦合波分析)

让我们快速回顾一下用于模拟SRG 的DLL中使用的理论。

傅里叶展开式

图2. 在傅里叶空间展开麦克斯韦方程。将介电常数 ε 和磁导率 µ 都写入傅里叶级数中, Λx和 Λy为x和y方向的周期,a和b是每个傅里叶项的系数,(m, n)是整数。将电场E和磁场H写成平面波的组合,其中S和U是每个平面波的强度,k是波矢量。E 、 H 、S 、 U 和 k都是向量,表示 (Ex,Ey,Ez), (Hx,Hy,Hz), (Sx,Sy,Sz), (Ux,Uy,Uz) 和 (kx,ky,kz)。

Concept of layers

层的概念

层是RCWA中的重要概念。该理论假设光栅结构在z方向上是均匀分布的,在X、Y方向上是周期性分布的。如果该结构在Z方向上不是均匀分布,则认为该结构是多个“层”的组合。每一层上的结构在z方向上是均匀分布的,如图3所示。

图3. 在RCWA算法中,将微结构分割成许多层,每一层的结构在z方向上是均匀的。

一般而言,对结构的采样层数越多,模拟结果越准确,但计算速度也越慢。这是准确性和速度之间的平衡。

DLL模型包含控制层数的参数。

  • 在 srg_trapezoid_RCWA.dll 中,用  “# Layer”控制。
  • 在 the srg_step_RCWA.dll 中, 用“lays of 1 stp”控制。

有关这些参数的更多说明,请参见以下部分。

谐波(级次)的概念

当平面波击中光栅表面时,光向离散的方向衍射,称之为谐波或级次。谐波就像层;计算中包含的谐波越多,计算的精度越高,但速度越慢。在两个DLL中,谐波的数量由参数 “最大级次(Max Order)” 控制。

例如,如果将最大级次设为3,则意味着在计算时要考虑 - 3 , -2 , -1 , 0 , 1 , 2 , 3级的谐波。通常需要做一些测试来找到平衡速度和精度的最佳值。根据经验,通常将最大级次初始值设置为:3*(光栅周期)/(波长)。图4显示了用一维光栅将入射光衍射成多个级次的情况。

图4. 当一束光入射到光栅上,分裂成多个级次。

链接到光线追迹模型

在RCWA算法中,电磁场是经过傅里叶展开的。在光栅结构中,电磁场被分解成多个平面波。经过计算,RCWA根据输入光和光栅结构给出了输出光波的电场和每个级次的传播方向。

OpticStudio只是将这些平面波与光线追迹模型中的光线联系起来。

图5显示了RCWA模型中,如何将光线追迹模型中的光线视为平面波。

图5. 在光线追迹代码中,当光线入射到光栅上时,将其看作平面波,并传递给RCWA代码。再将RCWA计算出的对应的输出平面波再次转换成光线,再传递回光线追迹代码。

请注意,RCWA代码仅用光栅深度来计算效率。在光线追迹代码中,仍将光栅视为无限薄的表面。

图6从宏观上展示了入射光、衍射光和光栅之间的关系。

图6. 从光线追迹代码的观点出发,将光栅结构视为无限薄的表面。根据RCWA代码,入射到光栅表面的任意光线都被衍射成不同方向、不同电场的几个级次。

如何使用DLL建立光栅

在系统中加入光栅

本节将介绍如何在非序列模式下建立阶梯光栅或梯形光栅。

可以使用衍射光栅(Diffraction Grating)物体或使用DiffractionGrating.dll定义的用户定义物体 (User Defined Object)在非序列模式下添加光栅。目前不支持其他衍射物体,因为DLL假设衍射表面在XY平面上。

  • 如果光栅孔径为圆形,则使用衍射光栅物体。
  • 如果光栅孔径为矩形,则使用DiffractionGrating.dll定义的用户定义物体
  • 如果孔径是任意形状的(既不是圆形,也不是矩形),那么可以将原生布尔(Boolean Native)物体或布尔CAD(Boolean CAD)物体与挤压物体 (Extruded)一起使用。

circular_and_rectangular_grating

图7. 对于圆形光栅,请使用衍射光栅。对于矩形光栅,请使用具有衍射抓射的用户定义对象.DLL。

然后在物体属性(Object Properties)中,点击衍射(Diffraction),选择srg_step_RCWA.dll定义阶梯光栅,srg_trapezoid_rcwa .dll定义梯形光栅。

反射(Reflect)(Transmit)列中的参数应该总是相同的。

下一节将介绍这些参数。

图8. 可以通过在物体属性中设置文中介绍的DLL来进行应用。

光栅的坐标和方向

如图9所示,光栅位于物体的面1 (Face 1)上。OpticStudio目前只支持一维光栅。假设光栅在Y方向上是均匀分布的,在XZ平面上具有周期性的分布。在光学系统中设置光栅时,应注意光栅的方向。

图9. 光栅总是在1上。目前,OpticStudio只支持将光栅应用于两个物体:衍射光栅和DiffractionGrating.dll定义的用户定义物体

DLL 参数

在OpticStudio 20.3中,共有5个RCWA DL用于模拟不同形状的1D光栅:

  • srg_trapezoid_RCWA.dll
  • srg_step_RCWA.dll
  • srg_blaze_RCWA.dll
  • srg_GridWirePolarizer_RCWA.dll
  • srg_user_defined_RCWA.dll

本节描述了这些DLL的参数,从所有DLL相同的参数开始,然后解释每个DLL的特定参数。

相同的参数

以下参数在所有 RCWA DLL 中具有相同的含义。

+周期/频率(µm) 和深度 (µm)

这些凹槽周期单位为µm,光栅的剖面深度单位为µm。

  • 当“+周期/-频率(µm)”是正值,它对应于凹槽周期(µm);
  • 当它是负值,对应于凹槽频率(1 /µm)。周期和频率是互为倒数的。图10显示了光栅的凹槽周期和深度。

图10. 梯形和阶梯光栅的槽深和凹槽周期。

建议周期不要太大,例如波长的100 倍。这意味着所需的最大级次非常大,以至于不能有一个准确的结果。有关最大级次初始值的建议,请参阅"谐波(级次)的概念"部分。

最大级次

请参阅"谐波(级次)的概念"部分。

这目前限制为10(共 21 个谐波)。当数字大于10时,在DLL中将其修改为 10。联系支持团队以增加限制。

旋转光栅(°)

此参数允许用户旋转光栅线的方向。

  • 当它设置为零时,光栅线沿着Y方向,这意味着光线在X方向弯曲。
  • 当它设置为非零时,正值则光栅线以逆时针方向旋转(+X +Y),负值则顺时针向旋转。请注意,此处描述的X和Y方向基于对象的本地坐标系统。

图11. 光栅旋转 135 度。

使用镀膜文件

此参数是一个标志。如果是非零正整数,则表示分散数据(指数与波长)在文本文件中定义。文本文件必须保存在 {Zemax}\Coatings\COATING_xx.dat中,其中 xx 是"使用涂料文件"参数中指定的正整数。

例如,如果将"使用涂层文件"设置为 7,则将COATING_7.dat读取分散数据。

在COATING_xx.dat文件中,散射数据的定义可用参考“The Libraries Tab > Coatings Group > Defining Coatings > The MATE Data Section"下的帮助文件。材料名称应始终从RCWAxx开始,其中xx是两位数的整数。所有文本依次排布。

例如,我们可以定义RCWA01TIO2。DLL将读取 RCWA 材料1,并将忽略随后的TIO2文本。图12显示了一个涂层文件与几个材料散射数据的例子。

图12. 如何在COATING_xx.dat中定义分散数据的示例。

材料编号可以指定光栅折射率(R)、环境折射率(R)或膜层折射率(R)。使用等于材料数乘以-1的负整数。

例如,如果我们要将RCWA02设置为Grate区域的索引数据,则只需将光栅折射率(R)设置为 -2。

查看”光栅折射率(R)、光栅折射率(I)、环境折射率(R)、环境折射率(I)“和”膜层折射率(R)、膜层折射率(I)、膜层顶部厚度(µm)、膜层侧面厚度(µm)“小节获取更多信息

插值

这个参数需是一个整数。

  • 如果为零,DLL 将不使用插值模式。
  • 如果设置为非零值,DLL将在插值模式下工作,这意味着DLL在计算时将在RAM中缓存RCWA数据。然后,这些数据用于插值以进行进一步的光线追迹。这可以显著提高系统中许多光线追迹的速度,例如,跟踪超过一百万条光线。
  • 当插值设置为1时,将使用201*201采样网格。
  • 当它大于1时,它代表采样网格的大小。换句话说,用户可以通过将插值设置为大于1的数字来定义采样网格的大小。但请注意,最低采样网格大小为21。
  • 当插值设置为负整数时,DLL将采取绝对值来查找采样网格,但会使用不同的方法进行插值。这种插值方法更准确,但速度较慢。

设置插值参数是为了速度和精度之间的正确平衡。

图13. 当参数插值为非零整数时,插值模式将打开。当它是负数的时,使用不同的插值方法。这种方法较慢,但更准确。

插值模式 (Interpolation Mode) 是如何工作的?

首先,在LM空间中定义一个采样网格。当光线入射到光栅上时,光线的方向可以用单位矢量(L,M,N)表示。LMN也被称为光线的方向余弦。当光线击中光栅时,它在x和y方向上的方向余弦L和M被映射到LM空间。然后检查最近的四个采样点,如果在这四个点中没有任何一个点已经计算出RCWA数据,则计算这些点的数据并将其保存在RAM中。然后用这四个点对入射光的RCWA数据进行线性插值。注意,插值不仅是为了提高衍射效率,也是为了实现电场。换句话说,在缓存数据和插值的过程中,要充分考虑相位、偏振态和振幅的变化。

如果光栅数据或光的波长发生变化,DLL将创建另一个采样网格来保存RCWA数据。因此,将光栅参数或波长设置为变量时,用户不应在优化过程中打开插值功能。这意味着追踪许多光线(>1000)时,插值会起到加速优化的作用。但是,如果在优化过程中仅通过光栅跟踪几条光线(如<10),建议关闭插值。

关于进一步的讨论,请参阅“优化(Optimization)”一节。

图14. 在插值模式下,衍射数据的计算如图所示。

仅这些级次(Only these order)

当参数"仅这些级次"为0或负时,DLL将照常工作。所有级次都将追踪。当该参数为正整数时,允许用户指定用户想要跟踪的传输和反射中的衍射级次。

"仅这些级次"只是一个整数,所以下表是它的定义。下表将级次映射为唯一的正整数。

"仅这些级次"是2的幂级数的总和。

举个例子,如果用户想要追迹0级反射光线(R0)和+1级透射光线(T+1)。”仅这些级次“参数应该被设置为2^0 + 2^5 = 1 + 32 = 33。

图.15 ”仅这些级次“ 允许用户指定用户想要跟踪的传输和反射中的衍射级次

注意在使用这个参数的时候,开始级次和结束级次需要包含指定的追迹级次。

此参数也可以使用可视化工具设置。这是一种更容易的方法,因为不需要计算。

图.16 可视化工具中可用直接设置该参数。

随机模式

  • 这也可以称为蒙特卡罗方法或者概率分裂
  • 当参数设置为0时,DLL正常工作
  • 当设置为1,2或3时,随机模式将会生效。当随机模式工作时,DLL会让光线随机衍射,如图17所示。跟踪每个衍射级次的概率基于衍射级次之间的能量比。

图17.  随机模式下,任意入射光线会随机衍射,产生衍射的级次的概率取决于每个级次的能量比。这张图片显示了只有1条光线随机衍射的情况。

  • 对于每条入射光线,可能有任意数量的出射光。要衍射的光线数量由计算决定(截至级次-初始级次+1)。换句话说,用户可以设置参数"初始级次"和"截至级次"来定义出射的光线数量。同样,在光线追迹过程中,随机决定每一条光线的衍射级次。每个出射光线都携带Pi/n的功率,其中Pi是入射光线功率,n是出射线的数量。

图18. 在随机模式下,一条入射光线可用对应多条衍射出射光线。

注意,如果”仅这些级次“不为零,则随机模式按照如下规则运行。

  • 当随机模式为1时,”仅这些级次“被忽略。
  • 当随机模式为2时,随机模式先于”仅这些级次“生效,一条光线可能由随机模式随机化,但被"仅限这些命令"设置的规则阻止。
  • 当随机模式为3时,”仅这些级次“先于随机模式生效,光栅仍然以随机方式衍射光线,但衍射光线始终在"仅这些级次"指定的一组级次中随机化。

错误日志

如果这个参数不为0,则会生成一个报告计算错误的txt文件。该日志文件会保存在{Zemax}\DLL\Diffractive\中,并且与指定的衍射DLL同名。这一参数通常应该设置为0,除非出现了未知的错误。

查看”几何错误“小节获取更多相关信息。

梯形光栅参数(Trapezoid parameters)

以下是梯形光栅 (srg_trapezoid_RCWA.dll) 的参数:

深度,Alpha (度),Beta (度)和填充因子。

这四个参数按照如下规则控制光栅的形状:

  • 深度决定了光栅的高度,如图19所示。
  • 从-z旋转到+x方向时,Alpha和Beta是正的,从+x旋转到-z方向时,Alpha和Beta是负的。 例如,在图19中Alpha是正的,Beta是负的。
  • 填充因子是0到1之间的数字,表示底面与凹槽周期的比值。

图19. 梯形光栅的4个参数定义了光栅形状。

膜层折射率(R)、膜层折射率(I)膜层顶部厚度(µm)膜层侧面厚度(µm)

这4个参数用于模拟光栅的膜层。DLL可以使用户定义顶部厚度(膜层顶部厚度(µm))和侧面厚度(膜层侧面厚度(µm))。

注意,膜层的厚度不包括在深度参数中。例如,如果深度是5 µm,顶部厚度为200 nm,则光栅的总厚度为5.2µm。

图11. 梯形光栅膜层的顶部厚度。

由于膜层材料可以是金属,DLL提供了另外两个参数来定义膜层材料的复折射率;实部为折射率(R),虚部为折射率(I)。在OpticStudio中,对于吸收材料来说,折射率的虚部通常是负的。例如,铝的复折射率为0.7-7.0i。

膜层折射率(R)不能为零,但可以是负整数。当它是负整数时,意味着它由文本文件中的数据单独定义。有关详细信息,请参阅"使用镀膜文件"部分。

光栅折射率(R)、光栅折射率(I)、环境折射率(R)、环境折射率(I)

光栅结构可分为两个部分,如图 21所示:由”Grate”和“Env“指示的2个不同区域,表示光栅及其环境。光栅被外部区域(Outside)和基板区域(Substrate)包围。基板和外部区域的折射率由光学系统定义。光栅和环境的折射率由DLL中的参数定义。

DLL中包含了4个参数来定义光栅和环境的折射率。

  • 光栅和环境的折射率均由复数定义。
  • 对于光栅区域,折射率的实数部分和虚数部分由光栅折射率(R)和光栅折射率(I)指定。
  • 对于环境区域,折射率的实数部分和虚数部分由环境折射率(R)和环境折射率(I)指定。
  • 当光栅和环境的折射率的实数部分被设为0时,有一项特殊的定义。如果光栅折射率设为0,则表示光栅的折射率与基板的折射率一致。基板折射率由光学系统定义。同样的,如果环境折射率设为0,则表示环境的折射率和外部区域的折射率一致。
  • 光栅和环境的折射率的实数部分(R)可以是负数,意味着它由文本文件中的数据单独定义

有关详细信息,请参阅"使用镀膜文件"部分。

图21. 梯形光栅可用分为两个区域,光栅(Grate)和环境(Env)。两个区域的折射率可用分别定义。

层数 

这个参数是用来建模梯形形状的层数。有关更多信息,请查看“层的概念”一节。

锯齿光栅参数(Blaze parameters)

锯齿光栅的参数 (“srg_blze_RCWA.dll”) 与梯形光栅的参数(“srg_trapezoid_RCWA.dll”)一致,除了”深度“。

对于锯齿光栅,深度可以由给定的Alpha和Beta参数计算得来,如图22所示。

图22. 锯齿光栅的形状由三个参数定义:Alpha,Beta和填充因子。

阶梯光栅参数(Step parameters)

以下参数用于定义阶梯光栅(“srg_step_RCWA.dll”)。

深度,阶梯数和Alpha (度)。

  • 深度决定了光栅的高度或厚度,如图23所示。
  • 阶梯数定义了每个周期中阶梯形状的数量,如图23所示。实际上,这通常与制造过程有关。请注意,光栅的形状正在"向下"朝+x方向移动,如下图所示。要反转方向,用户应将光栅绕z轴旋转180度。

图23.  参数 “阶梯数”定义了每个周期中阶梯形状的数量。

  • 参数Alpha定义另一侧的斜角,如下图所示。当从+z旋转到-x时,Alpha的符号是正的。图24显示了 Alpha为正的示例.

图24. 参数 Alpha 定义了另一侧的斜角。

每阶梯层数(Layers per step)

这个参数定义了每个阶梯中的层数,此参数只能在参数 Alpha 不为零的情况下使用。否则就是无效的,因为计算结果不会改变。下图显示了该参数如何影响斜面的采样。

图25.  参数Lays of 1 stp定义了每个阶梯中的层数。

膜层折射率(R)、膜层折射率(I)膜层顶部厚度(µm)膜层侧面厚度(µm)

这四个参数的定义与梯形光栅一致。参照梯形光栅中的解释。

图26. 阶梯光栅膜层的顶部和侧面的厚度。

光栅折射率(R)、光栅折射率(I)、环境折射率(R)、环境折射率(I)

这四个参数的定义与梯形光栅一致。参照梯形光栅中的解释。

图21. 阶梯型光栅可用分为两个区域,光栅(Grate)和环境(Env)。两个区域的折射率可用分别定义。

网格偏振线栅参数(Grid Wire Polarizer parameters)

以下是网格偏振线栅参数(“srg_GridWirePolarizer_RCWA.dll”)的参数。

这种光栅基本上是二进制光栅。此DLL可用于建模网格线偏振器。

深度 (µm) 和填充因数

  • 深度时光栅的高度。
  • 填充因子是0到1之间的数字,表示栅格区域的宽度与周期的比值。如图28所示。

折射率(R)和折射率(I)

与梯形光栅,锯齿光栅和阶梯光栅类似,网格偏振线栅可以分为四个区域,这两个参数用于定义光栅区域的折射率,如图28所示。

环境区域的折射率不能在DLL中定义,因为它总是与外部区域的数值保持一致。外部区域和基板区域的折射率都在OpticStudio中定义,它们不能在DLL中更改。

图28. 网格偏振线栅可以分为四个区域:外部区域,光栅区域,环境区域和基板区域。光栅形状由深度和填充因子决定。

用户自定义光栅参数(User Defined Grating parameters)

用户自定义光栅(“srg_user_defined_RCWA.dll”)只有一个参数。

文件编号

该参数必须是1-99内的正整数。DLL会从位于\Documents\Zemax\DLL\Diffractive\的名为“user_grating_data_xx.txt”的txt文件内读取光栅数据,其中xx就是”文件编号“参数。

DLL将仅读取用户自定义的光栅文本一次,并将数据保存在内存中。如果文本被修改并且需要重新载入,则将"文件编号"参数设置为负数。确保通过系统中的光栅跟踪至少一条光线以触发重新加载:更新布局图或使用射线跟踪控制运行射线跟踪。更新形状数据后,请记住将"文件编号"参数设置为正值,让DLL不会一直重新加载文本文件以更新光栅数据。

图29. 用户自定义的光栅数据写在文本文件"user_grating_data_xx.txt"中,其中 xx 是正整数,可以通过使用 DLL"srg_user_defined_RCWA.dll"进行读取。

用户自定义光栅的文件格式

光栅形状由多个层定义。每层由背景材料定义,并可选包含其他材料的几个部分。有关层的更多信息,请参阅"层的概念"部分。

用户定义的光栅文本文件包含3个关键字:"层数"、"层"和"节"。当 DLL 读取文件时,它会逐行扫描文本以查找这些关键字。找到关键字后,它会读取下一行上的数据。关键字行和以下行必须遵循下面所述的文件格式。其他部分可以添加任何文本使阅读更加方便。

层数

"层数"关键字下的行应包含一个表示文本中定义的层数的整数。

"层"关键字下的行包括 4 个数字:

  1. 本节中要添加的节数
  2. 层的厚度(微米)
  3. 折射率的实数部分
  4. 折射率的虚数部分。

这里的折射率是"背景材料折射率"。

"节"关键字下的行包括4个数字:

  1. 该节的移位量
  2. 该节的宽度
  3. 折射率的实数部分
  4. 折射率的虚数部分

请注意,移位和宽度都没有单位。它们表示与该光栅周期的比率。折射率是覆盖背景材料折射率的"节折射率"。位移参数定义了相对于单个周期框左边缘的中心位置。如图30的例子中,位移量=0.5,宽度=0.5,它们定义了一个从0.25开始到0.75结束的节。

用户自定义光栅数据的例子

图30展示了一个由用户自定义光栅文件定义的光栅,右侧是数据文件,左侧是光栅示意图。在这个例子中,所有的层都只有一个节,但是每一层可以包含0个或多个节。同时也请注意,同一层中包含两种不同材料时,其中一种需要被定义为”背景材料参数“,另一种则被定为节参数。哪一个作为背景材料取决于用户自身。

图30. 用户自定义光栅的一个例子。移位量相对于单个周期框的左边缘。宽度以位移量所定义的位置为中心。

编辑用户自定义光栅的工具

虽然用户定义的光栅数据可以在文本编辑器(如记事本)中直接编辑,但也可以在可视化工具中进行编辑,如图31所示。用户需要设置一个带有"srg_user_defined_RCWA.dll"DLL的虚拟系统来读取此文本文件。可视化工具还可以读取其他RCWA DLL定义的光栅数据。

当然,在编辑后,数据只能输出为用户自定义光栅数据。

图31. 可视化工具可以读取,编辑保存用户自定义光栅数据。

可视化工具

运行可视化工具可以帮助用户定义光栅参数。单击Programming … User Extensions … RCWAvisualization.exe,如图32所示。

图32. 可视化工具

该工具的用户界面如图33所示。

图33. 可视化工具的用户界面

可视化工具包括四个部分,将在下面逐个介绍。

第一步-读取DLL(Step 1 - Load DLL)

对象的下拉菜单将自动在使用RCWA DLL的非顺序编辑器中列出对象。要更改对象,请选择不同的对象并单击"加载"。

第二步-设置参数(Step 2 - Set parameters)

  • 基板材料和外部材料仅用于绘图,不一定反映系统的真实设置。玻璃名称如"N-BK7"可以使用。
  • 所选对象上的RCWA DLL的参数名称和当前值会显示。可以通过单击"设置到对象"按钮来修改表中的参数并应用于系统。请注意,此按钮可以在OpticStudio中生成多个"撤消",因为设置每个衍射参数被视为单个操作。
  • 在此部分的底部,可以使用方便的工具设置"仅这些级次"参数。有关更多信息,请参阅本文中"DLL 参数>常见参数>仅这些级次"部分。
  • "创建 MCE"按钮可以在所有DLL参数的多配置编辑器中产生操作。透射参数将设置为从反射参数中取取的数据。这对于修改系统很有用。当然,这需要优化光栅参数。
  • 下面的"第四步-设置系统"部分解释了最小和最大列。

图34. "创建 MCE"按钮可创建多配置编辑器中的DLL参数操作。

第三步-光栅编辑器(Step 3 - Grating editor)

  • 单击"从DLL加载"以读取来自DLL的光栅数据,并可视化两个图表。如果DLL参数不正确且无法绘制,则错误将显示为图35。这是一个非常有用的工具,用于检查 DLL 参数是否正确。
  • 顶部图表显示DLL的定义配置文件。它表示了了光栅的折射率。
  • 底部图表显示从RCWA算法中使用的Fourier级数重建的相同配置文件。这主要用于检查RCWA算法是否"看到"正确的数据。
  • 请注意,由于ZOS-API的限制,目前需要重新定义光栅可视化图表中的外部和基板区域的折射率。该工具不能自动读取这些值。要重新定义它们,请使用"第二步"部分中称为"基板材料"和"外部材料"的两个文本框。
  • 如果单击"从文本中加载"按钮,则光栅数据将从文本文件中用户定义的光栅数据中读取。有关更多信息,请参阅"用户定义的光栅参数>DLL参数"部分。

有一个编辑器在详细信息中逐层显示光栅数据,如图31所示。这些数据可以进行编辑,结果将在图表中实时更新。键盘上的"插入"和"删除"键可用于添加或删除编辑器中的行。

但是,请注意,即使光栅数据可以在编辑器中编辑,数据也不能直接传回系统。它只能导出到文本文件。然后,RCWA DLL"srg_user_defined_RCWA.dll"可以读取此文本文件。有关更多信息,请参阅"用户定义的光栅参数>DLL参数"部分。

图35. 可视化工具检测到参数错误时出现的消息框。

第四步-设置系统(Step 4 - Setup system)

此部分提供了一个方便的工具,用于生成用于分析或优化单个光栅的系统。

  • 前两个表允许用户设置角度和波长进行分析。视场角遵循与序列模式下相同的约定。

  • "视场向导"是定义视场角表的实验功能。

  • 偏振部分决定了要追迹的偏振态。如果选择"Both",将为X和Y偏振的场和波长的每个组合构建两条光线。

  • 如果"基板中的射线"选项被选中,则入射射线来自光栅基板。否则光线会从基板外射出并击中光栅。

  • 设置系统后,单击"创建测试系统",会在\Zemax\Samples\RCWA_Analyze_x.zmx生成相应系统文件,其中x是累积的整数。该系统包括光栅、探测器和图36中示例中的若干测试光线。还生成评价函数来读取每个入射射线的衍射功率,并达到图37所示的 100% 目标。

  • 在"第二步-设置参数"部分中,最大列中的任何参数都大于最小列,然后在生成的测试系统中,参数被设置为可变参数,并且受制于图37中显示的评价函数。

图36. 可视化工具如何创建测试系统的示例。

图37. 当可视化工具生成测试系统时,还需要在功绩函数编辑器和多配置编辑器中创建所需的操作。

常见问题解答

与内置的衍射模型相比

如前所述的光栅模型是基于RCWA算法。那么这个新的RCWA模型和原来内置的衍射光栅模型有什么区别呢?

答案是:这些模型在衍射方向上是相同的,但衍射光线的电场项不同。

RCWA的核心和内置衍射模型都是根据下式计算衍射光线。

是入射光线和衍射光线的单位向量,是单位法向量,是单位光栅矢量,Λ是光栅周期,n1和n2时入射光线和衍射光线在其中的材料的折射率,m是代表衍射级次的整数。

下图显示了光栅上的这些向量。

图38. 此图中画出了入射光、衍射光、法向量和光栅向量。

其主要区别在于RCWA代码可以定义衍射光线的电场,而内置模型则不能。

优化

将RCWA代码集成到OpticStudio的好处之一是能够在充分考虑整个光学系统的情况下优化光栅参数。RCWA算法的计算量很大,通过以下几点建议获得更快和更平滑的优化。

  • 第一点是关于插值模式参数。如果将光栅参数或波长设置为变量,则应在优化过程中将关闭插值模式

在优化过程中,如果将光栅参数或波长设置为变量,其值会随机变化,且变化非常频繁。这意味着检测到新的光栅参数时,DLL都会在RAM中创建新的采样网格。这将导致RAM的使用达到极限;因此,DLL将停止工作。因此,在运行任何优化之前,请关闭插值

请注意,如果没有将光栅参数或波长设置为变量,建议打开插值模式,以提高优化速度。

  • 第二点是在优化时使用光线光(Source Ray),而不是其他光源。光线光是始终从指定位置(x,y,z)的指定传播方向(l,m,n)发射光线的光源物体。光线光的偏振态可以在物体属性中控制,如下图所示。

图39. 光源物体在非序列模式下的偏振态可以在物体属性中定义。

几何错误

DLLs在代码内检查了几个错误,以避免参数错误,这是参数组合的无效组合,称为参数错误。当DLL检测参数错误时,它会停止计算并返回"几何错误"消息。如果有任何参数错误,查找检查的最简单方法是打开可视化工具。有关更多信息,请参阅"可视化工具"部分。

除了参数错误之外,还有一些错误错误还返回了几何错误,而可视化工具无法发现这些错误。这些称为计算错误。要查找在光线跟踪过程中DLL内部发生的任何计算错误,则需要打开错误日志。有关进一步信息,请参阅"错误日志"。

下面列出了这些几何错误最常见的原因,以及如何在可能的情况下解决它们。

  • 许可证、OS版本、OS版次和有效期

这两个DLL在OpticStudio版本20.1(21/01/20)中实现,只有高级订阅许可证可用。DLL将在OpticStudio 20.1发布后大约一年后到期。如果DLL检测到任何上述条件不满足,它将停止计算并返回错误,错误消息如下所示。

图40. 无效许可证、到期或OpticStudio版本的错误消息。

  • 分裂NSC光线

要使用DLL模型,必须打开分裂NSC光线(Split NSC Rays)选项。否则,DLL将停止计算并返回错误。请注意,此设置可以单独在光线追迹控制(Ray Trace Control )对话框,三维布局(3D Layout),和实体模型(Shaded Model)中设置。用户应该仔细检查所有设置是否正确。

  • 光栅参数

非物理光栅参数是产生几何错误的常见原因之一。这类错误会报告为可视化错误。

  • 最大RAM内存空间

如“插值”和“优化”部分所述,软件内部存在DLL使用的最大RAM空间上限。当达到极限时,DLL停止计算并返回几何错误。

这个问题可以通过关闭插值模式或重新启动OpticStudio,以释放DLL分配的RAM空间来解决。

请注意,通常情况下,只要系统没有以光栅参数或波长为变量进行优化,就不会达到这个极限。

这类错误会在错误日志中体现。

  • 掠入射角

打开后,如果光线入射到角度过大的光栅上,DLL会返回几何错误。这是因为在采样网格的边缘没有外推。当入射角大约大于89度时,就会发生错误。这个问题可以通过关闭插值来解决。

  • 倏逝波
    在特殊情况下,即入射光满足以下三个条件之一,DLL不能计算,并返回几何错误。
    • (L + m*λ/Λ)^2 + M^2 = 1
    • (L + m*λ/Λ)^2 + M^2 = n1^2
    • (L + m*λ/Λ)^2 + M^2 = n2^2

(L, M)是入射光线相对于光栅局部坐标的x和y方向余弦,λ是光的波长,Λ是光栅周期,n1是入射侧的折射率,n2是透射侧的折射率,m是任意整数。

如果任意整数m可以使上述3个方程中的任何一个成立,则DLL无法计算,并返回几何错误。

注意,这个错误是不太可能发生的,因为只有少数光线可以满足条件并被停止。根据我们的经验,当光的波长与光栅周期相同,并且光线垂直入射到光栅上,用户最可能遇到该情况。这种情况下,可以通过略微改变光栅周期来解决该问题,例如:从0.55µm改到0.55001µm。

这类错误会在错误日志中体现。

  • 节能

在RCWA模型中,每次计算一条光线时,DLL代码都会测试能量是否守恒。这类错误会在错误日志中体现。

限制和反馈:

目前的DLL支持一维光栅,仅支持阶梯或梯形配置文件,不支持衍射透镜。

这不是RCWA算法的限制,所以如果您对这些功能中的任何一个感兴趣,请将您的反馈发送到技术支持团队support@zemax.com

另一方面,此DLL主要针对小周期设计。例如,如果周期大于事件波长的100倍,则需要在计算中考虑许多谐波,这非常缓慢,并且PC中需要大量RAM。

示例

示例1:梯形光栅的效率

图4(a)中的示例再现了论文: "Design and fabrication of binary slanted surface-relief gratings for a planar optical interconnection." Applied optics 36.23 (1997): 5717-5727 中的结果。

打开附件中名为“verify_1997_Design_and_fabrication.zar” 的文件。

该文件包含在衍射光栅物体内部发出光线的光线光源(Source Ray)(请查看该光源的“...内部(Inside Of )”项)。该物体的前表面是衍射的,并使用了“srg_trapezoid_RCWA.dll”。两个极探测器(Detector polar )物体测量透射(物体4)和反射(物体5)光线。

图41. (a)显示示例1的非序列元件编辑器。(b)显示示例1的布局图。

  1. 系统波长 = 0.633 µm
  2. 物体1是读取DiffractionGrating.dll得到的用户定义物体,它是矩形体,其前表面有简单的线性光栅,用户可以定义其x、y方向和长度。这个示例展示了如何定义和测试衍射物体。任何追迹到前表面的光线都将调用在物体属性(Object Properties)>衍射(Diffraction)下定义的相关衍射DLL。

物体属性(Object Properties) > 衍射(Diffraction)下,选择DLL :srg_trapezoid_RCWA.dll,并按照如下参数设置:

  • 光栅周期为0.943 *波长 = 0.596919。
  • 光栅深度为1.058 *波长= 0.669714。
  • 填充因子是 0.5。
  •  Alpha 和 Beta 的夹角是30度。注意 Alpha 和 Beta 的符号取决于你如何建立这个系统。在论文中这个角是 -30°,但是在我们的系统中是30°。

图41. 示例1中衍射光栅的设置。

  1. 注意,在上面的图片中,将起始阶数(Start Order)终止阶数(Stop Order)都设置为1。这意味着只追迹到第一衍射级次,忽略了其他级次,有益于观察特定级次的特性。
  2. 评价函数如下所示,用来计算每个探测器接收到的能量。

图42. 示例1中的价函数(Merit function)。这是用来计算探测器探测到的能量的。

  1. 重结构编辑器(Multi-Configuration EditorMCE)中输入衍射DLL的参数,如下图所示。注意,反射参数只是从透射参数值中拾取的。

图43. 衍射DLL的参数可以在重结构编辑器中公开。这很方便,因为透射参数可以从图中28-40行的反射参数中自动拾取。

  1. 最后,利用分析 (Analyze) >通用绘图 (Universal Plot) 下的一维通用绘图(Universal Plot 1D) 来验证本文的结果。
  • 下图中的x轴是光栅的深度。
  • y轴是反射或透射的不同级次的衍射效率。

注意,在绘制反射级次k=0和k=2 (绿色和紫色线)时,将起始阶数终止阶数更改为0和2。

图44. 在一维通用绘图中,y轴表示衍射效率,x轴表示光线入射角。不同的线代表透射或反射的不同的衍射级次。

下图显示了参考文献中论文给出的结果。

图45.  论文 "Design and fabrication of binary slanted surface-relief gratings for a planar optical interconnection." Applied optics 36.23 (1997): 5717-5727 中的图 4(a)。

示例2:带有梯形光栅的波导

这个例子将演示梯形光栅在波导系统中的应用。波导顶部有两个梯形光栅。此文件为附件中的:

RCWA_trap_waveguide_addlens.zar。

如下图所示,在左侧,朗伯图像光源位于近轴透镜的焦平面上。来自图像光源的光被近轴透镜折射,然后通过第一个光栅耦合到波导中。在右侧,用第二个光栅把光耦合出去。最后,由第二个近轴透镜将输出耦合光重新成像到同样位于焦平面的探测器上

图46. 示例2的系统布局图。

以下为本例中值得注意的一些要点。

    1. 在这个文件中,使用srg_trapezoid_RCWA.dll来构建光栅。两个光栅具有相同的形状,这个二元光栅的填充因子 = 0.5,深度 = 0.2µm,周期 = 0.43µm。 Alpha 和 Beta 都是0。在光栅的顶部有一层 20 nm 厚的膜层。因此,光栅的总深度是0.22 µm。

    下图显示了每个周期的结构。

图47. 示例2中光栅各层的折射率分布和厚度。

  1. 光栅在序列元件(NSC)编辑器中是“用户定义物体(User Defined Object)”。它们是根据波导物体定义的,波导物体是矩形体。光栅与波导的面1重叠。因为定义波导后,当光线击中重叠的表面,嵌套规则后,光线将到达光栅,并产生衍射(更多信息请参阅帮助文件的设置(Setup )选项卡> 编辑(Editors )组 > 序列元件编辑器(Non-sequential Component Editor)> 非序概述 (Non-sequential Overview ) > 物体位置 (Object Placement) 部分)。

图48. 布局图和非序列元件编辑器中的波导和两个光栅。

  1. 物体3是矩形光源(Source Rectangle),它用矩形来模拟准直光束。物体2是幻灯片(Slide)物体。它是由“{Zemax}\IMAFiles\QR_code_Zemax.jpg”图形文件定义的彩色RGB透明物体。

图49. 示例2中使用的测试图片。这是二维码,里面的文字是“http://zemax.com”..

幻灯片物体具有朗伯散射特性。采用点采(Importance Sampling),只考虑散射到近轴透镜上的光线。

图50. 示例2中幻灯片物体(物体#2)的散射设置。

二维码通过波导成像。探测器上的模拟图像如下图所示。

图51.  示例2系统模拟的图像

参考文献

  1. M. G. Moharam, Drew A. Pommet, Eric B. Grann, and T. K. Gaylord, "Stable implementation of the rigorous coupled-wave analysis for surface-relief gratings: enhanced transmittance matrix approach," J. Opt. Soc. Am. A 12, 1077-1086 (1995)
  2. Kogelnik, H., "Coupled wave theory for thick hologram gratings, " Bell Syst. Tech. J. 48, 2909-2947 (1969).
  3. Glytsis, E. N. and Gaylord, T. K., "Rigorous 3-D coupled wave diffraction analysis of multiple superposed gratings in anisotropic media," Appl. Opt. 28(12), 2401-2421 (1989).

KA-01898

这篇文章有帮助吗?
2 人中有 1 人觉得有帮助

评论

0 条评论

文章评论已关闭。