mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
MGXS and Library classes now accept tally triggers
This commit is contained in:
parent
ebe8ac3902
commit
23f64bf330
5 changed files with 246 additions and 43 deletions
File diff suppressed because one or more lines are too long
|
|
@ -50,6 +50,9 @@ class Library(object):
|
|||
Domain type for spatial homogenization
|
||||
energy_groups : EnergyGroups
|
||||
Energy group structure for energy condensation
|
||||
tally_trigger : Trigger
|
||||
An (optional) tally precision trigger given to each tally used to
|
||||
compute the cross section
|
||||
all_mgxs : dict
|
||||
MGXS objects keyed by domain ID and cross section type
|
||||
statepoint : openmc.StatePoint
|
||||
|
|
@ -69,6 +72,7 @@ class Library(object):
|
|||
self._mgxs_types = []
|
||||
self._domain_type = None
|
||||
self._energy_groups = None
|
||||
self._tally_trigger = None
|
||||
self._all_mgxs = OrderedDict()
|
||||
self._statepoint = None
|
||||
|
||||
|
|
@ -91,6 +95,7 @@ class Library(object):
|
|||
clone._mgxs_types = self.mgxs_types
|
||||
clone._domain_type = self.domain_type
|
||||
clone._energy_groups = copy.deepcopy(self.energy_groups, memo)
|
||||
clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo)
|
||||
clone._all_mgxs = self.all_mgxs
|
||||
clone._statepoint = self._statepoint
|
||||
|
||||
|
|
@ -145,6 +150,10 @@ class Library(object):
|
|||
def energy_groups(self):
|
||||
return self._energy_groups
|
||||
|
||||
@property
|
||||
def tally_trigger(self):
|
||||
return self._tally_trigger
|
||||
|
||||
@property
|
||||
def num_groups(self):
|
||||
return self.energy_groups.num_groups
|
||||
|
|
@ -192,6 +201,11 @@ class Library(object):
|
|||
cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups)
|
||||
self._energy_groups = energy_groups
|
||||
|
||||
@tally_trigger.setter
|
||||
def tally_trigger(self, tally_trigger):
|
||||
cv.check_type('tally trigger', tally_trigger, openmc.Trigger)
|
||||
self._tally_trigger = tally_trigger
|
||||
|
||||
def build_library(self):
|
||||
"""Initialize MGXS objects in each domain and for each reaction type
|
||||
in the library.
|
||||
|
|
@ -211,6 +225,11 @@ class Library(object):
|
|||
mgxs.domain_type = self.domain_type
|
||||
mgxs.energy_groups = self.energy_groups
|
||||
mgxs.by_nuclide = self.by_nuclide
|
||||
|
||||
# If a tally trigger was specified, add it to the MGXS
|
||||
if self.tally_trigger:
|
||||
mgxs.tally_trigger = self.tally_trigger
|
||||
|
||||
mgxs.create_tallies()
|
||||
self.all_mgxs[domain.id][mgxs_type] = mgxs
|
||||
|
||||
|
|
|
|||
|
|
@ -80,6 +80,9 @@ class MGXS(object):
|
|||
Domain type for spatial homogenization
|
||||
energy_groups : EnergyGroups
|
||||
Energy group structure for energy condensation
|
||||
tally_trigger : Trigger
|
||||
An (optional) tally precision trigger given to each tally used to
|
||||
compute the cross section
|
||||
tallies : dict
|
||||
OpenMC tallies needed to compute the multi-group cross section
|
||||
xs_tally : Tally
|
||||
|
|
@ -100,6 +103,7 @@ class MGXS(object):
|
|||
self._domain = None
|
||||
self._domain_type = None
|
||||
self._energy_groups = None
|
||||
self._tally_trigger = None
|
||||
self._tallies = OrderedDict()
|
||||
self._xs_tally = None
|
||||
|
||||
|
|
@ -125,6 +129,7 @@ class MGXS(object):
|
|||
clone._domain = self.domain
|
||||
clone._domain_type = self.domain_type
|
||||
clone._energy_groups = copy.deepcopy(self.energy_groups, memo)
|
||||
clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo)
|
||||
clone._xs_tally = copy.deepcopy(self.xs_tally, memo)
|
||||
|
||||
clone._tallies = OrderedDict()
|
||||
|
|
@ -163,6 +168,10 @@ class MGXS(object):
|
|||
def energy_groups(self):
|
||||
return self._energy_groups
|
||||
|
||||
@property
|
||||
def tally_trigger(self):
|
||||
return self._tally_trigger
|
||||
|
||||
@property
|
||||
def num_groups(self):
|
||||
return self.energy_groups.num_groups
|
||||
|
|
@ -220,6 +229,11 @@ class MGXS(object):
|
|||
cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups)
|
||||
self._energy_groups = energy_groups
|
||||
|
||||
@tally_trigger.setter
|
||||
def tally_trigger(self, tally_trigger):
|
||||
cv.check_type('tally trigger', tally_trigger, openmc.Trigger)
|
||||
self._tally_trigger = tally_trigger
|
||||
|
||||
@staticmethod
|
||||
def get_mgxs(mgxs_type, domain=None, domain_type=None,
|
||||
energy_groups=None, by_nuclide=False, name=''):
|
||||
|
|
@ -431,6 +445,12 @@ class MGXS(object):
|
|||
self.tallies[key].estimator = estimator
|
||||
self.tallies[key].add_filter(domain_filter)
|
||||
|
||||
# If a tally trigger was specified, add it to each tally
|
||||
if self.tally_trigger:
|
||||
trigger_clone = copy.deepcopy(self.tally_trigger)
|
||||
trigger_clone.add_score(score)
|
||||
self.tallies[key].add_trigger(trigger_clone)
|
||||
|
||||
# Add all non-domain specific Filters (e.g., 'energy') to the Tally
|
||||
for filter in filters:
|
||||
self.tallies[key].add_filter(filter)
|
||||
|
|
|
|||
|
|
@ -390,7 +390,8 @@ class Tally(object):
|
|||
'since "{1}" is not a Trigger'.format(self.id, trigger)
|
||||
raise ValueError(msg)
|
||||
|
||||
self._triggers.append(trigger)
|
||||
if trigger not in self.triggers:
|
||||
self.triggers.append(trigger)
|
||||
|
||||
@id.setter
|
||||
def id(self, tally_id):
|
||||
|
|
|
|||
|
|
@ -58,6 +58,15 @@ class Trigger(object):
|
|||
else:
|
||||
return existing
|
||||
|
||||
def __eq__(self, other):
|
||||
if str(self) == str(other):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self == other
|
||||
|
||||
def __repr__(self):
|
||||
string = 'Trigger\n'
|
||||
string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self._trigger_type)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue