要在Python中調用Fortran動態庫,可以使用ctypes
庫。下面是一個簡單的示例:
首先,編寫Fortran代碼并將其編譯為動態庫。假設我們有一個名為mylib.f90
的Fortran源文件,其中包含一個名為myfunc
的函數:
! 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
的動態庫文件。
然后,在Python中使用ctypes
庫加載并調用這個動態庫。例如:
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
位于當前目錄下。如果文件位于不同的位置,需要提供正確的路徑。
希望對你有幫助!