include 'mpif.h'
real a(100,100,100), e(9,9,9)
integer oneslice, twoslice, threeslice, sizeofreal
integer rank, ierr, status(MPI_STATUS_SIZE)
call mpi_init (ierr)
call mpi_comm_rank (MPI_COMM_WORLD, rank, ierr)
if (rank .eq. 0) then
call mpi_type_extent (MPI_REAL, sizeofreal, ierr)
call mpi_type_vector (9, 1, 2, MPI_REAL,
oneslice, ierr)
call mpi_type_hvector (9, 1, 100*sizeofreal,
oneslice, twoslice, ierr)
call mpi_type_hvector (9, 1, 100*100*sizeofreal
twoslice, threeslice, ierr)
call mpi_type_commit (threeslice, ierr)
call mpi_send (a(1,3,2), 1, threeslice, 1, 0,
MPI_COMM_WORLD, ierr)
else if (rank .eq. 1) then
call mpi_recv (e, 9*9*9, MPI_REAL, 0, 0,
MPI_COMM_WORLD, status, ierr)
end if
call mpi_finalize (ierr)