From 102bfd47aea00e9570344c334ba553e82c14e2e1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 8 Dec 2020 07:24:51 -0600 Subject: [PATCH] Fix use of 'nearest' temperature with S(a,b) data. Closes #1704 --- src/thermal.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/thermal.cpp b/src/thermal.cpp index f8e9b280be..4bb0487188 100644 --- a/src/thermal.cpp +++ b/src/thermal.cpp @@ -151,15 +151,9 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, { // Determine temperature for S(a,b) table double kT = sqrtkT*sqrtkT; - int i; - if (settings::temperature_method == TemperatureMethod::NEAREST) { - // If using nearest temperature, do linear search on temperature - for (i = 0; i < kTs_.size(); ++i) { - if (std::abs(kTs_[i] - kT) < K_BOLTZMANN*settings::temperature_tolerance) { - break; - } - } - } else { + int i = 0; + + if (kTs_.size() > 1) { // Find temperatures that bound the actual temperature for (i = 0; i < kTs_.size() - 1; ++i) { if (kTs_[i] <= kT && kT < kTs_[i+1]) { @@ -167,9 +161,15 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, } } - // Randomly sample between temperature i and i+1 - double f = (kT - kTs_[i]) / (kTs_[i+1] - kTs_[i]); - if (f > prn(seed)) ++i; + if (settings::temperature_method == TemperatureMethod::NEAREST) { + // Pick closer of two bounding temperatures + if (kT - kTs_[i] > kTs_[i+1] - kT) ++i; + + } else { + // Randomly sample between temperature i and i+1 + double f = (kT - kTs_[i]) / (kTs_[i+1] - kTs_[i]); + if (f > prn(seed)) ++i; + } } // Set temperature index