PyOghma
Python から OghmaNano の JSON 設定ファイルを直接操作することで、かなり多くのことが可能です
(ディスク上の sim.json を編集し、oghma_core.exe を実行します)。
しかし、大規模なデータセットを生成するために多数のシミュレーションを並列実行したい場合、
すぐにオーケストレーション層が必要になります。すなわち、実行ディレクトリの作成、
入力ファイルの複製、複数のソルバインスタンスの起動、
および CPU コア全体にわたるジョブキューの管理です。
さらに、Python で生の JSON を直接操作するのは必ずしも快適ではありません。 ミスをしやすく、一般的なシミュレーションオブジェクトを理解している高水準インターフェースと比較すると、 コードが冗長になりがちです。 このため、 Cai Williams は、 OghmaNano の JSON ファイルを操作しシミュレーションを実行するために利用できる PyOghma という API を作成しました。 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 としてインポートされ、
ソースとなる OghmaNano JSON ファイルは、移動度、トラップ密度、トラッピング速度、
および Urbach Energy の値を変更することで操作されています。
元のファイルは次の行によって複製されます:
Oghma.clone('NewExperiment0')
その後、コードの最後で次の2行が実行されます。最初の行はジョブを PyOghma のジョブリストに追加し、 2 行目はすべてのジョブを実行するよう PyOghma に指示します。 もし複数のジョブがあれば、PyOghma はそれらが終了するまで すべての CPU にまたがって複数ジョブを実行します。 異なる移動度の値でシミュレーションを実行したい場合は、各シミュレーションをジョブリストに追加し、 その後 \(run\_jobs\) を一度呼び出して、 すべてのコアで効率的にジョブを実行します。
Oghma.add_job(experiment_name)
Oghma.run_jobs()
PyOghma に関するさらに詳しい情報は GitHub ページで入手できます。