File indexing completed on 2025-09-18 09:09:09
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include "corecel/Assert.hh"
0010 #include "corecel/Macros.hh"
0011 #include "celeritas/Types.hh"
0012 #include "celeritas/optical/CoreTrackView.hh"
0013 #include "celeritas/optical/SimTrackView.hh"
0014
0015 namespace celeritas
0016 {
0017 namespace optical
0018 {
0019 namespace detail
0020 {
0021
0022
0023
0024
0025 struct PreStepExecutor
0026 {
0027 inline CELER_FUNCTION void operator()(CoreTrackView const& track);
0028 };
0029
0030
0031 CELER_FUNCTION void PreStepExecutor::operator()(CoreTrackView const& track)
0032 {
0033 auto sim = track.sim();
0034 if (sim.status() == TrackStatus::killed)
0035 {
0036
0037 sim.status(TrackStatus::inactive);
0038 }
0039 if (sim.status() == TrackStatus::inactive)
0040 {
0041
0042 sim.reset_step_limit();
0043 return;
0044 }
0045
0046 if (CELER_UNLIKELY(sim.status() == TrackStatus::errored))
0047 {
0048
0049 return;
0050 }
0051
0052 CELER_ASSERT(sim.status() == TrackStatus::initializing
0053 || sim.status() == TrackStatus::alive);
0054
0055 if (sim.status() == TrackStatus::initializing)
0056 {
0057 sim.reset_step_limit();
0058 sim.status(TrackStatus::alive);
0059 }
0060
0061
0062
0063 CELER_ENSURE(sim.step_length() > 0);
0064 }
0065
0066
0067 }
0068 }
0069 }