mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 22:26:08 -04:00
Began cleanup of Tally.summation(...) routine in Python API
This commit is contained in:
parent
ec497c526a
commit
e40716a49b
2 changed files with 12 additions and 57 deletions
|
|
@ -392,7 +392,7 @@ class MultiGroupXS(object):
|
|||
# Overwrite tallies with new subdomain-averaged versions
|
||||
avg_xs._tallies = {}
|
||||
for tally_type, tally in self.tallies.items():
|
||||
tally_sum = tally.summation(filter=self.domain_type,
|
||||
tally_sum = tally.summation(filter_type=self.domain_type,
|
||||
filter_bins=subdomains)
|
||||
tally_sum /= len(subdomains)
|
||||
avg_xs.tallies[tally_type] = tally_sum
|
||||
|
|
@ -1305,7 +1305,7 @@ class Chi(MultiGroupXS):
|
|||
for group in range(1, self.num_groups+1):
|
||||
energy_bins.append(self.energy_groups.get_group_bounds(group))
|
||||
|
||||
sum_nu_fission_in = nu_fission_in.summation(filter='energy',
|
||||
sum_nu_fission_in = nu_fission_in.summation(filter_type='energy',
|
||||
filter_bins=energy_bins)
|
||||
|
||||
# FIXME: CrossFilter for energy + energy messes up tally arithmetic
|
||||
|
|
@ -1314,7 +1314,7 @@ class Chi(MultiGroupXS):
|
|||
self._xs_tally = nu_fission_out / sum_nu_fission_in
|
||||
|
||||
# Normalize chi to 1.0
|
||||
norm = self.xs_tally.summation(filter='energyout',
|
||||
norm = self.xs_tally.summation(filter_type='energyout',
|
||||
filter_bins=energy_bins)
|
||||
|
||||
# FIXME: CrossFilter for energy + energy messes up tally arithmetic
|
||||
|
|
|
|||
|
|
@ -1405,35 +1405,11 @@ class Tally(object):
|
|||
match_filters = self.filters[:match]
|
||||
cross_filters = [self.filters[match:], other.filters[match:]]
|
||||
|
||||
'''
|
||||
# FIXME:
|
||||
self_filters = set(self.filters)
|
||||
other_filters = set(other.filters)
|
||||
diff1 = list(self_filters.difference(other_filters))
|
||||
diff2 = list(other_filters.difference(self_filters))
|
||||
symm_diff = list(other_filters.symmetric_difference(self_filters))
|
||||
'''
|
||||
|
||||
# FIXME: This must be the common longest sequence of tallies at the beginning
|
||||
|
||||
for filter in match_filters:
|
||||
new_tally.add_filter(filter)
|
||||
|
||||
'''
|
||||
#
|
||||
if len(self_filters) == 0:
|
||||
for filter in self.filters:
|
||||
new_tally.add_filter(filter)
|
||||
for filter in self_filters:
|
||||
new_tally.add_filter(filter)
|
||||
#
|
||||
elif len(diff2) == 0:
|
||||
for filter in other.filters:
|
||||
new_tally.add_filter(filter)
|
||||
for filter in diff2:
|
||||
new_tally.add_filter(filter)
|
||||
'''
|
||||
|
||||
if len(self.filters) != match and len(other.filters) == match:
|
||||
for filter in cross_filters[0]:
|
||||
new_tally.add_filter(filter)
|
||||
|
|
@ -1445,19 +1421,6 @@ class Tally(object):
|
|||
new_filter = CrossFilter(self_filter, other_filter, binary_op)
|
||||
new_tally.add_filter(new_filter)
|
||||
|
||||
#
|
||||
# else:
|
||||
# all_filters = list(set([self.filters, other.filters]
|
||||
'''
|
||||
if len(symm_diff) <= 1:
|
||||
for filter in symm_diff:
|
||||
new_tally.add_filter(filter)
|
||||
else:
|
||||
for self_filter, other_filter in itertools.product(*symm_diff):
|
||||
new_filter = CrossFilter(self_filter, other_filter, binary_op)
|
||||
new_tally.add_filter(new_filter)
|
||||
'''
|
||||
|
||||
# Generate score "outer products"
|
||||
if self.scores == other.scores:
|
||||
new_tally.num_score_bins = self.num_score_bins
|
||||
|
|
@ -2294,7 +2257,8 @@ class Tally(object):
|
|||
|
||||
return new_tally
|
||||
|
||||
def summation(self, scores=[], filter=None, filter_bins=[], nuclides=[]):
|
||||
def summation(self, scores=[], filter_type=None,
|
||||
filter_bins=[], nuclides=[]):
|
||||
"""Build a sliced tally for the specified filter bins, nuclides, scores.
|
||||
|
||||
This method constructs a new tally to encapsulate a subset of the data
|
||||
|
|
@ -2308,7 +2272,7 @@ class Tally(object):
|
|||
A list of one or more score strings to sum across
|
||||
(e.g., ['absorption', 'nu-fission']; default is [])
|
||||
|
||||
filter : str
|
||||
filter_type : str
|
||||
A filter type string (e.g., 'cell', 'energy') corresponding to the
|
||||
filter bins to sum across
|
||||
|
||||
|
|
@ -2348,19 +2312,13 @@ class Tally(object):
|
|||
nuclides = [[nuclide] for nuclide in nuclides]
|
||||
|
||||
# Sum across any filter bins specified by the user
|
||||
if filter in FILTER_TYPES.values():
|
||||
if filter_type in FILTER_TYPES.values():
|
||||
filter_bins = [[(filter_bin,)] for filter_bin in filter_bins]
|
||||
filters = [[filter]]
|
||||
filters = [[filter_type]]
|
||||
# If user did not specify a filter type, do not sum across filter bins
|
||||
else:
|
||||
filter_bins = [[]]
|
||||
filters = [[]]
|
||||
'''
|
||||
else:
|
||||
# filter_bins = list(itertools.product(*filter_bins))
|
||||
filter_bins = [[filter_bin] for filter_bin in filter_bins]
|
||||
filters = [[filter]]
|
||||
'''
|
||||
|
||||
# Initialize Tally sum
|
||||
tally_sum = 0
|
||||
|
|
@ -2372,10 +2330,10 @@ class Tally(object):
|
|||
tally_slice = self.get_slice(scores, filters, filter_bins, nuclides)
|
||||
|
||||
# Remove filters summed across to avoid bulky CrossFilters
|
||||
for filter in reversed(tally_slice.filters):
|
||||
if filter.type in filters:
|
||||
tally_slice.remove_filter(filter)
|
||||
summed_filters[filter.type].append(filter)
|
||||
if filter_type:
|
||||
filter = tally_slice.find_filter(filter_type)
|
||||
tally_slice.remove_filter(filter)
|
||||
summed_filters[filter_type].append(filter)
|
||||
|
||||
# Accumulate this Tally slice into the Tally sum
|
||||
tally_sum += tally_slice
|
||||
|
|
@ -2387,9 +2345,6 @@ class Tally(object):
|
|||
filters[i] = CrossFilter(filters[i-1], filters[i], '+')
|
||||
tally_sum.add_filter(filters[-1])
|
||||
|
||||
# for filter in removed_filters:
|
||||
# tally_sum.add_filter(filter)
|
||||
|
||||
return tally_sum
|
||||
|
||||
def tile_filter(self, new_filter):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue