ПіОгма
Ви можете досягти значних результатів, безпосередньо маніпулюючи файлами конфігурації JSON OghmaNano з використанням Python (редагуючи sim.json на диску та запускаючи oghma_core.exe). Однак, якщо вам потрібно запустити багато симуляцій паралельно для створення великих наборів даних, ви швидко зрозумієте, що вам потрібен рівень оркестрації: створення каталогів для запуску, копіювання вхідних файлів, запуск кількох екземплярів вирішувача та керування чергою завдань на різних ядрах процесора.
Крім того, безпосередня робота з необробленими даними JSON у Python не завжди зручна: легко допустити помилки, і код може стати надмірно громіздким порівняно з інтерфейсом вищого рівня, який знає про загальні об’єкти моделювання. З цієї причини Кай Вільямс створив API під назвою PyOghma, який можна використовувати для обробки файлів OghmaNano JSON і запуску моделювань. PyOghma – це окремий проєкт, тому, будь ласка, надсилайте запитання, повідомлення про помилки та пропозиції щодо нових функцій автору PyOghma.
PyOghma можна знайти на GitHub, а також за посиланням pip:
python -m pip install PyOghma
Наведений нижче приклад демонструє використання PyOghma. [приклад на Python 3]:
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, а вихідний JSON-файл OghmaNano змінюється шляхом зміни значень параметрів рухливості, щільності пасток, швидкості захоплення та енергії Урбаха. Оригінальний файл копіюється за допомогою наступного рядка:
Oghma.clone('NewExperiment0')
Потім в кінці коду додайте наступні два рядки. Перший додає завдання до списку завдань PyOghma, а другий дає PyOghma команду виконати всі завдання. Якщо завдань більше одного, PyOghma виконуватиме їх паралельно на всіх процесорах, доки вони не будуть завершені. Якщо ви хочете провести моделювання з різними значеннями рухливості, додайте кожне моделювання до списку завдань, а потім один раз викличте \(run\_jobs\), щоб ефективно запустити завдання на всіх ядрах.
Oghma.add_job(experiment_name)
Oghma.run_jobs()
Більше інформації про PyOghma можна знайти на сторінці GitHub.