@@ -1280,15 +1280,17 @@ kernel void mcx_main_loop(uint media[],OutputType field[],float genergy[],uint n
1280
1280
/* * launch new photon when exceed time window or moving from non-zero voxel to zero voxel without reflection */
1281
1281
if ((mediaid==0 && (((isdet & 0xF )==0 && (!gcfg->doreflect || (gcfg->doreflect && n1==gproperty[0 ].w ))) || (isdet==bcAbsorb || isdet==bcCylic) )) || f.t >gcfg->twin1 ){
1282
1282
if (isdet==bcCylic){
1283
- if (flipdir==0 ) p.x =mcx_nextafterf (roundf (p.x +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .x : -gcfg->maxidx .x )),(v.x > 0 .f )-(v.x < 0 .f ));
1284
- if (flipdir==1 ) p.y =mcx_nextafterf (roundf (p.y +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .y : -gcfg->maxidx .y )),(v.y > 0 .f )-(v.y < 0 .f ));
1285
- if (flipdir==2 ) p.z =mcx_nextafterf (roundf (p.z +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .z : -gcfg->maxidx .z )),(v.z > 0 .f )-(v.z < 0 .f ));
1286
- idx1d=(int (floorf (p.z ))*gcfg->dimlen .y +int (floorf (p.y ))*gcfg->dimlen .x +int (floorf (p.x )));
1287
- mediaid=media[idx1d];
1288
- isdet=mediaid & DET_MASK; /* * upper 16bit is the mask of the covered detector */
1289
- mediaid &= MED_MASK; /* * lower 16bit is the medium index */
1290
- GPUDEBUG ((" Cylic boundary condition, moving photon in dir %d at %d flag, new pos=[%f %f %f]\n " ,flipdir,isdet,p.x ,p.y ,p.z ));
1291
- continue ;
1283
+ if (flipdir==0 ) p.x =mcx_nextafterf (roundf (p.x +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .x : -gcfg->maxidx .x )),(v.x > 0 .f )-(v.x < 0 .f ));
1284
+ if (flipdir==1 ) p.y =mcx_nextafterf (roundf (p.y +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .y : -gcfg->maxidx .y )),(v.y > 0 .f )-(v.y < 0 .f ));
1285
+ if (flipdir==2 ) p.z =mcx_nextafterf (roundf (p.z +((idx1d==OUTSIDE_VOLUME_MIN) ? gcfg->maxidx .z : -gcfg->maxidx .z )),(v.z > 0 .f )-(v.z < 0 .f ));
1286
+ if (!(p.x <0 .f ||p.y <0 .f ||p.z <0 .f ||p.x >=gcfg->maxidx .x ||p.y >=gcfg->maxidx .y ||p.z >=gcfg->maxidx .z )){
1287
+ idx1d=(int (floorf (p.z ))*gcfg->dimlen .y +int (floorf (p.y ))*gcfg->dimlen .x +int (floorf (p.x )));
1288
+ mediaid=media[idx1d];
1289
+ isdet=mediaid & DET_MASK; /* * upper 16bit is the mask of the covered detector */
1290
+ mediaid &= MED_MASK; /* * lower 16bit is the medium index */
1291
+ GPUDEBUG ((" Cylic boundary condition, moving photon in dir %d at %d flag, new pos=[%f %f %f]\n " ,flipdir,isdet,p.x ,p.y ,p.z ));
1292
+ continue ;
1293
+ }
1292
1294
}
1293
1295
GPUDEBUG ((" direct relaunch at idx=[%d] mediaid=[%d], ref=[%d] bcflag=%d timegate=%d\n " ,idx1d,mediaid,gcfg->doreflect ,isdet,f.t >gcfg->twin1 ));
1294
1296
if (launchnewphoton<mcxsource>(&p,&v,&f,&rv,&prop,&idx1d,field,&mediaid,&w0,(mediaidold & DET_MASK),ppath,
0 commit comments