diff --git a/openmc/filter.py b/openmc/filter.py index e7e527531..10a245d75 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -35,6 +35,8 @@ class Filter(object): The type of the tally filter. bins : Integral or Iterable of Integral or Iterable of float The bins for the filter + num_bins : Integral + The number of filter bins mesh : Mesh or None A Mesh object for 'mesh' type filters. offset : Integral @@ -110,7 +112,14 @@ class Filter(object): @property def num_bins(self): - return self._num_bins + if self.bins is None: + return 0 + elif self.type in ['energy', 'energyout']: + return len(self.bins)-1 + elif self.type in ['cell', 'cellborn', 'surface', 'universe', 'material']: + return len(self.bins) + else: + return self._num_bins @property def mesh(self): diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 18e87bba1..5abc4fe0a 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -885,7 +885,6 @@ class TotalXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Initialize the Tallies @@ -918,8 +917,6 @@ class TransportXS(MultiGroupXS): group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) energyout_filter = openmc.Filter('energyout', group_edges) - energy_filter.num_bins = self.num_groups - energyout_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter], [energyout_filter]] # Initialize the Tallies @@ -957,7 +954,6 @@ class AbsorptionXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Initialize the Tallies @@ -989,7 +985,6 @@ class CaptureXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter], [energy_filter]] # Initialize the Tallies @@ -1022,7 +1017,6 @@ class FissionXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Initialize the Tallies @@ -1054,7 +1048,6 @@ class NuFissionXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Initialize the Tallies @@ -1086,7 +1079,6 @@ class ScatterXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Intialize the Tallies @@ -1118,7 +1110,6 @@ class NuScatterXS(MultiGroupXS): # Create the non-domain specific Filters for the Tallies group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) - energy_filter.num_bins = self.num_groups filters = [[energy_filter], [energy_filter]] # Initialize the Tallies @@ -1145,8 +1136,6 @@ class ScatterMatrixXS(MultiGroupXS): group_edges = self.energy_groups.group_edges energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - energy.num_bins = self.num_groups - energyout.num_bins = self.num_groups # Create a list of scores for each Tally to be created if correct: @@ -1172,7 +1161,6 @@ class ScatterMatrixXS(MultiGroupXS): scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) energy_filter = openmc.Filter(type='energy') energy_filter.bins = self.energy_groups.group_edges - energy_filter.num_bins = self.num_groups scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) rxn_tally = self.tallies['scatter'] - scatter_p1 else: @@ -1330,8 +1318,6 @@ class NuScatterMatrixXS(ScatterMatrixXS): group_edges = self.energy_groups.group_edges energy = openmc.Filter('energy', group_edges) energyout = openmc.Filter('energyout', group_edges) - energy.num_bins = self.num_groups - energyout.num_bins = self.num_groups filters = [[energy], [energy, energyout], [energyout]] # Intialize the Tallies @@ -1347,7 +1333,6 @@ class NuScatterMatrixXS(ScatterMatrixXS): scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) energy_filter = openmc.Filter(type='energy') energy_filter.bins = self.energy_groups.group_edges - energy_filter.num_bins = self.num_groups scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) rxn_tally = self.tallies['nu-scatter'] - scatter_p1 else: @@ -1375,8 +1360,6 @@ class Chi(MultiGroupXS): group_edges = self.energy_groups.group_edges energy_filter = openmc.Filter('energy', group_edges) energyout_filter = openmc.Filter('energyout', group_edges) - energy_filter.num_bins = self.num_groups - energyout_filter.num_bins = self.num_groups filters = [[energy_filter], [energyout_filter]] # Intialize the Tallies @@ -1423,7 +1406,6 @@ class Chi(MultiGroupXS): energy_filter = openmc.Filter(type='energyout') energy_filter.bins = self.energy_groups.group_edges - energy_filter.num_bins = self.num_groups norm = norm.tile_filter(energy_filter) self._xs_tally /= norm