subroutine redistribute (a, b, m, r, k,
datatype, comm, returnerr)
integer a(*), b(*)
integer m, r, k, datatype, comm, returnerr
logical flag
integer ierr, errcode, p, myrank
parameter (errcode=20)
call mpi_initialized (flag, ierr)
if (.not.flag) call mpi_abort (comm, errcode, ierr)
DO CACHING OPERATIONS
call mpi_comm_size (comm, p, ierr)
call mpi_comm_rank (comm, myrank, ierr)
CREATE DATATYPE newtype
COMMUNICATE DATA IN k STEPS
return
end