Fix use of 'nearest' temperature with S(a,b) data. Closes #1704

This commit is contained in:
Paul Romano 2020-12-08 07:24:51 -06:00
parent 8424f9b366
commit 102bfd47ae

View file

@ -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