Fortran 90排名不匹配

时间:2013-09-18 00:22:57

标签: fortran fortran90

我在Fortran中很新,只是从博士那里得到了这个程序。它用于计算某些直方图中的珠子数量。这是代码:

program xrdf
    implicit none
    include 'currentconf.fi'
    real drdf,rdf12(200)
    real xni12, Zface
    integer ibead,iconf,ii,io,i,j,k,linecount
    integer mchains, iendbead, nstart
    logical ifend

    Zface=1.5
    mchains=49
    drdf=0.1
    xni12=0.
    io=10
    nstart=12636
    open(file='pcushion.tr.xmol',unit=io)
    do i=1,200
       rdf12(i)=0.0
    end do
    ifend=.false.
    do iconf=1,1000000
 ! reading current frame
       ii=iconf
       call readconf(io,ii,linecount,ifend)
       write(*,*)' conf ',iconf,' N=',n
       if (ifend) go to 777
 ! if trajectory ended, exit loop
       ibead=0

       do i=1,mchains
          iendbead=nstart+i*45
          dz=abs(Zface-z(iendbead))
          ii=int(dz/drdf)+1
          rdf12(ii)=rdf12(ii)+1
          xni12=xni12+1.0
       end do

    end do !iconf

777      write(*,*)' total ',iconf-1,' frames '
    write(*,*)' r       rho(z)     '
    do i=1,200
       write(*,'(f10.4,e15.7)')(i-0.5)*drdf,rdf12(i)/xni12
    end do
    close(io)
    stop
    end

因为我真的不知道哪个部分是错的,所以我只是通过这里的所有代码。当我编译这个程序时,出现了一个错误:

i=int(dz/drdf)+1
    1
Error: Incompatible ranks 0 and 1 in assignment at (1)

如何编辑程序进行修复?

1 个答案:

答案 0 :(得分:1)

我能够使用简单的程序重现您的编译器错误。似乎很可能在

ii=int(dz/drdf)+1

你试图将一个数组(可能是dz?)分配给一个整数(ii)。

integer ibead,iconf,ii,io,i,j,k,linecount

将ii(尺寸为1)的尺寸与dz和drdf的尺寸进行比较。

这是我的程序(使用gfortran编译):

      PROGRAM TEST

      implicit none
      integer dz(10),ii
      real dy

      dz=3
      dy=2.0
      ii=int(dz/dy)+1

      END PROGRAM TEST

使用ifort错误消息更具启示性:

error #6366: The shapes of the array expressions do not conform