cantera/src/numerics/FuncEval.cpp
Ray Speth ecb2868a18 [Reactor] Suppress recoverable errors in RHS function by default
Accumulate errors and show them if the integrator actually fails. In "verbose"
mode, the errors are shown as they occur.
2016-10-23 22:42:53 -04:00

54 lines
1.3 KiB
C++

#include "cantera/numerics/FuncEval.h"
#include <sstream>
namespace Cantera
{
FuncEval::FuncEval()
: m_suppress_errors(false)
{
}
int FuncEval::eval_nothrow(double t, double* y, double* ydot)
{
try {
eval(t, y, ydot, m_sens_params.data());
} catch (CanteraError& err) {
if (suppressErrors()) {
m_errors.push_back(err.getMessage());
} else {
writelog(err.what());
}
return 1; // possibly recoverable error
} catch (std::exception& err) {
if (suppressErrors()) {
m_errors.push_back(err.what());
} else {
writelog("FuncEval::eval_nothrow: unhandled exception:\n");
writelog(err.what());
writelogendl();
}
return -1; // unrecoverable error
} catch (...) {
std::string msg = "FuncEval::eval_nothrow: unhandled exception"
" of unknown type\n";
if (suppressErrors()) {
m_errors.push_back(msg);
} else {
writelog(msg);
}
return -1; // unrecoverable error
}
return 0; // successful evaluation
}
std::string FuncEval::getErrors() const {
std::stringstream errs;
for (const auto& err : m_errors) {
errs << err;
errs << "\n";
}
return errs.str();
}
}