PyOghma
با دستکاری مستقیم فایلهای پیکربندی JSON مربوط به OghmaNano از Python میتوانید کارهای زیادی انجام دهید (ویرایش
sim.json روی دیسک و اجرای oghma_core.exe).
با این حال، اگر بخواهید تعداد زیادی شبیهسازی را بهصورت موازی اجرا کنید تا مجموعهدادههای بزرگی تولید شوند، خیلی زود به
یک لایه orchestration نیاز پیدا میکنید: ایجاد دایرکتوریهای اجرا، clone کردن فایلهای ورودی، راهاندازی چندین نمونه از حلگر، و
مدیریت یک صف از jobها روی هستههای CPU.
افزون بر این، دستکاری مستقیم JSON در Python همیشه خوشایند نیست: بهراحتی ممکن است اشتباه رخ دهد، و کد میتواند در مقایسه با یک رابط سطحبالا که اشیای متداول شبیهسازی را میشناسد، طولانی و پرجزئیات شود. به همین دلیل، Cai Williams یک API با نام PyOghma ایجاد کرده است که میتوان از آن برای دستکاری فایلهای JSON مربوط به OghmaNano و اجرای شبیهسازیها استفاده کرد. 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 import میشود، و یک فایل JSON منبع مربوط به OghmaNano با تغییر
مقادیر تحرک، چگالی تله، نرخ تلهگذاری و انرژی Urbach دستکاری میشود. فایل اصلی با این خط clone میشود:
Oghma.clone('NewExperiment0')
سپس در انتهای کد، دو خط زیر قرار دارند. خط اول job را به فهرست jobهای PyOghma اضافه میکند و خط دوم به PyOghma دستور میدهد همه jobها را اجرا کند. اگر بیش از یک job وجود داشت، PyOghma چندین job را روی همه CPUها اجرا میکرد تا به پایان برسند. اگر میخواستید شبیهسازیها را با مقادیر متفاوت تحرک اجرا کنید، هر شبیهسازی را به فهرست jobها اضافه میکردید، سپس \(run\_jobs\) را یک بار فراخوانی میکردید تا jobها بهصورت کارآمد روی همه هستهها اجرا شوند.
Oghma.add_job(experiment_name)
Oghma.run_jobs()
اطلاعات بیشتر درباره PyOghma در صفحه GitHub در دسترس است.