由于我不知道的原因,写出数组可以解决问题

时间:2019-06-20 15:30:51

标签: fortran gfortran

当我在GNU gfortran编译器中使用FORTRAN 77运行某些程序时,我多次遇到相同的问题,我希望有人能对此有所了解。我想要的值应该是〜1,但它会在程序结尾写出超过10 ^ 100的值。对于我来说,这通常是一个仅限于数组的问题。当我之前在程序的某个阶段写出不正确的值时,不正确的值通常就会消失(在解决问题时不可避免地会发生这种情况。)

我尝试了显式初始化数组,并在程序中尝试了一些数组绑定检查以及一些内部逻辑检查。对我和我的研究主管来说,这个问题似乎是病态的。

      WRITE(*,*)"OK9999", INV,INVV

vs

      WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)

对于变量INV和INVV,前者给出的结果不正确,而后者则正确。这是此问题的“最新”示例,已经影响了我大约一年。

这些行的更大上下文是:

  WRITE(*,*)"AFTER ENERGY",I1STOR(1),I2STOR(1)
  DO 167 NP=1!,NV

    IF(I1STOR(NP).NE.0) THEN
      INV = I1STOR(NP)
      INVV = I2STOR(NP)
      WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)
      PAUSE
    ENDIF

在上面的第一种情况“ AFTER ENERGY”中,正确写入了I1STOR(1)和I2STOR(1)。如果我在DO 167行之后写出NP的值,这也可以解决这种情况。

我的期望是写出一个变量不会影响它的值。通常,我经常进行大量耗时的计算,最终值偏离了目标,并且在许多情况下,它可以追溯到将值写出(到屏幕或文件中)神奇地缓解了问题的情况。任何帮助将由衷的感谢。

0 个答案:

没有答案