52 bool initialized =
false;
54 using result_type = this_result;
57 Initializer() =
default;
66 template <
typename propagator_state_t,
typename stepper_t,
68 void operator()(propagator_state_t&
state,
const stepper_t& ,
69 const navigator_t& , result_type&
r,
70 const Logger& )
const {
72 if (not r.initialized) {
74 state.navigation.navSurfaces = navSurfaces;
75 state.navigation.navSurfaceIter = state.navigation.navSurfaces.begin();
198 template <
typename propagator_state_t,
typename stepper_t>
211 template <
typename propagator_state_t,
typename stepper_t>
217 state.navigation.currentSurface =
nullptr;
220 state.navigation.navSurfaces.end())
221 <<
" out of " << state.navigation.navSurfaces.size()
222 <<
" surfaces remain to try.");
224 if (state.navigation.navSurfaceIter != state.navigation.navSurfaces.end()) {
226 auto surfaceStatus = stepper.updateSurfaceStatus(
227 state.stepping, **state.navigation.navSurfaceIter,
228 state.options.direction,
false, state.options.targetTolerance,
230 if (surfaceStatus == Intersection3D::Status::unreachable) {
232 "Surface not reachable anymore, switching to next one in "
235 ++state.navigation.navSurfaceIter;
238 << stepper.outputStepSize(state.stepping));
242 state.navigation.navigationBreak =
true;
244 if (state.navigation.targetSurface ==
nullptr) {
245 state.navigation.targetReached =
true;
259 template <
typename propagator_state_t,
typename stepper_t>
265 state.navigation.currentSurface =
nullptr;
268 state.navigation.navSurfaces.end())
269 <<
" out of " << state.navigation.navSurfaces.size()
270 <<
" surfaces remain to try.");
273 if (state.navigation.navSurfaceIter != state.navigation.navSurfaces.end()) {
275 auto surfaceStatus = stepper.updateSurfaceStatus(
276 state.stepping, **state.navigation.navSurfaceIter,
277 state.options.direction,
false, state.options.targetTolerance,
279 if (surfaceStatus == Intersection3D::Status::onSurface) {
281 state.navigation.currentSurface = *state.navigation.navSurfaceIter;
283 << state.navigation.currentSurface->geometryId())
285 ++state.navigation.navSurfaceIter;
286 if (state.navigation.navSurfaceIter !=
287 state.navigation.navSurfaces.end()) {
289 << (*state.navigation.navSurfaceIter)->geometryId());
290 stepper.releaseStepSize(state.stepping);
292 }
else if (surfaceStatus == Intersection3D::Status::reachable) {
294 << stepper.outputStepSize(state.stepping));