SpECTRE  2021.08.02
TimescaleTuner Class Reference

Manages control system timescales. More...

#include <TimescaleTuner.hpp>

Public Member Functions

 TimescaleTuner (DataVector initial_timescale, double max_timescale, double min_timescale, double decrease_timescale_threshold, double increase_timescale_threshold, double increase_factor, double decrease_factor) noexcept
 
 TimescaleTuner (TimescaleTuner &&) noexcept=default
 
TimescaleTuneroperator= (TimescaleTuner &&) noexcept=default
 
 TimescaleTuner (const TimescaleTuner &)=delete
 
TimescaleTuneroperator= (const TimescaleTuner &)=delete
 
const DataVectorcurrent_timescale () noexcept
 returns the current timescale for each component of a FunctionOfTime
 
void set_timescale_if_in_allowable_range (double suggested_timescale) noexcept
 manually sets all timescales to a specified value, unless the value is outside of the specified minimum and maximum timescale bounds, in which case it is set to the nearest bounded value
 
void update_timescale (const std::array< DataVector, 2 > &q_and_dtq) noexcept
 the update function responsible for modifying the timescale based on the control system errors
 

Detailed Description

Manages control system timescales.

The TimescaleTuner adjusts the damping timescale, \(\tau\), of the control system.
The damping timescale is restricted to min_timescale \(\le\tau\le\)max_timescale

The damping time is adjusted according to the following criteria:

Decrease the timescale by a factor of decrease_factor if either

  • the error is too large: \(|Q| >\) decrease_timescale_threshold OR the error is changing quickly: \(|\dot{Q}|\tau >\) decrease_timescale_threshold,
    AND
  • the error is growing: \(\dot{Q}Q > 0\) OR the expected change in \(Q\) is less than half its current value: \(|\dot{Q}|\tau < |Q|/2\)

Increase the timescale by a factor of increase_factor if

  • the error is sufficiently small: \(|Q|<\) increase_timescale_threshold
    AND
  • the expected change in \(Q\) is less than the difference between the current error and the threshold: \(|\dot{Q}|\tau < \) (increase_timescale_threshold \(-|Q|\))