diff --git a/openmc/filter.py b/openmc/filter.py
index 71b1c2313d..bdb4c35bc3 100644
--- a/openmc/filter.py
+++ b/openmc/filter.py
@@ -425,7 +425,7 @@ class Filter(object):
df = pd.DataFrame()
filter_bins = np.repeat(self.bins, self.stride)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
df = pd.concat([df, pd.DataFrame(
{self.short_name.lower(): filter_bins})])
@@ -613,7 +613,7 @@ class SurfaceFilter(IntegralFilter):
df = pd.DataFrame()
filter_bins = np.repeat(self.bins, self.stride)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
filter_bins = [_CURRENT_NAMES[x] for x in filter_bins]
df = pd.concat([df, pd.DataFrame(
@@ -781,26 +781,26 @@ class MeshFilter(Filter):
nz = 1
# Generate multi-index sub-column for x-axis
- filter_bins = np.arange(1, nx+1)
+ filter_bins = np.arange(1, nx + 1)
repeat_factor = ny * nz * self.stride
filter_bins = np.repeat(filter_bins, repeat_factor)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
filter_dict[(mesh_key, 'x')] = filter_bins
# Generate multi-index sub-column for y-axis
- filter_bins = np.arange(1, ny+1)
+ filter_bins = np.arange(1, ny + 1)
repeat_factor = nz * self.stride
filter_bins = np.repeat(filter_bins, repeat_factor)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
filter_dict[(mesh_key, 'y')] = filter_bins
# Generate multi-index sub-column for z-axis
- filter_bins = np.arange(1, nz+1)
+ filter_bins = np.arange(1, nz + 1)
repeat_factor = self.stride
filter_bins = np.repeat(filter_bins, repeat_factor)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
filter_dict[(mesh_key, 'z')] = filter_bins
@@ -1281,7 +1281,7 @@ class DistribcellFilter(Filter):
# Tile the Multi-index columns
for level_key, level_bins in level_dict.items():
level_bins = np.repeat(level_bins, self.stride)
- tile_factor = data_size / len(level_bins)
+ tile_factor = int(data_size / len(level_bins))
level_bins = np.tile(level_bins, tile_factor)
level_dict[level_key] = level_bins
@@ -1297,7 +1297,7 @@ class DistribcellFilter(Filter):
# requests Summary geometric information
filter_bins = np.arange(self.num_bins)
filter_bins = np.repeat(filter_bins, self.stride)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
df = pd.DataFrame({self.short_name.lower() : filter_bins})
@@ -1402,7 +1402,7 @@ class MuFilter(RealFilter):
# them as necessary to account for other filters.
lo_bins = np.repeat(self.bins[:-1], self.stride)
hi_bins = np.repeat(self.bins[1:], self.stride)
- tile_factor = data_size / len(lo_bins)
+ tile_factor = int(data_size / len(lo_bins))
lo_bins = np.tile(lo_bins, tile_factor)
hi_bins = np.tile(hi_bins, tile_factor)
@@ -1505,7 +1505,7 @@ class PolarFilter(RealFilter):
# them as necessary to account for other filters.
lo_bins = np.repeat(self.bins[:-1], self.stride)
hi_bins = np.repeat(self.bins[1:], self.stride)
- tile_factor = data_size / len(lo_bins)
+ tile_factor = int(data_size / len(lo_bins))
lo_bins = np.tile(lo_bins, tile_factor)
hi_bins = np.tile(hi_bins, tile_factor)
@@ -1608,7 +1608,7 @@ class AzimuthalFilter(RealFilter):
# them as necessary to account for other filters.
lo_bins = np.repeat(self.bins[:-1], self.stride)
hi_bins = np.repeat(self.bins[1:], self.stride)
- tile_factor = data_size / len(lo_bins)
+ tile_factor = int(data_size / len(lo_bins))
lo_bins = np.tile(lo_bins, tile_factor)
hi_bins = np.tile(hi_bins, tile_factor)
@@ -1871,7 +1871,7 @@ class EnergyFunctionFilter(Filter):
out = out[:14]
filter_bins = np.repeat(out, self.stride)
- tile_factor = data_size / len(filter_bins)
+ tile_factor = int(data_size / len(filter_bins))
filter_bins = np.tile(filter_bins, tile_factor)
df = pd.concat([df, pd.DataFrame(
{self.short_name.lower(): filter_bins})])
diff --git a/src/tally.F90 b/src/tally.F90
index c0c68afe38..ebca2bb5dc 100644
--- a/src/tally.F90
+++ b/src/tally.F90
@@ -2524,9 +2524,13 @@ contains
if (.not. run_CE .and. eo_filt % matches_transport_groups) then
- ! determine outgoing energy from fission bank
+ ! determine outgoing energy group from fission bank
g_out = int(fission_bank(n_bank - p % n_bank + k) % E)
+ ! modify the value so that g_out = 1 corresponds to the highest
+ ! energy bin
+ g_out = size(eo_filt % bins) - g_out
+
! change outgoing energy bin
matching_bins(i) = g_out
diff --git a/tests/test_mg_convert/test_mg_convert.py b/tests/test_mg_convert/test_mg_convert.py
index d8a9665d8f..45e703b0e3 100755
--- a/tests/test_mg_convert/test_mg_convert.py
+++ b/tests/test_mg_convert/test_mg_convert.py
@@ -154,6 +154,11 @@ class MGXSTestHarness(PyAPITestHarness):
form = '{0:12.6E} {1:12.6E}\n'
outstr += form.format(sp.k_combined[0], sp.k_combined[1])
+ # Enforce closing statepoint and summary files so HDF5
+ # does not throw an error during the next OpenMC execution
+ sp._f.close()
+ sp._summary._f.close()
+
return outstr
def _get_results(self, outstr, hash_output=False):
diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat
index 244d92b06b..8120c8681e 100644
--- a/tests/test_mg_tallies/inputs_true.dat
+++ b/tests/test_mg_tallies/inputs_true.dat
@@ -137,43 +137,95 @@
scatter nu-scatter nu-fission
+
+
+ total absorption flux fission nu-fission scatter nu-scatter
+ analog
+
+
+
+
+ total absorption flux fission nu-fission
+ collision
+
+
+
+
+ total absorption flux fission nu-fission
+ tracklength
+
+
+
+
+
+ scatter nu-scatter nu-fission
+
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
total absorption fission nu-fission
analog
-
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
total absorption fission nu-fission
tracklength
-
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
total absorption fission nu-fission scatter nu-scatter
analog
-
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
total absorption fission nu-fission
collision
-
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
total absorption fission nu-fission
tracklength
-
+
uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
scatter nu-scatter nu-fission
+
+
+
+ uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
+ total absorption fission nu-fission scatter nu-scatter
+ analog
+
+
+
+
+ uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
+ total absorption fission nu-fission
+ collision
+
+
+
+
+ uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
+ total absorption fission nu-fission
+ tracklength
+
+
+
+
+
+ uo2_ang uo2_ang_mu uo2_iso uo2_iso_mu clad_ang clad_ang_mu clad_iso clad_iso_mu lwtr_ang lwtr_ang_mu lwtr_iso lwtr_iso_mu
+ scatter nu-scatter nu-fission
+
diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat
index af328ff8aa..db7735cb4e 100644
--- a/tests/test_mg_tallies/results_true.dat
+++ b/tests/test_mg_tallies/results_true.dat
@@ -1 +1 @@
-1817642a0d20d8ef437c7970cae2e77c265a566ef9843ac1b7cd33f76af09365dc8bd5c045f4297360b38d509864bd629b06dfc4d043b4b1ae7d8a5e2e93fae3
\ No newline at end of file
+0a17877c7cf6dbd3e432b1997669a47c588d2a4074a29406deef27332eb7a0f736ea1fdc2037fc02f8ebca39f00332563bbe2172adc26bfaab2d6144d259daee
\ No newline at end of file
diff --git a/tests/test_mg_tallies/test_mg_tallies.py b/tests/test_mg_tallies/test_mg_tallies.py
index 257accb603..580eb60c3f 100644
--- a/tests/test_mg_tallies/test_mg_tallies.py
+++ b/tests/test_mg_tallies/test_mg_tallies.py
@@ -23,6 +23,12 @@ class MGTalliesTestHarness(HashedPyAPITestHarness):
# Instantiate some tally filters
energy_filter = openmc.EnergyFilter([0.0, 20.0e6])
energyout_filter = openmc.EnergyoutFilter([0.0, 20.0e6])
+ matching_energy_filter = openmc.EnergyFilter([1e-5, 0.0635, 10.0,
+ 1.0e2, 1.0e3, 0.5e6,
+ 1.0e6, 20.0e6])
+ matching_eout_filter = openmc.EnergyoutFilter([1e-5, 0.0635, 10.0,
+ 1.0e2, 1.0e3, 0.5e6,
+ 1.0e6, 20.0e6])
mesh_filter = openmc.MeshFilter(mesh)
mat_ids = [mat.id for mat in self._input_set.materials]
@@ -34,6 +40,7 @@ class MGTalliesTestHarness(HashedPyAPITestHarness):
True: ['total', 'absorption', 'fission', 'nu-fission']}
tallies = []
+
for do_nuclides in [False, True]:
tallies.append(openmc.Tally())
tallies[-1].filters = [mesh_filter]
@@ -49,34 +56,43 @@ class MGTalliesTestHarness(HashedPyAPITestHarness):
if do_nuclides:
tallies[-1].nuclides = nuclides
- tallies.append(openmc.Tally())
- tallies[-1].filters = [mat_filter, energy_filter]
- tallies[-1].estimator = 'analog'
- tallies[-1].scores = scores[do_nuclides] + ['scatter',
- 'nu-scatter']
- if do_nuclides:
- tallies[-1].nuclides = nuclides
+ # Impose energy bins that dont match the MG structure and those
+ # that do
+ for match_energy_bins in [False, True]:
+ if match_energy_bins:
+ e_filter = matching_energy_filter
+ eout_filter = matching_eout_filter
+ else:
+ e_filter = energy_filter
+ eout_filter = energyout_filter
- tallies.append(openmc.Tally())
- tallies[-1].filters = [mat_filter, energy_filter]
- tallies[-1].estimator = 'collision'
- tallies[-1].scores = scores[do_nuclides]
- if do_nuclides:
- tallies[-1].nuclides = nuclides
+ tallies.append(openmc.Tally())
+ tallies[-1].filters = [mat_filter, e_filter]
+ tallies[-1].estimator = 'analog'
+ tallies[-1].scores = scores[do_nuclides] + ['scatter',
+ 'nu-scatter']
+ if do_nuclides:
+ tallies[-1].nuclides = nuclides
- tallies.append(openmc.Tally())
- tallies[-1].filters = [mat_filter, energy_filter]
- tallies[-1].estimator = 'tracklength'
- tallies[-1].scores = scores[do_nuclides]
- if do_nuclides:
- tallies[-1].nuclides = nuclides
+ tallies.append(openmc.Tally())
+ tallies[-1].filters = [mat_filter, e_filter]
+ tallies[-1].estimator = 'collision'
+ tallies[-1].scores = scores[do_nuclides]
+ if do_nuclides:
+ tallies[-1].nuclides = nuclides
- tallies.append(openmc.Tally())
- tallies[-1].filters = [mat_filter, energy_filter,
- energyout_filter]
- tallies[-1].scores = ['scatter', 'nu-scatter', 'nu-fission']
- if do_nuclides:
- tallies[-1].nuclides = nuclides
+ tallies.append(openmc.Tally())
+ tallies[-1].filters = [mat_filter, e_filter]
+ tallies[-1].estimator = 'tracklength'
+ tallies[-1].scores = scores[do_nuclides]
+ if do_nuclides:
+ tallies[-1].nuclides = nuclides
+
+ tallies.append(openmc.Tally())
+ tallies[-1].filters = [mat_filter, e_filter, eout_filter]
+ tallies[-1].scores = ['scatter', 'nu-scatter', 'nu-fission']
+ if do_nuclides:
+ tallies[-1].nuclides = nuclides
self._input_set.tallies = openmc.Tallies(tallies)
diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py
index f9f9a75097..343a48a833 100644
--- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py
+++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py
@@ -71,6 +71,11 @@ class MGXSTestHarness(PyAPITestHarness):
if os.path.exists('./tallies.xml'):
os.remove('./tallies.xml')
+ # Enforce closing statepoint and summary files so HDF5
+ # does not throw an error during the next OpenMC execution
+ sp._f.close()
+ sp._summary._f.close()
+
# Re-run MG mode.
if self._opts.mpi_exec is not None:
mpi_args = [self._opts.mpi_exec, '-n', self._opts.mpi_np]