diff --git a/src/nuclide.cpp b/src/nuclide.cpp index 91adc077799..04ec110738c 100644 --- a/src/nuclide.cpp +++ b/src/nuclide.cpp @@ -63,6 +63,19 @@ Nuclide::Nuclide(hid_t group, const vector& temperature) read_attribute(group, "atomic_weight_ratio", awr_); if (settings::run_mode == RunMode::VOLUME) { + // Determine whether nuclide is fissionable and then exit + int mt; + hid_t rxs_group = open_group(group, "reactions"); + for (auto name : group_names(rxs_group)) { + if (starts_with(name, "reaction_")) { + hid_t rx_group = open_group(rxs_group, name.c_str()); + read_attribute(rx_group, "mt", mt); + if (is_fission(mt)) { + fissionable_ = true; + break; + } + } + } return; } diff --git a/tests/unit_tests/test_lib.py b/tests/unit_tests/test_lib.py index 009a9096831..e3c7ce3b70d 100644 --- a/tests/unit_tests/test_lib.py +++ b/tests/unit_tests/test_lib.py @@ -963,7 +963,8 @@ def test_sample_external_source(run_in_tmpdir, mpi_intracomm): model.settings.source = openmc.IndependentSource( space=openmc.stats.Box([-5., -5., -5.], [5., 5., 5.]), angle=openmc.stats.Monodirectional((0., 0., 1.)), - energy=openmc.stats.Discrete([1.0e5], [1.0]) + energy=openmc.stats.Discrete([1.0e5], [1.0]), + constraints={'fissionable': True} ) model.settings.particles = 1000 model.settings.batches = 10 @@ -993,3 +994,8 @@ def test_sample_external_source(run_in_tmpdir, mpi_intracomm): assert p1.wgt == p2.wgt openmc.lib.finalize() + + # Make sure sampling works in volume calculation mode + openmc.lib.init(["-c"]) + openmc.lib.sample_external_source(100) + openmc.lib.finalize()