mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 22:26:08 -04:00
Switch source bank from full copies to pointers
This commit is contained in:
parent
e2d3ace601
commit
7ff8a94a3d
1 changed files with 14 additions and 11 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue