SpECTRE Documentation Coverage Report
Current view: top level - Time/Triggers - Times.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 1 10 10.0 %
Date: 2025-12-05 05:03:31
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             : #include <pup_stl.h>
      10             : #include <utility>
      11             : 
      12             : #include "Options/ParseOptions.hpp"
      13             : #include "Options/String.hpp"
      14             : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp"
      15             : #include "Time/TimeSequence.hpp"
      16             : #include "Utilities/Serialization/CharmPupable.hpp"
      17             : #include "Utilities/TMPL.hpp"
      18             : 
      19             : /// \cond
      20             : namespace Tags {
      21             : struct Time;
      22             : }  // namespace Tags
      23             : /// \endcond
      24             : 
      25             : namespace Triggers {
      26             : /// \ingroup EventsAndTriggersGroup
      27             : /// \ingroup TimeGroup
      28             : /// Trigger at particular times.
      29             : ///
      30             : /// \warning This trigger will only fire if it is actually checked at
      31             : /// the times specified.  The StepToTimes StepChooser can be useful
      32             : /// for this.
      33           1 : class Times : public Trigger {
      34             :  public:
      35             :   /// \cond
      36             :   Times() = default;
      37             :   explicit Times(CkMigrateMessage* /*unused*/) {}
      38             :   using PUP::able::register_constructor;
      39             :   WRAPPED_PUPable_decl_template(Times);  // NOLINT
      40             :   /// \endcond
      41             : 
      42           0 :   static constexpr Options::String help{"Trigger at particular times."};
      43             : 
      44           0 :   explicit Times(std::unique_ptr<TimeSequence<double>> times)
      45             :       : times_(std::move(times)) {}
      46             : 
      47           0 :   using argument_tags = tmpl::list<Tags::Time>;
      48             : 
      49           0 :   bool operator()(const double now) const {
      50             :     return times_->times_near(now)[1] == std::optional(now);
      51             :   }
      52             : 
      53             :   // NOLINTNEXTLINE(google-runtime-references)
      54           0 :   void pup(PUP::er& p) override { p | times_; }
      55             : 
      56             :  private:
      57           0 :   std::unique_ptr<TimeSequence<double>> times_;
      58             : };
      59             : }  // namespace Triggers
      60             : 
      61             : template <>
      62           0 : struct Options::create_from_yaml<Triggers::Times> {
      63             :   template <typename Metavariables>
      64           0 :   static Triggers::Times create(const Option& options) {
      65             :     return Triggers::Times(
      66             :         options
      67             :             .parse_as<std::unique_ptr<TimeSequence<double>>, Metavariables>());
      68             :   }
      69             : };

Generated by: LCOV version 1.14