SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/EventsAndDenseTriggers/DenseTriggers - Times.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 6.2 % 16 1
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 <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 2.0-1