Home Esempi Immagini dello schermo Manuale utente Logo di Bluesky YouTube ☰
OghmaNano Piattaforma di simulazione multifisica per dispositivi optoelettronici e sistemi fotonici SCARICA Guida rapida per iniziare.

PyOghmaPyOghma

È possibile ottenere buoni risultati manipolando direttamente i file di configurazione JSON di OghmaNano tramite Python (modificando sim.json sul disco e eseguendo oghma_core.exe). Tuttavia, se si desidera eseguire numerose simulazioni in parallelo per generare grandi quantità di dati, si renderà presto necessario un livello di orchestrazione: creazione di directory di esecuzione, clonazione dei file di input, avvio di più istanze del risolutore e gestione di una coda di processi sui core della CPU.È possibile ottenere buoni risultati manipolando direttamente i file di configurazione JSON di OghmaNano tramite Python (modificando sim.json sul disco e eseguendo oghma_core.exe). Tuttavia, se si desidera eseguire numerose simulazioni in parallelo per generare grandi quantità di dati, si renderà presto necessario un livello di orchestrazione: creazione di directory di esecuzione, clonazione dei file di input, avvio di più istanze del risolutore e gestione di una coda di processi sui core della CPU.

Inoltre, la manipolazione diretta dei file JSON in Python non è sempre semplice: è facile commettere errori e il codice può diventare eccessivamente lungo rispetto a un’interfaccia di livello superiore che gestisce gli oggetti di simulazione più comuni. Per questo motivo, Cai Williams ha creato un’API chiamata PyOghma che può essere utilizzata per manipolare i file JSON di OghmaNano ed eseguire simulazioni. PyOghma è un progetto indipendente, pertanto si prega di indirizzare domande, segnalazioni di bug e richieste di nuove funzionalità all’autore di PyOghma.Inoltre, la manipolazione diretta dei file JSON in Python non è sempre semplice: è facile commettere errori e il codice può diventare eccessivamente lungo rispetto a un’interfaccia di livello superiore che gestisce gli oggetti di simulazione più comuni. Per questo motivo, Cai Williams ha creato un’API chiamata PyOghma che può essere utilizzata per manipolare i file JSON di OghmaNano ed eseguire simulazioni. PyOghma è un progetto indipendente, pertanto si prega di indirizzare domande, segnalazioni di bug e richieste di nuove funzionalità all’autore di PyOghma.

PyOghma è disponibile su GitHub e anche tramite pip:PyOghma è disponibile su GitHub e anche tramite pip:

python -m pip install PyOghma

Di seguito è riportato un esempio di come utilizzare PyOghma. [esempio-python3]: Di seguito è riportato un esempio di come utilizzare PyOghma. [esempio-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()

In questo esempio, PyOghma viene importato come po e un file JSON di OghmaNano viene modificato alterando i valori di mobilità, densità delle trappole, tasso di intrappolamento ed energia di Urbach. Il file originale viene copiato utilizzando la seguente riga di codice:In questo esempio, PyOghma viene importato come po e un file JSON di OghmaNano viene modificato alterando i valori di mobilità, densità delle trappole, tasso di intrappolamento ed energia di Urbach. Il file originale viene copiato utilizzando la seguente riga di codice:

Oghma.clone('NewExperiment0')

Quindi, alla fine del codice, vanno aggiunte le seguenti due righe. La prima aggiunge il lavoro alla lista dei lavori di PyOghma e la seconda indica a PyOghma di eseguire tutti i lavori. Se ci fossero più di un lavoro, PyOghma li eseguirebbe in parallelo su tutti i processori fino al loro completamento. Se si volessero eseguire simulazioni con valori diversi di mobilità, si aggiungerebbe ogni simulazione alla lista dei lavori e quindi si chiamerebbe \(run\_jobs\) una sola volta per eseguire i lavori in modo efficiente su tutti i core.Quindi, alla fine del codice, vanno aggiunte le seguenti due righe. La prima aggiunge il lavoro alla lista dei lavori di PyOghma e la seconda indica a PyOghma di eseguire tutti i lavori. Se ci fossero più di un lavoro, PyOghma li eseguirebbe in parallelo su tutti i processori fino al loro completamento. Se si volessero eseguire simulazioni con valori diversi di mobilità, si aggiungerebbe ogni simulazione alla lista dei lavori e quindi si chiamerebbe \(run\_jobs\) una sola volta per eseguire i lavori in modo efficiente su tutti i core.

Oghma.add_job(experiment_name)
Oghma.run_jobs()

Ulteriori informazioni su PyOghma sono disponibili sulla pagina GitHub.Ulteriori informazioni su PyOghma sono disponibili sulla pagina GitHub.