SpECTRE Documentation Coverage Report
Current view: top level - Elliptic/Triggers - EveryNIterations.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 11.1 % 18 2
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 <cstdint>
       7              : #include <pup.h>
       8              : 
       9              : #include "NumericalAlgorithms/Convergence/Tags.hpp"
      10              : #include "Options/String.hpp"
      11              : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp"
      12              : #include "Utilities/Serialization/CharmPupable.hpp"
      13              : #include "Utilities/TMPL.hpp"
      14              : 
      15            1 : namespace elliptic::Triggers {
      16              : /// \ingroup EventsAndTriggersGroup
      17              : /// Trigger every N iterations of the solver identifid by the `Label`, after a
      18              : /// given offset.
      19              : template <typename Label>
      20            1 : class EveryNIterations : public Trigger {
      21              :  public:
      22              :   /// \cond
      23              :   EveryNIterations() = default;
      24              :   explicit EveryNIterations(CkMigrateMessage* /*unused*/) {}
      25              :   using PUP::able::register_constructor;
      26              :   WRAPPED_PUPable_decl_template(EveryNIterations);  // NOLINT
      27              :   /// \endcond
      28              : 
      29            0 :   struct N {
      30            0 :     using type = uint64_t;
      31            0 :     static constexpr Options::String help{"How frequently to trigger."};
      32            0 :     static type lower_bound() { return 1; }
      33              :   };
      34            0 :   struct Offset {
      35            0 :     using type = uint64_t;
      36            0 :     static constexpr Options::String help{"First iteration to trigger on."};
      37              :   };
      38              : 
      39            0 :   using options = tmpl::list<N, Offset>;
      40            0 :   static constexpr Options::String help{
      41              :       "Trigger every N iterations after a given offset."};
      42              : 
      43            0 :   EveryNIterations(const uint64_t interval, const uint64_t offset)
      44              :       : interval_(interval), offset_(offset) {}
      45              : 
      46            0 :   using argument_tags = tmpl::list<Convergence::Tags::IterationId<Label>>;
      47              : 
      48            0 :   bool operator()(const size_t iteration_id) const {
      49              :     const auto step_number = static_cast<uint64_t>(iteration_id);
      50              :     return step_number >= offset_ and (step_number - offset_) % interval_ == 0;
      51              :   }
      52              : 
      53              :   // NOLINTNEXTLINE(google-runtime-references)
      54            0 :   void pup(PUP::er& p) {
      55              :     p | interval_;
      56              :     p | offset_;
      57              :   }
      58              : 
      59              :  private:
      60            0 :   uint64_t interval_{0};
      61            0 :   uint64_t offset_{0};
      62              : };
      63              : 
      64              : /// \cond
      65              : template <typename Label>
      66              : PUP::able::PUP_ID EveryNIterations<Label>::my_PUP_ID = 0;  // NOLINT
      67              : /// \endcond
      68              : }  // namespace elliptic::Triggers
        

Generated by: LCOV version 2.0-1