Function 调用fortran函数的f2py子例程
是否可以编写一个Fortran f2py子例程来调用正在调用另一个Fortran函数的Fortran函数? 例如:Function 调用fortran函数的f2py子例程,function,subroutine,f2py,Function,Subroutine,F2py,是否可以编写一个Fortran f2py子例程来调用正在调用另一个Fortran函数的Fortran函数? 例如: subroutine hello(a) ... call newton(b, c) ... end subroutine hello subroutine newton (d,e) ... e=q(d) ... end subroutine newton real function q(x) ... q = h(
subroutine hello(a)
...
call newton(b, c)
...
end subroutine hello
subroutine newton (d,e)
...
e=q(d)
...
end subroutine newton
real function q(x)
...
q = h(x) + h(x-1)
...
end function
real function h(x)
...
end function h
抱歉弄得一团糟。我试过了,但编译时出现错误……我需要从Python调用的唯一子模块是第一个子模块,这要提前感谢。f2py允许将Fortran子例程转换为Python函数。因此,当它试图将Fortran函数转换为python可调用对象时,会引发错误并崩溃。如果要从python调用这些函数,则必须将它们重写为子例程。但是,由于它们只需要从一个Fortran子例程调用,因此不需要这样做 解决方案是使用
contains
将函数包含在子例程中。下面是一个工作示例,使用与上面相同的结构:
潜艇f
可以使用f2py将此文件转换为可调用的python,特别是使用运行命令行中的f2py-c subs.f-m fsubs
中解释的“快速方式”,生成可调用的共享对象,该对象可以通过import fsubs
导入。本模块提供了一些帮助:
help(fsubs)
# Output
Help on module fsubs:
NAME
fsubs
DESCRIPTION
This module 'fsubs' is auto-generated with f2py (version:2).
Functions:
b = hello(a)
e = newton(d)
...
可以看出,fsubs
模块包含两个函数,hello
和newton
,这两个子例程。现在,我们可以使用fsubs从python调用hello
help(fsubs)
# Output
Help on module fsubs:
NAME
fsubs
DESCRIPTION
This module 'fsubs' is auto-generated with f2py (version:2).
Functions:
b = hello(a)
e = newton(d)
...