mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 14:15:42 -04:00
Further refinements to Tally.diagonalize_filter(...) to allow for distribcell filters
This commit is contained in:
parent
c180287562
commit
65cbcfadb7
2 changed files with 16 additions and 6 deletions
|
|
@ -614,7 +614,7 @@ class MultiGroupXS(object):
|
|||
|
||||
# Sum across all applicable fine energy group filters
|
||||
for i, filter in enumerate(tally.filters):
|
||||
if 'energy' in filter.type and all(filter.bins == fine_edges):
|
||||
if 'energy' in filter.type and np.all(filter.bins == fine_edges):
|
||||
filter.bins = coarse_groups.group_edges
|
||||
mean = np.add.reduceat(mean, energy_indices, axis=i)
|
||||
std_dev = np.add.reduceat(std_dev**2, energy_indices, axis=i)
|
||||
|
|
@ -1734,9 +1734,12 @@ class Chi(MultiGroupXS):
|
|||
nu_fission_out = self.tallies['nu-fission-out']
|
||||
|
||||
# Remove the coarse energy filter to keep it out of tally arithmetic
|
||||
nu_fission_in.remove_filter(nu_fission_in.filters[-1])
|
||||
energy_filter = nu_fission_in.find_filter('energy')
|
||||
nu_fission_in.remove_filter(energy_filter)
|
||||
|
||||
# Compute chi
|
||||
nu_fission_in.add_filter(energy_filter)
|
||||
|
||||
self._xs_tally = nu_fission_out / nu_fission_in
|
||||
super(Chi, self).compute_xs()
|
||||
|
||||
|
|
|
|||
|
|
@ -2506,20 +2506,27 @@ class Tally(object):
|
|||
num_score_bins = new_tally.num_score_bins
|
||||
new_shape = (num_filter_bins, num_nuclides, num_score_bins)
|
||||
|
||||
diag_factor = self.num_filter_bins / new_filter.num_bins
|
||||
indices = np.arange(0, new_filter.num_bins**2, new_filter.num_bins+1)
|
||||
diag_indices = np.zeros(self.num_filter_bins, dtype=np.int)
|
||||
|
||||
for i in range(diag_factor):
|
||||
start = i * new_filter.num_bins
|
||||
end = (i+1) * new_filter.num_bins
|
||||
diag_indices[start:end] = indices + (i * new_filter.num_bins**2)
|
||||
|
||||
if self.sum is not None:
|
||||
new_tally._sum = np.zeros(new_shape, dtype=np.float64)
|
||||
new_tally._sum[indices, :self.num_nuclides, :self.num_scores] = self.sum
|
||||
new_tally._sum[diag_indices, :self.num_nuclides, :self.num_scores] = self.sum
|
||||
if self.sum_sq is not None:
|
||||
new_tally._sum_sq = np.zeros(new_shape, dtype=np.float64)
|
||||
new_tally._sum_sq[indices, :self.num_nuclides, :self.num_scores] = self.sum_sq
|
||||
new_tally._sum_sq[diag_indices, :self.num_nuclides, :self.num_scores] = self.sum_sq
|
||||
if self.mean is not None:
|
||||
new_tally._mean = np.zeros(new_shape, dtype=np.float64)
|
||||
new_tally._mean[indices, :self.num_nuclides, :self.num_scores] = self.mean
|
||||
new_tally._mean[diag_indices, :self.num_nuclides, :self.num_scores] = self.mean
|
||||
if self.std_dev is not None:
|
||||
new_tally._std_dev = np.zeros(new_shape, dtype=np.float64)
|
||||
new_tally._std_dev[indices, :self.num_nuclides, :self.num_scores] = self.std_dev
|
||||
new_tally._std_dev[diag_indices, :self.num_nuclides, :self.num_scores] = self.std_dev
|
||||
|
||||
# Correct each Filter's stride
|
||||
stride = new_tally.num_nuclides * new_tally.num_score_bins
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue