oghma 文件格式
1. 什么是 JSON?
sim.json 文件示例,展示 OghmaNano 仿真的底层 JSON 结构。
OghmaNano 将其仿真信息存储在一个JSON文件中。JSON(JavaScript Object Notation)是一种非常简单的、基于文本的格式,用于存储和传输结构化数据。它在科学软件中被广泛使用,因为它既便于人阅读,也便于机器解析。你可以在 https://json.org/example.html 查看 JSON 结构的一般示例。
为了说明 JSON 的工作方式,下面给出一个简单示例。一个 JSON 文件由以花括号 { } 开始和结束的区段构成。每个区段包含令牌(tokens)或标签(labels),例如 "color_of_dog"、"dog_age" 或 "dogs_toys"。这些令牌必须始终用双引号书写,后面跟一个冒号 :,然后是对应的数据值。文本值放在双引号中,而整数或小数等数字不加引号。在 OghmaNano 中,类似布尔的值以字符串 "true" 或 "false" 存储。为了使文件有效,所有左/右括号必须正确对应。区段内的条目用逗号分隔,除了最后一项,其末尾不带逗号。
??。
{
"color_of_dog": "brown",
"dog_age": 5,
"dogs_toys":
{
"rabbit": "true",
"stick": "false"
}
}
JSON 结构示例。
OghmaNano 使用相同的 JSON 原理来存储其所有仿真数据。这些信息包含在名为 sim.json 的文件中,其中包含所有器件参数、仿真设置以及输出配置。每个仿真都会有其自己的 sim.json 文件。虽然你可以用任何文本编辑器打开该文件,但通常使用专用的 JSON 查看器更容易,因为它会将数据格式化为易读的树状结构。Firefox 内置了一个很好的 json 查看器。下面的 ?? 展示了在 Firefox 中查看的 sim.json 文件示例。
最后一点:尽管 sim.json 是关键配置文件,但它并不总是单独存放。相反,OghmaNano 常常将其打包在一个 sim.oghma 文件中,而该文件只是一个标准的 ZIP 归档——这样做是为了节省空间。如果你将 sim.oghma 重命名为 sim.zip,就可以用 Windows 资源管理器或任何 zip 查看器打开它并提取 sim.json。如果你将一份 sim.json 副本放在同一个仿真目录中,并将归档重命名回 sim.oghma,
OghmaNano 会忽略归档中的 sim.json,转而使用你的纯文本 sim.json 文件。这个特性对自动化极其有用,因为你可以用任何编程语言直接编辑 sim.json,而无需操作 zip 文件。
2. OghmaNano 文件格式
OghmaNano 在其名为 sim.json 的仿真配置文件中严格应用这些原则。
该文件包含描述器件结构、定义要运行的仿真以及配置求解器所需的一切内容。
每个仿真目录都会包含其自己的 sim.json。
虽然你可以在任何文本编辑器中打开该文件,但通常使用诸如 Firefox 之类的 JSON 查看器更为方便,
因为它会自动以格式化的树状视图呈现数据。
在最高层级,sim.json 被组织为少数几个顶层区段。
这些区段随后分支为详细的子区段,例如 JV 扫描、EQE 运行或器件层定义。
当前格式中存在的主要顶层区段在下表中总结:
??。
| 区段 | 用途 |
|---|---|
sim | 一般元数据(例如版本、运行模式、备注) |
sims | 所有仿真定义(JV、Suns-Voc、EQE、PL、时域、ray、FDTD 等) |
epitaxy | 器件结构:层、接触、几何、材料 |
math | 数值求解器设置与容差 |
optical | 光学模型、光源、探测器、网格 |
dump | 输出控制:详细级别、探针、文件格式 |
server | 运行时/并行化(线程、GPU、时间限制) |
sim.json 中检测到的主要顶层区段。
3. OghmaNano json 格式的怪癖
-
OghmaNano 的 json 文件不支持标准的 json 列表,例如 ["Red", "Green", "Blue"]。如果存在项目列表,会先声明可变区段,并给出列表中的项目数量,例如 "segments",0。随后每个项目存储在 "segment0"、"segment1" 等之下……这种格式使 OghmaNano 能在读取结构之前先为读取分配内存。可在图 14.1 中看到,其中有一个包含 1 个 segment 的列表。
-
json 文件中的许多项目会被赋予一个 ID 号,即 16 位十六进制代码,可用于唯一引用该项目。图 14.1 中也可以看到一个 ID 号。这些 ID 号是随机生成的,但每个 ID 号必须唯一。ID 号使对象(例如 epitaxy 层)能够被唯一识别,即使它们具有相同的名称。
4. 编码
OghmaNano 读写的 .json 文件始终以 UTF-8 格式存储。OghmaNano 无法处理 UTF-16 或任何其他文本编码标准。如今 Windows 记事本和大多数其他应用默认使用 UTF-8,所以如果你不知道这些文本存储格式是什么,可能也无关紧要。只有当你开始用诸如 C++ 之类的语言以编程方式生成 .oghma 文件,并且使用中文或俄文等包含非拉丁字符字母表的语言时,这个问题才会显现出来。
5. 文件格式的前向/后向兼容性
我们投入了大量精力来确保新版本的 OghmaNano 能读取旧版本生成的文件。然而,旧版本的 OghmaNano 可能无法读取新版本生成的文件。每次用户通过 GUI 打开 sim.oghma 文件时,都会检查文件格式;如果其与当前版本所用格式不同,则会更新文件并写回磁盘。如果你在无界面(headless)配置中使用 OghmaNano,并通过直接调用 \(oghma\_core.exe\) 来运行,那么在运行来自旧版本模型的 sim.oghma 文件之前,务必先在 GUI 中打开它一次,以确保文件处于正确格式。
6. 提示
如果你不确定某个参数在 OghmaNano sim.json 文件中存储在哪里,
一个非常有效的方法是比较该文件的两个版本并查看发生了什么变化。
实现这一点的一种方式是使用文件比较工具,例如 KDiff3。
过程很直接:
- 在 OghmaNano 用户界面中打开你的仿真。
- 调整你关心的参数(例如更改有源层厚度或某个电压设置)并保存仿真。
- 使用 KDiff3(或其他 diff 工具)将新的
sim.json文件与先前版本进行比较。 - 查找不同的行:这些行会准确显示该参数在 JSON 结构中的存储位置。
如果你不确定参数在文件中的路径,这一技术是一种快速且可靠的定位方法。 它对包含许多嵌套区段的复杂仿真尤其有用。
👉 下一步:现在继续 探索参数扫描工具, 你可以学习如何系统地改变仿真参数并分析结果。