mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Fix use of 'nearest' temperature with S(a,b) data. Closes #1704
This commit is contained in:
parent
8424f9b366
commit
102bfd47ae
1 changed files with 12 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue