Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-16 08:52:19

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/em/params/WentzelVIMscParams.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <memory>
0010 
0011 #include "corecel/data/CollectionMirror.hh"
0012 #include "corecel/data/ParamsDataInterface.hh"
0013 #include "celeritas/em/data/WentzelVIMscData.hh"
0014 
0015 namespace celeritas
0016 {
0017 //---------------------------------------------------------------------------//
0018 class ParticleParams;
0019 struct ImportData;
0020 struct ImportMscModel;
0021 
0022 //---------------------------------------------------------------------------//
0023 /*!
0024  * Construct and store data for Wentzel VI multiple scattering.
0025  *
0026  * Multiple scattering is used by the along-step kernel(s).
0027  */
0028 class WentzelVIMscParams final : public ParamsDataInterface<WentzelVIMscData>
0029 {
0030   public:
0031     //!@{
0032     //! \name Type aliases
0033     using VecImportMscModel = std::vector<ImportMscModel>;
0034     //!@}
0035 
0036   public:
0037     // Construct if MSC process data is present, else return nullptr
0038     static std::shared_ptr<WentzelVIMscParams>
0039     from_import(ParticleParams const& particles, ImportData const& data);
0040 
0041     // Construct from process data
0042     WentzelVIMscParams(ParticleParams const& particles,
0043                        VecImportMscModel const& mdata);
0044 
0045     //! Access Wentzel VI data on the host
0046     HostRef const& host_ref() const final { return data_.host_ref(); }
0047 
0048     //! Access Wentzel VI data on the device
0049     DeviceRef const& device_ref() const final { return data_.device_ref(); }
0050 
0051   private:
0052     // Host/device storage and reference
0053     CollectionMirror<WentzelVIMscData> data_;
0054 };
0055 
0056 //---------------------------------------------------------------------------//
0057 }  // namespace celeritas