我正在使用 Fortran 90 和 OpenMPI 开发一些并行 CFD 代码。这些过程分为两组,其中一半执行某种类型的计算(例如速度、压力和温度),而另一半执行不同类型的计算(例如使用 K-omega 的湍流建模)。结果,程序将自己任意拆分为两个通信器,我们称它们为 Comm1 和 Comm2。
我正在尝试使用 Comm 1 中本地等级 0 的进程从 Namelist 文件中读取一些参数并将它们广播到 Comm1 中的所有进程。出于某种原因,即使它只是一个标量,我也会收到 MPI_ERR_TRUNCATE: 消息被截断为错误消息。我想知道是否有人经历过类似的事情。
代码如下。
module myModule
use mpi
double precision, public :: KOMEGA_CMU, KOMEGA_ELOG, KOMEGA_CTRANS, TED_INITIAL, UD_INITIAL
! Other Variable declarations
! ...
contains
subroutine readParameters(MPI_COMMUNICATOR, PROC_RANK_LOCAL, NUM_PROCESSES)
implicit none
integer, intent(in) :: MPI_COMMUNICATOR, PROC_RANK_LOCAL, NUM_PROCESSES
integer :: ierr
if(PROC_RANK_LOCAL == 0) then
! Read variables
end if
call MPI_Bcast(UD_INITIAL,1, MPI_DOUBLE_PRECISION,0, MPI_COMMUNICATOR, ierr)
end subroutine ReadParameters
end module MyModule
出于某种原因,这会导致除根进程(等级 0)之外的所有进程中的 MPI_ERR_TRUNCATE,即使变量被声明为双精度并且消息缓冲区也是双精度。这也发生在整数上。
谢谢您的帮助。