0

我正在更新 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 ,但仍然没有。任何想法将不胜感激。

4

1 回答 1

2

Fortran 通常会打印一系列星号,***如果数字输出字段太小而无法包含您尝试写入的数字,则您的。尝试将i3格式语句中的一些 s 更改为i6甚至i0; 最后一种形式告诉编译器在一个字段中打印一个整数,该字段的宽度足以容纳其所有数字,但不能更宽。

于 2013-08-01T14:46:34.530 回答