在这里使用别人的代码。它用 gfortran 编译得很好。但是,在波特兰集团下,我收到一个错误:
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
mpi_wtime
好的,我可以通过编辑 ModMpi.f90 并声明为公共来从 PGI 获得编译。但是,我仍然想知道:为什么 gfortran 假设(显然)这mpi_wtime
是公开的,但 PGI 必须明确告知这一点?为什么 PGI 不假设原始公开声明在整个“使用链”中都成立?
我认为一种行为或另一种行为更接近 Fortran 标准。那会是哪个?