From 975abbee31abe7f8299c3cc4583f76214f699671 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 9 Apr 2018 10:13:44 +0200 Subject: nlsolve: faster abort on divergence --- nlsolve.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'nlsolve.c') 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); -- cgit v1.2.3