6

Do recent versions of f2py support wrapping array-valued fortran functions? In some ancient documentation this wasn't supported. How about it now?

Let's for example save the following function as func.f95.

function func(x)
    implicit none
    double precision :: x(:),func(size(x))
    integer :: i
    do i=1,size(x)
        func(i) = i*x(i)
    end do
end function

I compile this with f2py --fcompiler=gnu95 -c -m func func.f95

Then let the following python code be test_func.py

import func
from numpy import array

x = array(xrange(1,10),dtype='float64')
print 'x=',x

y = func.func(x)
print 'func(x)=',y

The output from
python test_func.py is

x= [ 1.  2.  3.  4.  5.  6.  7.  8.  9.]
Segmentation fault
1

1 Answer 1

3

The mechanism of f2py turns Fortran subroutines into python functions. It doesn't understand how to turn a Fortran function into a python function. I have found that I need to wrap all Fortran functions with a subroutine, or even better, rewrite them as subroutines.

Sign up to request clarification or add additional context in comments.

2 Comments

Is f2py that powerful? Is it reliable enough that writing the whole fortran codebase in this special way is a fair price?
I've never had problems with reliability, but like I said, it is frustrating. Personally, I only use it for small projects because of the restrictions it imposes. There is another tool, fwrap, that is supposed to be better than f2py, but I haven't tested it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.