16 MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
17 int my_num = a_data.size();
21 amrex::ParallelAllReduce::Sum(num, MPI_COMM_WORLD);
23 std::vector<T> a_data_all(num);
25 std::vector<int> nsites_procs(nprocs);
26 MPI_Allgather(&my_num, 1, amrex::ParallelDescriptor::Mpi_typemap<int>::type(),
27 nsites_procs.data(), 1, amrex::ParallelDescriptor::Mpi_typemap<int>::type(),
30 std::vector<int> nsites_disp(nprocs);
31 for (
int i = 0; i < nprocs; i++)
34 for (
int j = 0; j < i; j++) nsites_disp[i] += nsites_procs[j];
37 MPI_Datatype mpi_type = amrex::ParallelDescriptor::Mpi_typemap<T>::type();
39 a_data.data(), my_num, mpi_type,
40 a_data_all.data(), nsites_procs.data(), nsites_disp.data(), mpi_type,
43 a_data.swap(a_data_all);