首页 > 解决方案 > 写出数组解决了一个我不知道的原因

问题描述

当我使用带有 GNU gfortran 编译器的 FORTRAN 77 运行某些程序时,我多次遇到同样的问题,我希望有人有见识。我想要的值应该是〜1,但它在程序结束时写出远远超过10 ^ 100。对我来说,这通常是仅限于数组的问题。当我之前在程序的某个阶段写出 this 的值时,不正确的值通常会消失(这在尝试解决问题时不可避免地会发生)。

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

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

对比

      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

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

我的期望是写出一个变量不会影响它的值。很多时候,我在做大量的、耗时的计算,最终值很遥远,在许多情况下,它可以追溯到将值写出(到屏幕或文件)神奇地缓解问题的情况。任何帮助将不胜感激。

标签: fortrangfortran

解决方案


推荐阅读