SpECTRE Documentation Coverage Report
Current view: top level - ControlSystem/Protocols - ControlError.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 40.0 % 5 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 <cstddef>
       7              : #include <string>
       8              : #include <type_traits>
       9              : 
      10              : #include "DataStructures/DataVector.hpp"
      11              : #include "DataStructures/TaggedTuple.hpp"
      12              : #include "Parallel/GlobalCache.hpp"
      13              : #include "Utilities/TMPL.hpp"
      14              : #include "Utilities/TypeTraits/CreateIsCallable.hpp"
      15              : 
      16              : template <bool AllowDecrease>
      17              : struct TimescaleTuner;
      18              : 
      19            1 : namespace control_system::protocols {
      20              : namespace detail {
      21              : 
      22              : struct DummyMetavariables {
      23              :   using component_list = tmpl::list<>;
      24              : };
      25              : struct DummyTupleTags {
      26              :   using type = int;
      27              : };
      28              : 
      29              : template <typename T, bool AllowDecrease>
      30              : struct has_signature
      31              :     : std::is_invocable_r<DataVector, T, const ::TimescaleTuner<AllowDecrease>&,
      32              :                           const Parallel::GlobalCache<DummyMetavariables>&,
      33              :                           const double, const std::string&,
      34              :                           const tuples::TaggedTuple<DummyTupleTags>&> {};
      35              : CREATE_IS_CALLABLE(get_suggested_timescale)
      36              : CREATE_IS_CALLABLE_V(get_suggested_timescale)
      37              : CREATE_IS_CALLABLE(reset)
      38              : CREATE_IS_CALLABLE_V(reset)
      39              : }  // namespace detail
      40              : /// \brief Definition of a control error
      41              : ///
      42              : /// A control error is used within a control system to compute how far off the
      43              : /// the value you are controlling is from its expected value.
      44              : ///
      45              : /// A conforming type must specify:
      46              : ///
      47              : /// - a call operator that returns a DataVector with a signature the same as in
      48              : ///   the example shown here:
      49              : /// - a type alias `object_centers` to a `domain::object_list` of
      50              : ///   `domain::ObjectLabel`s. These are the objects that will require the
      51              : ///   `domain::Tags::ObjectCenter`s tags to be in the GlobalCache for this
      52              : ///   control system to work.
      53              : /// - a function with signature `std::optional<double> get_suggested_timescale()
      54              : ///   const;` which returns a potential suggested timescale. To use the
      55              : ///   timescale from the timescale tuner, return `std::nullopt`.
      56              : /// - a function with signature `void reset();` which will reset the control
      57              : ///   error after `get_suggested_timescale()` is called.
      58              : ///
      59              : /// \note The TimescaleTuner can have it's template parameter be either `true`
      60              : /// or `false`.
      61              : ///
      62              : ///   \snippet Helpers/ControlSystem/Examples.hpp ControlError
      63            1 : struct ControlError {
      64              :   template <typename ConformingType>
      65            0 :   struct test {
      66            0 :     using object_centers = typename ConformingType::object_centers;
      67              : 
      68              :     static_assert(detail::has_signature<ConformingType, true>::value or
      69              :                   detail::has_signature<ConformingType, false>::value);
      70              : 
      71              :     static_assert(
      72              :         detail::is_get_suggested_timescale_callable_v<ConformingType>);
      73              :     static_assert(detail::is_reset_callable_v<ConformingType>);
      74              :   };
      75              : };
      76              : }  // namespace control_system::protocols
        

Generated by: LCOV version 2.0-1