Мне нужно сделать привязку Python к коду fortran90, который принимает функцию обратного вызова в качестве одного из своих входных данных.Я попытался следовать примерам с сайта scipy и создал файл helloworld helloworld.f90
следующим образом:
SUBROUTINE helloworld(fun,a,b)
external fun
real*8, intent(in) :: a
real*8, intent(out) :: b
print*, 'Hellow world'
print*, a
b = fun(a)
print*, b
END
Я компилирую это с f2py -c -m hello helloworld.f90
.Компиляция работает без ошибок, но затем код python не работает должным образом: вызовы функций из python всегда возвращают 0 (!?):
In [1]: import hello
In [2]: def fun(x): return x**2
In [3]: hello.helloworld(fun,2.)
Hellow world
2.0000000000000000
0.0000000000000000
Out[3]: 0.0
Кто-то понимает, почему оценивается fun(2.)
до 0
в Фортране?У меня проблема с моим компилятором?