0

ctypes (Pthyon3.2) を使用して、64 ビット Debian Linux マシン上の共有ライブラリから F90 ルーチンを呼び出しています。F90 ルーチンが型の引数を取る場合、

! We're in fortran (F90) 
subroutine MyFunc(FooF90)   
real(8),intent(in) :: FooF90
! do some stuff...
return

Python から何を渡す必要がありますか? 私の推測では、

# We're in Python3.2
F90func(ctypes.byref(ctypes.c_double(FooPy)))

これは正しいです?Python から real(n) 型の fortran 引数を渡すためのリファレンスを簡単に見つけることができませんでした。

前もって感謝します。

4

1 に答える 1

4

real(8)は標準で定義されていないため、何でも起こりえます (種類番号はselected_real_kindまたはiso_c_bindingまたはで取得する必要がありますiso_fortran_env)。c_double実際には、ほとんどのコンパイラと同等です。これがデフォルトで保持される gfortran を使用している可能性があります。

valuePython インタープリターがデフォルトで引数渡しを想定している場合、問題が発生する可能性があります。ctypesbyref()で関数を検索します。

于 2012-10-15T11:45:25.657 に答える