
Hi All, I sent a couple of messages to f2py mailing list, but it seems like my problem has no simple solution so I thought to ask for some suggestions here. Basically, I read some huge unformatted binary files which contain time-step data from a reservoir simulation. I don't know the dimensions (i.e., lengths) of the vectors I am going to read, and I find out this information only when I start reading the file. So, I thought it would be nice to do something like: 1) Declare outputVector as allocatable; 2) Start reading the file; 3) Find the outputVector dimension and allocate it; 4) Read the data in the outputVector; 5) Return this outputVector. It works when I compile it and build it in Fortran as an executable (defining a "main" program in my f90 module), but it bombs when I try to use it from Python with the error: C:\Documents and Settings\gavana\Desktop\ECLIPSEReader>prova.py Traceback (most recent call last): File "C:\Documents and Settings\gavana\Desktop\ECLIPSEReader\prova.py", line 3, in <module> inteHead, propertyNames, propertyTypes, propertyNumbers = ECLIPSEReader.init.readinspec("OPT_INJ.INSPEC") ValueError: failed to create intent(cache|hide)|optional array-- must have defined dimensions but got (-1,) So, I have tried with a suggestion given in the f2py mailing list, and I found out that this routine works: MODULE DUMMY IMPLICIT NONE ! Ok, so I want an allocatable array as output real(8), allocatable :: realOutput(:) CONTAINS subroutine AllocateDummy(dummyInput) implicit none save ! dummyInput is *not* used, it's here just as ! an example integer, intent(in) :: dummyInput ! Allocate and build the output array allocate(realOutput(10)) realOutput(1:10) = 0.0 realOutput(3) = 3.0 realOutput(7) = 7.0 deallocate(realOutput) return end subroutine AllocateDummy END MODULE DUMMY But this one doesn't work: MODULE DUMMY IMPLICIT NONE ! Ok, so I want an allocatable array as output real(8), allocatable :: realOutput(:) integer, allocatable :: inteOutput(:) CONTAINS subroutine AllocateDummy(dummyInput) implicit none save ! dummyInput is *not* used, it's here just as ! an example integer, intent(in) :: dummyInput ! Allocate and build the output array allocate(realOutput(10)) allocate(inteOutput(20)) realOutput(1:10) = 0.0 realOutput(3) = 3.0 realOutput(7) = 7.0 inteOutput(10) = 2 deallocate(realOutput) deallocate(inteOutput) return end subroutine AllocateDummy END MODULE DUMMY The difference between the 2 scripts, is just that in the second one I want 2 allocatable arrays instead of 1. When I compile it with f2py, I get this warning from getarrdims: Building modules... Building module "dummy"... Constructing F90 module support for "dummy"... Variables: realoutput inteoutput getarrdims:warning: assumed shape array, using 0 instead of ':' getarrdims:warning: assumed shape array, using 0 instead of ':' Constructing wrapper function "dummy.allocatedummy"... allocatedummy(dummyinput) Which is not present if I compile script number 1. Actually, if I run script 2, I can't access anymore the 2 variables realoutput and inteoutput (they are not there), while with script 1 I can easily access realoutput by writing dummy.dummy.realoutput. I can't actually see any big difference between the 2 scripts... am I missing something? This is Windows XP, Python 2.5, numpy 1.0.3.1, Compaq Visual Fortran 6.6, MS Visual Studio .NET 2003. Thank you for all your suggestions, I am at loss. Andrea. "Imagination Is The Only Weapon In The War Against Reality." http://xoomer.alice.it/infinity77/