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がカレントディレクトリにある前提で説明しています。ファイルの格納場所が異なる場合は、正しいパスを指定する必要があります。
お役に立てれば幸いです!