f2py внешняя функция всегда возвращает ноль - PullRequest
0 голосов
/ 01 декабря 2018

Мне нужно сделать привязку 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 в Фортране?У меня проблема с моим компилятором?

1 Ответ

0 голосов
/ 01 декабря 2018

Я обнаружил проблему ... Кажется, что Фортран переводит число с плавающей точкой Python 2. в 0. из-за требуемой точности в 8 байтов (почему?).В любом случае, изменение real*8 на real в приведенном выше коде решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...