Qual pacote devo usar para agrupar o Modern Fortran Code com Python?

27

Eu conheço e usei o f2py2e para quebrar algum código antigo do Fortran 77, mas meu entendimento é que ele não funciona com o código Fortran 95 mais recente. Eu pesquisei o que eu deveria usar e me deparei com o fwrap e o G3 f2py, nenhum dos quais parece dar qualquer explicação sobre seu estado atual ou como usá-los (além do uso básico).

Também vi que a versão do f2py tem a opção de usar o f2py de terceira geração, mas é comentada como não funcional. Diante disso, não sei qual projeto devo usar para um projeto uni. Qual devo usar para o novo código?

PS: Esta é basicamente a mesma pergunta que /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python , foi sugerido que perguntar aqui pode fornecer respostas melhores .

James Tocknell
fonte
2
"Fortran moderno"
meawoppl 31/07/2015

Respostas:

19

Você pode usar o módulo ctypes interno do Python , conforme descrito em fortran90.org . É bem simples e não requer nenhuma dependência externa. Além disso, o auxiliar do tipo ndpointer arg é muito útil.

Matthew Emmett
fonte
8
Está certo. Ou use Cython em vez de ctypes, conforme descrito na página fortran90.org.
Ondřej Čertík
@ OndřejČertík, ótimo site! Há poucos recursos valiosos sobre Fortran moderna na Internet, mas este é definitivamente um dos meus favoritos, juntamente com fortranwiki.org
astrojuanlu
6

Eu pessoalmente uso o f2py para isso. No entanto, o Fortran que escrevo para o f2py não é realmente o Fortran moderno, mas o F90 de forma livre com módulos. Não uso formas assumidas ou tipos personalizados. Este método ainda funciona muito bem para mim.

Há um recurso que quero compartilhar sobre o uso de C como parte do pacote. O restante desta página também é recomendado.

AlexE
fonte
1
Atualização de 2015: há algum tempo, toda a minha interface Fortran acontece através do Cython e iso_c_binding. Isso permite manter o próprio código do Fortran moderno, expondo apenas o que é realmente necessário para o Cython / C.
AlexEdson #
Atualização de 2016: a opção iso_c_binding está ficando mais fácil agora do que eu posso compilar um arquivo .pyx usando o cythoncomando e reduzindo a sobreposição entre alterar meu código fortran ou python e fazer com que tudo funcione rapidamente.
Cbcoutinho 29/10
5

A documentação do f2py realmente não é tão boa. Estou no processo de mudar meus próprios projetos do f2py para o Cython . Embora o Cython possa ser usado para quebrar o código C, eu achei que ele é mais útil para criar um novo código de alto desempenho. Se sua intenção é escrever um novo código Fortran, envolvê-lo e chamá-lo em Python, eu recomendo que você use o Cython. Dessa forma, você pode escrever código Python e, se houver gargalos de desempenho, transfira-o para o Cython com pequenas modificações.

Leo Uieda
fonte
Então, ao invés de usar o Fortran, use o Cython para os bits de código mais lentos?
James Tocknell
2
Exatamente! Descobri que é muito mais fácil, porque seu código Cython pode interagir com objetos Python e matrizes Numpy naturalmente (sem uma camada extra de conversão). Isso é especialmente útil se você deseja usar suas próprias estruturas de dados. Fazer o Fortran ou o C usar suas classes Python no f2py não é uma tarefa tão simples.
Leo Uieda
3

O f90wrap é construído sobre o f2py e gera automaticamente os wrappers Python para a base de código Fortran subjacente, incluindo o acesso a tipos derivados. Um conjunto de exemplos simples mostra como funciona.

davidovitch
fonte
2

Você pode usar o FortWrap para chegar até a metade do caminho. Isso criará uma interface C ++ para o seu código Fortran, que poderá ser empacotado com SWIG para obter uma interface Python. Fazemos isso em uma base um tanto grande do código Fortran e funciona muito bem (na verdade, o FortWrap foi desenvolvido por um membro da nossa equipe para esse propósito exato).

Barron
fonte
1

fwrapvisa especificamente o Fortran90 / 95 e usa parte da mesma pilha de software que f2py.

MRocklin
fonte
3
A última comprometer com repo GitHub deste projeto foi o final de 2010.
Geoff Oxberry
1
Embora eu concorde que isso é desencorajador, ainda assim tive um sucesso decente. Fora da caixa, é mais funcional do que f2pyna F90. Também possui uma barreira de entrada muito baixa. Fiquei feliz por ter encontrado.
MRocklin
1

f2pysuporta fortran moderno (matrizes em formato assumido e assim por diante), consulte um script de exemplo

Além disso, para experimentos com o código fortran, recomendo a magia do IPython , que é fácil de instalar e muito conveniente (também depende do f2py).

Alleo
fonte