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 に答える