From c362ba5ef47d8b6daf4fa5fc3654946aba4e223c Mon Sep 17 00:00:00 2001 From: YoungHui Park Date: Mon, 13 Apr 2020 02:55:05 -0500 Subject: [PATCH] Write surface source only at the last batch, hard-code number of surfaces for surface_source.h5 sizing --- src/particle.cpp | 2 +- src/simulation.cpp | 2 +- src/state_point.cpp | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/particle.cpp b/src/particle.cpp index 59e5bfb94..b2ac429c5 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -413,7 +413,7 @@ Particle::cross_surface() write_message(1, " Crossing surface {}", surf->id_); } - if (surf->surf_src_) { + if (surf->surf_src_ && simulation::current_batch == settings::n_batches) { Particle::Bank site; site.r = this->r(); site.u = this->u(); diff --git a/src/simulation.cpp b/src/simulation.cpp index 537a733bc..986a32708 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -380,7 +380,7 @@ void finalize_batch() } // Write out surface source if requested. - if (settings::surface_source) { + if (settings::surface_source && simulation::current_batch == settings::n_batches) { auto filename = settings::path_output + "surface_source.h5"; write_surf_src_point(filename.c_str()); //!! } diff --git a/src/state_point.cpp b/src/state_point.cpp index b5f1ffd55..d31e45b4b 100644 --- a/src/state_point.cpp +++ b/src/state_point.cpp @@ -676,15 +676,16 @@ write_surf_src_bank(hid_t group_id) if (mpi::master) { // Create dataset big enough to hold all source sites - hsize_t dims[] {static_cast(settings::n_particles)}; + hsize_t dims[] {static_cast(settings::n_particles)*2}; // 2 being hard-coded number of surfaces. hid_t dspace = H5Screate_simple(1, dims, nullptr); hid_t dset = H5Dcreate(group_id, "source_bank", banktype, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); for (int i = 0; i < mpi::n_procs; ++i) { + // Create memory space hsize_t count[] {static_cast(simulation::work_index[i+1] - - simulation::work_index[i])}; + simulation::work_index[i])*2}; // 2 being hard-coded number of surfaces. hid_t memspace = H5Screate_simple(1, count, nullptr); // Select hyperslab for this dataspace