Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-07 10:11:40

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/optical/surface/SurfaceSteppingAction.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "celeritas/optical/action/ActionInterface.hh"
0010 
0011 namespace celeritas
0012 {
0013 namespace optical
0014 {
0015 //---------------------------------------------------------------------------//
0016 /*!
0017  * Apply surface physics models during a boundary crossing.
0018  *
0019  * Encapsulates all of the surface physics models into a single action, which
0020  * can be extended to run multiple surface interactions in a single step.
0021  */
0022 class SurfaceSteppingAction final : public OpticalStepActionInterface,
0023                                     public ConcreteAction
0024 {
0025   public:
0026     // Construct from action ID
0027     explicit SurfaceSteppingAction(ActionId);
0028 
0029     // Launch kernel with host data
0030     void step(CoreParams const&, CoreStateHost&) const final;
0031 
0032     // Launch kernel with device data
0033     void step(CoreParams const&, CoreStateDevice&) const final;
0034 
0035     //! Dependency ordering of the action
0036     StepActionOrder order() const final { return StepActionOrder::post; }
0037 
0038   private:
0039     // Launch kernel in the given MemSpace
0040     template<MemSpace M>
0041     void step_impl(CoreParams const&, CoreState<M>&) const;
0042 };
0043 
0044 //---------------------------------------------------------------------------//
0045 }  // namespace optical
0046 }  // namespace celeritas