使用 ifort 和 gfortran 编译 f77 代码时的输出差异



我需要一些指针来解决一个我只能以有限方式描述的问题。我从一位资深科学家那里得到了一个用 f77 编写的代码。我不能在公共论坛上给出所有权问题的代码。它不大(750 行),但给定隐式声明和 gotos 语句,它非常不可读。因此,我无法找出错误的根源。问题是这样的:

当我使用 ifort 编译代码时,它

运行良好并给了我合理的数字,但是当我使用 gfortran 编译它时,它编译得很好,但没有给我正确的答案。该代码是复杂等离子体物理问题的数值根查找器。ifort 编译版本找到根,但 gfortran 编译版本找不到根。

关于如何继续寻找解决方案的任何想法?当我找到问题时,我将更新问题以反映实际问题。

有些事情要调查,不一定按照我会尝试的顺序:

  1. 使用编译器检查编译器能够检查的所有内容,尤其是数组边界(用于运行时置信度)和子例程参数匹配。
  2. 使用未初始化的变量。
  3. 实数、复数和整数变量的种类;编译器(或编译选项)可能默认为不同的种类。
  4. 公共块、等效、入口...其他现已弃用或过时的功能。

最后,也许不是立即调查的问题,而是您应该早点(正确的选择)或稍后(错误的选择)做的事情,努力在所有范围内声明IMPLICIT NONE,并为所有实体编写显式声明。

最新更新