[SciPy-dev] f2py + f90 file
Pearu Peterson
pearu@cens.ioc...
Tue Feb 26 04:16:59 CST 2008
On Tue, February 26, 2008 12:01 pm, dmitrey wrote:
> I have seen the pyf-files appearing from time to time, but now they are
> absent (in the directory where I have used f2py), and do not appear
> after f2py using.
>
> As for commands, I have used
> f2py -c -m bvls bvls.f
> and
> f2py -c -m bvls bvls.f90 --fcompiler=gnu95
Ok, thanks for the info. In general, it is recommended to use
a modified .pyf when wrapping Fortran functions with longish
argument list that may contain output-type arguments.
See f2py users guide for more information.
Below follows the content of a .pyf file that I have modified to
meet the docs of bvls.f (there are some room for improvements).
Then I used the following command line
f2py -c bvls.pyf bvls.f
to build the bvls extension module. In test_bvls.py file I changed
the bvls.bvls call to
xf,w,istate,loopa = bvls.bvls(a,b,bl,bu)
And, most importantly, set inf=100. Now I get the correct results:
using bvls.f
Type: float32 ;
xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'>
Type: float64 ;
xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'>
Type: float128 ;
xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'>
Btw, I believe that your approach of not using .pyf file
would also worked when not using inf as an bound parameter
- obviosly the underlying Fortran code is not designed
to handle float infinities.
HTH,
Pearu
! -*- f90 -*-
! Note: the context of this file is case sensitive.
!FILE: bvls.pyf
python module bvls ! in
interface ! in :bvls
subroutine bvls(key,m,n,a,b,bl,bu,x,w,act,zz,istate,loopa) ! in
:bvls:bvls.f
integer :: key = 0
integer optional,check(shape(a,0)==m),depend(a) :: m=shape(a,0)
integer optional,check(shape(a,1)==n),depend(a) :: n=shape(a,1)
double precision dimension(m,n) :: a
double precision dimension(m),depend(m) :: b
double precision dimension(n),depend(n) :: bl
double precision dimension(n),depend(n) :: bu
double precision dimension(n),depend(n),intent(out) :: x
double precision dimension(n),depend(n),intent(out) :: w
double precision dimension(m,m + 2),depend(m), intent(cache),
optional :: act
double precision dimension(m),depend(m), intent(cache),
optional :: zz
integer dimension(n + 1),depend(n),intent(out) :: istate
integer intent(out) :: loopa
end subroutine bvls
end interface
end python module bvls
! This file was auto-generated with f2py (version:2_3744).
! See http://cens.ioc.ee/projects/f2py2e/
More information about the Scipy-dev
mailing list