Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-19 08:49:41

0001 //------------------------------- -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file celeritas/alongstep/detail/TimeUpdater.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "celeritas/global/CoreTrackView.hh"
0010 
0011 namespace celeritas
0012 {
0013 namespace detail
0014 {
0015 //---------------------------------------------------------------------------//
0016 /*!
0017  * Update the lab frame time.
0018  */
0019 struct TimeUpdater
0020 {
0021     inline CELER_FUNCTION void operator()(CoreTrackView const& track);
0022 };
0023 
0024 //---------------------------------------------------------------------------//
0025 // INLINE DEFINITIONS
0026 //---------------------------------------------------------------------------//
0027 CELER_FUNCTION void TimeUpdater::operator()(CoreTrackView const& track)
0028 {
0029     auto sim = track.sim();
0030 
0031     // The track errored within the along-step kernel
0032     if (sim.status() == TrackStatus::errored)
0033         return;
0034 
0035     auto particle = track.particle();
0036     real_type speed = native_value_from(particle.speed());
0037     CELER_ASSERT(speed >= 0);
0038     if (speed > 0)
0039     {
0040         // For very small energies (< numeric_limits<real_type>::epsilon)
0041         // the calculated speed can be zero.
0042         real_type delta_time = sim.step_length() / speed;
0043         sim.add_time(delta_time);
0044     }
0045 }
0046 
0047 //---------------------------------------------------------------------------//
0048 }  // namespace detail
0049 }  // namespace celeritas