From 4dbd8b7f9a999b08a53ae5b66a86b9c2d3d474b0 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Mon, 19 Jul 2021 17:37:23 +0200 Subject: [PATCH] Preliminary fix for the 'interpolate' function. Interpolation of 1D vectors is o.k. now, multi-dimensional vectors are not (yet) supported. --- src/maths/cmaths/cmath4.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/maths/cmaths/cmath4.c b/src/maths/cmaths/cmath4.c index fb27b2cd6..9dfc8a27b 100644 --- a/src/maths/cmaths/cmath4.c +++ b/src/maths/cmaths/cmath4.c @@ -161,6 +161,10 @@ cx_interpolate(void *data, short int type, int length, int *newlength, short int if (grouping == 0) grouping = length; + if (grouping != length) { + fprintf(cp_err, "Error: interpolation of multi-dimensional vectors is currntly not supported\n"); + return (NULL); + } /* First do some sanity checks. */ if (!pl || !pl->pl_scale || !newpl || !newpl->pl_scale) { fprintf(cp_err, "Internal error: cx_interpolate: bad scale\n"); @@ -216,10 +220,12 @@ cx_interpolate(void *data, short int type, int length, int *newlength, short int if (!cp_getvar("polydegree", CP_NUM, °ree, 0)) degree = 1; + /* FIXME: this function is defect: ns data cannot have same base and grouping + as the original data. Will now do only if grouping == length. */ for (base = 0; base < length; base += grouping) { if (!ft_interpolate((double *) data + base, d + base, os->v_realdata + base, grouping, - ns->v_realdata + base, grouping, degree)) + ns->v_realdata + base, ns->v_length, degree)) { tfree(d); return (NULL);