mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-26 21:25:36 -04:00
Added initial tally merge scheme
This commit is contained in:
parent
da83d8bb5c
commit
d5ba1a3273
3 changed files with 59 additions and 4 deletions
|
|
@ -305,4 +305,4 @@ class Mesh(object):
|
|||
self._width[1],
|
||||
self._width[2])
|
||||
|
||||
return element
|
||||
return element
|
||||
|
|
@ -70,7 +70,7 @@ class Tally(object):
|
|||
|
||||
clone._triggers = []
|
||||
for trigger in self._triggers:
|
||||
trigger.add_trigger(trigger)
|
||||
clone.add_trigger(trigger)
|
||||
|
||||
memo[id(self)] = clone
|
||||
|
||||
|
|
@ -424,6 +424,62 @@ class Tally(object):
|
|||
return string
|
||||
|
||||
|
||||
def can_merge(self, tally):
|
||||
|
||||
if not isinstance(tally, Tally):
|
||||
return False
|
||||
|
||||
# Must have same estimator
|
||||
if self._estimator != tally._estimator:
|
||||
return False
|
||||
|
||||
# Must have same filters
|
||||
if len(self._filters) != len(tally._filters):
|
||||
return False
|
||||
|
||||
for filter in self._filters:
|
||||
if not filter in tally._filters:
|
||||
return False
|
||||
|
||||
# Must have same nuclides
|
||||
if len(self._nuclides) != len(tally._nuclides):
|
||||
return False
|
||||
|
||||
for nuclide in self._nuclides:
|
||||
if not nuclide in tally._nuclides:
|
||||
return False
|
||||
|
||||
# Tallies are mergeable if all conditional checks passed
|
||||
return True
|
||||
|
||||
|
||||
# FIXME: Check if filters are mergeable
|
||||
|
||||
|
||||
def merge(self, tally):
|
||||
|
||||
if not self.can_merge(tally):
|
||||
msg = 'Unable to merge tally ID={0} with {1}'.format(tally.id, self.id)
|
||||
raise ValueError(msg)
|
||||
|
||||
# Create deep copy of tally to return as merged tally
|
||||
merged_tally = copy.deepcopy(self)
|
||||
|
||||
# Differentiate Tally with a new auto-generated Tally ID
|
||||
merged_tally.id = None
|
||||
|
||||
# Add scores from second tally to merged tally
|
||||
for score in tally._scores:
|
||||
merged_tally.add_score(score)
|
||||
|
||||
# Add triggers from second tally to merged tally
|
||||
for trigger in tally._triggers:
|
||||
merged_tally.add_trigger(trigger)
|
||||
|
||||
# FIXME: Check if filters are mergeable
|
||||
|
||||
return merged_tally
|
||||
|
||||
|
||||
def get_tally_xml(self):
|
||||
|
||||
|
|
|
|||
|
|
@ -111,5 +111,4 @@ class Trigger(object):
|
|||
scores += '{0} '.format(score)
|
||||
|
||||
scores.rstrip(' ')
|
||||
subelement.set("scores", scores)
|
||||
__author__ = 'wboyd'
|
||||
subelement.set("scores", scores)
|
||||
Loading…
Add table
Add a link
Reference in a new issue