SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/EventsAndDenseTriggers/DenseTriggers - Times.hpp Hit Total Coverage
Commit: 965048f86d23c819715b3af1ca3f880c8145d4bb Lines: 1 16 6.2 %
Date: 2024-05-16 17:00:40
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 <pup.h>
       9             : 
      10             : #include "Options/Options.hpp"
      11             : #include "Options/ParseOptions.hpp"
      12             : #include "Options/String.hpp"
      13             : #include "ParallelAlgorithms/EventsAndDenseTriggers/DenseTrigger.hpp"
      14             : #include "Time/TimeSequence.hpp"
      15             : #include "Utilities/Serialization/CharmPupable.hpp"
      16             : #include "Utilities/TMPL.hpp"
      17             : 
      18             : /// \cond
      19             : class TimeStepId;
      20             : namespace Parallel {
      21             : template <typename Metavariables>
      22             : class GlobalCache;
      23             : }  // namespace Parallel
      24             : namespace Tags {
      25             : struct Time;
      26             : struct TimeStepId;
      27             : }  // namespace Tags
      28             : /// \endcond
      29             : 
      30             : namespace DenseTriggers {
      31             : /// \ingroup EventsAndTriggersGroup
      32             : /// \ingroup TimeGroup
      33             : /// Trigger at specified times.
      34           1 : class Times : public DenseTrigger {
      35             :  public:
      36             :   /// \cond
      37             :   Times() = default;
      38             :   explicit Times(CkMigrateMessage* const msg) : DenseTrigger(msg) {}
      39             :   using PUP::able::register_constructor;
      40             :   WRAPPED_PUPable_decl_template(Times);  // NOLINT
      41             :   /// \endcond
      42             : 
      43           0 :   static constexpr Options::String help{"Trigger at specified times."};
      44             : 
      45           0 :   explicit Times(std::unique_ptr<TimeSequence<double>> times);
      46             : 
      47           0 :   using is_triggered_return_tags = tmpl::list<>;
      48           0 :   using is_triggered_argument_tags = tmpl::list<Tags::Time>;
      49             : 
      50             :   template <typename Metavariables, typename ArrayIndex, typename Component>
      51           0 :   std::optional<bool> is_triggered(
      52             :       Parallel::GlobalCache<Metavariables>& /*cache*/,
      53             :       const ArrayIndex& /*array_index*/, const Component* /*component*/,
      54             :       const double time) const {
      55             :     return is_triggered_impl(time);
      56             :   }
      57             : 
      58           0 :   using next_check_time_return_tags = tmpl::list<>;
      59           0 :   using next_check_time_argument_tags =
      60             :       tmpl::list<Tags::TimeStepId, Tags::Time>;
      61             : 
      62             :   template <typename Metavariables, typename ArrayIndex, typename Component>
      63           0 :   std::optional<double> next_check_time(
      64             :       Parallel::GlobalCache<Metavariables>& /*cache*/,
      65             :       const ArrayIndex& /*array_index*/, const Component* /*component*/,
      66             :       const TimeStepId& time_step_id, const double time) const {
      67             :     return next_check_time_impl(time_step_id, time);
      68             :   }
      69             : 
      70             :   // NOLINTNEXTLINE(google-runtime-references)
      71           0 :   void pup(PUP::er& p) override;
      72             : 
      73             :  private:
      74           0 :   std::optional<bool> is_triggered_impl(const double time) const;
      75             : 
      76           0 :   std::optional<double> next_check_time_impl(const TimeStepId& time_step_id,
      77             :                                              const double time) const;
      78             : 
      79           0 :   std::unique_ptr<TimeSequence<double>> times_{};
      80             : };
      81             : }  // namespace DenseTriggers
      82             : 
      83             : template <>
      84           0 : struct Options::create_from_yaml<DenseTriggers::Times> {
      85             :   template <typename Metavariables>
      86           0 :   static DenseTriggers::Times create(const Option& options) {
      87             :     return DenseTriggers::Times(
      88             :         options
      89             :             .parse_as<std::unique_ptr<TimeSequence<double>>, Metavariables>());
      90             :   }
      91             : };

Generated by: LCOV version 1.14