Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:31:22

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