SpECTRE Documentation Coverage Report
Current view: top level - Evolution/DiscontinuousGalerkin/Messages - BoundaryMessage.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 6.9 % 29 2
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 <cstddef>
       7              : #include <ostream>
       8              : #include <type_traits>
       9              : 
      10              : #include "Domain/Structure/Direction.hpp"
      11              : #include "Domain/Structure/ElementId.hpp"
      12              : #include "NumericalAlgorithms/Spectral/Mesh.hpp"
      13              : #include "Time/TimeStepId.hpp"
      14              : #include "Utilities/GetOutput.hpp"
      15              : #include "Utilities/PrettyType.hpp"
      16              : 
      17              : #include "Evolution/DiscontinuousGalerkin/Messages/BoundaryMessage.decl.h"
      18              : 
      19              : namespace evolution::dg {
      20              : /*!
      21              :  * \brief [Charm++ Message]
      22              :  * (https://charm.readthedocs.io/en/latest/charm%2B%2B/manual.html#messages)
      23              :  * intended to be used in `receive_data` calls on the elements to send boundary
      24              :  * data from one element on one node, to a different element on a (potentially)
      25              :  * different node.
      26              :  *
      27              :  * If this message is to be sent across nodes, the `pack()` and `unpack()`
      28              :  * methods will be called on the sending and receiving node, respectively.
      29              :  */
      30              : template <size_t Dim>
      31            1 : struct BoundaryMessage : public CMessage_BoundaryMessage<Dim> {
      32            0 :   using base = CMessage_BoundaryMessage<Dim>;
      33              : 
      34              :   // Needed for charm registration
      35            0 :   static std::string name() {
      36              :     return "BoundaryMessage<" + get_output(Dim) + ">";
      37              :   };
      38              : 
      39            0 :   size_t subcell_ghost_data_size;
      40            0 :   size_t dg_flux_data_size;
      41              :   // Whether or not this BoundaryMessage owns the data that the subcell and dg
      42              :   // pointers point to
      43            0 :   bool owning;
      44            0 :   bool enable_if_disabled;
      45            0 :   size_t sender_node;
      46            0 :   size_t sender_core;
      47            0 :   int tci_status;
      48            0 :   size_t integration_order;
      49            0 :   ::TimeStepId current_time_step_id;
      50            0 :   ::TimeStepId next_time_step_id;
      51            0 :   Direction<Dim> neighbor_direction;
      52            0 :   ElementId<Dim> element_id;
      53            0 :   Mesh<Dim> volume_or_ghost_mesh;
      54            0 :   Mesh<Dim - 1> interface_mesh;
      55              : 
      56              :   // If set to nullptr then we aren't sending that type of data.
      57            0 :   double* subcell_ghost_data;
      58            0 :   double* dg_flux_data;
      59              : 
      60            0 :   BoundaryMessage() = default;
      61              : 
      62            0 :   BoundaryMessage(size_t subcell_ghost_data_size_in,
      63              :                   size_t dg_flux_data_size_in, bool owning_in,
      64              :                   bool enable_if_disabled_in, size_t sender_node_in,
      65              :                   size_t sender_core_in, int tci_status_in,
      66              :                   size_t integration_order_in,
      67              :                   const ::TimeStepId& current_time_step_id_in,
      68              :                   const ::TimeStepId& next_time_step_id_in,
      69              :                   const Direction<Dim>& neighbor_direction_in,
      70              :                   const ElementId<Dim>& element_id_in,
      71              :                   const Mesh<Dim>& volume_or_ghost_mesh_in,
      72              :                   const Mesh<Dim - 1>& interface_mesh_in,
      73              :                   double* subcell_ghost_data_in, double* dg_flux_data_in);
      74              : 
      75              :   /*!
      76              :    * \brief This is the size (in bytes) necessary to allocate a BoundaryMessage
      77              :    * including the arrays of data as well.
      78              :    *
      79              :    * This will add `(subcell_size + dg_size) * sizeof(double)` number of bytes
      80              :    * to `sizeof(BoundaryMessage<Dim>)`.
      81              :    */
      82            1 :   static size_t total_bytes_with_data(size_t subcell_size, size_t dg_size);
      83              : 
      84            0 :   static void* pack(BoundaryMessage*);
      85            0 :   static BoundaryMessage* unpack(void*);
      86              : };
      87              : 
      88              : template <size_t Dim>
      89            0 : bool operator==(const BoundaryMessage<Dim>& lhs,
      90              :                 const BoundaryMessage<Dim>& rhs);
      91              : template <size_t Dim>
      92            0 : bool operator!=(const BoundaryMessage<Dim>& lhs,
      93              :                 const BoundaryMessage<Dim>& rhs);
      94              : 
      95              : template <size_t Dim>
      96            0 : std::ostream& operator<<(std::ostream& os, const BoundaryMessage<Dim>& message);
      97              : 
      98              : }  // namespace evolution::dg
      99              : 
     100            0 : #define CK_TEMPLATES_ONLY
     101              : #include "Evolution/DiscontinuousGalerkin/Messages/BoundaryMessage.def.h"
     102              : #undef CK_TEMPLATES_ONLY
        

Generated by: LCOV version 2.0-1