SpECTRE Documentation Coverage Report
Current view: top level - Parallel - GetSection.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 50.0 % 2 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 <optional>
       7              : #include <type_traits>
       8              : 
       9              : #include "DataStructures/DataBox/DataBox.hpp"
      10              : #include "Parallel/Reduction.hpp"
      11              : #include "Parallel/Tags/Section.hpp"
      12              : #include "Utilities/ErrorHandling/Assert.hpp"
      13              : #include "Utilities/Gsl.hpp"
      14              : 
      15              : namespace Parallel {
      16              : 
      17              : /*!
      18              :  * \brief Retrieve the section that the element belongs to, or
      19              :  * `Parallel::no_section()` if `SectionIdTag` is `void`.
      20              :  *
      21              :  * This function is useful to support sections in parallel algorithms. Specify
      22              :  * the `SectionIdTag` template parameter to retrieve the associated section, or
      23              :  * set it to `void` when the parallel algorithm runs over all elements of the
      24              :  * parallel component. See `Parallel::Section` for details on sections.
      25              :  *
      26              :  * Only call this function on elements that are part of a section. In case not
      27              :  * all elements are part of a section with the `SectionIdTag`, make sure to skip
      28              :  * those elements before calling this function.
      29              :  */
      30              : template <typename ParallelComponent, typename SectionIdTag,
      31              :           typename DbTagsList>
      32            1 : auto& get_section(
      33              :     [[maybe_unused]] const gsl::not_null<db::DataBox<DbTagsList>*> box) {
      34              :   if constexpr (std::is_same_v<SectionIdTag, void>) {
      35              :     return Parallel::no_section();
      36              :   } else {
      37              :     std::optional<Parallel::Section<ParallelComponent, SectionIdTag>>& section =
      38              :         db::get_mutable_reference<
      39              :             Parallel::Tags::Section<ParallelComponent, SectionIdTag>>(box);
      40              :     ASSERT(section.has_value(),
      41              :            "Call 'get_section' only on elements that belong to a section. This "
      42              :            "is probably a bug, because the other elements should presumably be "
      43              :            "skipped. The section is: "
      44              :                << db::tag_name<SectionIdTag>());
      45              :     return *section;
      46              :   }
      47              : }
      48              : 
      49              : }  // namespace Parallel
        

Generated by: LCOV version 2.0-1