我在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)
如何编辑程序进行修复?
答案 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