Calling Fortran from Python
Lenard Lindstrom
len-l at telus.net
Wed Apr 4 23:10:38 EDT 2007
Mangabasi wrote:
> On Apr 4, 5:48 pm, Robert Kern <robert.k... at gmail.com> wrote:
>> Mangabasi wrote:
>>> Would Python 2.5 work with Visual Studio 6.6?
>> No.
>>
>> --
>> Robert Kern
>>
>> "I have come to believe that the whole world is an enigma, a harmless enigma
>> that is made terrible by our own mad attempt to interpret it as though it had
>> an underlying truth."
>> -- Umberto Eco
>
> I will try the GCC then. It is a shame that I could not get calldll
> to work. It was very simple to use. I think I am making a mistake
> with the argument types but not sure.
>
> Thanks for your help, it is greatly appreciated.
>
Did you try ctypes?
>>> from ctypes import *
>>> sample=cdll.sample.sample_
>>> sample.restype=None
>>> sample.argtypes=[POINTER(c_int), POINTER(c_int), POINTER(c_double),
POINTER(c_double)]
>>> e1 = c_int(0)
>>> e2 = c_int(0)
>>> ain = (c_double*3)(2.0, 3.0, 4.0)
>>> aout = (c_double*4)()
>>> sample(e1, e2, ain, aout)
>>> aout[:]
[6.0, 9.0, 8.0, 12.0]
>>> e1.value
0
>>> e2.value
0
I compile the SAMPLE example with mingw g77 3.4.5:
g77 -shared -o sample.dll sample.for
I had to take out the "INTENT(OUT)"s because g77 didn't like them. And
"SAMPLE" became "sample_" in the dll. Also note that argument passing to
Fortran subroutines is strictly pass-by-reference. Thus the ain pointer.
Lenard Lindstrom
More information about the Python-list
mailing list