diff --git a/d2o/distributor_factory.py b/d2o/distributor_factory.py index c9af9e37e55bbd92724fa04b61b67fe373d85491..6a3b08c8ee532f4b1170e9f38d054369872a74b2 100644 --- a/d2o/distributor_factory.py +++ b/d2o/distributor_factory.py @@ -1054,6 +1054,8 @@ class _slicing_distributor(distributor): return global_result def _invert_mpi_data_ordering(self, data): + data = np.ascontiguousarray(data) + comm = self.comm s = comm.size r = comm.rank @@ -1061,10 +1063,18 @@ class _slicing_distributor(distributor): return data partner = s - 1 - r - new_data = comm.sendrecv(sendobj=data, - dest=partner, - source=partner) - comm.barrier() + + new_shape = comm.sendrecv(sendobj=data.shape, + dest=partner, + source=partner) + new_data = np.empty(new_shape, + dtype=self.dtype) + + comm.Sendrecv(sendbuf=[data, self.mpi_dtype], + recvbuf=[new_data, self.mpi_dtype], + dest=partner, + source=partner) + return new_data def collect_data_from_slices(self, data, slice_objects, copy=True,