0

gfortran でコンパイルしたい古い fortan コードに問題があります。

 INTEGER NEQ
 DOUBLE PRECISION RE
 COMMON /DM18J/ RE,NEQ
 CALL FUNC(NEQ,RE)

コードの問題は、RE がサイズ NEQ の配列であると関数が想定していることです。ただし、配列は共通ブロックに由来するため、配列のサイズを事前に指定することはできません。

コードは非常に長いので、モジュール変数に頼らずに yhis を修正したいと考えていました。私が試してみたいことは、共通ブロックを介して取得する代わりに、引数として NEQ を挿入することです。

4

1 に答える 1

1

RE が配列の場合、そのように宣言する必要があります。引数として、サイズが 100 であるとします。

parameter (maxre = 100)
integer neq
double precision re(maxre)
common /dm18j/re, neq

ルーチンを呼び出すときは、関数が操作する必要がある配列のサイズを指定する必要があります。これは必ずしも配列のサイズではありません。配列には 10000 個の要素を含めることができますが、最初の 2 つだけを操作したい場合は、NEQ を 2 に設定してください。

! sanity check
if (neq .gt. maxre) then
    print *, 'increase the size of maxre to at least ', neq
    stop
end if

call func(re, neq)
于 2014-11-15T08:05:17.623 に答える