细分错误:11-运行用Python包装的fortran

时间:2018-07-13 10:52:34

标签: python fortran gfortran f2py fortran95

我是Fortran的新手,我正在尝试使用f2py在python内运行fortran。当fortran函数将输出作为单个值给出时,我很幸运。但是,当我修改fortran函数以给出一个数组时,我遇到了分段错误。
有人可以帮我吗? 这是代码:

Fortran函数:在名为“ fortfunc.f95”的文件中:

function fut(x,n) 
implicit none
real, intent(in) :: x
integer, intent(in) :: n
real, dimension(2) :: fut

! My aim is to return an array fut which has 2 elements in it

fut(1)=x*n
fut(2)=x*n*100


end function fut

然后我使用f2py编译要在python中使用的fortran函数:

f2py -c -m func fortfunc.f95 

此处func是要在python中导入的模块的名称

Python代码:(非常简单)

import func # func is the name of module which contains function fut
x=20
n=20
res=func.fut(x,n)
print('answer is ',res)

我希望得到一个包含2个称为'res'的元素的数组,但我却得到了     “细分错误:11”

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:2)

如果使用子例程,则可以在调用函数之前创建return数组。在这种情况下,您的Python脚本将如下所示

import func
import numpy as np

res = np.zeros(2)
x = 20
n = 20
func.fut(res, x, n)

print("answer is", res)

在Fortran代码中,您可以创建一个子例程。请注意,我将类型替换为double precision,因为Fortran real默认是单精度浮点数,而Python使用双精度。

subroutine fut(a,x,n) 
    implicit none
    double precision, intent(in) :: x
    integer, intent(in) :: n
    double precision, intent(inout), dimension(2) :: a 

    ! My aim is to return an array fut which has 2 elements in it
    a(1) = x*n
    a(2) = x*n*100
end subroutine fut