Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <limits> 7 : #include <pup.h> 8 : 9 : #include "Options/Comparator.hpp" 10 : #include "Options/String.hpp" 11 : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp" 12 : #include "Time/TimeStepId.hpp" 13 : #include "Utilities/Serialization/CharmPupable.hpp" 14 : #include "Utilities/TMPL.hpp" 15 : 16 : /// \cond 17 : namespace Tags { 18 : struct TimeStepId; 19 : } // namespace Tags 20 : /// \endcond 21 : 22 : namespace Triggers { 23 : /// \ingroup EventsAndTriggersGroup 24 : /// \ingroup TimeGroup 25 : /// Trigger based on a comparison with the slab number. 26 1 : class SlabCompares : public Trigger { 27 : public: 28 : /// \cond 29 : SlabCompares() = default; 30 : explicit SlabCompares(CkMigrateMessage* /*unused*/) {} 31 : using PUP::able::register_constructor; 32 : WRAPPED_PUPable_decl_template(SlabCompares); // NOLINT 33 : /// \endcond 34 : 35 0 : struct Comparison { 36 0 : using type = Options::Comparator; 37 0 : constexpr static Options::String help = "Comparison type"; 38 : }; 39 : 40 0 : struct Value { 41 0 : using type = uint64_t; 42 0 : constexpr static Options::String help = "Value to compare to"; 43 : }; 44 : 45 0 : using options = tmpl::list<Comparison, Value>; 46 0 : static constexpr Options::String help{ 47 : "Trigger based on a comparison with the slab number."}; 48 : 49 0 : explicit SlabCompares(const Options::Comparator comparator, 50 : const uint64_t slab_number) 51 : : comparator_(comparator), slab_number_(slab_number) {} 52 : 53 0 : using argument_tags = tmpl::list<Tags::TimeStepId>; 54 : 55 0 : bool operator()(const TimeStepId& time_step_id) const { 56 : return comparator_(static_cast<uint64_t>(time_step_id.slab_number()), 57 : slab_number_); 58 : } 59 : 60 : // NOLINTNEXTLINE(google-runtime-references) 61 0 : void pup(PUP::er& p) { 62 : p | comparator_; 63 : p | slab_number_; 64 : } 65 : 66 : private: 67 0 : Options::Comparator comparator_{}; 68 0 : uint64_t slab_number_{}; 69 : }; 70 : } // namespace Triggers