Home Examples Screenshots User manual Bluesky logo YouTube ☰
OghmaNano Multiphysics simulation platform for optoelectronic devices and photonic systems DOWNLOAD Quick Start guide

PyOghma

Vous pouvez obtenir de bons résultats en manipulant directement les fichiers de configuration JSON d’OghmaNano à partir de Python (en modifiant sim.json sur le disque et en exécutant oghma_core.exe). Cependant, si vous souhaitez exécuter de nombreuses simulations en parallèle pour générer de vastes ensembles de données, vous finirez rapidement par avoir besoin d’une couche d’orchestration : création de répertoires d’exécution, clonage des fichiers d’entrée, lancement de plusieurs instances de solveur et gestion d’une file d’attente de tâches sur les cœurs de processeur.

De plus, la manipulation directe de données JSON en Python n’est pas toujours facile : il est facile de faire des erreurs, et le code peut devenir complexe par rapport à une interface de niveau supérieur qui connaît les objets de simulation courants. Pour cette raison, Cai Williams a créé une API appelée PyOghma qui peut être utilisé pour manipuler les fichiers JSON OghmaNano et exécuter des simulations. PyOghma est un projet indépendant. Veuillez donc adresser vos questions, signaler les bogues et formuler vos demandes de nouvelles fonctionnalités à l’auteur de PyOghma.

PyOghma est disponible sur GitHub et également par le biais de pip:

python -m pip install PyOghma

Un exemple d’utilisation de PyOghma est présenté ci-dessous. [exemple-python3]:

 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()

Dans cet exemple, PyOghma est importé sous la forme po, et un fichier JSON OghmaNano est modifié en changeant les valeurs de la mobilité, de la densité des pièges, du taux de piégeage et de l’énergie d’Urbach. Le fichier original est dupliqué à l’aide de la ligne suivante :

Oghma.clone('NewExperiment0')

Ensuite, à la fin du code, ajoutez les deux lignes suivantes. La première ajoute la tâche à la liste des tâches de PyOghma, et la seconde indique à PyOghma d’exécuter toutes les tâches. S’il y a plus d’une tâche, PyOghma exécutera plusieurs tâches sur tous les processeurs jusqu’à ce qu’elles soient terminées. Si vous souhaitez exécuter des simulations avec différentes valeurs de mobilité, vous ajouterez chaque simulation à la liste des tâches, puis vous appellerez \(run\_jobs\) une seule fois pour exécuter les tâches sur tous les cœurs de manière efficace.

Oghma.add_job(experiment_name)
Oghma.run_jobs()

Vous trouverez de plus amples informations sur PyOghma sur la page GitHub.