diff --git a/core/include/detray/navigation/detail/navigation_functions.hpp b/core/include/detray/navigation/detail/navigation_functions.hpp index 788890995..59e5c8de9 100644 --- a/core/include/detray/navigation/detail/navigation_functions.hpp +++ b/core/include/detray/navigation/detail/navigation_functions.hpp @@ -200,7 +200,8 @@ DETRAY_HOST_DEVICE DETRAY_INLINE constexpr void local_navigation( navigation.volume()); // Do not resurrect a failed/finished navigation state - assert(navigation.is_alive()); + assert(navigation.is_alive() || + navigation.status() == navigation::status::e_unknown); assert(!track.is_invalid()); const auto &det = navigation.detector(); @@ -231,7 +232,7 @@ DETRAY_HOST_DEVICE DETRAY_INLINE constexpr void local_navigation( // Do not exit if backward navigation starts on the outmost portal if (navigation.is_on_portal()) { DETRAY_DEBUG_HOST_DEVICE( - "-> Adjust trust lvl for \"end-of-world\"..."); + "-> Adjust trust lvl for possible \"end-of-world\"..."); navigation.trust_level(detray::detail::is_invalid_value( navigation.current().volume_link()) ? navigation::trust_level::e_full diff --git a/core/include/detray/navigation/navigation_state.hpp b/core/include/detray/navigation/navigation_state.hpp index f282db627..27441c07d 100644 --- a/core/include/detray/navigation/navigation_state.hpp +++ b/core/include/detray/navigation/navigation_state.hpp @@ -170,7 +170,7 @@ class base_state : public detray::ranges::view_interface< /// @returns the navigation heartbeat (is this stream still being updated?) DETRAY_HOST_DEVICE constexpr bool is_alive() const { - return cast_impl().status() > navigation::status::e_exit; + return cast_impl().status() > navigation::status::e_unknown; } /// @returns current navigation direction - const diff --git a/core/include/detray/propagator/propagator.hpp b/core/include/detray/propagator/propagator.hpp index e76c6ddde..1f357e04c 100644 --- a/core/include/detray/propagator/propagator.hpp +++ b/core/include/detray/propagator/propagator.hpp @@ -271,12 +271,17 @@ struct propagator { DETRAY_VERBOSE_HOST("Starting propagation for track:\n" << track); - // Initialize the navigation - DETRAY_VERBOSE_HOST("Initialize navigation..."); - m_navigator.init(track, navigation, m_cfg.navigation, context); - propagation.heartbeat(navigation.is_alive()); + bool is_init = false; + if (this->is_paused(propagation)) { + DETRAY_VERBOSE_HOST("Resuming propagation..."); + } else { + // Initialize the navigation + DETRAY_VERBOSE_HOST("Initialize navigation..."); + m_navigator.init(track, navigation, m_cfg.navigation, context); + propagation.heartbeat(navigation.is_alive()); - bool is_init = true; + is_init = true; + } // Run while there is a heartbeat. In order to help the compiler // optimize this, and in order to make the code more GPU-friendly,