From d1175bc038e68c02852698e76eaef2fcf810389c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Fri, 14 Aug 2009 16:42:03 +0000 Subject: [PATCH] - Re-instate the fully unconditional "snap-to-last" behaviour in uniquify(). Mention that "snap-to-last" is a no-op when second-to-last point is more than apart from the last point. - Assert that the is a non-negative value. - For benefit of Emacs indenting, adjust license block. --- uniquepoints.c | 54 +++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/uniquepoints.c b/uniquepoints.c index a1ac88bf..6e402e8d 100644 --- a/uniquepoints.c +++ b/uniquepoints.c @@ -13,25 +13,26 @@ //=========================================================================== /* -Copyright 2009 SINTEF ICT, Applied Mathematics. -Copyright 2009 Statoil ASA. + Copyright 2009 SINTEF ICT, Applied Mathematics. + Copyright 2009 Statoil ASA. -This file is part of The Open Reservoir Simulator Project (OpenRS). + This file is part of The Open Reservoir Simulator Project (OpenRS). -OpenRS is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. + OpenRS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -OpenRS is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + OpenRS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with OpenRS. If not, see . + You should have received a copy of the GNU General Public License + along with OpenRS. If not, see . */ +#include #include #include #include @@ -79,11 +80,13 @@ static int createSortedList(double *list, int n, int m, /*----------------------------------------------------------------- - Remove points that are closer than tolerance in list - of increasing doubles + Remove points less than apart in of increasing + doubles. */ static int uniquify(int n, double *list, double tolerance) { + assert (!(tolerance < 0.0)); + if (n<1) return 0; int i; int pos = 0; @@ -96,14 +99,19 @@ static int uniquify(int n, double *list, double tolerance) } } - /* Keep last value (one way or the other...) */ -#if 0 - if (val + tolerance < list[n-1]){ - list[pos-1] = list[n-1]; - } -#else - list[pos-1] = list[n-1]; -#endif + /* + Preserve outer z-boundary. + + This operation is a no-op in the case + + list[pos-2] + tolerance < list[n-1]. + + If, however, the second to last point is less than + away from the last point (list[n-1]), we remove this + second-to-last point as it cannot be distinguished from "final" + point. + */ + list[pos-1] = list[n-1]; return pos; }