2

ここで入手可能な球体でNavier-Stokesを解決するプロジェクトをコンパイルしようとしていました: https://fms.gfdl.noaa.gov/gf/

使用されるデフォルトのコンパイラは ifort であり、gfortran を使用したかったのは、それを使用したい人が最終的に利用できるようにしたいからです。

コードのいくつかのポイントで、次のようなステートメントがあります

if (x == y)   

ここで、x と y は両方とも、整数、実数、およびポインターを含む派生型 (domain1d/2d と呼ばれます) です。gfortran は、比較は非数値と終了の間であると不平を言います。

その後、ifort の試用版をダウンロードしたところ、問題なくコンパイルされました。

それで、これが型/構造体の各メンバーの実際の比較に対するある種の ifort の省略形なのか (C の用語の方が快適です!)、それとも基本的な何かが欠けているのか、fortran に慣れていないのか知りたいと思いました。

派生型を比較す​​ることはあまり意味がないことは理解していますが、ここでは、両方が同じ情報を保持しているかどうかを単純にチェックしているように見えます。

ありがとう、ジョイ

4

1 に答える 1

1

リチャード W は正しいです。NOAA の大気コードで同様の問題が発生しました。これは古いバージョンの GCC のバグです (4.8 ではなく 4.47 で影響を受けました)。何らかの理由で、.EQ をオーバーロードします。は == をオーバーロードしませ(domain1D の実装を見ると、間違いなく .EQ. がオーバーロードされ、コードの別の場所に == が表示されます)。.EQ. または == 全体で使用されています。

私の知る限り、.EQ. と == は同等である必要があります (私は標準をそれほど詳しく見ていません)。これが、ifort (および私の場合は SGI Fortran コンパイラ) がこの問題に遭遇しなかった理由です。

于 2013-07-03T14:16:18.737 に答える