技术资源

JCMsuite 中的光学属性

在模拟纳米光学系统时,一个一次又一次出现的绊脚石是如何描述我们想要建模的各种物理物体的光学特性,即相对允许性或复杂的折射指数。由于 JCMsuite 解决了麦克斯韦在频率域中的方程,这意味着只需要给定频率的许可。即使需要一系列频率(或者波长)来模拟纳米光学系统,许可的实用性也只需要在此范围内定义。由于每个频率都是独立建模的,因此可以直接用作 JCMsuite 的实验确定值,而无需将分析模型与数据配合使用。

鉴于 JCMsuite 中材料的许可性具有灵活性,以下典型用途案例变得易于处理:

曲线元素可以帮助解决的基本问题

假设许可的恒定值对所有频率有效。

使用 JCMsuite 中定义的许可性模型之一的模型参数。

将恒定值与校正术语(如光弹性校正)相结合。

此外,Python 和 Matlab 中的 JCMsuite 脚本接口允许处理以下使用案例:

在一系列频率上使用测量的许可值。

使用 JCMsuite 中未定义的许可性模型。

改变一系列值的允许性,以研究对模型的影响。

使用许可性作为优化参数,以便获得特定应用的理想许可性。

通过定义直接注入 JCMsuite 的巨蛇脚本来完全控制许可性。

此处的前四点取决于 JCMsuite 的脚本界面,以提供给定材料许可性的适当值。最终使用案例允许更高级地描述许可性,例如给定材料中的空间变化。在以下情况下,我们限制自己使用允许性与给定材料同质的案例。


关于渗透性的简短说明

我们将在这篇文章中深入到的使用案例都用于非磁性材料,因此渗透性可以安全地设置为 1 的所有案例。如果模型中包含磁性材料,则适用于许可性下列文章中提出的所有内容都同样适用于渗透性。

概述

在下面的博客文章中,我们将举例说明如何使用脚本界面来改变或优化许可性。此外,我们展示了分散巨蛇包,它能够简化从文件中加载光学数据表并在 JCMsuite 中使用它们的过程。

参数扫描超过许可值

我们的第一个调用端口是使用 JCMsuite 脚本界面的关键字替换,以轻松运行一系列模拟,其中我们更改了材料的允许性。

该设置是一个1D介电光栅,由玻璃基板上高介电材料条的周期阵列组成。我们模拟光栅的周期单元单元,并以 30°的事故角度用平面波照亮它。然后,我们使用 JCMsuite 的散射矩阵后处理来计算椭圆体 $Psi$和 $10=德尔塔 $系数。如果您使用顶部的下载链接检索此 Jupyter 笔记本的 ZIP 文件,此示例的所有需要 JCMsuite 输入文件都包含在文件夹中。

介电光栅的二元横截面,涉及基板上周期性高介质条阵列。用于模拟的单元单元单元被突出显示。

在创建定义传播模式问题(材料.jcm、布局.jcm 和 project.jcmp)所需的三个 JCMsuite 输入文件后,我们通过创建来自 RelPermitivity 的参数来对材料.jcm 文件进行参数化。这将更改材料文件,

并将扩展更改为.jcmt。此外,创建文件列出了我们创建的参数,project.jcmp.para

为了运行参数扫描,需要生成脚本界面。在以下中,我们将使用 JCMsuite 中的巨蛇界面,但八度/Matlab 语言可以采用相同的步骤来实现相同的结果。 单击 JCMControl 中的"分析"可打开菜单,以指定要生成的脚本任务类型。将生成"参数扫描"和 jupyter 笔记本,以便轻松调整以执行参数扫描。 在生成的参数扫描.ipynb 中,我们定义了我们希望通过

使用脚本执行参数扫描后,我们绘制了椭圆体参数之间的关系 Ψ 和 Δ 系数和光栅的允许性。这 Ψ 和 Δ 通过 s 和 p 偏振光的镜面振幅反射系数进行定义,

这 Ψ 和 Δ 高介电1D光栅的系数作为光栅允许性的函数。光栅近场的强度显示为条状允许性为 6、9.6 和 14 的情况。

由于计算的波长保持在 500 nm 不变,因此这种允许性扫描代表一种思维实验,我们考虑将波导条的材料更改为不同材料,允许的允许性为 500 nm。在将结构的椭圆系数与设定波长的椭圆系数与测量值进行比较时,可能会出现这种情况。

另一个常用案例是频谱的计算,其中我们更改了事件光的频率(或波长)。如果不能假定模型中所用材料的允许性超过感兴趣的频率范围,则在更改光事件频率时也必须设置许可性。下一个示例在 JCMsuite 中提供了实现此目的的一个此类方法。

事件波长的参数扫描

在此部分,我们继续查看前一节中显示的周期性线光栅。相反,我们不是改变条带的允许性,而是改变光的频率。这反过来又会导致光栅条的允许性发生变化。此示例的所有需要 JCMsuit 输入文件都包含在文件夹中。

为了对事件光的频率进行参数扫描,有必要对模型中所有材料的允许性频率依赖性进行描述。在某些情况下,假设许可性恒定值(例如假设空气允许性恒定值为 1)可能是一个很好的近似值。然而,我们往往感兴趣的正是物质分散的影响。在这种情况下,我们要么需要在脚本语言(如巨蛇或 Matlab/octave)中描述许可性,要么需要对 JCMsuite 中定义的模型进行系数描述。

使用许可性模型

我们的第一个例子将使用在 JCMsuite 中实施的洛伦茨极模型来描述条带的允许性。单个洛伦茨杆描述的材料的相对允许性通过, εrel=ε∞+Δεω2pω2p+2i0 +γ−ω2

这里的常数 ε∞ 是许可的高频组件, Δε 定义洛伦茨杆的强度, ωp 是极点频率(也称为共振频率)和 γ 是杆子的阻尼因子。此模型可用于描述少数电子过渡对许可性很重要的材料。在下面,我们使用单个洛伦茨杆来近似无定形硅的允许性(a:Si)。为了在 JCMsuite 中实现此,我们再次更改光栅条的材料描述,

现在被替换

我们不再需要对光栅条的材料进行参数化,因为我们对光栅装置的波长依赖性感兴趣。洛伦茨极点材料模型将确保光栅条具有模拟中使用的波长的正确允许性。相反,我们现在对事件光的波长进行参数化,该波长在我们的源中定义。

请注意,我们有两个来源,具有不同的 s 和 p 两极分化。因此,我们的参数lamda0会两次输入模板文件。JCMsuite 中的洛伦茨极点模型被定义为角频的函数。当定义真空中波长光而不是角频的源时,JCMsuite 会自动将波长转换为角频来评估洛伦茨极模型。 在遵循第一节中概述的步骤生成基于 Jupyter 笔记本的参数扫描后,我们通过

这将扫描事件波长从 300 nm 到 1200 nm 的步骤 50 nm。完成参数扫描后,我们可以再次绘制椭圆体参数 Ψ 和 Δ 系数,现在显示他们对事件波长的依赖。

这 Ψ 和 Δ A:Si 1D光栅的系数作为事件波长光的函数。a:Si 光栅条通过洛伦茨杆进行建模。光栅近场的强度显示在波长为 300 nm、770 nm 和 1000 nm 的情况下。

使用表化许可值

我们经常出现希望直接使用实验确定的许可值或我们希望使用 JCMsuite 中不可用的高级模型的情况。在这些情况下,我们可以通过对光源波长和材料允许性进行参数扫描,从而对光的波长进行参数扫描。在此示例中,我们将加载晶体硅 (c:Si) 的表列数据,并以此为光栅条的许可性。此示例的所有需要 JCMsuit 输入文件都包含在文件夹中。/sources/parameter_scan_from_file

我们首先在来源中对拉姆巴 0 的两个来源进行参数化。

其次是在伴侣的光栅条的再率。

我们的项目.jcmp.para 现在有两个不同的参数

我们再次按照步骤生成基于聚光器的笔记本参数扫描,其波长为扫描参数,

现在,我们需要加载表数据,并确保 JCMsuite 为给定波长设置正确的许可值。这个过程虽然原则上很简单,但根据表格数据的特定格式,可能相当困难。光学数据的测量值可能提供许可性、复杂折射指数或真正的折射指数。同样,不同的社区使用不同的约定来测量用于测量数据的频谱类型,无论是波长、角频、能量还是任意数量的其他约定。一旦数据被加载到选择的脚本语言中,则必须通常进行插值,然后在 JCMsuite 模拟中使用的光谱位置进行评估。

分散包

为了便于加载和评估表述的光学数据,可以使用巨蛇包分散。此套餐可在 PyPi 提供:https://pypi.org/project/dispersion/。在此示例中,我们希望为 c:Si 加载一个表述数据文件。文件内容从

数据由三个选项卡(分隔选项卡)列组成。元数据的前三行告诉我们三列包含哪些内容。在这种情况下,第一列给出了测量数据的 eV 中的能量值。第二列和第三列是相关的 n 值和 k 值。为了加载这些数据,我们使用分散包,

通过绘制复杂的折射指数,我们可以看到数据跨越能量范围从 1 eV 以下到 6 个以上的 eV。我们可以将数据绘制为波长的函数,si.plot_nk_data(spectrum_type='wavelength', unit='nm')

我们可以在给定波长下评估许可性, si.get_permittivity(500e-9, spectrum_type='wavelength', unit='m') (18.46463881446238+0.6265088149896604j) 请注意,波长值在 eV 中自动转换为能量,以便从原始数据集中评估许可性。 然后,我们可以将此集成到参数笔记本中的密钥中:

在对事件波长进行参数扫描后,我们可以绘制椭圆系数的依赖性图 Ψ 和 Δ .

这 Ψ 和 Δ c:Si 1D 光栅的系数作为事件波长光的函数。c:Si 光栅条的允许性由从文件中加载的实验确定的数据给出。光栅近场的强度显示为波长为 300 nm、700 nm 和 1000 nm 的情况。