使用 F2py 在 Python 和 Fortran 之间传递变量的问题

问题描述 投票:0回答:1

我一直在尝试使用 f2py 从 python 调用一个简单的 Fortran 子例程,但没有成功。 Fortran 子例程仅将 python 代码中定义的两个数字相加。 Fortran 代码是:

C
      SUBROUTINE TESTLIB(A,B,C)
C
      REAL, intent (in) :: A, B
      REAL, intent (out) :: C
      C = A + B
      END SUBROUTINE TESTLIB  

Python:

import numpy as np
import testlib2

A = 3
B = 2
C = testlib2.testlib(A, B)
print("C = ", C)
 

我从命令行创建了 testlib2.pyd 文件

python -m numpy.f2py -c -m testlib2 testlib2.f

然后将

testlib2.pyd
文件放置在与python文件(testlib.py)相同的目录中。我必须安装 meson、ninja、cmake、charset-normalizer 和 pkgconfig 库才能使 F2py 与 Python 3.12 配合使用。

当我运行 python 代码 testlib.py (Spyder 5.5) 时,我收到以下错误:

  File c:\users\bcn\documents\hps\hps fortran\testlib.py:6
    C = testlib2.testlib(A, B)

TypeError: testlib2.testlib() missing required argument 'c' (pos 3).

对 Fortran 子例程的调用似乎需要定义 C 变量,但已被定义为“out”变量。不知道为什么要这样做。我见过的例子表明 Fortran 子例程需要列出 out 变量。使用 Windows 11 和 Python 3.12。任何帮助将不胜感激。谢谢。

python fortran f2py
1个回答
0
投票

你可以尝试将你的Python代码更改为,

import numpy as np
import testlib2

A = 3
B = 2
testlib2.testlib(A, B, C)
print("C = ", C)

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.