ここで他の誰かのコードを操作します。gfortranで問題なくコンパイルされます。ただし、Portland Groupでは、次のエラーが発生します。
pgf90 -DsysLinux -DcompPGF90 -I/home/cables/GITM/share/Library/src -c -r8 -fast ModUtilities.F90
PGF90-S-0084-Illegal use of symbol mpi_wtime - not public entity of module (ModUtilities.F90: 419)
0 inform, 0 warnings, 1 severes, 0 fatal for sleep
問題のある行は次のようになります。
use ModMpi, ONLY : MPI_wtime
(ここでは明らかに多くのMPIが行われていますが、それがポイントだとは思いません。)そこで、のソースコードでModMpi
あるModMpi.f90に移動します。ここでは、への参照はありませんMPI_WTIME
が、次のように表示されます。
use ModMpiInterfaces
最後に、のソースに移動すると、ModMpiInterface
次の行が見つかります。
public:: mpi_wtime
OK、ModMpi.f90を編集しmpi_wtime
、公開を宣言することで、PGIからコンパイルを取得することができました。しかし、それでも、私は疑問に思います。なぜgfortranは(明らかに)それmpi_wtime
が公開されていると想定したのに、PGIはこれを明示的に伝えなければならなかったのでしょうか。なぜPGIは、元の公開宣言が「使用チェーン」全体に当てはまると想定しないのですか?
どちらか一方の動作がFortran標準に近いと思います。それはどちらでしょうか?