Skip to content

Commit d4ce7d6

Browse files
committed
Fix swapped x0,y0. Do manual tail recursion so the debugger gives sane output
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@17903 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent e1246f9 commit d4ce7d6

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

Compiler/runtime/SimulationResultsCmpTubes.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ typedef struct {
407407
size_t size;
408408
} addTargetEventTimesRes;
409409

410-
static inline size_t findNextEvent(size_t i, double *time, size_t n, double xabstol)
410+
static size_t findNextEvent(size_t i, double *time, size_t n, double xabstol)
411411
{
412412
for (i; i < n; i++) {
413413
if (almostEqualRelativeAndAbs(time[i-1],time[i],0,xabstol) || (i<n-1 && almostEqualRelativeAndAbs(time[i],time[i+1],0,xabstol))) return i;
@@ -508,10 +508,14 @@ static addTargetEventTimesRes mergeTimelines(addTargetEventTimesRes ref, addTarg
508508

509509
static addTargetEventTimesRes removeUneventfulPoints(addTargetEventTimesRes in, int removeNonEvents, double reltol, double xabstol)
510510
{
511-
int i,iter=0;
511+
int i,iter,niter=0;
512512
addTargetEventTimesRes res;
513513
res.values = (double*) GC_malloc_atomic(in.size * sizeof(double));
514514
res.time = (double*) GC_malloc_atomic(in.size * sizeof(double));
515+
// printf("niter x: %ld\n", in.size);
516+
tail:
517+
iter=0;
518+
niter++;
515519
/* Don't remove first point */
516520
res.values[0] = in.values[0];
517521
res.time[0] = in.time[0];
@@ -522,8 +526,8 @@ static addTargetEventTimesRes removeUneventfulPoints(addTargetEventTimesRes in,
522526
if (in.values[i] == in.values[i-1] && isEvent) {
523527
continue;
524528
}
525-
double x0 = res.values[res.size-1];
526-
double y0 = res.time[res.size-1];
529+
double x0 = res.time[res.size-1];
530+
double y0 = res.values[res.size-1];
527531
double x = in.time[i];
528532
double y = in.values[i];
529533
double x1 = in.time[i+1];
@@ -551,14 +555,16 @@ static addTargetEventTimesRes removeUneventfulPoints(addTargetEventTimesRes in,
551555
res.size++;
552556
}
553557
if (iter) {
554-
return removeUneventfulPoints(res,removeNonEvents,reltol / 4.0,xabstol);
558+
in = res;
559+
reltol /= 10.0;
560+
goto tail;
555561
} else {
556562
return res;
557563
}
558564
}
559565

560566
/* Adds a relative tolerance compared to the reference signal. Overwrites the target values vector. */
561-
static inline void addRelativeTolerance(double *targetValues, double *sourceValues, size_t length, double reltol, double abstol, int direction)
567+
static void addRelativeTolerance(double *targetValues, double *sourceValues, size_t length, double reltol, double abstol, int direction)
562568
{
563569
int i;
564570
if (direction > 0) {

0 commit comments

Comments
 (0)