Ошибка сегментации: 11 - работает фортран, завернутый в питон
Я новичок в Фортране и пытаюсь запустить фортран внутри питона, используя f2py. Мне повезло, когда функция 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 для компиляции функции fortran для использования в python:
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 ответ
Если вы работаете с подпрограммой, вы можете создать возвращаемый массив перед вызовом функции. В этом случае ваш скрипт Python будет выглядеть следующим образом
import func
import numpy as np
res = np.zeros(2)
x = 20
n = 20
func.fut(res, x, n)
print("answer is", res)
А в коде Фортрана вы можете создать подпрограмму. Обратите внимание, что я заменил тип на double precision
как фортран 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