aboutsummaryrefslogtreecommitdiff
path: root/nlsolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'nlsolve.c')
-rw-r--r--nlsolve.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/nlsolve.c b/nlsolve.c
index 960a8e9..708cd08 100644
--- a/nlsolve.c
+++ b/nlsolve.c
@@ -100,7 +100,7 @@ struct NLSolvePriv {
};
int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval,
- NLEqJacobianCallback eq_jac_eval, void *opaque, double *coeffs)
+ NLEqJacobianCallback eq_jac_eval, void *opaque, double *coeffs, int fast_abort)
{
NLSolvePriv *s = ctx->priv;
int64_t start, totaltime_start;
@@ -209,6 +209,10 @@ int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval,
it, s->delta[max_idx], ctx->atol);
ret = 0;
goto finish;
+ } else if ((fast_abort && fabs(s->delta[max_idx]) > 1e6) ||
+ s->delta[max_idx] > 1e18) {
+ tdi_log(&ctx->logger, 2, "max(delta) %g, aborting\n", s->delta[max_idx]);
+ return -EDOM;
}
cblas_daxpy(s->solve_order, 1.0, s->delta, 1, coeffs, 1);