SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Cce/Actions - ReceiveGhWorldtubeData.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 33.3 % 3 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 <string>
       7              : #include <tuple>
       8              : 
       9              : #include "DataStructures/DataBox/DataBox.hpp"
      10              : #include "DataStructures/DataVector.hpp"
      11              : #include "DataStructures/LinkedMessageId.hpp"
      12              : #include "DataStructures/Tensor/Tensor.hpp"
      13              : #include "DataStructures/Variables.hpp"
      14              : #include "Evolution/Systems/Cce/Actions/BoundaryComputeAndSendToEvolution.hpp"
      15              : #include "Evolution/Systems/Cce/InterfaceManagers/GhInterfaceManager.hpp"
      16              : #include "Evolution/Systems/Cce/OptionTags.hpp"
      17              : #include "Evolution/Systems/Cce/WorldtubeDataManager.hpp"
      18              : #include "Parallel/GlobalCache.hpp"
      19              : #include "Parallel/Invoke.hpp"
      20              : #include "Time/TimeStepId.hpp"
      21              : #include "Utilities/Gsl.hpp"
      22              : #include "Utilities/Requires.hpp"
      23              : #include "Utilities/TMPL.hpp"
      24              : #include "Utilities/TypeTraits.hpp"
      25              : 
      26              : namespace Cce {
      27              : namespace Actions {
      28              : 
      29              : /*!
      30              :  * \ingroup ActionsGroup
      31              :  * \brief Stores the boundary data from the GH evolution in the
      32              :  * `Cce::InterfaceManagers::GhInterfaceManager`, and sends to the
      33              :  * `EvolutionComponent` (template argument) if the data fulfills a prior
      34              :  * request.
      35              :  *
      36              :  * \details If the new data fulfills a prior request submitted to the
      37              :  * `Cce::InterfaceManagers::GhInterfaceManager`, this will dispatch the result
      38              :  * to `Cce::Actions::SendToEvolution<GhWorldtubeBoundary<Metavariables>,
      39              :  * EvolutionComponent>` for sending the processed boundary data to
      40              :  * the `EvolutionComponent`.
      41              :  *
      42              :  * \ref DataBoxGroup changes:
      43              :  * - Adds: nothing
      44              :  * - Removes: nothing
      45              :  * - Modifies:
      46              :  *   - `Tags::GhInterfaceManager`
      47              :  */
      48              : template <typename EvolutionComponent, bool DuringSelfStart>
      49            1 : struct ReceiveGhWorldtubeData {
      50              :   template <typename ParallelComponent, typename... DbTags,
      51              :             typename Metavariables, typename ArrayIndex>
      52            0 :   static void apply(db::DataBox<tmpl::list<DbTags...>>& box,
      53              :                     Parallel::GlobalCache<Metavariables>& cache,
      54              :                     const ArrayIndex& /*array_index*/,
      55              :                     const tmpl::conditional_t<DuringSelfStart, TimeStepId,
      56              :                                               LinkedMessageId<double>>
      57              :                         time,
      58              :                     const tnsr::aa<DataVector, 3>& spacetime_metric,
      59              :                     const tnsr::iaa<DataVector, 3>& phi,
      60              :                     const tnsr::aa<DataVector, 3>& pi) {
      61              :     auto insert_gh_data_to_interface_manager =
      62              :         [&spacetime_metric, &phi, &pi, &time,
      63              :          &cache](const auto interface_manager) {
      64              :           interface_manager->insert_gh_data(time, spacetime_metric, phi, pi);
      65              :           const auto gh_data =
      66              :               interface_manager->retrieve_and_remove_first_ready_gh_data();
      67              :           if (static_cast<bool>(gh_data)) {
      68              :             Parallel::simple_action<Actions::SendToEvolution<
      69              :                 GhWorldtubeBoundary<Metavariables>, EvolutionComponent>>(
      70              :                 Parallel::get_parallel_component<
      71              :                     GhWorldtubeBoundary<Metavariables>>(cache),
      72              :                 get<0>(*gh_data), get<1>(*gh_data));
      73              :           }
      74              :         };
      75              :     if constexpr (DuringSelfStart) {
      76              :       db::mutate<Tags::SelfStartGhInterfaceManager>(
      77              :           insert_gh_data_to_interface_manager, make_not_null(&box));
      78              :     } else {
      79              :       db::mutate<Tags::GhInterfaceManager>(insert_gh_data_to_interface_manager,
      80              :                                            make_not_null(&box));
      81              :     }
      82              :   }
      83              : };
      84              : }  // namespace Actions
      85              : }  // namespace Cce
        

Generated by: LCOV version 2.0-1