SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/CurvedScalarWave/Worldtube - Inboxes.hpp Hit Total Coverage
Commit: 35a1e98cd3e4fdea528eb8100f99c2f707894fda Lines: 3 12 25.0 %
Date: 2024-04-19 00:10:48
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 <iomanip>
       8             : #include <map>
       9             : #include <sstream>
      10             : #include <string>
      11             : #include <unordered_map>
      12             : 
      13             : #include "DataStructures/DataBox/Prefixes.hpp"
      14             : #include "DataStructures/Variables.hpp"
      15             : #include "Domain/Structure/ElementId.hpp"
      16             : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp"
      17             : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
      18             : #include "Parallel/InboxInserters.hpp"
      19             : #include "Time/TimeStepId.hpp"
      20             : #include "Utilities/TMPL.hpp"
      21             : 
      22             : /// \cond
      23             : namespace Frame {
      24             : struct Grid;
      25             : }  // namespace Frame
      26             : /// \endcond
      27             : 
      28           1 : namespace CurvedScalarWave::Worldtube::Tags {
      29             : /*!
      30             :  * \brief Inbox of the worldtube singleton chare which receives quantities
      31             :  * projected onto spherical harmonics.
      32             :  *
      33             :  * \details Each element abutting the worldtube projects both $\Psi$ and the
      34             :  * time derivative of $\partial_t Psi$ onto spherical harmonics by integrating
      35             :  * it over the worldtube surface/boundary it is touching. These coefficients are
      36             :  * sent to this inbox.
      37             :  */
      38             : template <size_t Dim>
      39           1 : struct SphericalHarmonicsInbox
      40             :     : Parallel::InboxInserters::Map<SphericalHarmonicsInbox<Dim>> {
      41           0 :   using temporal_id = TimeStepId;
      42           0 :   using tags_list = tmpl::list<CurvedScalarWave::Tags::Psi,
      43             :                                ::Tags::dt<CurvedScalarWave::Tags::Psi>>;
      44           0 :   using type =
      45             :       std::map<temporal_id,
      46             :                std::unordered_map<ElementId<Dim>, Variables<tags_list>>>;
      47             : 
      48           0 :   static std::string output_inbox(const type& inbox,
      49             :                                   const size_t padding_size) {
      50             :     std::stringstream ss{};
      51             :     const std::string pad(padding_size, ' ');
      52             : 
      53             :     ss << std::scientific << std::setprecision(16);
      54             :     ss << pad << "SphericalHarmonicsInbox:\n";
      55             :     for (const auto& [current_time_step_id, element_id_and_vars] : inbox) {
      56             :       ss << pad << " Time: " << current_time_step_id << "\n";
      57             :       // We don't really care about the variables, just the elements
      58             :       for (const auto& [element_id, variables] : element_id_and_vars) {
      59             :         (void)variables;
      60             :         ss << pad << "  ElementId: " << element_id << "\n";
      61             :       }
      62             :     }
      63             : 
      64             :     return ss.str();
      65             :   }
      66             : };
      67             : 
      68             : /*!
      69             :  * \brief Inbox of the element chares that contains the coefficients of a Taylor
      70             :  * Series of the regular field $\Psi^R$ as well as its time derivative. The
      71             :  * elements may evaluate the coefficients at their inertial coordinates.
      72             :  */
      73             : template <size_t Dim>
      74           1 : struct RegularFieldInbox
      75             :     : Parallel::InboxInserters::Value<RegularFieldInbox<Dim>> {
      76           0 :   using tags_to_send = tmpl::list<CurvedScalarWave::Tags::Psi,
      77             :                                   ::Tags::dt<CurvedScalarWave::Tags::Psi>>;
      78           0 :   using temporal_id = TimeStepId;
      79           0 :   using type = std::map<temporal_id, Variables<tags_to_send>>;
      80             : 
      81           0 :   static std::string output_inbox(const type& inbox,
      82             :                                   const size_t padding_size) {
      83             :     std::stringstream ss{};
      84             :     const std::string pad(padding_size, ' ');
      85             : 
      86             :     ss << std::scientific << std::setprecision(16);
      87             :     ss << pad << "RegularFieldInbox:\n";
      88             :     // We don't really care about the variables, just the times
      89             :     for (const auto& [current_time_step_id, variables] : inbox) {
      90             :       (void)variables;
      91             :       ss << pad << " Time: " << current_time_step_id << "\n";
      92             :     }
      93             : 
      94             :     return ss.str();
      95             :   }
      96             : };
      97             : }  // namespace CurvedScalarWave::Worldtube::Tags

Generated by: LCOV version 1.14