PythonでFortranの動的ライブラリを呼び出す方法

ctypesライブラリを使用して、PythonからFortran動的ライブラリを呼び出すことができます。以下に簡単な例を示します。

まず、Fortranコードを書いてそれを動的ライブラリにコンパイルします。myfuncという関数が含まれる、mylib.f90という名前のFortranソースファイルがあると仮定します。

! mylib.f90

subroutine myfunc(a, b, c)
  implicit none
  real*8, intent(in) :: a, b
  real*8, intent(out) :: c
  
  c = a + b
end subroutine myfunc

次に、Fortranコンパイラを使用してソースコードをダイナミックライブラリにコンパイルします。例えば、gfortranコンパイラを使用すれば、次のコマンドを実行できます。

gfortran -shared -o mylib.so mylib.f90

これにより、mylib.soという名前のダイナミックライブラリファイルが生成されます。

ctypesライブラリを使用して、このダイナミックライブラリをPythonでロードして呼び出します。例:

import ctypes

# 加载动态库
mylib = ctypes.CDLL('./mylib.so')

# 声明函数的参数类型
mylib.myfunc.argtypes = (ctypes.c_double, ctypes.c_double, ctypes.POINTER(ctypes.c_double))
mylib.myfunc.restype = None

# 调用函数
a = 3.0
b = 4.0
c = ctypes.c_double()
mylib.myfunc(a, b, ctypes.byref(c))

print(c.value)  # 输出结果:7.0

上で示した例では、最初に ctypes.CDLL 関数で動的ライブラリを読み込んでいます。そして、argtypes と restype の属性を設定することで関数の引数のデータ型や戻り値のデータ型を指定しています。最後に、 ctypes.byref を使用して変数を Fortran 関数に渡したり、value 属性を使用して戻り値を取得したりしています。

上記例では、動的ライブラリファイルmylib.soがカレントディレクトリにある前提で説明しています。ファイルの格納場所が異なる場合は、正しいパスを指定する必要があります。

お役に立てれば幸いです!

bannerAds