diff options
Diffstat (limited to 'nlsolve.c')
-rw-r--r-- | nlsolve.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -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); |