diff --git a/src/state_point.cpp b/src/state_point.cpp index d26e536102..455ddac492 100644 --- a/src/state_point.cpp +++ b/src/state_point.cpp @@ -607,7 +607,8 @@ write_source_bank(hid_t group_id, bool surf_src_bank) // Set vectors for source bank and starting bank index of each process std::vector* bank_index = &simulation::work_index; - std::vector src_bank = simulation::source_bank; + std::vector* src_bank = &simulation::source_bank; + std::vector surf_src_bank_vector; // Reset dataspace sizes and vectors for surface source bank if (surf_src_bank) { @@ -616,9 +617,11 @@ write_source_bank(hid_t group_id, bool surf_src_bank) bank_index = &simulation::surf_src_index; - src_bank.assign(simulation::surf_src_bank.data(), - simulation::surf_src_bank.data() - + simulation::surf_src_bank.size()); + // Copy data in a SharedArray into a vector. + surf_src_bank_vector.resize(count_size); + surf_src_bank_vector.assign(simulation::surf_src_bank.data(), + simulation::surf_src_bank.data() + count_size); + src_bank = &surf_src_bank_vector; } #ifdef PHDF5 @@ -641,7 +644,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE); // Write data to file in parallel - H5Dwrite(dset, banktype, memspace, dspace, plist, src_bank.data()); + H5Dwrite(dset, banktype, memspace, dspace, plist, (*src_bank).data()); // Free resources H5Sclose(dspace); @@ -660,8 +663,8 @@ write_source_bank(hid_t group_id, bool surf_src_bank) // Save source bank sites since the array is overwritten below #ifdef OPENMC_MPI - std::vector temp_source {src_bank.begin(), - src_bank.begin() + count_size}; + std::vector temp_source {(*src_bank).begin(), + (*src_bank).begin() + count_size}; #endif for (int i = 0; i < mpi::n_procs; ++i) { @@ -672,7 +675,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) #ifdef OPENMC_MPI // Receive source sites from other processes if (i > 0) - MPI_Recv(src_bank.data(), count[0], mpi::bank, i, i, + MPI_Recv((*src_bank).data(), count[0], mpi::bank, i, i, mpi::intracomm, MPI_STATUS_IGNORE); #endif @@ -682,7 +685,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) H5Sselect_hyperslab(dspace, H5S_SELECT_SET, start, nullptr, count, nullptr); // Write data to hyperslab - H5Dwrite(dset, banktype, memspace, dspace, H5P_DEFAULT, src_bank.data()); + H5Dwrite(dset, banktype, memspace, dspace, H5P_DEFAULT, (*src_bank).data()); H5Sclose(memspace); H5Sclose(dspace); @@ -693,11 +696,11 @@ write_source_bank(hid_t group_id, bool surf_src_bank) #ifdef OPENMC_MPI // Restore state of source bank - std::copy(temp_source.begin(), temp_source.end(), src_bank.begin()); + std::copy(temp_source.begin(), temp_source.end(), (*src_bank).begin()); #endif } else { #ifdef OPENMC_MPI - MPI_Send(src_bank.data(), count_size, mpi::bank, + MPI_Send((*src_bank).data(), count_size, mpi::bank, 0, mpi::rank, mpi::intracomm); #endif }