Fortran在获得意想不到的价值时不会结束吗?

时间:2015-01-12 10:18:04

标签: formatting fortran scientific-computing

我有一个程序,它计算了几个变量,然后这些变量写入输出文件。

是否有可能,当我的程序无法为我的公式获得正确的结果时,它确实会终止?

为了澄清我的所作所为,这是我的代码的一部分,我感兴趣的变量是计算:

     dx=x(1,i)-x(nk,i)
     dy=y(1,i)-y(nk,i)
     dz=z(1,i)-z(nk,i)
          call PBC(dx,dy,dz)
          r2i=dx*dx+dy*dy+dz*dz
          r2=r2+r2i


  r2g0=0.0d0
  r2gx=0.0d0

      dx=x(1,i)-x(2,i)
        call PBC(dx,dy,dz)
      rspani=dsqrt(dx*dx)
   do ii=1,nk-1
      rx=x(ii,i)
      ry=y(ii,i)
      rz=z(ii,i)
    do jj=ii+1,nk
      dx=x(jj,i)-rx
      dy=y(jj,i)-ry
      dz=z(jj,i)-rz
        call PBC(dx,dy,dz)
        r21=dx*dx+dy*dy+dz*dz
        r21x=dx*dx
           r2g=r2g+r21
           r2gx=r2gx+r21x
           r2g0=r2g0+r21
           rh=rh+1.0d0/dsqrt(r21)
           rh1=rh1+1.0d0
         ir21=dnint(dsqrt(r21)/dr)
         p(ir21)=p(ir21)+2.0D0
      dxs=dsqrt(r21x)
      if(dxs.gt.rspani) rspani=dxs
    end do           

然后在输出中我只写下这些变量:

          write(12,870)r2i,sqrt(r2i),r2g0,r2gx/(nk*nk)

870格式(3(f15.7,3x),f15.7)

x,y,z通过随机数生成器实际生成。

问题是我的输出包含了457行的正确值,然后一行只是" *********"当我使用mc viewer然后输出继续正确的值时,但是让我们说12个步骤形成循环,计算这些变量是缺失的。

所以我的问题是基本的:

是否有可能,我的程序无法获得正确的数字,这就是为什么结果没有写入程序的原因?

或 这可能是由于错误的输出格式化或与格式化相关的事情造成的吗?

感谢您提出任何建议

1 个答案:

答案 0 :(得分:2)

*********几乎肯定是尝试为格式字符串中指定的字段编写一个太大的数字。

例如,指定为f15.7的字段将占用小数点1个点,前导符号为1个点(-将始终打印,如果需要,+可能是如果设置了选项,则打印),小数位数为7,数字的整个部分留有6位数字。因此,可能存在这样的情况:该程序不适合该字段并且将打印15 * s。

使用最新的Fortran编译器编译的程序如果遇到代表IEEE特殊值之一的浮点数,则会编写一个字符串,如NaN-Inf