Início Exemplos Capturas de ecrã Manual do utilizador Logótipo Bluesky YouTube
OghmaNano Simular células solares orgânicas/Perovskita, OFETs e OLEDs DESCARREGAR

PyOghma

Você pode avançar bastante manipulando diretamente os arquivos de configuração JSON do OghmaNano a partir de Python (editando sim.json no disco e executando oghma_core.exe). Entretanto, se você quiser executar muitas simulações em paralelo para gerar grandes conjuntos de dados, rapidamente precisará de uma camada de orquestração: criar diretórios de execução, clonar arquivos de entrada, iniciar múltiplas instâncias do solver e gerenciar uma fila de trabalhos entre os núcleos de CPU.

Além disso, a manipulação direta de JSON em Python nem sempre é agradável: é fácil cometer erros, e o código pode se tornar verboso em comparação com uma interface de nível mais alto que conhece objetos comuns de simulação. Por esse motivo, Cai Williams criou uma API chamada PyOghma que pode ser usada para manipular arquivos JSON do OghmaNano e executar simulações. PyOghma é um projeto independente, portanto direcione perguntas, relatórios de bugs e solicitações de recursos ao autor do PyOghma.

PyOghma está disponível no GitHub e também via pip:

python -m pip install PyOghma

Um exemplo de uso do PyOghma é dado abaixo [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()

Neste exemplo, PyOghma é importado como po, e um arquivo JSON de origem do OghmaNano é manipulado alterando os valores de mobilidade, densidade de armadilhas, taxa de aprisionamento e energia de Urbach. O arquivo original é clonado com a linha:

Oghma.clone('NewExperiment0')

Em seguida, no final do código, aparecem as duas linhas abaixo. A primeira adiciona o trabalho à lista de trabalhos do PyOghma, e a segunda instrui o PyOghma a executar todos os trabalhos. Se houvesse mais de um trabalho, o PyOghma executaria múltiplos trabalhos em todas as CPUs até que fossem concluídos. Se você quisesse executar simulações com diferentes valores de mobilidade, adicionaria cada simulação à lista de trabalhos e depois chamaria \(run\_jobs\) uma vez para executar os trabalhos em todos os núcleos de forma eficiente.

Oghma.add_job(experiment_name)
Oghma.run_jobs()

Mais informações sobre o PyOghma estão disponíveis na página do GitHub.