2013-09-18 2 views
0

Я совершенно новый в Фортране, и только что получил программу от PhD. Он используется для подсчета количества бусинок на определенных гистограммах. Вот код:Fortran 90 rank несоответствие

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

@ user814064 кандидатской сказал мне, программа будет автоматически считывать эти данные в файле pcushion.tr.xmol. Предположим, что'z (10) ', то программа найдет конкретное значение из этого файла. –

+0

Вы объявляете 'implicit none' в начале программы, что означает, что все переменные должны быть объявлены, но я не вижу, где объявлен массив' z() 'или где объявлен' dz'. Я что-то упускаю? –

+1

@PeterM: мое предположение заключается в том, что оно содержится в строке 'include 'currentconf.fi''. –

ответ

1

Я смог воспроизвести ошибку вашего компилятора с помощью простой программы. Вполне вероятно, что в

ii=int(dz/drdf)+1 

вы пытаетесь присвоить массив (может быть, дг?) В целое число (б).

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 
+0

Это должно быть 'dz',' drdf' объявлено как скаляр. –

Смежные вопросы