解決策が見つかったようです。 最初に、整数配列がFortranサブルーチンに渡されている場合にのみ、報告されたエラーが発生します。 FortranではINTEGER * 4とREAL * 8として宣言していますが、デフォルトのPython intとfloatを使用すると、整数値と実際の配列(値もそうです)が正しく渡されます。 しかし、整数配列の場合、これは機能しませんでした。 Pythonの整数配列は、np.int32型として宣言(または変換)され、FortranサブルーチンでINTEGER * 4として宣言される必要があります。 私のプロジェクトで働いていた配列宣言/変換のサンプルを以下に示します。
のPython:
import numpy as np
import Fortran_file
#.... some code
# variable "data" is integer 2-D array
data = data.astype(np.int32) # data.astype(int) gives error
data = np.asfortranarray(data)
array1 = np.zeros(5, dtype=np.int32, order='F') # dtype=int gives error
array2 = np.zeros(5, dtype=float, order='F')
ivalue = 2 # conversion to np.int32 is not needed
Fortran_file.Fortran_subroutine(data, ivalue, array1, array2)
のFortran:
SUBROUTINE Fortran_subroutine (matrix, value, array1, array2)
IMPLICIT NONE
INTEGER*4 :: matrix(:,:)
!f2py INTENT(INOUT) :: matrix(:,:)
INTEGER*4 :: value
!f2py INTENT(INOUT) :: value
INTEGER*4 :: array1(5)
!f2py INTENT(INOUT):: array1(5)
REAL*8 :: array2(5)
!f2py INTENT(INOUT) :: array2(5)
は再び、これは64ビットOS上で意味を持っていました。私が32ビットOSを使用したとき、これらのトリックなしですべてが機能しました。
私は他のデータ型を試していません。