Back to home page

EIC code displayed by LXR

 
 

    


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

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