Switch source bank from full copies to pointers

This commit is contained in:
YoungHui Park 2020-11-06 13:45:13 -06:00
parent e2d3ace601
commit 7ff8a94a3d

View file

@ -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<int64_t>* bank_index = &simulation::work_index;
std::vector<Particle::Bank> src_bank = simulation::source_bank;
std::vector<Particle::Bank>* src_bank = &simulation::source_bank;
std::vector<Particle::Bank> 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<Particle::Bank> temp_source {src_bank.begin(),
src_bank.begin() + count_size};
std::vector<Particle::Bank> 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
}