Pregunta

Necesito envolver un código simplemente FORTRAN90 con F2PY. El módulo fortran "test.f90" es

module util

contains

FUNCTION gasdev(idum)
implicit none
INTEGER(kind=4), intent(inout) :: idum
REAL(kind=8) :: gasdev, ran2
print*,idum
gasdev = ran2(idum)
return
END FUNCTION

FUNCTION ran2(idum)
implicit none
INTEGER(kind=4), intent(inout) :: idum
REAL(kind=8) :: ran2
print*,idum
ran2=2.D0
return
END FUNCTION
end module util

Y luego lo envuelvo con

f2py  -m test -c test.f90

Pero cuando lo importo en Python

In [2]: import test

me impulsó con un error diciendo

ImportError: ./test.so: undefined symbol: ran2_

¿Alguna idea de cómo arreglarlo? Gracias.

¿Fue útil?

Solución

En la función GASDEV declara Ran2 como una función externa. Como entonces, no vincule en ninguna función que importe el módulo fallará.

En su lugar, elimine la Declaración de Ran2 en Gasdev, en cuyo caso la llamada Ran2 usa la interfaz explícita para la función Ran2 en el módulo, y todo funciona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top