Adding the attribute allow_discontinuities="true" to a phase's
'thermo' node (CTML) or adding 'allow_discontinuous_thermo' to a
phase's 'options' argument (CTI) will disable the automatic adjustment
of the provided polynomials so that enthalpy and entropy are
continuous at the midpoint temperature.
Cherry-pick of trunk r2590.
Since computing the residual norm effectively requires p**2, the
correct limit to avoid an overflow is sqrt(DBL_MAX), or roughly
exp(300).
This change fixes crashes due to SIGFPE in cases where floating point
exceptions have been enabled, and also fixes a few cases where the
solver did not previously converge.
Almost every class derived from SpeciesThermoInterpType used the same
implementation of the minTemp, maxTemp, refPressure, and speciesIndex,
so it makes more sense to just implement these in the base class.
This corrects the behavior in cases where the correct temperature is below the
nominal minimum temperature for the phase.
Add test cases for this and analogous cases for the maximum temperature and
setState_HPorUV.
Fixes Issue 151.
Avoid an O(N) lookup for the thermo info for each species. Using an
unordered_map would be even better, but there's no portable way to do that
without Boost.
The array 'c' is only long enough to hold the thermo parameters filled in
by the StatMech class, so it's necessary to make sure the type is correct
first and abort if it's not, rather than calling reportParams first and
corrupting the stack.
To eliminate discontinuities in Cp/R, H/RT and S/R between the high- and
low-temperature NASA polynomials, formulate and solve a linear least squares
problem for a set of 11 coefficients (3 of the original coefficients 14 being
eliminated by the continuity requirements) which minimizes the changes in the
computed properties at a set of temperatures covering the valid temperature
range.
We expect the high- and low-temperature NASA polynomials for each species to be
continuous in a number of places, despite many frequently used thermo databases
having data that is inconsistent.
In addition to warning about discontinuities, We now modify the provided
coefficients to ensure continuity at the midpoint temperature. This resolves
numerical issues, e.g. with the algorithm used for setting the state of a
reactor network.
Floating point values are read using a std::stringstream imbued with the "C"
locale to avoid problems with using std::atof when the user's locale uses a
character other than "." as the decimal separator.
Patch provided by Phillip Berndt.
Fixes Issue 153.
Eliminated local alias to array of charges in some functions. Inlined the
"charge" function to mitigate any performance impact. Fixes a number of shadowed
variable warnings.