diff options
Diffstat (limited to 'nlsolve.c')
-rw-r--r-- | nlsolve.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -94,6 +94,9 @@ struct NLSolvePriv { uint64_t calc_eq_coeffs_count; uint64_t calc_eq_coeffs_time; + + uint64_t var_eval_count; + uint64_t var_eval_time; }; int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval, @@ -129,6 +132,10 @@ int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval, var_ctx->transform_tmp, ctx->solve_order[i][0], 0.0, var_ctx->vars[j], ctx->solve_order[i][0]); } } + s->var_eval_count++; + s->var_eval_time += gettime() - start; + + start = gettime(); // build equation coeffs for (int i = 0; i < s->nb_equations; i++) { @@ -188,6 +195,9 @@ int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval, } } + s->calc_eq_coeffs_count++; + s->calc_eq_coeffs_time += gettime() - start; + // solve for delta ret = tdi_pssolve_solve(s->ps_ctx, s->eq_coeffs, s->rhs, s->delta); if (ret < 0) @@ -221,6 +231,12 @@ void tdi_solver_print_stats(NLSolveContext *ctx) NLSolvePriv *s = ctx->priv; tdi_log(&ctx->logger, 2, + "%g%% variables evaluation: %lu, " + "total time %g s, avg time per call %g ms\n", + (double)s->var_eval_time * 100 / s->solve_time, + s->var_eval_count, (double)s->var_eval_time / 1e6, + (double)s->var_eval_time / s->var_eval_count / 1e3); + tdi_log(&ctx->logger, 2, "%g%% calc equation coefficients: %lu, " "total time %g s, avg time per call %g ms\n", (double)s->calc_eq_coeffs_time * 100 / s->solve_time, |