Inicio Ejemplos Capturas de pantalla Manual de usuario Logotipo de Bluesky YouTube
OghmaNano Simule células solares orgánicas/de perovskita, OFETs y OLEDs DESCARGAR

PyOghma

Se puede llegar bastante lejos manipulando directamente desde Python los archivos de configuración JSON de OghmaNano (editando sim.json en disco y ejecutando oghma_core.exe). Sin embargo, si desea ejecutar muchas simulaciones en paralelo para generar grandes conjuntos de datos, rápidamente necesita una capa de orquestación: crear directorios de ejecución, clonar archivos de entrada, lanzar múltiples instancias del solver y gestionar una cola de trabajos entre núcleos de CPU.

Además, la manipulación directa de JSON en Python no siempre resulta cómoda: es fácil cometer errores y el código puede volverse verboso en comparación con una interfaz de más alto nivel que conozca los objetos comunes de simulación. Por esta razón, Cai Williams creó una API llamada PyOghma que puede utilizarse para manipular archivos JSON de OghmaNano y ejecutar simulaciones. PyOghma es un proyecto independiente, por lo que debe dirigir sus preguntas, informes de errores y solicitudes de funciones al autor de PyOghma.

PyOghma está disponible en GitHub y también a través de pip:

python -m pip install PyOghma

A continuación se muestra un ejemplo de uso de 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()

En este ejemplo, PyOghma se importa como po, y se manipula un archivo JSON fuente de OghmaNano cambiando los valores de movilidad, densidad de trampas, tasa de atrapamiento y energía de Urbach. El archivo original se clona con la línea:

Oghma.clone('NewExperiment0')

Luego, al final del código, aparecen las dos líneas siguientes. La primera añade el trabajo a la lista de trabajos de PyOghma y la segunda indica a PyOghma que ejecute todos los trabajos. Si hubiera más de un trabajo, PyOghma ejecutaría múltiples trabajos entre todas las CPU hasta que finalizaran. Si quisiera ejecutar simulaciones con distintos valores de movilidad, añadiría cada simulación a la lista de trabajos, y luego llamaría una vez a \(run\_jobs\) para ejecutar los trabajos eficientemente entre todos los núcleos.

Oghma.add_job(experiment_name)
Oghma.run_jobs()

Hay más información sobre PyOghma disponible en la página de GitHub.