SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/GrMhd/GhValenciaDivClean/FiniteDifference - FillNeighborSpacetimeVariables.hpp Hit Total Coverage
Commit: 3ffcbc8ecf43797401b60bcca17d6040ee06f013 Lines: 1 2 50.0 %
Date: 2026-03-03 02:01:44
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 <utility>
       8             : 
       9             : #include "DataStructures/DataVector.hpp"
      10             : #include "DataStructures/Tensor/TypeAliases.hpp"
      11             : #include "DataStructures/Variables.hpp"
      12             : #include "Domain/Structure/DirectionMap.hpp"
      13             : #include "Domain/Structure/DirectionalIdMap.hpp"
      14             : #include "Evolution/DgSubcell/GhostData.hpp"
      15             : #include "NumericalAlgorithms/FiniteDifference/PartialDerivatives.hpp"
      16             : #include "Utilities/ErrorHandling/Assert.hpp"
      17             : #include "Utilities/Gsl.hpp"
      18             : 
      19             : namespace grmhd::GhValenciaDivClean::fd {
      20             : /*!
      21             :  * \brief Helper function that takes spacetime variable data from a
      22             :  * `DirectionalIdMap` containing all neighbor data and copies them to
      23             :  * `ghost_cell_spacetime_vars`, a separate `DirectionMap`.
      24             :  *
      25             :  * \tparam NeighborVariables a `Variables` type containing all tags stored in
      26             :  * the neighbor data
      27             :  * \tparam FirstGhTag the first spacetime variables tag in
      28             :  * `NeighborVariables`. Note: it is assumed that the spacetime variables are
      29             :  * consecutively stored in the `Variables`
      30             :  * \param ghost_cell_spacetime_vars a `DirectionMap` to be filled with spans
      31             :  * storing the spacetime data
      32             :  * \param all_ghost_data a `DirectionalIdMap` containing all neighbor data
      33             :  * \param number_of_gh_components the number of independent components for all
      34             :  * spacetime variables in `NeighborVariables`
      35             :  */
      36             : template <typename NeighborVariables, typename FirstGhTag>
      37           1 : void fill_neighbor_spacetime_variables(
      38             :     const gsl::not_null<DirectionMap<3, gsl::span<const double>>*>
      39             :         ghost_cell_spacetime_vars,
      40             :     const DirectionalIdMap<3, evolution::dg::subcell::GhostData>&
      41             :         all_ghost_data,
      42             :     const size_t number_of_gh_components) {
      43             :   for (const auto& [directional_element_id, ghost_data] : all_ghost_data) {
      44             :     const DataVector& neighbor_data =
      45             :         ghost_data.neighbor_ghost_data_for_reconstruction();
      46             :     const size_t neighbor_number_of_points =
      47             :         neighbor_data.size() /
      48             :         NeighborVariables::number_of_independent_components;
      49             :     ASSERT(
      50             :         neighbor_data.size() %
      51             :                 NeighborVariables::number_of_independent_components ==
      52             :             0,
      53             :         "Amount of reconstruction data sent ("
      54             :             << neighbor_data.size() << ") from " << directional_element_id
      55             :             << " is not a multiple of the number of reconstruction variables "
      56             :             << NeighborVariables::number_of_independent_components);
      57             :     // Use a Variables view to get offset into spacetime variables
      58             :     // without having to do pointer math.
      59             :     const NeighborVariables
      60             :         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
      61             :         view{const_cast<double*>(neighbor_data.data()),
      62             :              neighbor_number_of_points *
      63             :                  NeighborVariables::number_of_independent_components};
      64             :     // Note: assumes that the spacetime tags are consecutive in
      65             :     // `NeighborVariables`
      66             :     ghost_cell_spacetime_vars->insert(std::pair{
      67             :         directional_element_id.direction(),
      68             :         gsl::make_span(get<FirstGhTag>(view)[0].data(),
      69             :                        number_of_gh_components * neighbor_number_of_points)});
      70             :   }
      71             : }
      72             : 
      73             : }  // namespace grmhd::GhValenciaDivClean::fd

Generated by: LCOV version 1.14