SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/Interpolation/Actions - InterpolationTargetSendPoints.hpp Hit Total Coverage
Commit: 361cb8d8406bb752684a5f31c27320ec444a50e3 Lines: 1 3 33.3 %
Date: 2025-11-09 02:02:04
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             : 
       8             : #include "DataStructures/DataBox/DataBox.hpp"
       9             : #include "Parallel/AlgorithmExecution.hpp"
      10             : #include "Parallel/ArrayCollection/IsDgElementCollection.hpp"
      11             : #include "Parallel/ArrayCollection/SimpleActionOnElement.hpp"
      12             : #include "Parallel/GlobalCache.hpp"
      13             : #include "Parallel/Invoke.hpp"
      14             : #include "ParallelAlgorithms/Interpolation/Actions/ElementReceiveInterpPoints.hpp"
      15             : #include "ParallelAlgorithms/Interpolation/InterpolationTargetDetail.hpp"
      16             : #include "Utilities/TMPL.hpp"
      17             : #include "Utilities/TaggedTuple.hpp"
      18             : 
      19             : namespace intrp {
      20             : namespace Actions {
      21             : 
      22             : /// \ingroup ActionsGroup
      23             : /// \brief Sends interpolation points to all the Elements.
      24             : ///
      25             : /// This action is for the case in which the points are time-independent
      26             : /// in the frame of the InterpolationTarget (which may or may not mean that
      27             : /// the points are time-independent in the grid frame).
      28             : ///
      29             : /// This action should be placed in the Registration PDAL for
      30             : /// InterpolationTarget.
      31             : ///
      32             : /// Uses:
      33             : /// - DataBox:
      34             : ///   - Anything that the particular
      35             : ///     InterpolationTargetTag::compute_target_points needs from the DataBox.
      36             : ///
      37             : /// DataBox changes:
      38             : /// - Adds: nothing
      39             : /// - Removes: nothing
      40             : /// - Modifies: nothing
      41             : template <typename InterpolationTargetTag>
      42           1 : struct InterpolationTargetSendTimeIndepPointsToElements {
      43             :   template <typename DbTags, typename... InboxTags, typename ArrayIndex,
      44             :             typename ActionList, typename Metavariables,
      45             :             typename ParallelComponent>
      46           0 :   static Parallel::iterable_action_return_t apply(
      47             :       db::DataBox<DbTags>& box,
      48             :       const tuples::TaggedTuple<InboxTags...>& /*inboxes*/,
      49             :       Parallel::GlobalCache<Metavariables>& cache,
      50             :       const ArrayIndex& /*array_index*/, const ActionList /*meta*/,
      51             :       const ParallelComponent* const /*meta*/) {
      52             :     static_assert(
      53             :         not InterpolationTargetTag::compute_target_points::is_sequential::value,
      54             :         "Actions::InterpolationTargetSendTimeIndepPointsToElement can be used "
      55             :         "only with non-sequential targets, since a sequential target is "
      56             :         "time-dependent by definition.");
      57             :     auto coords = InterpolationTargetTag::compute_target_points::points(
      58             :         box, tmpl::type_<Metavariables>{});
      59             :     using ReceiverProxy =
      60             :         typename InterpolationTargetTag::template interpolating_component<
      61             :             Metavariables>;
      62             :     auto& receiver_proxy =
      63             :         Parallel::get_parallel_component<ReceiverProxy>(cache);
      64             :     if constexpr (Parallel::is_dg_element_collection_v<ReceiverProxy>) {
      65             :       Parallel::threaded_action<Parallel::Actions::SimpleActionOnElement<
      66             :           ElementReceiveInterpPoints<InterpolationTargetTag>, true>>(
      67             :           receiver_proxy, std::move(coords));
      68             :     } else {
      69             :       Parallel::simple_action<
      70             :           ElementReceiveInterpPoints<InterpolationTargetTag>>(
      71             :           receiver_proxy, std::move(coords));
      72             :     }
      73             :     return {Parallel::AlgorithmExecution::Continue, std::nullopt};
      74             :   }
      75             : };
      76             : }  // namespace Actions
      77             : }  // namespace intrp

Generated by: LCOV version 1.14