From cbf9e2a4d8c7daafda0f8215cac9b0eea751d6d9 Mon Sep 17 00:00:00 2001 From: y-jan137 Date: Sat, 28 Mar 2026 15:03:31 +0300 Subject: Optimization pass --- src/ode_solver.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'src/ode_solver.c') diff --git a/src/ode_solver.c b/src/ode_solver.c index 566cb2a..6c6963d 100644 --- a/src/ode_solver.c +++ b/src/ode_solver.c @@ -24,12 +24,13 @@ static const double dp_e[7] = { ODEResult ode_solve(ode_rhs_fn f, const double *y0, double t0, double t1, const double *params, int dim, double atol, double rtol, void *ctx) { - double **k = (double **)xmalloc(7 * sizeof(double *)); - for (int i = 0; i < 7; i++) k[i] = vec_alloc(dim); - double *y = vec_alloc(dim); - double *y5 = vec_alloc(dim); - double *err = vec_alloc(dim); - double *stg = vec_alloc(dim); + double *buf = vec_alloc(11 * dim); + double *k[7]; + for (int i = 0; i < 7; i++) k[i] = buf + i * dim; + double *y = buf + 7 * dim; + double *y5 = buf + 8 * dim; + double *err = buf + 9 * dim; + double *stg = buf + 10 * dim; ODEResult res = { vec_alloc(dim), 0 }; vec_copy(y0, y, dim); @@ -109,13 +110,7 @@ ODEResult ode_solve(ode_rhs_fn f, const double *y0, double t0, double t1, } vec_copy(y, res.y, dim); - for (int i = 0; i < 7; i++) free(k[i]); - - free(k); - free(y); - free(y5); - free(err); - free(stg); + free(buf); return res; } -- cgit v1.2.3