我正在更新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
;最后一个表单告诉编译器在一个足够宽的字段中打印一个整数,以容纳所有数字,但不能打印得更宽。