[MOAB-dev] Digging into ray_intersect_* in the OBBTreeTool - proposing an interface change

Patrick Shriwise shriwise at wisc.edu
Mon Dec 12 21:47:02 CST 2016


Hi all,

Having seen how many other ray tracing codes operate I think that these 
are valuable changes to the OrientedBoxTreeTool which will allow it to 
be extended to many other applications.

Pulling out these DAGMC-specific intersection disambiguation operations 
into separate functions for filtering intersections will also allow them 
to be applied in other ray tracing kernels (AdaptiveKDTree, etc.) if 
desired.

-Patrick

Patrick C. Shriwise
Research Fellow
University of Wisconsin - Madison
Engineering Research Building - Rm. 428
1500 Engineering Drive
Madison, WI 53706
(608) 446-8173

On 12/09/2016 04:44 PM, Paul Wilson wrote:
>
> Hello all,
>
> I have been spending a lot of quality time with the ray_intersect_* 
> methods of the OrientedBoxTreeTool over the last few weeks.  I think I 
> have (re)learned all the subtleties of the additional code that exists 
> in RayIntersectSets::leaf() (invoked with API function 
> ray_intersect_sets).
>
> In general, these are all additional tests that make sense only in the 
> context of a call from DagMC:
>
>   * is this facet in a list of previous facets intersected by this ray
>     prior to this call
>   * is this facet in a list of previous facets (or their neighborhood)
>     encountered during this call
>   * is this intersection a piercing or glancing intersection as
>     defined by notions of surface sense known to DagMC
>
> There is then a complex logic related to how many intersections to 
> keep based on three quantities: two are a "window" in which the 
> distance to distance to intersection must fall and the third is a 
> count of how many intersections to keep.
>
> The logic for ray_intersect_triangles() includes none of this. I was 
> contemplating an interface change to ray_intersect_triangles() that 
> would add enough information to include the same tests, and 
> modularizing those tests to reuse code in both places.  However, (a) 
> the interface for that would be awkward and (b) it would be imposing 
> DagMC conventions on even more code.
>
> Instead I propose the reduce the interface of all ray_intersect_* 
> methods to include only the following:
>
>   * const EntityHandle root_set: points to the root of the OBB Tree
>   * const double tolerance: for use in searching for intersections
>     (largely unused at the moment, I think)
>   * const double ray_point[3]: starting point of ray
>   * const double unit_vector[3]: direction of ray
>   * std::pair<double*, double*> window: window to narrow search for
>     interesting intersections
>   * std::pair<double*, double*> register_intersection(...): call back
>     function to perform application specific filtering/disambiguation
>     of possible intersection, returning an updated window
>
> These methods would no longer return lists of intersections, but would 
> return them one at a time for consideration by the calling application.
>
> Since this is such a major interface change, I thought I'd solicit 
> feedback before embarking upon it.  It won't necessarily bee that much 
> code change, but who knows how it impacts other possible users of this 
> code???
>
> Paul
>
>
> -- 
> -- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ --
>
> Paul P.H. Wilson
> Grainger Professor of Nuclear Engineering
> 608-263-0807
> paul.wilson at wisc.edu
> 419 Engineering Research Bldg
> 1500 Engineering Dr, Madison, WI 53706
> calendar:http://go.wisc.edu/pphw-cal
>
> Computational Nuclear Engineering Research Group
> cnerg.engr.wisc.edu
>
> Faculty Director, Advanced Computing Initiative
> aci.wisc.edu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/moab-dev/attachments/20161212/aa100fc7/attachment.html>


More information about the moab-dev mailing list