diff --git a/include/openmc/simulation.h b/include/openmc/simulation.h index 7a206284f..63fb6e5fd 100644 --- a/include/openmc/simulation.h +++ b/include/openmc/simulation.h @@ -45,8 +45,6 @@ extern const RegularMesh* ufs_mesh; extern std::vector k_generation; extern std::vector work_index; -extern int64_t total_surf_banks; //!< Total number of surface source banks -extern int64_t max_bank_size; //!< Maximum bank size from a process extern std::vector surf_src_index; } // namespace simulation diff --git a/include/openmc/state_point.h b/include/openmc/state_point.h index 255c7ff1d..92c5c0f40 100644 --- a/include/openmc/state_point.h +++ b/include/openmc/state_point.h @@ -12,7 +12,7 @@ namespace openmc { void load_state_point(); -void query_surf_src_size(); +int* query_surf_src_size(); void write_source_point(const char* filename, bool surf_src_bank); void write_source_bank(hid_t group_id, bool surf_src_bank); void read_source_bank(hid_t group_id, std::vector& sites, bool distribute); diff --git a/src/simulation.cpp b/src/simulation.cpp index ae0ad319b..82a6e7bd1 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -271,8 +271,6 @@ const RegularMesh* ufs_mesh {nullptr}; std::vector k_generation; std::vector work_index; -int64_t total_surf_banks {0}; -int64_t max_bank_size {0}; std::vector surf_src_index; } // namespace simulation diff --git a/src/state_point.cpp b/src/state_point.cpp index 16e616018..fe750a456 100644 --- a/src/state_point.cpp +++ b/src/state_point.cpp @@ -525,8 +525,11 @@ hid_t h5banktype() { return banktype; } -void query_surf_src_size() +int* query_surf_src_size() { + // total_surf_banks, max_bank_size + static int qsize[2] = {0, 0}; + int64_t total; if (mpi::master) { simulation::surf_src_index.resize(mpi::n_procs + 1); @@ -551,17 +554,16 @@ void query_surf_src_size() simulation::surf_src_index[i - 1] + bank_size[i - 1]; } // Set maximum bank size - simulation::max_bank_size = *std::max_element(bank_size.begin(), - bank_size.end()); - total = simulation::surf_src_index[mpi::n_procs]; + qsize[1] = *std::max_element(bank_size.begin(), bank_size.end()); + qsize[0] = simulation::surf_src_index[mpi::n_procs]; } #else - total = simulation::surf_src_bank.size(); - simulation::surf_src_index[mpi::n_procs] = total; + qsize[0] = simulation::surf_src_bank.size(); + simulation::surf_src_index[mpi::n_procs] = simulation::surf_src_bank.size(); + qsize[1] = simulation::work_per_rank; #endif - // Set total number of surface source banks - simulation::total_surf_banks = total; + return qsize; } void @@ -610,7 +612,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) int64_t count_size = simulation::work_per_rank; // Set maximum bank size - simulation::max_bank_size = simulation::work_per_rank; + int64_t max_bank_size = simulation::work_per_rank; // Set vectors for source bank and starting bank index of each process std::vector bank_index = simulation::work_index; @@ -618,9 +620,9 @@ write_source_bank(hid_t group_id, bool surf_src_bank) // Reset dataspace sizes and vectors for surface source bank if (surf_src_bank) { - query_surf_src_size(); + int* qsize = query_surf_src_size(); - dims_size = simulation::total_surf_banks; + dims_size = qsize[0]; count_size = simulation::surf_src_bank.size(); bank_index.clear(); @@ -630,6 +632,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) src_bank.assign(simulation::surf_src_bank.data(), simulation::surf_src_bank.data() + simulation::surf_src_bank.size()); + max_bank_size = qsize[1]; } #ifdef PHDF5 @@ -671,7 +674,7 @@ write_source_bank(hid_t group_id, bool surf_src_bank) // Set new bank sites to avoid the src_bank being overwritten on MPI_Recv std::vector src_to_save; - src_to_save.reserve(simulation::max_bank_size); + src_to_save.reserve(max_bank_size); std::copy(src_bank.begin(), src_bank.end(), src_to_save.begin()); for (int i = 0; i < mpi::n_procs; ++i) {