たくさん検索した後、質問を投稿することにしました。
いくつかの配列 (1D および 2D) を IDL から fortran ルーチンに渡す必要があります (私は「現代の fortran」プログラマーです)。IDL は列優先の言語であり、fortran サブルーチンを呼び出す前にすべての配列を割り当て済みです。
問題は、IDL が C 関数に何でも渡すことができることですが、配列を fortran に渡す非標準的な方法が実行可能です (例: http://132.248.1.102/~morisset/idl_cours/IDL/fortran.htm
)。配列と構造体のすべての引数は、IDL 関数 CALL_EXTERNAL ( http://www.exelisvis.com/docs/CALL_EXTERNAL.html )を使用して参照によって渡されます。
ISO_C_BINDINGS を使用して 1D および 2D 配列を処理する fortran ラッパーを探しています。私の fortran サブルーチンには、次のものと同じインターフェイスがあります (数学は少し複雑です)。
MODULE test
IMPLICIT NONE
CONTAINS
PURE SUBROUTINE fortran_sub_array(x1a,x2a,ya,x1,x2,y_out)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x1a,x2a, x1,x2
REAL, DIMENSION(:,:), INTENT(IN) :: ya
REAL, DIMENSION(:,:), INTENT(INOUT) :: y_out
INTEGER :: dim1, dim2, ii, jj
dim1 = size(y_out,1)
dim2 = size(y_out,2)
do jj=1, dim2
do ii=1, dim1
y_out(ii,jj)= 0. !actually some functions...
enddo
enddo
END SUBROUTINE
ENDMODULE
多くの良い答えを見つけましたが、2D 配列を渡す標準的な方法を探しています。y_out 配列を割り当てたり割り当て解除したりする必要はなく、値を入力するだけです。配列の次元に関するすべてのチェックは、fortran_sub_array を呼び出す前に IDL で既に行われています。