From 7c6aaf7204163464d13e14a4547b48269a70c3d1 Mon Sep 17 00:00:00 2001 From: John Tramm Date: Mon, 23 Jun 2025 17:20:36 -0500 Subject: [PATCH] Fix Weight Window Infinite Loop Bug (#3457) Co-authored-by: Paul Romano --- include/openmc/particle_data.h | 2 +- src/particle.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/openmc/particle_data.h b/include/openmc/particle_data.h index 82b101c227..be7fa74837 100644 --- a/include/openmc/particle_data.h +++ b/include/openmc/particle_data.h @@ -47,7 +47,7 @@ struct SourceSite { double time {0.0}; double wgt {1.0}; int delayed_group {0}; - int surf_id {0}; + int surf_id {SURFACE_NONE}; ParticleType particle; // Extra attributes that don't show up in source written to file diff --git a/src/particle.cpp b/src/particle.cpp index 324276d15f..6cfdf2175a 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -104,6 +104,14 @@ void Particle::split(double wgt) bank.u = u(); bank.E = settings::run_CE ? E() : g(); bank.time = time(); + + // Convert signed index to a singed surface ID + if (surface() == SURFACE_NONE) { + bank.surf_id = SURFACE_NONE; + } else { + int surf_id = model::surfaces[surface_index()]->id_; + bank.surf_id = (surface() > 0) ? surf_id : -surf_id; + } } void Particle::from_source(const SourceSite* src) @@ -140,6 +148,12 @@ void Particle::from_source(const SourceSite* src) time() = src->time; time_last() = src->time; parent_nuclide() = src->parent_nuclide; + + // Convert signed surface ID to signed index + if (src->surf_id != SURFACE_NONE) { + int index_plus_one = model::surface_map[std::abs(src->surf_id)] + 1; + surface() = (src->surf_id > 0) ? index_plus_one : -index_plus_one; + } } void Particle::event_calculate_xs()