[SciPy-user] f2py, fortran modules, and dynamic arrays

Josh Lawrence josh.k.lawrence at gmail.com
Tue Jan 13 15:23:24 EST 2009


Hello,

I am wanting to write some code in fortran to perform looping  
calculations on numpy arrays. I would like to accomplish using modules  
in my fortran code. I want to approach the problem in this manner  
because I have numerous arrays that would need to be passed and I  
would prefer not to have a fortran function with 10, 20, or more  
arguments. The following is some code that illustrates what I am  
trying to accomplish.

module foo
   integer :: alen(2), xlen, blen
   complex*16, pointer :: a(:,:), x(:), b(:)
! or complex*16, allocatable :: a(:)
end module foo

subroutine bar
   use foo
   integer :: i, j
   if (associated(a) .and. xlen > 0 .and. alen[0] .eq. alen[1]) then
     blen = xlen
     do i = 0, alen
       b(i) = 0.0
       do j = 0, alen
         b(i) = b(i) + a(i,j) * x(i)
       end do
     end do
   end if
end

Then, if I compile this as FortranMod, I would like to be able to do  
the following in python:

import FortranMod as formod

formod.foo.alen[0] = 2
formod.foo.alen[1] = 2
formod.foo.a = np.array([[1, 2], [3, 4]])
formod.foo.blen = 2
formod.foo.x = np.array([5, 6])

formod.far()

print formod.foo.blen
print formod.foo.b

Now, I do not care if I need to use pointers or allocatable or  
whatever, but I am curious if this is possible to do this type of  
functionality using fortran modules and f2py.

Thanks,

Josh



More information about the SciPy-User mailing list