From fe0221445ed6733c41ad3f3820bf33a54888538b Mon Sep 17 00:00:00 2001 From: Jingang Liang Date: Tue, 1 Sep 2020 15:55:56 +0800 Subject: [PATCH] make sure locating window is not out of bounds --- openmc/data/multipole.py | 3 ++- src/wmp.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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;