2

Intelコンパイラでコンパイルするために、いくつかの古いFortranコード(F77だと思います)を作り直しています。この形式の SLATEC ルーチンをいくつか見つけました。

subroutine cffti (n,wsave)

     dimension wsave(1)

     iw1 = n+n+1
     iw2 = iw1+n+n
     call cffti1 (n,wsave(iw1),wsave(iw2))

     return
  end subroutine cffti


 subroutine cffti1 (n,wa,ifac)

     ....
     ....
 end subroutine cffti

Wsave は配列で、最初の部分は浮動小数点数を格納し、2 番目 (iw2 から) は整数を格納します。

すべての変数は暗黙的であるため、wsave(iw2) が ifac に渡されると整数として解釈され、ifac の値は意味を持ちません。

私は混乱しています: どうすればこれらすべてが正しく機能するのでしょうか? どうすればこの問題を克服できますか?

4

2 に答える 2

1

VFの答えを少し詳しく説明します-おそらくcffti1はその整数配列をスクラッチスペースとして使用するため、値が他の場所にアクセスされることはありません。すなわち。等価または転送ステートメントが見つからない (または必要ない) 場合があります。最高レベルのサブルーチンのドキュメントには、おそらく「wsave は 4n+1 と宣言し、最初の 2n の値で結果を返す必要がある」などと書かれています。

その場合、コードを「現代化」するには、ifac 引数を廃止し、サブルーチン内にスクラッチ スペースを割り当てることができます。ただし、コードを詳細に調べずにそのような変更を行うのは気が進まないでしょう。

とは言っても、あなたはどのような「問題」を抱えていますか?過度に積極的な型チェックをオフにする必要があるかもしれません。


編集、ここでドキュメントを見つけましたhttp://www.maths.bris.ac.uk/~marp/slatec/routin-j.htm

 WSAVE   a work array which must be dimensioned at least 4*N+15...

"work array" ->> "scratch space" --> 内容は気にしないでください..

于 2013-04-15T12:39:02.383 に答える