首页 示例 截图 用户手册 Bluesky logo YouTube
OghmaNano 模拟有机/钙钛矿太阳能电池、OFET 和 OLED 下载

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 页面上找到。