diff --git a/src/thermal.cpp b/src/thermal.cpp index 29f8c83a4..176980592 100644 --- a/src/thermal.cpp +++ b/src/thermal.cpp @@ -1,6 +1,6 @@ #include "thermal.h" -#include // for sort, move, min, max +#include // for sort, move, min, max, find #include // for round, sqrt, fabs #include // for stringstream @@ -148,7 +148,7 @@ ThermalScattering::ThermalScattering(hid_t group, const std::vector& tem void ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, - double* elastic, double* inelastic) + double* elastic, double* inelastic) const { // Determine temperature for S(a,b) table double kT = sqrtkT*sqrtkT; @@ -180,12 +180,9 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, auto& sab = data_[i]; // Get index and interpolation factor for inelastic grid - int i_grid; - double f; - if (E < sab.inelastic_e_in_.front()) { - i_grid = 0; - f = 0.0; - } else { + int i_grid = 0; + double f = 0.0; + if (E >= sab.inelastic_e_in_.front()) { auto& E_in = sab.inelastic_e_in_; i_grid = lower_bound_index(E_in.begin(), E_in.end(), E); f = (E - E_in[i_grid]) / (E_in[i_grid+1] - E_in[i_grid]); @@ -221,7 +218,7 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, } // Get interpolation factor for elastic grid - f = (E - E_in[i_grid])/(E_in[i_grid+1] - E_in[i_grid]); + f = (E - E_in[i_grid]) / (E_in[i_grid+1] - E_in[i_grid]); // Calculate S(a,b) elastic scattering cross section auto& xs = sab.elastic_P_; @@ -233,6 +230,13 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp, } } +bool +ThermalScattering::has_nuclide(const char* name) const +{ + std::string nuc {name}; + return std::find(nuclides_.begin(), nuclides_.end(), nuc) != nuclides_.end(); +} + //============================================================================== // ThermalData implementation //============================================================================== diff --git a/src/thermal.h b/src/thermal.h index 922a897b5..341f1799e 100644 --- a/src/thermal.h +++ b/src/thermal.h @@ -78,7 +78,8 @@ public: double tolerance, const double* minmax); void calculate_xs(double E, double sqrtkT, int* i_temp, double* elastic, - double* inelastic); + double* inelastic) const ; + bool has_nuclide(const char* name) const; std::string name_; // name of table, e.g. "c_H_in_H2O" double awr_; // weight of nucleus in neutron masses