-1

fortran コードを power station から fortran コンパイラ (2003) に移植する際に注意する必要がある条件は何ですか?

私が観察したのは、発電所ではすべての変数がグローバル変数として扱われることです(ローカル変数も)。intel fortran(2003) のように、ローカルとグローバルに別々のスコープがあります。したがって、すべてのローカル変数をグローバルにする必要があります。Fortran 2003 ですべてのローカル変数をグローバルにする (プロパティからの) オプションはありますか。私のコードには何百もの変数があるためです。すべてのローカル変数をグローバルに割り当てる代わりに (COMMON ブロックを意味します)、誰かがそれに対する良い解決策を提案できますか?

これとは別に、powerstation から intel fortran コンパイラにコードを移植する際に、他の問題に対処する必要がありますか (11/2003)?

4

2 に答える 2

0

Fortran コードを Power Station から Fortran コンパイラ (2003) に移植する際に注意する必要がある条件は何ですか?

Fortran Powerstation は単なるコンパイラです。Intel の Visual Fortran も同様です。
Fortranは言語ですが。上記の両方に非標準のベンダー拡張機能がいくつかありましたが、標準に固執している限り、移植に問題はありません (fortran77 標準コンパイラは、今日の最新のコンパイラでエラーなしでコンパイルする必要があります)。

したがって、問題は、非標準の MS 固有のものを使用した場合にのみ発生します。実際のコードを見ない限り、誰もあなたを助けることはできません。

私が観察したのは、発電所ではすべての変数がグローバル変数として扱われることです(ローカル変数も)。intel fortran(2003) のように、ローカルとグローバルに別々のスコープがあります。したがって、すべてのローカル変数をグローバルにする必要があります。

うーん、いいえ。つまり、Fortran には "グローバル" 変数と "ローカル" 変数がある (そのように呼び出されるわけではありませんが) と言えますが、これらは両方のコンパイラで正しく処理されることを保証します。私は両方のFPSをごく最近使用しました(まだどこかにインストールしているかもしれません)が、本来あるべきように扱われています。

Fortran 2003 ですべてのローカル変数をグローバルにする (プロパティからの) オプションはありますか。私のコードには何百もの変数があるためです。すべてのローカル変数をグローバルに割り当てる代わりに (COMMON ブロックを意味します)、誰かがそれに対する良い解決策を提案できますか?

個人的には、可能であれば、COMMON ブロックの使用は避けたいと思います。それらは素晴らしいものですが、ほとんどの状況では避けることができます。

これとは別に、powerstation から intel fortran コンパイラにコードを移植する際に、他の問題に対処する必要がありますか (11/2003)?

ライブラリとモジュールの名前変更。

Intel の一連のコンパイラは MS の子孫であるため、実際には「自然な」方法です。ただし、実際のデータを見ないと、このように推測して一般的なアドバイスを与えることは困難です。


ps いくつかの「一般的なアドバイス」は、 Intel のソフトウェア フォーラムで見つけることができます。他の多くのユーザーも同様です。彼らは主に CVF から IVF への移行に関心がありますが、時々 FPS ユーザーを見つけることができると思います. 繰り返しますが、fortran は非常に標準化された言語です。そのため、非常にポータブルです。あるコンパイラから別のコンパイラにジャンプすることは、すでに述べたことを考慮に入れると、困難をもたらすべきではありません。

于 2010-05-20T16:08:57.017 に答える
0

私はこれら 2 つのコンパイラを具体的に知りませんが、すべての変数を共通ブロックに配置する必要があるとしたら、非常に奇妙です。すべての変数がグローバルであるという証拠は何ですか? 古いコンパイラと新しいコンパイラのサブプログラム (サブルーチンと関数) のローカル変数で考えられる問題は、サブプログラムの呼び出し間で変数の値が保持されるかどうかです。Fortran 標準は、変数が「保存」属性で宣言されている場合にのみ、この動作を保証します。一部の古いコンパイラでは、「保存」が使用されているかどうかに関係なく、すべての変数が永続的 (静的メモリ) になっていました。プログラマが「保存」を省略した場合、古いプログラムが新しいコンパイラに移植されると、これによりバグが発生する可能性があります。多くの新しいコンパイラは、すべての変数を永続化するためのコンパイル オプションを提供します (たとえば、/Qsave を最新のインテル Fortran コンパイラーで保存)。または、すべてのサブプログラムに「保存」を追加できます。変数を指定せずに「保存」すると、すべての変数が永続化されます。

于 2009-10-20T15:05:19.990 に答える