[SciPy-User] Fwd: f2py segfault
George Nurser
gnurser at googlemail.com
Sun Jan 24 06:56:27 EST 2010
Juan,
If I replace I32 with 4 and R64 with 8 in sub0 your code works OK for me.
This is with gfortran 4.3.3, python 2.5.2 and numpy v 1.4.0
--George.
2010/1/18 Juan <fiolj at yahoo.com>:
> Hi, thanks for the advice. I did not notice that the integer division could be a
> source for trouble. Now I changed all the routines. However, I still have the
> same segmentation fault.
>
>
> debug-capi:Python C/API function
> mymod.sub0(state,ndim=shape(state,0),ntrajectories=shape(state,1))
> debug-capi:double
> state=:inoutput,required,array,dims(ndim|ndim,ntrajectories|ntrajectories)
> debug-capi:int ndim=shape(state,0):input,optional,scalar
> debug-capi:ndim=24
> debug-capi:Checking `shape(state,0)==ndim'
> debug-capi:int ntrajectories=shape(state,1):input,optional,scalar
> debug-capi:ntrajectories=100
> debug-capi:Checking `shape(state,1)==ntrajectories'
> debug-capi:Fortran subroutine `sub0(state,&ndim,&ntrajectories)'
> debug-capi:ndim=24
> debug-capi:ntrajectories=100
> debug-capi:Building return value.
> debug-capi:Python C/API function mymod.sub0: successful.
> debug-capi:Freeing memory.
> debug-capi:Python C/API function
> mymod.sub1(state,d_i,d_f,ndim=shape(state,0),ntrajectories=shape(state,1))
> debug-capi:double
> state=:inoutput,required,array,dims(ndim|ndim,ntrajectories|ntrajectories)
> Segmentation fault
>
> The working sub1 has two other arguments d_i and d_f which are real scalars, the
> full signatures are:
>
> subroutine sub0(state, Ndim, Ntrajectories)
> integer(I32), intent(IN) :: Ndim
> integer(I32), intent(IN) :: Ntrajectories
> real(R64), intent(INOUT), dimension(Ndim,Ntrajectories) :: state
> ...
> end subroutine sub0
>
> subroutine sub1(state,d_i,d_f, Ndim,Ntrajectories)
> integer(4), intent(IN) :: Ndim
> integer(4), intent(IN) :: Ntrajectories
> real(8), intent(INOUT), dimension(Ndim, Ntrajectories) :: state
> real(8), intent(IN) :: d_i
> real(8), intent(IN) :: d_f
> print *, shape(state), Ndim, Ntrajectories
> ...
> end subroutine sub1
>
> and I am calling from my script as:
>
> import mymod
> Ndim=24
> Ntrajectories=10
> di=0., df=10.
> r= np.zeros((Ndim,Ntrajectories),dtype=np.float64, order='Fortran')
>
> mymod.sub0(r)
> mymod.sub1(r, di, df)
>
> As it can be seen from the debug output, f2py is checking the arguments for sub0
> but it segfault before checking the args in sub1 (with no very informative
> messages).
>
> It may well be a problem related to theworkings of the routines but they work
> when I use them in tests on pure fortran code. Additionally I get a very similar
> error message if I call sub0 (mymod.sub0(r)) instead of sub1 (mymod.sub1(r, di,
> df)) the second time in the python script.
>
> Any ideas? Thanks again. Juan
>
>
> -------- Original Message --------
> Subject: f2py segfault
> Date: Sun, 17 Jan 2010 15:28:23 -0300
> From: Juan <fiolj at yahoo.com>
> To: scipy-user at scipy.org
>
> Hi, I don't know if this is the right place (if it is not, please point me in
> the right direction).
> I am using f2py with some own programs and I am going insane with a segmentation
> fault. It is probably a problem in my code but I'd like to know if someone has
> any hint
> to give me since I've been trying different things for two days already.
>
> I've got a few routines in fortran with in/out arrays. When I call one of the
> routines it works well. The second routine I call crashes the program. I've been
> changing routines and it seems that it does not matter with routines I use.
>
> Basically, the fortran routines have the signature:
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
More information about the SciPy-User
mailing list