参数扫描窗口
系统地改变仿真参数的最直接方法是使用扫描窗口。在这个 示例中,我们将系统地改变 PM6:Y6 太阳能电池有源层的迁移率,您可以在示例仿真中的 Scripting and fitting/Scan demo (PM6:Y6 OPV) 下找到 这个示例。找到该仿真并打开之后,接着需要调出参数扫描窗口,这可以通过 单击 Automation 功能区中的 Parameter scan 图标来完成(见 ??)。 然后通过单击 new scan 按钮(1)新建一个扫描(在示例仿真中,这一步已经 为您完成)。通过双击表示该扫描的图标(2)来打开新扫描,见 ??。这将弹出扫描窗口,见 ??。
1. 选择要变化的参数
一旦 scan window 打开,通过单击图 17.1 中的加号图标(1)新建一条扫描线,然后选择该 行使其高亮(2),接着单击三个点(3)以选择要扫描的参数。 同样,如果您使用的是示例仿真,这一步已经为您完成。
在本示例中,选择扫描 PM6:Y6 太阳能电池的电子迁移率。 这是通过导航到 epitaxy\(\rightarrow\) PM6:Y6\(\rightarrow\) Drift diffusion\(\rightarrow\) Electron mobility y 来完成的。 选中该参数并单击 OK。随后,所选参数将显示在扫描列表中。 下面解释该参数路径中每一层级的含义:
-
epitaxy: 在参数选择窗口中会暴露出
.oghma文件中定义的所有参数 (见 [fig:scanselect])。 整个器件结构,包括其各层,定义在 epitaxy 标题下。 -
PM6:Y6: 在 epitaxy 下,每一层器件层都按名称标识。 在本示例中,有源层名为 PM6:Y6。 如果有源层名称不同(例如 Perovskite 或 P3HT:PCBM), 则应改为选择对应的层名称。
-
Drift diffusion: 与给定层相关的所有电输运参数都归类在 drift diffusion 子标题下。
-
Electron mobility y: 可以定义 z、x 和 y 方向上的非对称迁移率——这对于 OFET 仿真很有用。不过默认情况下,模型假设迁移率是对称的,并且在所有 方向上都相同。该值由 Electron mobility y 定义。
尽管这一工作流程一开始看起来可能相对复杂,但本质上它只是以结构化方式
编辑底层 .oghma JSON 文件中的值和路径。
参数选择窗口只是提供了一个图形界面,用于安全且一致地导航和修改该
文件。
文件结构的详细说明可见文档
OghmaNano 文件格式
。
2. 设置数值
接下来输入您想要扫描的迁移率数值,在本例中我们将输入 1e-5 1-6 1e-7 1e-8 1e-9,然后单击 run scan(见图 17.2 2)。OghmaNano 将在您计算机的每个核心上运行一个仿真,直到所有 仿真完成。
3. 查看仿真结果
要查看仿真结果,单击 output 选项卡,这将显示仿真输出,见 图 17.3。您可以看到, 为我们扫描的每个变量都创建了一个目录,因此有 1e-5、1e-6、1e-7、1e-8 和 1e-9。如果查看每个目录内部,它都会是基础仿真目录的完整副本。如果您 双击带有多色 JV 曲线的文件,见图 17.3 中的红框,OghmaNano 将自动把 每个仿真的所有曲线绘制到同一张图中,见图 17.4。
4. 复制参数——改变有源层厚度
很多时候,人们希望在改变一个参数的同时,将另一个参数设置为与其变化值相同。 一个简单的例子是在模拟具有对称输运特性的器件时,同时扫描电子和空穴迁移率。 这可以通过扫描窗口中的 Duplicate 功能实现,如 ?? 所示。在这个例子中,我们考虑一个稍微更微妙的问题。与其复制迁移率,我们改变 有源层的物理厚度,同时调整电学网格使其与之匹配。 如 网格划分部分 中所讨论的那样, 有源层的宽度应与电学网格的宽度相匹配。 最好保持两者一致,以避免仿真中的数值和几何不一致。
当在层编辑器中手动改变层宽时,OghmaNano 会自动更新电学 网格。然而,当通过脚本或参数扫描修改模型时,这种更新可能不会 自动执行。因此,在下面的例子中,我们显式复制相关参数。
首先,我们扫描:
epitaxy\(\rightarrow\)PM6:Y6\(\rightarrow\)对象的 dy
接着,我们添加另一条扫描线,并在 Parameter to scan 下选择:
mesh\(\rightarrow\)mesh_y\(\rightarrow\)segment0\(\rightarrow\)len
然后将该参数设置为:
epitaxy\(\rightarrow\)PM6:Y6\(\rightarrow\)对象的 dy
使用 Operation 下拉菜单进行设置。选择后,Values 列下将显示 duplicate 一词。
运行仿真时,参数 “epitaxy\(\rightarrow\)PM6:Y6\(\rightarrow\)对象的 dy” 会被扫描,而 “mesh\(\rightarrow\)mesh_y\(\rightarrow\)segment0\(\rightarrow\)len” 会自动跟随它,从而确保网格厚度与物理层厚度保持一致。
5. 设置常数值
除了扫描参数之外,参数扫描编辑器还可以使用 constant 操作将参数 显式设置为固定值。 当在改变某个参数的同时,其他若干参数必须保持不变时,这一点很有用。
在这个例子中,通过扫描器件层的 dy 参数来改变有源层厚度。同时,对应的 垂直网格段长度被复制,以便电学网格保持与变化的层厚度 一致。与这些扫描参数一起,电子迁移率和空穴迁移率都通过 Operation 列中的 constant 选项设置为固定值。
使用 constant 可确保这些参数在扫描中的每次仿真中都取指定值, 无论其他参数如何变化。 这使得可以将几何变化的影响 (例如层厚度)与输运参数清晰分离开来,并避免扫描量之间出现 非预期耦合。
6. 循环的等效形式
在扫描参数范围时,通常希望运行大量仿真。 在这种情况下,手动输入每个值是不现实的。为了解决这个问题,OghmaNano 在扫描窗口中提供了 循环的等效形式。
例如,要以步长 1 将某个参数从 100 变化到 400,可以输入:
[100 400 1]
7. 扫描窗口的局限性
扫描窗口为改变材料或器件参数并 快速可视化结果提供了一种务实且简便的方法。对于简单研究——目标是了解某个量 如何变化并在数秒内获得结果——它通常是最有效的方法。
然而,一旦仿真数量变得很大,或者需要更复杂的参数相互作用, 扫描窗口就可能变得有限制。在这种情况下,更合适的做法可能是通过脚本接口 以程序方式驱动 OghmaNano,例如通过 Python 或 MATLAB, 它们能够对参数生成、执行逻辑和数据收集进行完全控制。
类似地,如果目标是优化器件堆叠——而不是简单地观察曲线如何随 参数变化——通常最好使用内置优化工具。相关内容在手册的 多参数器件优化器 部分中进行了说明。
👉 下一步: 现在继续阅读 多参数优化, 在那里您可以了解如何同时优化多个器件参数。