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.