• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openmc-dev / openmc / 37663791721

07 Oct 2026 06:02PM UTC coverage: 80.891% (-0.5%) from 81.396%
37663791721

push

github

web-flow
Broadcast tally results in chunks (#4125)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>

18851 of 27271 branches covered (69.12%)

Branch coverage included in aggregate %.

13 of 13 new or added lines in 3 files covered. (100.0%)

722 existing lines in 40 files now uncovered.

60967 of 71403 relevant lines covered (85.38%)

29085075.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.8
/src/finalize.cpp
1
#include "openmc/finalize.h"
2

3
#include "openmc/bank.h"
4
#include "openmc/capi.h"
5
#include "openmc/chain.h"
6
#include "openmc/cmfd_solver.h"
7
#include "openmc/collision_track.h"
8
#include "openmc/constants.h"
9
#include "openmc/cross_sections.h"
10
#include "openmc/dagmc.h"
11
#include "openmc/eigenvalue.h"
12
#include "openmc/event.h"
13
#include "openmc/geometry.h"
14
#include "openmc/geometry_aux.h"
15
#include "openmc/material.h"
16
#include "openmc/mesh.h"
17
#include "openmc/message_passing.h"
18
#include "openmc/mgxs_interface.h"
19
#include "openmc/nuclide.h"
20
#include "openmc/photon.h"
21
#include "openmc/plot.h"
22
#include "openmc/random_lcg.h"
23
#include "openmc/random_ray/random_ray_simulation.h"
24
#include "openmc/settings.h"
25
#include "openmc/simulation.h"
26
#include "openmc/source.h"
27
#include "openmc/surface.h"
28
#include "openmc/tallies/tally.h"
29
#include "openmc/thermal.h"
30
#include "openmc/timer.h"
31
#include "openmc/volume_calc.h"
32
#include "openmc/weight_windows.h"
33

34
#include "openmc/tensor.h"
35

36
#ifdef OPENMC_XDG_ENABLED
37
#include "xdg/config.h"
38
#endif
39

40
namespace openmc {
41

42
void free_memory()
3,388 ✔
43
{
44
  free_memory_geometry();
3,388 ✔
45
  free_memory_surfaces();
3,388 ✔
46
  free_memory_material();
3,388 ✔
47
  free_memory_volume();
3,388 ✔
48
  free_memory_simulation();
3,388 ✔
49
  free_memory_photon();
3,388 ✔
50
  free_memory_settings();
3,388 ✔
51
  free_memory_thermal();
3,388 ✔
52
  free_memory_chain();
3,388 ✔
53
  library_clear();
3,388 ✔
54
  nuclides_clear();
3,388 ✔
55
  free_memory_source();
3,388 ✔
56
  free_memory_mesh();
3,388 ✔
57
  free_memory_tally();
3,388 ✔
58
  free_memory_bank();
3,388 ✔
59
  free_memory_plot();
3,388 ✔
60
  free_memory_weight_windows();
3,388 ✔
61
  if (mpi::master) {
3,388 ✔
62
    free_memory_cmfd();
3,122 ✔
63
  }
64
  if (settings::event_based) {
3,388 !
65
    free_event_queues();
×
66
  }
67
}
3,388 ✔
68

69
} // namespace openmc
70

71
using namespace openmc;
72

73
int openmc_finalize()
3,388 ✔
74
{
75
  if (simulation::initialized)
3,388 !
UNCOV
76
    openmc_simulation_finalize();
×
77

78
  // Clear results
79
  openmc_reset();
3,388 ✔
80

81
  // Reset timers
82
  reset_timers();
3,388 ✔
83

84
  // Reset global variables
85
  settings::assume_separate = false;
3,388 ✔
86
  settings::atomic_relaxation = true;
3,388 ✔
87
  settings::check_overlaps = false;
3,388 ✔
88
  settings::collision_track = false;
3,388 ✔
89
  settings::collision_track_config = CollisionTrackConfig {};
3,388 ✔
90
  settings::confidence_intervals = false;
3,388 ✔
91
  settings::create_fission_neutrons = true;
3,388 ✔
92
  settings::create_delayed_neutrons = true;
3,388 ✔
93
  settings::electron_treatment = ElectronTreatment::LED;
3,388 ✔
94
  settings::delayed_photon_scaling = true;
3,388 ✔
95
  settings::energy_cutoff = {0.0, 1000.0, 0.0, 0.0};
3,388 ✔
96
  settings::time_cutoff = {INFTY, INFTY, INFTY, INFTY};
3,388 ✔
97
  settings::entropy_on = false;
3,388 ✔
98
  settings::event_based = false;
3,388 ✔
99
  settings::free_gas_threshold = 400.0;
3,388 ✔
100
  settings::gen_per_batch = 1;
3,388 ✔
101
  settings::legendre_to_tabular = true;
3,388 ✔
102
  settings::legendre_to_tabular_points = -1;
3,388 ✔
103
  settings::material_cell_offsets = true;
3,388 ✔
104
  settings::max_lost_particles = 10;
3,388 ✔
105
  settings::max_order = 0;
3,388 ✔
106
  settings::max_particles_in_flight = 100000;
3,388 ✔
107
  settings::max_secondaries = 10000;
3,388 ✔
108
  settings::max_particle_events = 1'000'000;
3,388 ✔
109
  settings::max_history_splits = 10'000'000;
3,388 ✔
110
  settings::max_tracks = 1000;
3,388 ✔
111
  settings::max_write_lost_particles = -1;
3,388 ✔
112
  settings::n_batches = 0;
3,388 ✔
113
  settings::n_max_batches = 0;
3,388 ✔
114
  settings::n_log_bins = 8000;
3,388 ✔
115
  settings::n_inactive = 0;
3,388 ✔
116
  settings::n_particles = -1;
3,388 ✔
117
  settings::ifp_n_generation = -1;
3,388 ✔
118
  settings::output_summary = true;
3,388 ✔
119
  settings::output_tallies = true;
3,388 ✔
120
  settings::particle_restart_run = false;
3,388 ✔
121
  settings::path_cross_sections.clear();
3,388 ✔
122
  settings::path_input.clear();
3,388 ✔
123
  settings::path_output.clear();
3,388 ✔
124
  settings::path_particle_restart.clear();
3,388 ✔
125
  settings::path_sourcepoint.clear();
3,388 ✔
126
  settings::path_statepoint.clear();
3,388 ✔
127
  settings::photon_transport = false;
3,388 ✔
128
  settings::reduce_tallies = true;
3,388 ✔
129
  settings::rel_max_lost_particles = 1.0e-6;
3,388 ✔
130
  settings::res_scat_on = false;
3,388 ✔
131
  settings::res_scat_method = ResScatMethod::rvs;
3,388 ✔
132
  settings::res_scat_energy_min = 0.01;
3,388 ✔
133
  settings::res_scat_energy_max = 1000.0;
3,388 ✔
134
  settings::restart_run = false;
3,388 ✔
135
  settings::run_CE = true;
3,388 ✔
136
  settings::run_mode = RunMode::UNSET;
3,388 ✔
137
  settings::surface_grazing_cutoff = 0.001;
3,388 ✔
138
  settings::surface_grazing_ratio = 0.5;
3,388 ✔
139
  settings::solver_type = SolverType::MONTE_CARLO;
3,388 ✔
140
  settings::source_latest = false;
3,388 ✔
141
  settings::source_mcpl_write = false;
3,388 ✔
142
  settings::source_rejection_fraction = 0.05;
3,388 ✔
143
  settings::source_separate = false;
3,388 ✔
144
  settings::source_write = true;
3,388 ✔
145
  settings::ssw_cell_id = C_NONE;
3,388 ✔
146
  settings::ssw_cell_type = SSWCellType::None;
3,388 ✔
147
  settings::ssw_max_particles = 0;
3,388 ✔
148
  settings::ssw_max_files = 1;
3,388 ✔
149
  settings::surf_mcpl_write = false;
3,388 ✔
150
  settings::surf_source_write = false;
3,388 ✔
151
  settings::survival_biasing = false;
3,388 ✔
152
  settings::survival_normalization = false;
3,388 ✔
153
  settings::temperature_default = 293.6;
3,388 ✔
154
  settings::temperature_method = TemperatureMethod::NEAREST;
3,388 ✔
155
  settings::temperature_multipole = false;
3,388 ✔
156
  settings::temperature_range = {0.0, 0.0};
3,388 ✔
157
  settings::temperature_tolerance = 10.0;
3,388 ✔
158
  settings::properties_file.clear();
3,388 ✔
159
  settings::trace_batch = 0;
3,388 ✔
160
  settings::trace_gen = 0;
3,388 ✔
161
  settings::trace_particle = 0;
3,388 ✔
162
  settings::trigger_on = false;
3,388 ✔
163
  settings::trigger_predict = false;
3,388 ✔
164
  settings::trigger_batch_interval = 1;
3,388 ✔
165
  settings::uniform_source_sampling = false;
3,388 ✔
166
  settings::ufs_on = false;
3,388 ✔
167
  settings::urr_ptables_on = true;
3,388 ✔
168
  settings::use_decay_photons = false;
3,388 ✔
169
  settings::use_shared_secondary_bank = false;
3,388 ✔
170
  settings::verbosity = -1;
3,388 ✔
171
  settings::weight_cutoff = 0.25;
3,388 ✔
172
  settings::weight_survive = 1.0;
3,388 ✔
173
  settings::weight_window_checkpoint_collision = true;
3,388 ✔
174
  settings::weight_window_checkpoint_surface = false;
3,388 ✔
175
  settings::weight_windows_file.clear();
3,388 ✔
176
  settings::weight_windows_on = false;
3,388 ✔
177
  settings::write_all_tracks = false;
3,388 ✔
178
  settings::write_initial_source = false;
3,388 ✔
179

180
  simulation::keff = 1.0;
3,388 ✔
181
  simulation::need_depletion_rx = false;
3,388 ✔
182
  simulation::ssw_current_file = 1;
3,388 ✔
183
  simulation::total_gen = 0;
3,388 ✔
184

185
  simulation::entropy_mesh = nullptr;
3,388 ✔
186
  simulation::ufs_mesh = nullptr;
3,388 ✔
187

188
  data::energy_max = {INFTY, INFTY, INFTY, INFTY};
3,388 ✔
189
  data::energy_min = {0.0, 0.0, 0.0, 0.0};
3,388 ✔
190
  data::temperature_min = INFTY;
3,388 ✔
191
  data::temperature_max = 0.0;
3,388 ✔
192
  data::mg = {};
3,388 ✔
193
  model::root_universe = -1;
3,388 ✔
194
  model::plotter_seed = 1;
3,388 ✔
195
  openmc::openmc_set_seed(DEFAULT_SEED);
3,388 ✔
196
  openmc::openmc_set_stride(DEFAULT_STRIDE);
3,388 ✔
197

198
  // Deallocate arrays
199
  free_memory();
3,388 ✔
200

201
#ifdef OPENMC_LIBMESH_ENABLED
202
#if defined(OPENMC_XDG_ENABLED) && defined(XDG_ENABLE_LIBMESH)
203
  xdg::config::external_libmesh_init = nullptr;
204
  xdg::config::external_libmesh_comm = nullptr;
205
#endif
206
  settings::libmesh_init.reset();
207
  settings::libmesh_comm = nullptr;
208
#endif
209

210
  // Free all MPI types
211
#ifdef OPENMC_MPI
212
  if (mpi::source_site != MPI_DATATYPE_NULL) {
1,045 ✔
213
    MPI_Type_free(&mpi::source_site);
1,027 ✔
214
  }
215
  if (mpi::collision_track_site != MPI_DATATYPE_NULL) {
1,045 ✔
216
    MPI_Type_free(&mpi::collision_track_site);
1,027 ✔
217
  }
218
#endif
219

220
  openmc_finalize_random_ray();
3,388 ✔
221

222
  return 0;
3,388 ✔
223
}
224

225
int openmc_reset()
6,688 ✔
226
{
227

228
  model::universe_level_counts.clear();
6,688 ✔
229

230
  for (auto& t : model::tallies) {
26,596 ✔
231
    t->reset();
19,908 ✔
232
  }
233

234
  // Reset global tallies
235
  simulation::n_realizations = 0;
6,688 ✔
236
  simulation::global_tallies.fill(0.0);
6,688 ✔
237

238
  simulation::k_col_abs = 0.0;
6,688 ✔
239
  simulation::k_col_tra = 0.0;
6,688 ✔
240
  simulation::k_abs_tra = 0.0;
6,688 ✔
241
  simulation::k_sum = {0.0, 0.0};
6,688 ✔
242
  simulation::satisfy_triggers = false;
6,688 ✔
243

244
  settings::cmfd_run = false;
6,688 ✔
245

246
  simulation::n_lost_particles = 0;
6,688 ✔
247
  simulation::simulation_tracks_completed = 0;
6,688 ✔
248

249
  return 0;
6,688 ✔
250
}
251

252
int openmc_reset_timers()
93 ✔
253
{
254
  reset_timers();
93 ✔
255
  return 0;
93 ✔
256
}
257

258
int openmc_hard_reset()
68 ✔
259
{
260
  // Reset all tallies and timers
261
  openmc_reset();
68 ✔
262
  reset_timers();
68 ✔
263

264
  // Reset total generations and keff guess
265
  simulation::keff = 1.0;
68 ✔
266
  simulation::total_gen = 0;
68 ✔
267

268
  // Reset the random number generator state
269
  openmc::openmc_set_seed(DEFAULT_SEED);
68 ✔
270
  openmc::openmc_set_stride(DEFAULT_STRIDE);
68 ✔
271
  return 0;
68 ✔
272
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc