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

Comparing ray/src/util/rttree_reduce.c (file contents):
Revision 2.16 by greg, Thu Aug 18 00:52:48 2016 UTC vs.
Revision 2.19 by greg, Mon May 11 20:26:12 2020 UTC

# Line 19 | Line 19 | int    log2g = 4;              /* log2 of grid resolution */
19   int     infmt = 'a';            /* input format ('a','f','d') */
20   double  pctcull = 95.;          /* target culling percentile */
21  
22 < #define dval3(ix,ox,oy)         datarr[((((ix)<<log2g)+(ox))<<log2g)+(oy)]
23 < #define dval4(ix,iy,ox,oy)      datarr[((((((ix)<<log2g)+(iy))<<log2g)+(ox))<<log2g)+(oy)]
22 > #define dval3(ix,ox,oy)         datarr[((size_t)(((ix)<<log2g)+(ox))<<log2g)+(oy)]
23 > #define dval4(ix,iy,ox,oy)      datarr[((((size_t)(((ix)<<log2g)+(iy))<<log2g)+(ox))<<log2g)+(oy)]
24  
25   /* Tensor tree node */
26   typedef struct ttree_s {
# Line 30 | Line 30 | typedef struct ttree_s {
30   } TNODE;
31  
32   #define HISTLEN         300     /* histogram resolution */
33 < #define HISTMAX         10.     /* maximum recorded measure in histogram */
33 > #define HISTMAX         4.      /* maximum recorded measure in histogram */
34  
35   int     histo[HISTLEN];         /* histogram freq. of variance measure */
36  
37   double  tthresh;                /* acceptance threshold (TBD) */
38  
39 < #define var_measure(tp)         ( ((tp)->vmax - (tp)->vmin) / \
39 > #define var_measure(tp)         sqrt( ((tp)->vmax - (tp)->vmin) / \
40                                          (sqrt((tp)->vavg) + .03) )
41   #define above_threshold(tp)     (var_measure(tp) > tthresh)
42  
# Line 223 | Line 223 | read_double(float *rowp, int n)
223                  return(0);
224          }
225          if (rblen < n) {
226 <                rowbuf = (double *)realloc(rowbuf, sizeof(double)*(rblen=n));
226 >                if (rblen) free(rowbuf);
227 >                rowbuf = (double *)malloc(sizeof(double)*(rblen=n));
228                  if (rowbuf == NULL)
229                          error(SYSTEM, "out of memory in read_double");
230          }
# Line 283 | Line 284 | load_data(void)
284                  int     ix, ox;
285                  for (ix = 0; ix < 1<<(log2g-1); ix++)
286                          for (ox = 0; ox < 1<<log2g; ox++)
287 <                                (*readf)(datarr+(((ix<<log2g)+ox)<<log2g),
287 <                                                1<<log2g);
287 >                                (*readf)(&dval3(ix,ox,0), 1<<log2g);
288          } else /* ttrank == 4 */ {
289                  int     ix, iy, ox;
290                  for (ix = 0; ix < 1<<log2g; ix++)
291                      for (iy = 0; iy < 1<<log2g; iy++)
292                          for (ox = 0; ox < 1<<log2g; ox++)
293 <                                (*readf)(datarr +
294 <                                (((((ix<<log2g)+iy)<<log2g)+ox)<<log2g),
295 <                                                1<<log2g);
293 >                                (*readf)(&dval4(ix,iy,ox,0), 1<<log2g);
294          }
295          (*readf)(NULL, 0);      /* releases any buffers */
296          if (infmt == 'a') {
# Line 332 | Line 330 | do_reciprocity(void)
330                          }
331          } else /* ttrank == 4 */ {
332                  int     ix, iy, ox, oy;
333 <                for (ix = 1; ix < siz; ix++)
334 <                    for (iy = 1; iy < siz; iy++)
335 <                        for (ox = 0; ox < ix; ox++)
336 <                            for (oy = 0; oy < iy; oy++) {
333 >                for (ix = 0; ix < siz; ix++)
334 >                    for (iy = 0; iy < siz; iy++) {
335 >                        int     cnt = ix*siz + iy;
336 >                        for (ox = 0; cnt > 0; ox++)
337 >                            for (oy = 0; oy < siz; oy++) {
338                                  v1p = &dval4(siz-1-ix,siz-1-iy,ox,oy);
339                                  v2p = &dval4(siz-1-ox,siz-1-oy,ix,iy);
340                                  *v1p = *v2p = .5f*( *v1p + *v2p );
341 +                                if (--cnt <= 0)
342 +                                        break;
343                              }
344 +                    }
345          }
346   }
347  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines