SpECTRE
v2024.08.03
|
Helper struct for testing basic control systems. More...
#include <SystemHelpers.hpp>
Public Types | |
using | control_systems = typename Metavars::control_systems |
using | element_component = typename Metavars::element_component |
using | control_components = typename Metavars::control_components |
Public Member Functions | |
auto & | domain () |
auto & | is_active_map () |
auto & | initial_functions_of_time () |
auto & | initial_measurement_timescales () |
template<typename System > | |
const auto & | init_tuple () |
const auto & | horizon_a () |
const auto & | horizon_b () |
template<typename System > | |
std::string | name () |
const auto & | system_to_combined_names () |
void | reset () |
template<typename F > | |
void | setup_control_system_test (const double initial_time, const double initial_separation, const std::string &option_string, const F initialize_functions_of_time) |
Setup the test. More... | |
template<typename Generator , typename F > | |
void | run_control_system_test (ActionTesting::MockRuntimeSystem< Metavars > &runner, const double final_time, gsl::not_null< Generator * > generator, const F horizon_function) |
Actually run the control system test. More... | |
Helper struct for testing basic control systems.
To signify which control systems you want, set the corresponding DerivOrder. To turn control systems off, put 0 for their DerivOrder in the templates of the metavariables.
Ideally we'd construct the runner here and just pass that to the test to simplify as must of the work as possible, but MockRuntimeSystems aren't copy- or move-able so we have to make the necessary info available. The simplest way to do this was to have functions that return references to the member variables.
|
inline |
Actually run the control system test.
The horizon_function
should return a std::pair<ylm::Strahlkorper<Frame::Distorted>, ylm::Strahlkorper<Frame::Distorted>>
representing the two horizons in the grid frame. This means the user is responsible for doing any coordinate transformations inside horizon_function
as this function won't do any. The number_of_horizons
is used to determine if we actually use both horizon "measurements" as some control systems may only need one. If only one horizon is used, the default is to use AhA.
For the basic control systems, a common function is defined for you: control_system::TestHelpers::build_horizons_for_basic_control_systems()
.
|
inline |
Setup the test.
The function initialize_functions_of_time
must take a const gsl::not_null<std::unordered_map<std::string, std::unique_ptr<domain::FunctionsOfTime::FunctionOfTime>>*>
for the function of time map, a const double
for the initial time, and a const std::unordered_map<std::string, double>&
for the expiration times. This function will initialize the functions of time and must return a double that represents the radius of the excision spheres. Some existing functions are given in the control_system::TestHelpers
namespace for Expansion, Rotation, and Translation.