SpECTRE Documentation Coverage Report
Current view: top level - Parallel/ArrayCollection/Tags - ElementLocationsReference.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 11.1 % 9 1
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <cstddef>
       7              : #include <unordered_map>
       8              : 
       9              : #include "DataStructures/DataBox/Tag.hpp"
      10              : #include "Parallel/ArrayCollection/Tags/ElementLocations.hpp"
      11              : #include "Parallel/GlobalCache.hpp"
      12              : #include "Parallel/Invoke.hpp"
      13              : #include "Utilities/Gsl.hpp"
      14              : 
      15              : /// \cond
      16              : template <size_t Dim>
      17              : class ElementId;
      18              : namespace Parallel {
      19              : class NodeLock;
      20              : }  // namespace Parallel
      21              : /// \endcond
      22              : 
      23              : namespace Parallel::Tags {
      24              : /// \brief The node (location) where different elements are.
      25              : ///
      26              : /// This should be in the DgElementArrayMember's DataBox.
      27              : ///
      28              : /// Implementation note: This should point to the ElementLocations located in
      29              : /// the nodegroup's DataBox.
      30              : template <size_t Dim, typename Metavariables,
      31              :           typename DgElementCollectionComponent>
      32            1 : struct ElementLocationsReference : ElementLocations<Dim>, db::ReferenceTag {
      33              :  private:
      34            0 :   struct GetReference {
      35            0 :     using return_type = const typename ElementLocations<Dim>::type&;
      36              : 
      37              :     template <typename ParallelComponent, typename DbTagList>
      38            0 :     static return_type apply(
      39              :         db::DataBox<DbTagList>& box,
      40              :         const gsl::not_null<Parallel::NodeLock*> /*node_lock*/) {
      41              :       return db::get_mutable_reference<ElementLocations<Dim>>(
      42              :           make_not_null(&box));
      43              :     }
      44              :   };
      45              : 
      46              :  public:
      47            0 :   using base = ElementLocations<Dim>;
      48            0 :   using type = typename base::type;
      49            0 :   using argument_tags = tmpl::list<Parallel::Tags::GlobalCache<Metavariables>>;
      50              : 
      51            0 :   static const type& get(
      52              :       const Parallel::GlobalCache<Metavariables>* const& cache) {
      53              :     auto& parallel_comp =
      54              :         Parallel::get_parallel_component<DgElementCollectionComponent>(*cache);
      55              :     return Parallel::local_synchronous_action<GetReference>(parallel_comp);
      56              :   }
      57              : };
      58              : }  // namespace Parallel::Tags
        

Generated by: LCOV version 2.0-1