SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Cce/InterfaceManagers - GhInterfaceManager.hpp Hit Total Coverage
Commit: de0084593a37be7727c6c4da0be2184b0f8d9ed4 Lines: 2 10 20.0 %
Date: 2025-11-04 23:26:01
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 <memory>
       7             : #include <optional>
       8             : #include <tuple>
       9             : 
      10             : #include "DataStructures/Tensor/Tensor.hpp"
      11             : #include "DataStructures/Tensor/TypeAliases.hpp"
      12             : #include "DataStructures/Variables.hpp"
      13             : #include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp"
      14             : #include "Options/String.hpp"
      15             : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      16             : #include "Time/TimeStepId.hpp"
      17             : #include "Utilities/Serialization/CharmPupable.hpp"
      18             : 
      19             : namespace Cce {
      20             : /// \brief Code for interfacing between the characteristic and Cachy systems.
      21           1 : namespace InterfaceManagers {
      22             : 
      23             : /// \cond
      24             : class GhLocalTimeStepping;
      25             : class GhLockstep;
      26             : /// \endcond
      27             : 
      28             : /*!
      29             :  * \brief Abstract base class for storage and retrieval of generalized harmonic
      30             :  * quantities communicated from a Cauchy simulation to the Cce system.
      31             :  *
      32             :  * \details The functions that are required to be overriden in the derived
      33             :  * classes are:
      34             :  * - `GhInterfaceManager::get_clone()`: should return a
      35             :  * `std::unique_ptr<GhInterfaceManager>` with cloned state.
      36             :  * - `GhInterfaceManager::insert_gh_data()`: should store the portions
      37             :  * of the provided generalized harmonic data that are required to provide useful
      38             :  * boundary values for the CCE evolution at requested timesteps.
      39             :  * - `GhInterfaceManager::request_gh_data()`: should register requests
      40             :  * from the CCE evolution for boundary data.
      41             :  * - `GhInterfaceManager::retrieve_and_remove_first_ready_gh_data()`:
      42             :  * should return a `std::optional<std::tuple<TimeStepId,
      43             :  * tnsr::aa<DataVector, 3>, tnsr::iaa<DataVector, 3>, tnsr::aa<DataVector, 3>>>`
      44             :  * containing the boundary data associated with the oldest requested timestep if
      45             :  * enough data has been supplied via `insert_gh_data()` to determine the
      46             :  * boundary data. Otherwise, return a `std::nullopt` to indicate that the CCE
      47             :  * system must continue waiting for generalized harmonic input.
      48             :  * - `GhInterfaceManager::number_of_pending_requests()`: should return
      49             :  * the number of requests that have been registered to the class that do not yet
      50             :  * been retrieved via `retrieve_and_remove_first_ready_gh_data()`.
      51             :  * - `GhInterfaceManager::number_of_gh_times()`: should return the
      52             :  * number of time steps sent to `insert_gh_data()` that have not yet been
      53             :  * retrieved via `retrieve_and_remove_first_ready_gh_data()`.
      54             :  */
      55           1 : class GhInterfaceManager : public PUP::able {
      56             :  public:
      57           0 :   using gh_variables = Variables<
      58             :       tmpl::list<gr::Tags::SpacetimeMetric<DataVector, 3>,
      59             :                  gh::Tags::Pi<DataVector, 3>, gh::Tags::Phi<DataVector, 3>>>;
      60             : 
      61           0 :   WRAPPED_PUPable_abstract(GhInterfaceManager);  // NOLINT
      62             : 
      63           0 :   virtual std::unique_ptr<GhInterfaceManager> get_clone() const = 0;
      64             : 
      65           0 :   virtual void request_gh_data(const TimeStepId&) = 0;
      66             : 
      67           0 :   virtual auto retrieve_and_remove_first_ready_gh_data()
      68             :       -> std::optional<std::tuple<TimeStepId, gh_variables>> = 0;
      69             : 
      70           0 :   virtual size_t number_of_pending_requests() const = 0;
      71             : 
      72           0 :   virtual size_t number_of_gh_times() const = 0;
      73             : };
      74             : 
      75             : }  // namespace InterfaceManagers
      76             : }  // namespace Cce

Generated by: LCOV version 1.14