Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 09:24:48

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 orange/detail/UniverseInserter.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "corecel/Types.hh"
0010 #include "corecel/cont/EnumArray.hh"
0011 #include "corecel/data/CollectionBuilder.hh"
0012 #include "corecel/io/Label.hh"
0013 
0014 #include "../OrangeData.hh"
0015 #include "../OrangeTypes.hh"
0016 
0017 namespace celeritas
0018 {
0019 namespace detail
0020 {
0021 //---------------------------------------------------------------------------//
0022 /*!
0023  * Construct a universe entry.
0024  */
0025 class UniverseInserter
0026 {
0027   public:
0028     //!@{
0029     //! \name Type aliases
0030     using Data = HostVal<OrangeParamsData>;
0031     using VecLabel = std::vector<Label>;
0032     //!@}
0033 
0034   public:
0035     // Construct from full parameter data
0036     UniverseInserter(VecLabel* universe_labels,
0037                      VecLabel* surface_labels,
0038                      VecLabel* volume_labels,
0039                      Data* data);
0040 
0041     // Append the number of local surfaces and volumes
0042     UniverseId operator()(UniverseType type,
0043                           Label univ_label,
0044                           VecLabel surface_labels,
0045                           VecLabel volume_labels);
0046 
0047   private:
0048     VecLabel* universe_labels_;
0049     VecLabel* surface_labels_;
0050     VecLabel* volume_labels_;
0051 
0052     CollectionBuilder<UniverseType, MemSpace::host, UniverseId> types_;
0053     CollectionBuilder<size_type, MemSpace::host, UniverseId> indices_;
0054     CollectionBuilder<size_type> surfaces_;
0055     CollectionBuilder<size_type> volumes_;
0056 
0057     EnumArray<UniverseType, size_type> num_universe_types_{};
0058     size_type accum_surface_{0};
0059     size_type accum_volume_{0};
0060 };
0061 
0062 //---------------------------------------------------------------------------//
0063 }  // namespace detail
0064 }  // namespace celeritas