Python and Fortran code
Travis Oliphant
olipt at mayo.edu
Thu Jul 8 09:28:58 EDT 1999
More information about the Python-list mailing list
Thu Jul 8 09:28:58 EDT 1999
- Previous message (by thread): Python and Fortran code
- Next message (by thread): Python and Fortran code
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> Hi! > I have a quetion on using python to do some simple processing on > some data I pre-process with some Fortran code. I wanted to be able to call > this subroutine from within python, as it is already "tried and tested" and > optimized. Basically, my subroutine looks like this: > > subroutine ex1(exdata) > dimension exdata(256,200) > print*,'Doing some processing in FORTRAN' > C We said we were doing some processing, so we might as well do it :) > C Processing of exdata > return > end > > This subroutine would need to get input from the user and would also > need to print stuff out for the user to see several parameters as the > software runs. I'd like to pass exdata as a Python object (NumPy array > object), and then recover it with the results. I wonder if I could somehow > do that compiling this subroutine as an object file and then calling it from > python (not that i know how to do it, but with scilab, it works :D). I don't know of any tool to call this routine "automatically" like in scilab. Such a tool would be possible and wouldn't be difficult to get "most of the way" but would be a bear to make work in all cases. Awhile ago, I heard someone was working on something like that. For now there are two options I know of. (1) Mess around with dlmodule.c which is "an experimental device to call arbitrary C functions in arbitrary shared libraries." On linux with g77 your function would be called ex1_ and you would pass it a Python string (which is a sequence of bytes). I don't know much more about this option. (2) Do what I did to construct multipack and other modules which link to Fortran code: Write an extension module --- reference the documentation. Briefly this involves writing two subroutines and compile them as a Python module: The first is named initxxxxx and is what Python runs when you say import xxxxx. The second is a function that takes two Python objects. This is the function that will be run when you call the function in Python. In here you get the NumPy array and pass a pointer to the data of the array to ex1_ (remember the "_" on GNU/linux), then return. If you need more help for option (2) just email. Option (1) I know less about but would be interested to hear how that works. Best, Travis
- Previous message (by thread): Python and Fortran code
- Next message (by thread): Python and Fortran code
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list