diff --git a/openmc/data/multipole.py b/openmc/data/multipole.py index 97038bd72d..4d4359cc2b 100644 --- a/openmc/data/multipole.py +++ b/openmc/data/multipole.py @@ -1143,7 +1143,8 @@ class WindowedMultipole(EqualityMixin): # the 1-based vs. 0-based indexing. Similarly startw needs to be # decreased by 1. endw does not need to be decreased because # range(startw, endw) does not include endw. - i_window = int(np.floor((sqrtE - sqrt(self.E_min)) / self.spacing)) + i_window = min(self.n_windows - 1, + int(np.floor((sqrtE - sqrt(self.E_min)) / self.spacing))) startw = self.windows[i_window, 0] - 1 endw = self.windows[i_window, 1] diff --git a/src/wmp.cpp b/src/wmp.cpp index 44f7eb51ad..44b346bb4a 100644 --- a/src/wmp.cpp +++ b/src/wmp.cpp @@ -70,7 +70,8 @@ WindowedMultipole::evaluate(double E, double sqrtkT) double invE = 1.0 / E; // Locate window containing energy - int i_window = (sqrtE - std::sqrt(E_min_)) / spacing_; + int i_window = std::min(windows_.shape()[0] - 1, + (sqrtE - std::sqrt(E_min_)) / spacing_); int startw = windows_(i_window, 0) - 1; int endw = windows_(i_window, 1) - 1;