在Ubuntu中,Fortran代碼可以通過多種方式與Python交互。以下是一些常見的方法:
使用接口定義語言(IDL)如f2py
,它是NumPy的一部分,可以用來創建Python可以調用的Fortran函數。
使用C語言作為中介,編寫Fortran和Python都可以調用的C代碼。
使用ctypes
或cffi
庫直接從Python調用Fortran編譯后的共享庫。
使用subprocess
模塊在Python中調用Fortran編譯后的可執行文件。
下面是使用f2py
的一個簡單示例:
首先,確保你已經安裝了NumPy和Fortran編譯器(如gfortran)。
sudo apt-get update
sudo apt-get install python3-numpy gfortran
假設你有一個簡單的Fortran函數,保存在example.f90
文件中:
! example.f90
subroutine add(a, b, c) bind(c, name="add")
use, intrinsic :: iso_c_binding
real(c_double), intent(in) :: a, b
real(c_double), intent(out) :: c
c = a + b
end subroutine add
使用f2py
生成Python接口:
f2py -c -m example example.f90
這將會生成一個名為example.so
的共享庫文件和一個名為example.py
的Python模塊文件。
現在,你可以在Python中導入并使用這個模塊:
import example
a = 2.0
b = 3.0
c = example.add(a, b)
print(f"The sum of {a} and is {c}")
如果你想使用C語言作為中介,你需要編寫C頭文件來聲明Fortran函數,并使用C編譯器編譯Fortran代碼和C代碼生成共享庫。然后,你可以使用Python的ctypes
或cffi
庫來加載和調用這個共享庫中的函數。
使用ctypes
的示例:
from ctypes import cdll
# 加載共享庫
lib = cdll.LoadLibrary('./example.so')
# 設置函數參數和返回類型
lib.add.argtypes = [ctypes.c_double, ctypes.c_double]
lib.add.restype = ctypes.c_double
# 調用函數
a = 2.0
b = 3.0
c = lib.add(a, b)
print(f"The sum of {a} and is {c}")
這些方法中,f2py
是最簡單直接的方式,特別是當你的Fortran代碼主要是數值計算時。如果你需要更復雜的交互或者Fortran代碼中包含了一些特殊的特性,可能需要考慮其他方法。