PyOghma
通过直接从 Python 操作 OghmaNano 的 JSON 配置文件(编辑磁盘上的
sim.json 并运行 oghma_core.exe),您已经可以完成很多工作。
但是,如果您希望并行运行大量仿真来生成大型数据集,那么很快就会需要
一个编排层:创建运行目录、克隆输入文件、启动多个求解器实例,以及
在 CPU 核心之间管理任务队列。
此外,在 Python 中直接操作原始 JSON 并不总是令人愉快:很容易出错,而且与了解常见仿真对象的高级接口相比, 代码可能会变得冗长。出于这个原因, Cai Williams 创建了 一个名为 PyOghma 的 API,可用于操作 OghmaNano JSON 文件并运行仿真。 PyOghma 是一个独立项目,因此请将问题、错误报告和功能请求直接发送给 PyOghma 作者。
PyOghma 可在
GitHub
上获取,也可通过 pip 安装:
python -m pip install PyOghma
下面给出了一个使用 PyOghma 的示例 [python-example3]:
import PyOghma as po
Oghma = po.OghmaNano()
Results = po.Results()
source_simulation = "\exapmle\pm6y6\"
Oghma.set_source_simulation(source_simulation)
experiment_name = 'NewExperiment'
Oghma.set_experiment_name(experiment_name)
mobility = 1e-5
trap_desnsity = 1e-18
trapping_crosssection = 1e-20
recombination_crosssection = 1e-20
urbach_energy = 40e-3
temperature = 300
intensity = 0.5
experiment_name = 'NewExperiment' + str(1)
Oghma.clone('NewExperiment0')
Oghma.Optical.Light.set_light_Intensity(intensity)
Oghma.Optical.Light.update()
Oghma.Thermal.set_temperature(temperature)
Oghma.Thermal.update()
Oghma.Epitaxy.load_existing()
Oghma.Epitaxy.pm6y6.dos.mobility('both', mobility)
Oghma.Epitaxy.pm6y6.dos.trap_density('both', trap_desnsity)
Oghma.Epitaxy.pm6y6.dos.trapping_rate('both', 'free to trap',..
trapping_crosssection)
Oghma.Epitaxy.pm6y6.dos.trapping_rate('both', 'trap to free',..
recombination_crosssection)
Oghma.Epitaxy.pm6y6.dos.urbach_energy('both', urbach_energy)
Oghma.Epitaxy.update()
Oghma.add_job(experiment_name)
Oghma.run_jobs()
在这个示例中,PyOghma 被作为 po 导入,并且通过改变
迁移率、陷阱密度、俘获速率和 Urbach 能量的数值来操作一个源 OghmaNano JSON 文件。原始文件通过下面这一行被克隆:
Oghma.clone('NewExperiment0')
然后在代码末尾有以下两行。第一行将任务添加到 PyOghma 任务列表中,第二行 告诉 PyOghma 执行所有任务。 如果任务不止一个,PyOghma 将在所有 CPU 上执行多个任务,直到全部完成。 如果您想运行具有不同迁移率数值的仿真,您应当将每个仿真都添加到任务列表中, 然后只调用一次 \(run\_jobs\),以便在所有核心上高效运行这些任务。
Oghma.add_job(experiment_name)
Oghma.run_jobs()
关于 PyOghma 的更多信息可在 GitHub 页面上找到。