ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/data.c
(Generate patch)

Comparing ray/src/rt/data.c (file contents):
Revision 2.38 by greg, Tue Mar 12 18:45:48 2024 UTC vs.
Revision 2.41 by greg, Thu Mar 14 06:30:53 2024 UTC

# Line 409 | Line 409 | data_interp(DATARRAY *dp, double *pt, double coef, DAT
409          DATARRAY        sd;
410          int             stride, i;
411          double          x, c0, c1, y0, y1;
412 +                                        /* unlikely, but may as well check */
413 +        if ((-FTINY <= coef) & (coef <= FTINY))
414 +                return(0.);
415                                          /* set up dimensions for recursion */
416          if (dp->nd > 1) {
417                  sd.name = dp->name;
# Line 430 | Line 433 | data_interp(DATARRAY *dp, double *pt, double coef, DAT
433                          i = dp->dim[0].ne - 2;
434          } else {                                /* unevenly spaced points */
435                  int     lower, upper;
436 <                if (dp->dim[0].siz > 0.0) {
436 >                if (dp->dim[0].siz > 0.) {
437                          lower = 0;
438                          upper = dp->dim[0].ne;
439                  } else {
# Line 475 | Line 478 | data_interp(DATARRAY *dp, double *pt, double coef, DAT
478                          for (i = sd.dim[0].ne; i--; )
479                                  rvec[i] += c0*sd.arr.d[i]
480                                          + c1*sd.arr.d[i+stride];
481 <                        return(0.);
479 <                }
480 <                if (dp->type == SPECTY) {
481 >                } else if (dp->type == SPECTY) {
482                          double  f;
483                          sd.arr.s = dp->arr.s + i*stride;
484 <                        f = ldexp(1.0, (int)sd.arr.s[sd.dim[0].ne]
485 <                                        - (COLXS+8));
486 <                        for (i = sd.dim[0].ne; i--; )
487 <                                rvec[i] += c0*f*(sd.arr.s[i] + 0.5);
484 >                        if ((sd.arr.s[sd.dim[0].ne] > 0) & ((-FTINY>c0)|(c0>FTINY))) {
485 >                                f = ldexp(c0, (int)sd.arr.s[sd.dim[0].ne]-(COLXS+8));
486 >                                for (i = sd.dim[0].ne; i--; )
487 >                                        rvec[i] += f*(sd.arr.s[i] + .5);
488 >                        }
489                          sd.arr.s += stride;
490 <                        f = ldexp(1.0, (int)sd.arr.s[sd.dim[0].ne]
491 <                                        - (COLXS+8));
490 >                        if ((sd.arr.s[sd.dim[0].ne] > 0) & ((-FTINY>c1)|(c1>FTINY))) {
491 >                                f = ldexp(c1, (int)sd.arr.s[sd.dim[0].ne]-(COLXS+8));
492 >                                for (i = sd.dim[0].ne; i--; )
493 >                                        rvec[i] += f*(sd.arr.s[i] + .5);
494 >                        }
495 >                } else {
496 >                        sd.arr.c = dp->arr.c + i*stride;
497                          for (i = sd.dim[0].ne; i--; )
498 <                                rvec[i] += c1*f*(sd.arr.s[i] + 0.5);
499 <                        return(0.);
498 >                                rvec[i] += c0*colrval(sd.arr.c[i],sd.type)
499 >                                        + c1*colrval(sd.arr.c[i+stride],sd.type);
500                  }
501 <                sd.arr.c = dp->arr.c + i*stride;
495 <                for (i = sd.dim[0].ne; i--; )
496 <                        rvec[i] += c0*colrval(sd.arr.c[i],sd.type)
497 <                                + c1*colrval(sd.arr.c[i+stride],sd.type);
498 <                return(0.);
501 >                return(0.);             /* return value ignored */
502          }
503                                          /* get dependent variable */
504          if (dp->nd > 1) {
# Line 519 | Line 522 | data_interp(DATARRAY *dp, double *pt, double coef, DAT
522                          y1 = dp->arr.d[i+1];
523                  } else if (dp->type == SPECTY) {
524                          if (dp->arr.s[dp->dim[0].ne]) {
525 <                                double  f = ldexp(1.0, -(COLXS+8) +
526 <                                                (int)dp->arr.s[dp->dim[0].ne]);
527 <                                y0 = (dp->arr.s[i] + 0.5)*f;
528 <                                y1 = (dp->arr.s[i+1] + 0.5)*f;
525 >                                double  f = dp->arr.s[dp->dim[0].ne]
526 >                                        ? ldexp(1., -(COLXS+8) +
527 >                                                (int)dp->arr.s[dp->dim[0].ne])
528 >                                        : 0.;
529 >                                y0 = f*(dp->arr.s[i] + 0.5);
530 >                                y1 = f*(dp->arr.s[i+1] + 0.5);
531                          } else
532 <                                y0 = y1 = 0.0;
532 >                                y0 = y1 = 0.;
533                  } else {
534                          y0 = colrval(dp->arr.c[i],dp->type);
535                          y1 = colrval(dp->arr.c[i+1],dp->type);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines