mpi等级在do循环中无效



我正在更新fortran中的一个程序以使用MPI运行,但遇到了秩未正确显示的问题。在这个子程序的开头,我调用MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierr),它返回正确的秩,直到这一点:

  DO IY=2,NY+1
  DO IX=2,NX+1
   D(IX,IY)=(h_roms(IX,IY)+zeta(IX,IY))*maskr(IX,IY)
   call mpi_barrier(mpi_comm_world,ierr)      
   write(out,12) rank,ix,iy
12 format('disappearing?',i3,'ix:',i3,'iy',i3)           
  ENDDO       
  ENDDO

NY和NX分别为124,84,并且秩正确打印,直到iy变为125,并且ix为3。之后,它只打印为**。IT仍然打印出所有内容两次(在2个处理器上运行),但排名无效,或者出现任何错误。我试着在do循环之后调用MPI_COMM_RANK,但仍然没有。任何想法都将不胜感激。

Fortran通常会打印一系列星号,即***,如果数字输出字段太小,无法包含要写入其中的数字。请尝试将format语句中的一些i3更改为i6甚至i0;最后一个表单告诉编译器在一个足够宽的字段中打印一个整数,以容纳所有数字,但不能打印得更宽。

最新更新