SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/Amr/Actions - CreateChild.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 : 
       2              : // Distributed under the MIT License.
       3              : // See LICENSE.txt for details.
       4              : 
       5              : #pragma once
       6              : 
       7              : #include <charm++.h>
       8              : #include <iterator>
       9              : #include <memory>
      10              : #include <utility>
      11              : #include <vector>
      12              : 
      13              : #include "Parallel/Callback.hpp"
      14              : #include "Parallel/GlobalCache.hpp"
      15              : #include "Parallel/Phase.hpp"
      16              : #include "ParallelAlgorithms/Amr/Actions/SendDataToChildren.hpp"
      17              : #include "Utilities/Algorithm.hpp"
      18              : #include "Utilities/ErrorHandling/Assert.hpp"
      19              : 
      20              : /// \cond
      21              : namespace db {
      22              : template <typename>
      23              : class DataBox;
      24              : }  // namespace db
      25              : /// \endcond
      26              : 
      27              : namespace amr::Actions {
      28              : /// \brief Creates a new element in an ArrayAlgorithm whose id is `child_id`
      29              : ///
      30              : /// \details This action is meant to be initially invoked by
      31              : /// amr::Actions::AdjustDomain on the amr::Component.  This action inserts a new
      32              : /// element with id `children_ids[index_of_child_id]` in the array referenced by
      33              : /// `element_proxy`.  A Parallel::SimpleActionCallback is passed to the
      34              : /// constructor of the new DistributedObject.  If `index_of_child_id` is that of
      35              : /// the last element of `children_ids`, the Parallel::SimpleActionCallback will
      36              : /// invoke amr::Actions::SendDataToChildren on the element with id `parent_id`.
      37              : /// Otherwise, it will invoke amr::Actions::CreateChild on the next element of
      38              : /// `children_ids`.
      39              : ///
      40              : /// This action does not modify anything in the DataBox
      41            1 : struct CreateChild {
      42              :   template <typename ParallelComponent, typename DbTagList,
      43              :             typename Metavariables, typename ElementProxy>
      44            0 :   static void apply(
      45              :       db::DataBox<DbTagList>& /*box*/,
      46              :       Parallel::GlobalCache<Metavariables>& cache, const int /*array_index*/,
      47              :       ElementProxy element_proxy,
      48              :       ElementId<Metavariables::volume_dim> parent_id,
      49              :       std::vector<ElementId<Metavariables::volume_dim>> children_ids,
      50              :       const size_t index_of_child_id,
      51              :       const std::unordered_map<Parallel::Phase, size_t>
      52              :           parent_phase_bookmarks) {
      53              :     auto my_proxy = Parallel::get_parallel_component<ParallelComponent>(cache);
      54              :     const ElementId<Metavariables::volume_dim>& child_id =
      55              :         children_ids[index_of_child_id];
      56              :     if (index_of_child_id + 1 == children_ids.size()) {
      57              :       auto parent_proxy = element_proxy[parent_id];
      58              :       element_proxy[child_id].insert(
      59              :           cache.get_this_proxy(), Parallel::Phase::AdjustDomain,
      60              :           parent_phase_bookmarks,
      61              :           std::make_unique<Parallel::SimpleActionCallback<
      62              :               SendDataToChildren, decltype(parent_proxy),
      63              :               std::vector<ElementId<Metavariables::volume_dim>>>>(
      64              :               parent_proxy, std::move(children_ids)));
      65              :     } else {
      66              :       element_proxy[child_id].insert(
      67              :           cache.get_this_proxy(), Parallel::Phase::AdjustDomain,
      68              :           parent_phase_bookmarks,
      69              :           std::make_unique<Parallel::SimpleActionCallback<
      70              :               CreateChild, decltype(my_proxy), ElementProxy,
      71              :               ElementId<Metavariables::volume_dim>,
      72              :               std::vector<ElementId<Metavariables::volume_dim>>, size_t,
      73              :               std::unordered_map<Parallel::Phase, size_t>>>(
      74              :               my_proxy, std::move(element_proxy), std::move(parent_id),
      75              :               std::move(children_ids), index_of_child_id + 1,
      76              :               parent_phase_bookmarks));
      77              :     }
      78              :   }
      79              : };
      80              : }  // namespace amr::Actions
        

Generated by: LCOV version 2.0-1