Add option to specify nuclides in the Library class

This commit is contained in:
guyshtot 2023-03-21 13:18:24 +02:00
parent a4f498c54f
commit 487f02dd1d

View file

@ -72,6 +72,11 @@ class Library:
Number of equi-width polar angle bins for angle discretization
num_azimuthal : Integral
Number of equi-width azimuthal angle bins for angle discretization
nuclides : Iterable of str or 'sum'
The optional user-specified nuclides for which to compute cross
sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides
are not specified by the user, all nuclides in the domain
are included.
estimator : str or None
The tally estimator used to compute multi-group cross sections.
If None, the default for each MGXS type is used.
@ -107,6 +112,7 @@ class Library:
self._energy_groups = None
self._num_polar = 1
self._num_azimuthal = 1
self._nuclides = None
self._num_delayed_groups = 0
self._correction = 'P0'
self._scatter_format = 'legendre'
@ -145,6 +151,7 @@ class Library:
clone._energy_groups = copy.deepcopy(self.energy_groups, memo)
clone._num_polar = self.num_polar
clone._num_azimuthal = self.num_azimuthal
clone._nuclides = self._nuclides
clone._num_delayed_groups = self.num_delayed_groups
clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo)
clone._all_mgxs = copy.deepcopy(self.all_mgxs)
@ -206,6 +213,14 @@ class Library:
return self._domains
@property
def nuclides(self):
if self.by_nuclide and self._nuclides:
return self._nuclides
elif self.by_nuclide:
raise ValueError("Nuclides weren't defined")
else:
return 'sum'
@property
def energy_groups(self):
return self._energy_groups
@ -275,6 +290,11 @@ class Library:
cv.check_type('name', name, str)
self._name = name
@nuclides.setter
def nuclides(self, nuclides):
cv.check_type('nuclides', nuclides, str)
self._nuclides = nuclides
@mgxs_types.setter
def mgxs_types(self, mgxs_types):
all_mgxs_types = openmc.mgxs.MGXS_TYPES + openmc.mgxs.MDGXS_TYPES + \
@ -524,6 +544,18 @@ class Library:
mgxs.legendre_order = self.legendre_order
mgxs.histogram_bins = self.histogram_bins
if self.by_nuclide:
try:
domain_nuclides = domain.get_nuclides()
except AttributeError:
domain_nuclides = None
if self._nuclides:
if domain_nuclides:
mgxs.nuclides = [nuclide for nuclide in self.nuclides if nuclide in domain_nuclides] + [
"total"]
else:
mgxs.nuclides = self._nuclides
self.all_mgxs[domain.id][mgxs_type] = mgxs
def add_to_tallies_file(self, tallies_file, merge=True):