SpECTRE Documentation Coverage Report
Current view: top level - NumericalAlgorithms/DiscontinuousGalerkin - SimpleBoundaryData.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 31.2 % 16 5
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 <array>
       7              : #include <cstddef>
       8              : #include <pup.h>
       9              : 
      10              : #include "DataStructures/TaggedTuple.hpp"
      11              : #include "DataStructures/Variables.hpp"
      12              : #include "Domain/Structure/OrientationMapHelpers.hpp"
      13              : #include "NumericalAlgorithms/DiscontinuousGalerkin/MortarHelpers.hpp"
      14              : #include "Utilities/TMPL.hpp"
      15              : 
      16              : /// \cond
      17              : template <size_t Dim>
      18              : struct Index;
      19              : template <size_t Dim>
      20              : struct Mesh;
      21              : template <size_t Dim>
      22              : struct OrientationMap;
      23              : /// \endcond
      24              : 
      25              : namespace dg {
      26              : 
      27              : /*!
      28              :  * \brief Distinguishes between field data, which can be projected to a mortar,
      29              :  * and extra data, which will not be projected.
      30              :  */
      31              : template <typename FieldTags, typename ExtraDataTags = tmpl::list<>>
      32            1 : struct SimpleBoundaryData {
      33            0 :   using field_tags = FieldTags;
      34            0 :   using extra_data_tags = ExtraDataTags;
      35              : 
      36              :   /// Data projected to the mortar mesh
      37            1 :   Variables<FieldTags> field_data;
      38              : 
      39              :   /// Data on the element face that needs no projection to the mortar mesh.
      40              :   /// This is a `TaggedTuple` to support non-tensor quantities. It also helps
      41              :   /// supporting an empty list of `ExtraDataTags`.
      42            1 :   tuples::tagged_tuple_from_typelist<ExtraDataTags> extra_data;
      43              : 
      44            0 :   SimpleBoundaryData() = default;
      45            0 :   SimpleBoundaryData(const SimpleBoundaryData&) = default;
      46            0 :   SimpleBoundaryData& operator=(const SimpleBoundaryData&) = default;
      47            0 :   SimpleBoundaryData(SimpleBoundaryData&&) = default;
      48            0 :   SimpleBoundaryData& operator=(SimpleBoundaryData&&) = default;
      49            0 :   ~SimpleBoundaryData() = default;
      50              : 
      51            0 :   explicit SimpleBoundaryData(const size_t num_points)
      52              :       : field_data{num_points}, extra_data{} {}
      53              : 
      54              :   // NOLINTNEXTLINE(google-runtime-references)
      55            0 :   void pup(PUP::er& p) {
      56              :     p | field_data;
      57              :     p | extra_data;
      58              :   }
      59              : 
      60              :   /// Project the `field_data` to the mortar
      61              :   ///
      62              :   /// \see `dg::project_to_mortar`
      63              :   template <size_t MortarDim>
      64            1 :   SimpleBoundaryData<FieldTags, ExtraDataTags> project_to_mortar(
      65              :       const Mesh<MortarDim>& face_mesh, const Mesh<MortarDim>& mortar_mesh,
      66              :       const MortarSize<MortarDim>& mortar_size) const {
      67              :     SimpleBoundaryData<FieldTags, ExtraDataTags> projected_data{};
      68              :     projected_data.field_data = dg::project_to_mortar(
      69              :         this->field_data, face_mesh, mortar_mesh, mortar_size);
      70              :     projected_data.extra_data = this->extra_data;
      71              :     return projected_data;
      72              :   }
      73              : 
      74              :   /// Orient the `field_data`
      75              :   ///
      76              :   /// \see `orient_variables_on_slice`
      77              :   template <size_t MortarDim>
      78            1 :   void orient_on_slice(
      79              :       const Index<MortarDim>& slice_extents, const size_t sliced_dim,
      80              :       const OrientationMap<MortarDim + 1>& orientation_of_neighbor) {
      81              :     this->field_data = orient_variables_on_slice(
      82              :         this->field_data, slice_extents, sliced_dim, orientation_of_neighbor);
      83              :   }
      84              : };
      85              : 
      86              : }  // namespace dg
        

Generated by: LCOV version 2.0-1