[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