<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><div>Hi Hung-Jun,</div><div><br></div><div>Here is what I did:</div><div><br></div><div>1) In Cubit, I created a sphere or radius 10 centered at the origin and exported as *.sat (attached). It is a volume with one surface.&nbsp;I checked this using mbsize:</div><div><br></div><div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">$ mbsize -g sphere.sat&nbsp;</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">File sphere.sat:</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">Read 1 ACIS Entities from the input file</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace,
 sans-serif"><br></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">ERROR: Attribute type -1 not recognized.</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><br></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">Constructed 1 Volume: 1</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;&nbsp; type &nbsp;count &nbsp; total &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; minimum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; average &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rms &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maximum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std.dev.</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">------- ------ ------- ----------------- -----------------
 ----------------- ----------------- -----------------</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;&nbsp; &nbsp;Tri &nbsp;69168 1.3e+03 &nbsp; &nbsp; &nbsp; &nbsp;0.00067391 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.018166 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.020102 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.028321 &nbsp; &nbsp; &nbsp; &nbsp; 0.0086069</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">1D Side 207504 4.7e+04 &nbsp; &nbsp; &nbsp; &nbsp; 0.0056637 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.22681 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.23829 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33655 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.073068</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;Vertex &nbsp;34586</font></div><div><font class="Apple-style-span" face="'Courier New', courier,
 monaco, monospace, sans-serif"><br></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">Surface 1:</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;&nbsp; type &nbsp;count &nbsp; total &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; minimum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; average &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rms &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maximum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std.dev.</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">------- ------ ------- ----------------- ----------------- ----------------- ----------------- -----------------</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;&nbsp; &nbsp;Tri &nbsp;69168 1.3e+03 &nbsp; &nbsp; &nbsp; &nbsp;0.00067391 &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp;0.018166 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.020102 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.028321 &nbsp; &nbsp; &nbsp; &nbsp; 0.0086069</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">1D Side 207504 4.7e+04 &nbsp; &nbsp; &nbsp; &nbsp; 0.0056637 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.22681 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.23829 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33655 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.073068</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;Vertex &nbsp;34586</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><br></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">Volume 1:</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">NO
 MESH</font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><br></font></div></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt">2)&nbsp;Use gdb to run ray_fire_test in /tools/dagmc. I use a debugger so that I can set variable values and check the results of MBOrientedBoxTreeTool::ray_intersect_sets. Fire a ray in the +x direction from (-20,0,0) against volume 1. This takes a long time to run because the default faceting tolerance is unexpectedly small (10^-4).</div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><br></div><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">$ gdb ray_fire_test</font></div><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">(gdb) run -f -20 0 0 1 0 0 -i 1 sphere.sat</font></div><div
 style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><br></font></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">Firing user-specified rays at volume 1</font></div><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;Ray: point = [-20 0 0] dir = [1 0 0]</font></div><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;&nbsp; &nbsp; &nbsp; hits surf_id 1 dist=10.0001 new_xyz=[-9.99993 0 0]</font></div><div style="font-size: 10pt; "><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif">&nbsp;done.</font></div><div><br></div></div><div style="font-family:arial,
 helvetica, sans-serif;font-size:10pt">Things are looking good. With the default values of this test, the entrance intersection into the sphere was found at (-10,0,0).</div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><br></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt">3) Now try to find both intersections. Set a breakpoint before the ray_intersect_sets call and change the tolerance to a value larger than the farthest possible intersection in your geometry.</div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><br></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb)&nbsp;run</span></font></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span
 class="Apple-style-span" style="font-size: small;">(gdb) break MBOrientedBoxTreeTool::ray_intersect_sets</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">Breakpoint 2 at 0x45027a: file ../../../../trunk/src/MBOrientedBoxTreeTool.cpp, line 1030.</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) continue</span></font></div><div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">Breakpoint 2, MBOrientedBoxTreeTool::ray_intersect_sets (this=0x12c8210, distances_out=@0x12c84f0,&nbsp;</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span
 class="Apple-style-span" style="font-size: small;">&nbsp;&nbsp; &nbsp;sets_out=@0x12c84c0, facets_out=@0x12c84d8, root_set=12682136550675316740, tolerance=0.001,&nbsp;</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">&nbsp;&nbsp; &nbsp;min_tolerace_intersections=1000, ray_point=0x7fff5d269e90, unit_ray_dir=0x7fff5d269e70,&nbsp;</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">&nbsp;&nbsp; &nbsp;ray_length=0x7fff5d269e68, accum=0x0) at ../../../../trunk/src/MBOrientedBoxTreeTool.cpp:1030</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">1030 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min_tolerace_intersections, distances_out, sets_out, facets_out );</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) set tolerance = 100</span></font></div><div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) next</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">1031 &nbsp; &nbsp; &nbsp;return preorder_traverse( root_set, op, accum );</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) next</span></font></div><div><font
 class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">1032 &nbsp; &nbsp;}</span></font></div></div><div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) print distances_out.size()</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">$4 = 2</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) print distances_out[0]</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">$5 = (const double &amp;)
 @0x7680f80: 29.999929428100586</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) print distances_out[1]</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">$6 = (const double &amp;) @0x7680f88: 10.000070571899414</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) print sets_out[0]</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">$7 = (const long unsigned int &amp;) @0x73bfca0: 12682136550675316737</span></font></div><div><font class="Apple-style-span"
 face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">(gdb) print sets_out[1]</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif"><span class="Apple-style-span" style="font-size: small;">$8 = (const long unsigned int &amp;) @0x73bfca8: 12682136550675316737</span></font></div></div><div><br></div><div>Because I changed the tolerance, both intersections were found (at 10 and 30). They are both from the only surface set.</div><div><br></div><div>Any leaf node that intersects the ray will have its triangles tested if the length of the ray is not limited. Sometimes it is limited as an optimization for particle tracking.</div><div><br></div><div>Brandon&nbsp;</div></div></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><br><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><font size="2"
 face="Tahoma"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> "hongjun@mcs.anl.gov" &lt;hongjun@mcs.anl.gov&gt;<br><b><span style="font-weight: bold;">To:</span></b> Brandon Smith &lt;bsmith82@yahoo.com&gt;<br><b><span style="font-weight: bold;">Cc:</span></b> moab-dev@mcs.anl.gov<br><b><span style="font-weight: bold;">Sent:</span></b> Mon, March 15, 2010 9:33:20 PM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [MOAB-dev] ray_intersect_sets function<br></font><br>
I tried to run "ray_fire_test" with sphere, but I only can get one intersection per surface.<br><br>Could you please explain more how you tested it?<br>Did you get any case that the number of intersected distances/surfaces/facets are more than 1?<br><br>Since "MBOrientedBoxTreeTool::ray_intersect_sets" just find one leaf tree node intersected and check intersection test with triangles in the node, I think there can not be more than 1 intersections per surface.<br><br>Hong-Jun<br><br><br>----- Original Message -----<br>From: "Brandon Smith" &lt;<a ymailto="mailto:bsmith82@yahoo.com" href="mailto:bsmith82@yahoo.com">bsmith82@yahoo.com</a>&gt;<br>To: <a ymailto="mailto:hongjun@mcs.anl.gov" href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a><br>Cc: <a ymailto="mailto:moab-dev@mcs.anl.gov" href="mailto:moab-dev@mcs.anl.gov">moab-dev@mcs.anl.gov</a><br>Sent: Saturday, March 13, 2010 10:53:24 PM GMT -06:00 US/Canada Central<br>Subject: Re: [MOAB-dev]
 ray_intersect_sets function<br><br>Hi Hong-Jun,<br><br>I like to use the ray_fire_test that Steve recently improved. <br><br>As a quick check, I was able to determine both intersections of a ray passing through a spherical surface. In Cubit I created a spherical volume, with one surface. I used ray_fire_test to cast a ray through the sphere (in one side, out the other). I set the tolerance in MBOrientedBoxTreeTool::ray_intersect_sets to a very large number. <br><br>This worked as desired and I found both intersections in a single surface meshset.<br><br>Brandon<br><br><br>----- Original Message ----<br>From: "<a ymailto="mailto:hongjun@mcs.anl.gov" href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a>" &lt;<a ymailto="mailto:hongjun@mcs.anl.gov" href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a>&gt;<br>To: Brandon Smith &lt;<a ymailto="mailto:bsmith82@yahoo.com" href="mailto:bsmith82@yahoo.com">bsmith82@yahoo.com</a>&gt;<br>Cc: <a
 ymailto="mailto:moab-dev@mcs.anl.gov" href="mailto:moab-dev@mcs.anl.gov">moab-dev@mcs.anl.gov</a><br>Sent: Sat, March 13, 2010 9:57:25 PM<br>Subject: Re: [MOAB-dev] ray_intersect_sets function<br><br>Thank you for your reply.<br><br>I used "min_tolerance_intersections" as 20000 which is large enough.<br><br>I think "ray_intersect_sets" finds an intersected box of leaf tree node and then, triangles only in the leaf tree node are checked for intersection again.<br>"min_tolerance_intersections" is used just for the latter triangle intersection check as a maximum number of intersection checks.<br>Therefore, only one intersection per geometry surface meshset is found.<br><br>If it is correct and it is not intended, I will change it.<br>Thanks.<br><br>Hong-Jun<br><br><br>----- Original Message -----<br>From: "Brandon Smith" &lt;<a ymailto="mailto:bsmith82@yahoo.com" href="mailto:bsmith82@yahoo.com">bsmith82@yahoo.com</a>&gt;<br>To: <a
 ymailto="mailto:hongjun@mcs.anl.gov" href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a>, <a ymailto="mailto:moab-dev@mcs.anl.gov" href="mailto:moab-dev@mcs.anl.gov">moab-dev@mcs.anl.gov</a><br>Sent: Friday, March 12, 2010 6:23:11 PM GMT -06:00 US/Canada Central<br>Subject: Re: [MOAB-dev] ray_intersect_sets function<br><br>Hi Hong-jun,<br><br>If I remember correctly (which I may not), this function returns up to min_tolerance_intersections outside of the tolerance distance, and all intersections inside of the tolerance distance. This is an optimization for particle tracking where in general, only the closest intersection is desired.<br><br>If you want all intersections, set the tolerance larger than the maximum extent of your geometry. Alternatively, set min_tolerance_intersections to a large number.<br><br>Brandon<br><br><br>----- Original Message ----<br>From: "<a ymailto="mailto:hongjun@mcs.anl.gov"
 href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a>" &lt;<a ymailto="mailto:hongjun@mcs.anl.gov" href="mailto:hongjun@mcs.anl.gov">hongjun@mcs.anl.gov</a>&gt;<br>To: <a ymailto="mailto:moab-dev@mcs.anl.gov" href="mailto:moab-dev@mcs.anl.gov">moab-dev@mcs.anl.gov</a><br>Sent: Fri, March 12, 2010 5:30:44 PM<br>Subject: [MOAB-dev] ray_intersect_sets function<br><br>Hi! All<br><br>I have a question about ray tracing function,<br><br>MBOrientedBoxTreeTool::ray_intersect_sets( <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; std::vector&lt;double&gt;&amp; distances_out,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; std::vector&lt;MBEntityHandle&gt;&amp; sets_out,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 std::vector&lt;MBEntityHandle&gt;&amp; facets_out,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MBEntityHandle root_set,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; double tolerance,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned min_tolerace_intersections,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const double ray_point[3],<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const double unit_ray_dir[3],<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const
 double* ray_length, <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TrvStats* accum );<br><br>When I use this function, it just returns one intersection distance/set/facet for sphere or curved surfaces.<br>Is it a bug or is it intended?<br>Otherwise, am I using incorrectly?<br><br>Could any body give me some advices for me?<br>Thanks.<br><br>Hong-Jun<br><br><br>&nbsp; &nbsp; &nbsp; <br></div></div><div style="position:fixed"></div>


</div><br>

      </body></html>