.

Traduzir

domingo, 19 de setembro de 2010

Python e Fortran 77

É muito comum escutar no meio acadêmico que o motivo de não se utilizar o PYTHON é que o mesmo, por ser uma linguagem script é muito lento. Na verdade o que está por traz disso é o fato de que a linguagem dominante na ciência (inclusive no desenvolvimento de modelos que fazem projeção de que as geleiras do Himalaia irão derreter em 2020 ;p ) é FORTRAN 77.



É verdade sim que rodar a discretização de  uma equação diferencial parcial (EDP) em PYTHON é mais lenta. Mas para isso, temos a solução, usar o melhor de dois mundo, com f2py é possível compilar uma função em fortran empacota-la ("wrap") e chama-la em python. Dessa forma, é possível fazer só a discretização da EDP em fortran, na forma de uma função por exemplo, e chama-la em python.

Segue um "Oi Mundo" de como fazer isso.

Primeiro vamos ao código em FORTRAN 77.

c file: oimundo.f
       subroutine oi(a)
       real*8 a
cf2py   real intent(in) a
       write(6,*) 'Oi Mundo! O valor de a e: ',a
       end

Agora vamos empacotar essa função para ser entendida pelo python.

sh> f2py  -c  -m oimundo oimundo.f

O comando -m cria o modulo oimundo já o comando -c compila o arquivo oimundo.f


Feito isso é só rodar o python
sh> python
>>import oimundo
>>oimundo.oi(5)
>> Oi Mundo! O valor de a e: 5.0

2 comentários:

  1. Desculpe a demora na resposta.

    Numpy ajuda muito, mas o desempenho de python com fortran é melhor que python com numpy. Na página do scipy tem um teste de desempenho: http://www.scipy.org/PerformancePython

    Na tabela de desempenho que da página tem a seguinte informação:
    Para uma grade de 500x500 para 100 iterações. A execução com numpy foi de 29.3 segundos, já de python com fortran foi 2,9 segundos.

    ResponderExcluir