Back to home page

EIC code displayed by LXR

 
 

    


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

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/em/params/UrbanMscParams.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/UrbanMscData.hh"
0015 
0016 namespace celeritas
0017 {
0018 //---------------------------------------------------------------------------//
0019 class ParticleParams;
0020 class MaterialParams;
0021 class MaterialView;
0022 struct ImportData;
0023 struct ImportMscModel;
0024 
0025 //---------------------------------------------------------------------------//
0026 /*!
0027  * Construct and store data for Urban multiple scattering.
0028  *
0029  * Multiple scattering is used by the along-step kernel(s).
0030  */
0031 class UrbanMscParams final : public ParamsDataInterface<UrbanMscData>
0032 {
0033   public:
0034     //!@{
0035     //! \name Type aliases
0036     using VecImportMscModel = std::vector<ImportMscModel>;
0037     //!@}
0038 
0039   public:
0040     // Construct if MSC process data is present, else return nullptr
0041     static std::shared_ptr<UrbanMscParams>
0042     from_import(ParticleParams const& particles,
0043                 MaterialParams const& materials,
0044                 ImportData const& data);
0045 
0046     // Construct from process data
0047     UrbanMscParams(ParticleParams const& particles,
0048                    MaterialParams const& materials,
0049                    VecImportMscModel const& mdata);
0050 
0051     // TODO: possible "applicability" interface used for constructing
0052     // along-step kernels?
0053 
0054     //! Access UrbanMsc data on the host
0055     HostRef const& host_ref() const final { return data_.host_ref(); }
0056 
0057     //! Access UrbanMsc data on the device
0058     DeviceRef const& device_ref() const final { return data_.device_ref(); }
0059 
0060   private:
0061     // Host/device storage and reference
0062     CollectionMirror<UrbanMscData> data_;
0063 
0064     static UrbanMscMaterialData
0065     calc_material_data(MaterialView const& material_view);
0066 };
0067 
0068 //---------------------------------------------------------------------------//
0069 }  // namespace celeritas