Re: [f2py] problems with parameters and common blocks
"teichmann.clemens" <teichmann.clemens-gM/[email protected]> Mon, 15 Aug 2011 09:38:20 +0200
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <CACEL+dRiguZOt_ex5fMCXR+D0GPRbatTWR+7Y8wh786a-Ss0dA@mail.gmail.com> |
Hi Pearu,
thanks for that advice, but the actual size of the array is dynamic between
two or more runs. In my example it has the size four, but it could also be
smaller/bigger up to max value. At the moment I'm trying to append dummy
values to the arrays and check the internal computation. If this doesn't
work, i need to change the size of the arrays in the modul (after it was
wrapped) or dynamic wrap the fortran program, which could be really hard.
Hi Ben,
A little example to demonstrate my problem.
this is my common.f
integer someCount
integer maxg
parameter (maxg = 22)
real*8 c(maxg)
common /asd/
* c,
* someCount
and the subroutine
subroutine foo()
include 'common.f'
integer sum
sum = 0
do 111 i = 1,someCount
sum = sum + c(i)
111 continue
return
end
the variable "someCount" and the array "c" is set in the python program.
someCount can now have e.g. the value four, because there are just four
elements to compute. Because of the parameter maxg, the modul wants a list
with exact 22 entries to set the array "c"
greetings,
Clemens
2011/8/15 Pearu Peterson <[email protected]>
> Hi,
>
> On 08/15/2011 09:30 AM, teichmann.clemens wrote:
> > Hello,
> >
> > I'm developing a python interface for an xml data set and an old fortran
> > program (xml -> python -> fortran). Because the main computation
> > subroutine needs many variables, the values are written to variables in
> > common-blocks. In this common blocks are also arrays that have the size
> > of previously given parameters. These parameters are just maximum values
> > (e.g. a maximum amount of sth to compute). So an arrays is initiated
> > with the size 20 even though there were just the first four entries set.
> > In the subroutine, e.g. for-loops just iterate over those four entries
> > using a previously given counter. My problem is that f2py just know the
> > max value (which makes sense) and so if i handover a python list with
> > just those four values, there is an system error:
> > SystemError: error return without exception set
> > 0-th dimension must be fixed to 22 but got 4
> >
> > Is there any possibilty to either change the parameters before the modul
> > is implemented or change the size of the arrays? I thought of using
> > dummy entries for the python lists, but this isn't my desired solution.
>
> If the size of the array is always fixed to 4 for the user then you
> could wrap your fortran programs in three steps:
> 1) Generate signature file:
> f2py foo.f -h foo.pyf
> 2) Edit foo.pyf by replacing 22 with 4 in all relevant places (the
> dimension specifications of the common block array)
> 3) Build extension module using the signature file as input:
> f2py -c foo.pyf foo.f
>
> HTH,
> Pearu
>
> _______________________________________________
> f2py-users mailing list
> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
> http://cens.ioc.ee/mailman/listinfo/f2py-users
>
_______________________________________________
f2py-users mailing list
f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
http://cens.ioc.ee/mailman/listinfo/f2py-users