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.47 中影响了我,而不是在 4.8 中)。出于某种原因,重载 .EQ。不会重载 == 反之亦然(如果您查看 domain1D 的实现,它肯定会重载 .EQ。然后 == 会出现在代码中的其他位置)。我通过确保 .EQ 解决了这个问题。或 == 始终使用。

据我所知,.EQ。和 == 应该是等价的(我没有仔细研究标准),这就是为什么 ifort(在我的例子中是 SGI Fortran 编译器)没有遇到这个问题的原因。

于 2013-07-03T14:16:18.737 回答