Re: [f2py] "natural" Fortran calling conventions?
Pearu Peterson <[email protected]>
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
Thomas Breuel wrote: >> You don't have to write a whole wrapper to do this, you can use the >> commenting method: >> >> subroutine f2py_trsps_f(n,m,l,h) >> !f2py intent(c) h >> implicit none >> integer :: n,m,l >> real*8 :: h(n,m,l) >> print*,h(1:8,1,1) >> return >> end subroutine f2py_trsps_f > > OK, I tried this and it isn't working for me. intent(c) seems to > instruct Python to pass the data in C order, but Fortran doesn't seem > to know that, so the elements end up in the wrong order. Could you send a simple example demonstrating the problem? > Furthermore, f2py seems to generate some kind of array bounds checking > code so that I can't interchange the array bounds in the Fortran code. > intent(cache) also isn't doing the trick. In case it would help, you can disable checks by specifying `check()` for the corresponding variable: !f2py check() h > Even if they did, the meaning of intent(c) and intent(cache) when used > in this way could change any release (and likely will once f2py > supports new Fortran arrays). > > Altogether, I still think f2py should get an "intent(natural)"; with > that, a C array declared as: > > float a[17][99][3]; > > would get passed to Fortran as: > > subroutine f(a) > !f2py intent(natural) a > real, intent(in) :: a(3,99,17) > ... > end subroutine f > > This would let me write natural, efficient Fortran loops that > correspond to the natural, efficient C loops, and it would mean that > there is no cost in calling from Python to Fortran and back. I'll keep this in mind when I get a chance to work with f2py.. Pearu