Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 10:11:00

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/Model.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "celeritas/Types.hh"
0010 
0011 #include "action/ActionInterface.hh"
0012 
0013 namespace celeritas
0014 {
0015 namespace optical
0016 {
0017 //---------------------------------------------------------------------------//
0018 class MfpBuilder;
0019 
0020 //---------------------------------------------------------------------------//
0021 /*!
0022  * Base class for discrete, volumetric optical models.
0023  *
0024  * For optical physics, there is precisely one particle (optical photons)
0025  * and one energy range (optical wavelengths), so only models and no processes
0026  * are used in optical physics.
0027  */
0028 class Model : public OpticalStepActionInterface, public ConcreteAction
0029 {
0030   public:
0031     //!@{
0032     //! \name Type aliases
0033 
0034     //! Function to build optical models with a given action id
0035     using ModelBuilder = std::function<std::shared_ptr<Model>(ActionId)>;
0036 
0037     //!@}
0038 
0039   public:
0040     using ConcreteAction::ConcreteAction;
0041 
0042     //! Action order for optical models is always post-step
0043     StepActionOrder order() const override { return StepActionOrder::post; }
0044 
0045     //! Build mean free path grids for all optical materials
0046     virtual void build_mfps(OptMatId mat, MfpBuilder& build) const = 0;
0047 };
0048 
0049 //---------------------------------------------------------------------------//
0050 }  // namespace optical
0051 }  // namespace celeritas