Skip to content

Commit 2f6e15e

Browse files
committed
Restructuring and Tally Fixes
Moved initialization of IFP tallies to the add_ifp_kinetics_tallies method in the Model class Fixed multi-precursor tallying of beta_numerator to work with the delayed group tallying system.
1 parent 0ebed1d commit 2f6e15e

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

docs/source/usersguide/kinetics.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ Obtaining kinetics parameters
6868
-----------------------------
6969

7070
The ``Model`` class can be used to automatically generate all IFP tallies using the Python API
71-
with ``settings.ifp_n_generation`` greater than 0::
71+
with ``settings.ifp_n_generation`` greater than 0 and the ``Model.add_ifp_kinetics_tallies`` method::
7272

73-
model = openmc.model.Model(settings = settings)
73+
model = openmc.model.Model(geometry = geometry, materials = materials, settings = settings)
74+
model.add_ifp_kinetics_tallies(num_groups = 6) #Add 6 precursor groups
7475
model.export_to_xml()
7576

7677
Additionally, each of the tallies can be manually defined individually with group-wise or total

openmc/model/model.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ def __init__(
8181
self.tallies = openmc.Tallies() if tallies is None else tallies
8282
self.plots = openmc.Plots() if plots is None else plots
8383

84-
if self.settings._ifp_n_generation is not None:
85-
self._init_ifp()
86-
8784
@property
8885
def geometry(self) -> openmc.Geometry | None:
8986
return self._geometry
@@ -200,8 +197,14 @@ def _materials_by_name(self) -> dict[int, openmc.Material]:
200197
result[mat.name].add(mat)
201198
return result
202199

203-
def _init_ifp(self) -> None:
204-
"""Automate tally creation for calculating Iterated Fission Probability kinetics parameters"""
200+
def add_ifp_kinetics_tallies(self, num_groups: int = 0):
201+
"""Add necessary tallies for calculating kinetics parameters using Iterated Fission Probability
202+
203+
Parameters
204+
----------
205+
num_groups : int
206+
Number of precursor groups to filter the delayed neutron fraction.
207+
"""
205208
existing_tallies = {'time-num':False, 'beta-num':False, 'ifp-denom':False}
206209

207210
dg_filter = None
@@ -223,10 +226,10 @@ def _init_ifp(self) -> None:
223226
if not existing_tallies['beta-num']:
224227
beta_tally = openmc.Tally()
225228
beta_tally.scores = ['ifp-beta-numerator']
226-
if dg_filter is None:
227-
beta_tally.filters = [openmc.DelayedGroupFilter(list(range(1,7)))]
228-
else:
229+
if dg_filter is not None:
229230
beta_tally.filters = [dg_filter]
231+
elif num_groups > 1:
232+
beta_tally.filters = [openmc.DelayedGroupFilter(list(range(1, num_groups + 1)))]
230233
self._tallies.append(beta_tally)
231234
if not existing_tallies['ifp-denom']:
232235
denom_tally = openmc.Tally()

src/tallies/tally_scoring.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -963,10 +963,15 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index,
963963
simulation::ifp_source_delayed_group_bank[p.current_work() - 1];
964964
if (delayed_groups.size() == settings::ifp_n_generation) {
965965
if (delayed_groups[0] > 0) {
966+
score = p.wgt_last();
966967
if (tally.delayedgroup_filter_ != C_NONE) {
967-
filter_index = delayed_groups[0] - 1;
968+
auto i_dg_filt = tally.filters()[tally.delayedgroup_filter_];
969+
const DelayedGroupFilter& filt {*dynamic_cast<DelayedGroupFilter*>(
970+
model::tally_filters[i_dg_filt].get())};
971+
score_fission_delayed_dg(
972+
i_tally, delayed_groups[0] - 1, score, score_index, p.filter_matches());
973+
continue;
968974
}
969-
score = p.wgt_last();
970975
}
971976
}
972977
}

tests/regression_tests/ifp/groupwise/test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def ifp_model():
3232
space = openmc.stats.Box(*cell.bounding_box)
3333
model.settings.source = openmc.IndependentSource(
3434
space=space, constraints={'fissionable': True})
35+
model.add_ifp_kinetics_tallies(num_groups = 6)
3536
return model
3637

3738
def test_iterated_fission_probability(ifp_model):

0 commit comments

Comments
 (0)