aboutsummaryrefslogtreecommitdiff
path: root/src/ode_solver.c
diff options
context:
space:
mode:
authory-jan137 <yousefjan24000@gmail.com>2026-03-28 15:03:31 +0300
committery-jan137 <yousefjan24000@gmail.com>2026-03-28 15:03:31 +0300
commitcbf9e2a4d8c7daafda0f8215cac9b0eea751d6d9 (patch)
treed1d3b34b253d46537f94b0306e3ddf6c8c2a70a8 /src/ode_solver.c
parent063b20be98747ba0b288545e653ef9489bf14a54 (diff)
Optimization passHEADmain
Diffstat (limited to 'src/ode_solver.c')
-rw-r--r--src/ode_solver.c21
1 files changed, 8 insertions, 13 deletions
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;
}