添加/删除PRINT语句会更改变量

时间:2015-01-13 10:33:16

标签: fortran heisenbug

我有一些编写fortran代码的经验,但我从未见过这样的东西。

我正在使用大型HPC代码(~10K行),我正在修改子程序。我使用print语句验证一切都已正确完成并在必要时进行调试。当我使用我使用的最后一个PRINT语句运行我的代码时,代码在任何地方都给我实数。一旦我对最后一个PRINT语句发表评论,代码就会给我NaN是我的一些变量。由于我的代码太大,我显然无法在此发布,但我会发布PRINT语句:

PRINT*, "outletBC up1    ", SUM(ABS(up(nptsx,:,:)))

其中up是一些速度数组。

问题:

怎么可能? PRINT语句如何影响任何变量?

1 个答案:

答案 0 :(得分:1)

我认为这表明代码中存在其他一些错误(例如内存损坏)。我不确定你使用的是什么调试标志。但是,请尝试编译标志“-check all”(对于intel fortran编译器)。此标志检查多个可能的错误。有关详细信息,请参阅 https://software.intel.com/sites/default/files/m/f/8/5/8/0/6366-ifort.txt