diff --git a/include/openmc/mesh.h b/include/openmc/mesh.h index d8164a1590..d91d529415 100644 --- a/include/openmc/mesh.h +++ b/include/openmc/mesh.h @@ -315,8 +315,19 @@ public: void bins_crossed(const Particle* p, std::vector& bins, std::vector& lengths) const; + bool intersects(Position& r0, Position r1, int* ijk); + +private: + void + intersect_track(const moab::CartVect& start, + const moab::CartVect& dir, + double track_len, + std::vector& tris, + std::vector& intersection_dists) const; + +public: //! Determine which surface bins were crossed by a particle // //! \param[in] p Particle to check diff --git a/src/mesh.cpp b/src/mesh.cpp index ad79b2714c..212b46b21b 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -1619,6 +1619,27 @@ UnstructuredMesh::build_tree(const moab::Range& all_tets) { } +void +UnstructuredMesh::intersect_track(const moab::CartVect& start, + const moab::CartVect& dir, + double track_len, + std::vector& tris, + std::vector& intersection_dists) const { + + moab::ErrorCode rval = kdtree_->ray_intersect_triangles(kdtree_root_, + 1E-03, + dir.array(), + start.array(), + tris, + intersection_dists, + 0, + track_len); + if (rval != moab::MB_SUCCESS) { + fatal_error("Failed to compute tracklengths on umesh: " + filename_); + } + +} + void UnstructuredMesh::bins_crossed(const Particle* p, std::vector& bins, std::vector& lengths) const { @@ -1640,10 +1661,7 @@ UnstructuredMesh::bins_crossed(const Particle* p, std::vector& bins, std::vector tris; std::vector intersections; - rval = kdtree_->ray_intersect_triangles(kdtree_root_, 1E-03, dir.array(), r0.array(), tris, intersections, 0, track_len); - if (rval != moab::MB_SUCCESS) { - fatal_error("Failed to compute tracklengths on umesh: " + filename_); - } + intersect_track(r0, dir, track_len, tris, intersections); bins.clear(); for (const auto& int_dist : intersections) {