9 #include "Framework/ActionTesting.hpp"
10 #include "IO/Observer/Helpers.hpp"
11 #include "IO/Observer/Initialize.hpp"
12 #include "IO/Observer/ObservationId.hpp"
13 #include "IO/Observer/ObserverComponent.hpp"
14 #include "IO/Observer/Tags.hpp"
15 #include "IO/Observer/TypeOfObservation.hpp"
16 #include "Parallel/Actions/SetupDataBox.hpp"
17 #include "Parallel/Actions/TerminatePhase.hpp"
18 #include "Parallel/ArrayIndex.hpp"
19 #include "Utilities/Functional.hpp"
24 template <
typename TagsList>
29 namespace TestObservers_detail {
32 template <observers::TypeOfObservation TypeOfObservation>
33 struct RegisterObservers {
34 template <
typename ParallelComponent,
typename DbTagsList,
37 register_info(
const db::DataBox<DbTagsList>& ,
38 const ArrayIndex& ) noexcept {
44 template <
typename Metavariables,
typename RegistrationActionsList>
45 struct element_component {
46 using component_being_mocked = void;
47 using metavariables = Metavariables;
49 using array_index = ElementIdType;
52 typename Metavariables::Phase,
53 Metavariables::Phase::RegisterWithObservers, RegistrationActionsList>>;
56 template <
typename Metavariables>
57 struct observer_component {
58 using metavariables = Metavariables;
60 using array_index = int;
64 typename observers::Actions::Initialize<Metavariables>::simple_tags;
66 typename observers::Actions::Initialize<Metavariables>::compute_tags;
69 typename Metavariables::Phase, Metavariables::Phase::Initialization,
74 template <
typename Metavariables>
75 struct observer_writer_component {
76 using metavariables = Metavariables;
78 using array_index = int;
84 typename observers::Actions::InitializeWriter<Metavariables>::simple_tags;
86 Metavariables>::compute_tags;
89 typename Metavariables::Phase, Metavariables::Phase::Initialization,
97 using reduction_data_from_doubles = Parallel::ReductionData<
102 using reduction_data_from_vector = Parallel::ReductionData<
108 using reduction_data_from_ds_and_vs = Parallel::ReductionData<
115 template <
typename RegistrationActionsList>
116 struct Metavariables {
117 using component_list =
118 tmpl::list<element_component<Metavariables, RegistrationActionsList>,
119 observer_component<Metavariables>,
120 observer_writer_component<Metavariables>>;
123 using observed_reduction_data_tags = observers::make_reduction_data_tags<
124 tmpl::list<reduction_data_from_doubles, reduction_data_from_vector,
125 reduction_data_from_ds_and_vs>>;
128 enum class Phase { Initialization, RegisterWithObservers, Testing, Exit };