0

我是 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)

如何编辑程序来修复它?

4

1 回答 1

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
于 2013-09-18T13:31:52.343 回答