Enviando matrices 2D en Fortran con MPI_Gather

Quiero enviar 2d trozos de datos usandoMPI_GATHER. Por ejemplo: tengo matrices de 2x3 en cada nodo y quiero una matriz de 8x3 en la raíz, si tengo 4 nodos. Para matrices 1d,MPI_GATHER ordena los datos de acuerdo con los rangos de MPI, pero para los datos en 2D se crea un desastre!

¿Cuál es la forma limpia de poner los pedazos en orden?

Esperaba la salida de este código:

program testmpi
  use mpi
  implicit none
  integer :: send (2,3)
  integer :: rec (4,3)
  integer :: ierror,my_rank,i,j

  call MPI_Init(ierror)
  MPI_DATA_TYPE type_col
  ! find out process rank
  call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror)
  if (my_rank==0) then
    send=1
    do i=1,2
      print*,(send(i,j),j=1,3)
    enddo
  endif
  if (my_rank==1) then
    send=5
    ! do 1,2
    !   print*,(send(i,j),j=1,3)
    ! enddo
  endif
  call MPI_GATHER(send,6,MPI_INTEGER,rec,6,MPI_INTEGER,0,MPI_COMM_WORLD,ierror)
  if (my_rank==0) then
    print*,'<><><><><>rec'
    do i=1,4
      print*,(rec(i,j),j=1,3)
    enddo
  endif
  call MPI_Finalize(ierror)
end program testmpi

para ser algo como esto:

   1           1           1
   1           1           1
   5           5           5
   5           5           5

pero se parece a esto:

   1           1           5
   1           1           5
   1           5           5
   1           5           5

Respuestas a la pregunta(1)

Su respuesta a la pregunta