Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/lamont/src/compiler/c-target/fragments/grid3D.in
ViewVC logotype

Diff of /branches/lamont/src/compiler/c-target/fragments/grid3D.in

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2301, Tue Mar 19 19:25:25 2013 UTC revision 2302, Tue Mar 19 20:17:15 2013 UTC
# Line 104  Line 104 
104      for (int x = xBounds.i[0]; x <= xBounds.i[1]; x++){      for (int x = xBounds.i[0]; x <= xBounds.i[1]; x++){
105          for (int y = yBounds.i[0]; y <= yBounds.i[1]; y++) {          for (int y = yBounds.i[0]; y <= yBounds.i[1]; y++) {
106              for (int z = zBounds.i[0]; z <= zBounds.i[1]; z++) {              for (int z = zBounds.i[0]; z <= zBounds.i[1]; z++) {
107                  int neighborCellIndx = UMAD(y,gridSize.r[1] + 2,x);                  int neighborCellIndx = UMAD(UMAD(y,gridSize.r[0] + 2,x),gridSize.r[1],z);
                                       //  UMAD(UMAD(cell[2], ctx->gridSize[1], cell[1]), ctx->gridSize[0], cell[0]);  
    // i*length*width + j*width + k  
108                  GridItem_t *neighborCellStrands = Diderot_GridFindCellStart(neighborCellIndx,ctx);                  GridItem_t *neighborCellStrands = Diderot_GridFindCellStart(neighborCellIndx,ctx);
109                  while (neighborCellStrands != 0) {                  while (neighborCellStrands != 0) {
110                      if (isWithinRadius3D(strandPosition,strands[neighborCellStrands->strandId]->pos, radius)) {                      if (isWithinRadius3D(strandPosition,strands[neighborCellStrands->strandId]->pos, radius)) {
# Line 128  Line 126 
126    
127      return seq;      return seq;
128  }  }
   
 /************* Query Functions *******************/  
 Diderot_DynSeq_t * spherical_query3D(@STRANDTY@ ** strands,  
                                  @STRANDTY@ * qStrand,  
                                  GridContext2D * ctx,  
                                  Diderot_real_t radius)  
 {  
   
     int gridPos[3];  
   
     Diderot_vec3_t strandPosition = qStrand->pos;  
   
     worldToGrid3D(strandPosition,ctx,gridPos);  
   
   
     int xBounds[2] = {clamp_int(gridPos[0] - ceil(radius/(float)ctx->cellSize[0]) + 1,  
                                 0,  
                                 ctx->gridSize[0]-1),  
                       clamp_int(gridPos[0] + ceil(radius/(float)ctx->cellSize[0]) + 1,  
                                 0,  
                                 ctx->gridSize[0]-1)};  
   
     int yBounds[2] =  {clamp_int(gridPos[1] - ceil(radius/(float)ctx->cellSize[1]) + 1,  
                                  0,  
                                  ctx->gridSize[1]-1),  
                        clamp_int(gridPos[1] + ceil(radius/(float)ctx->cellSize[1]) + 1,  
                                  0,  
                                  ctx->gridSize[1]-1)};  
   
     int zBounds[2] =  {clamp_int(gridPos[2] - ceil(radius/(float)ctx->cellSize[2]) + 1,  
                                  0,  
                                  ctx->gridSize[2]-1),  
                        clamp_int(gridPos[2] + ceil(radius/(float)ctx->cellSize[2]) + 1,  
                                  0,  
                                  ctx->gridSize[2]-1)};  
   
     StrandItem_t * results = NULL;  
     for (int x = xBounds[0]; x < (xBounds[1] + 1); x++){  
         for (int y = yBounds[0]; y < (yBounds[1] + 1); y++) {  
             for (int z = zBounds[0]; z < (zBounds[1] + 1); z++) {  
                 int cell[3] = {x,y,z};  
                 int neighborCellIndx = UMAD(UMAD(cell[2], ctx->gridSize[1], cell[1]), ctx->gridSize[0], cell[0]);  
                 StrandItem_t * neighborCellStrands = ctx->grid[neighborCellIndx];  
                 while(neighborCellStrands != NULL) {  
                     if(isWithinRadius3D(strandPosition,strands[neighborCellStrands->strandId]->pos,radius)){  
                         if(neighborCellStrands->strandId != qStrand->strandId) {  
                             StrandItem_t * neighbor = (StrandItem_t *) malloc(sizeof(StrandItem_t));  
                             neighbor->strandId = neighborCellStrands->strandId;  
                             neighbor->next = results;  
                             results = neighbor;  
                         }  
                     }  
                     neighborCellStrands = neighborCellStrands->next;  
                 }  
             }  
         }  
     }  
     return results;  
 }  

Legend:
Removed from v.2301  
changed lines
  Added in v.2302

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0