88
99#include " ControlSystem/Actions/InitializeMeasurements.hpp"
1010#include " ControlSystem/Component.hpp"
11+ #include " ControlSystem/ControlErrors/Size/Factory.hpp"
12+ #include " ControlSystem/ControlErrors/Size/State.hpp"
1113#include " ControlSystem/Measurements/SingleHorizon.hpp"
1214#include " ControlSystem/Metafunctions.hpp"
1315#include " ControlSystem/Systems/Shape.hpp"
16+ #include " ControlSystem/Systems/Size.hpp"
17+ #include " ControlSystem/Systems/Translation.hpp"
1418#include " ControlSystem/Trigger.hpp"
1519#include " Domain/Structure/ObjectLabel.hpp"
1620#include " Evolution/Actions/RunEventsAndTriggers.hpp"
1721#include " Evolution/Executables/ScalarTensor/ScalarTensorBase.hpp"
18- #include " Evolution/Systems/GeneralizedHarmonic/Actions/SetInitialData.hpp"
1922#include " Options/FactoryHelpers.hpp"
2023#include " Options/Protocols/FactoryCreation.hpp"
2124#include " Options/String.hpp"
3134#include " ParallelAlgorithms/ApparentHorizonFinder/ComputeHorizonVolumeQuantities.tpp"
3235#include " ParallelAlgorithms/ApparentHorizonFinder/HorizonAliases.hpp"
3336#include " ParallelAlgorithms/ApparentHorizonFinder/InterpolationTarget.hpp"
37+ #include " ParallelAlgorithms/ApparentHorizonFinder/ObserveCenters.hpp"
38+ #include " ParallelAlgorithms/EventsAndTriggers/Actions/RunEventsOnFailure.hpp"
3439#include " ParallelAlgorithms/Interpolation/Actions/CleanUpInterpolator.hpp"
3540#include " ParallelAlgorithms/Interpolation/Actions/ElementInitInterpPoints.hpp"
3641#include " ParallelAlgorithms/Interpolation/Actions/InitializeInterpolationTarget.hpp"
5257#include " PointwiseFunctions/GeneralRelativity/Surfaces/Tags.hpp"
5358#include " Time/Actions/SelfStartActions.hpp"
5459#include " Time/ChangeSlabSize/Action.hpp"
60+ #include " Time/ChangeSlabSize/Tags.hpp"
5561#include " Time/StepChoosers/Factory.hpp"
62+ #include " Time/Tags/StepperErrors.hpp"
5663#include " Time/Tags/Time.hpp"
64+ #include " Utilities/Algorithm.hpp"
5765#include " Utilities/ErrorHandling/Error.hpp"
66+ #include " Utilities/PrettyType.hpp"
5867#include " Utilities/ProtocolHelpers.hpp"
5968
6069struct EvolutionMetavars : public ScalarTensorTemplateBase <EvolutionMetavars> {
@@ -69,27 +78,31 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
6978 " field \n "
7079 " on a domain with a single horizon and corresponding excised region" };
7180
72- struct AhA : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
81+ template <typename Frame>
82+ struct Ah : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
7383 using temporal_id = ::Tags::Time;
74- using tags_to_observe = ::ah::tags_for_observing<Frame::Inertial >;
84+ using tags_to_observe = ::ah::tags_for_observing<Frame>;
7585 using surface_tags_to_observe = ::ah::surface_tags_for_observing;
7686 using compute_vars_to_interpolate = ah::ComputeHorizonVolumeQuantities;
7787 using vars_to_interpolate_to_target =
78- ::ah::vars_to_interpolate_to_target<volume_dim, :: Frame::Inertial >;
88+ ::ah::vars_to_interpolate_to_target<volume_dim, Frame>;
7989 using compute_items_on_target =
80- ::ah::compute_items_on_target<volume_dim, Frame::Inertial >;
90+ ::ah::compute_items_on_target<volume_dim, Frame>;
8191 using compute_target_points =
82- intrp::TargetPoints::ApparentHorizon<AhA, :: Frame::Inertial >;
83- using post_interpolation_callbacks = tmpl::list<
84- intrp::callbacks::FindApparentHorizon<AhA, :: Frame::Inertial >>;
92+ intrp::TargetPoints::ApparentHorizon<Ah, Frame>;
93+ using post_interpolation_callbacks =
94+ tmpl::list< intrp::callbacks::FindApparentHorizon<Ah, Frame>>;
8595 using horizon_find_failure_callbacks =
8696 tmpl::list<intrp::callbacks::IgnoreFailedApparentHorizon>;
8797 using post_horizon_find_callbacks = tmpl::list<
88- intrp::callbacks::ObserveTimeSeriesOnSurface<tags_to_observe, AhA>,
89- intrp::callbacks::ObserveSurfaceData<surface_tags_to_observe, AhA,
90- ::Frame::Inertial>>;
98+ intrp::callbacks::ObserveTimeSeriesOnSurface<tags_to_observe, Ah>,
99+ intrp::callbacks::ObserveSurfaceData<surface_tags_to_observe, Ah,
100+ Frame>,
101+ ::ah::callbacks::ObserveCenters<Ah, Frame>>;
91102 };
92103
104+ using ApparentHorizon = Ah<::Frame::Distorted>;
105+
93106 struct ExcisionBoundaryA
94107 : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
95108 using temporal_id = ::Tags::Time;
@@ -129,17 +142,24 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
129142 using interpolating_component = typename metavariables::st_dg_element_array;
130143 };
131144
132- using control_systems = tmpl::list<control_system::Systems::Shape<
133- ::domain::ObjectLabel::None, 2 ,
134- control_system::measurements::SingleHorizon<
135- ::domain::ObjectLabel::None>>>;
145+ using control_systems =
146+ tmpl::list<control_system::Systems::Shape<
147+ ::domain::ObjectLabel::None, 2 ,
148+ control_system::measurements::SingleHorizon<
149+ ::domain::ObjectLabel::None>>,
150+ control_system::Systems::Translation<
151+ 2 ,
152+ control_system::measurements::SingleHorizon<
153+ ::domain::ObjectLabel::None>,
154+ 1 >,
155+ control_system::Systems::Size<::domain::ObjectLabel::None, 2 >>;
136156
137157 static constexpr bool use_control_systems =
138158 tmpl::size<control_systems>::value > 0 ;
139159
140160 using interpolation_target_tags = tmpl::push_back<
141161 control_system::metafunctions::interpolation_target_tags<control_systems>,
142- AhA , ExcisionBoundaryA, SphericalSurface>;
162+ ApparentHorizon , ExcisionBoundaryA, SphericalSurface>;
143163 using interpolator_source_vars = ::ah::source_vars<volume_dim>;
144164
145165 using scalar_charge_interpolator_source_vars =
@@ -161,26 +181,30 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
161181 LtsTimeStepper>,
162182 tmpl::pair<LtsTimeStepper,
163183 TimeSteppers::monotonic_lts_time_steppers>>,
164- tmpl::pair<Event,
165- tmpl::flatten<tmpl::list<
166- intrp::Events::Interpolate<volume_dim, AhA,
167- interpolator_source_vars>,
168- intrp::Events::InterpolateWithoutInterpComponent<
169- volume_dim, ExcisionBoundaryA,
170- interpolator_source_vars>,
171- intrp::Events::InterpolateWithoutInterpComponent<
172- volume_dim, SphericalSurface,
173- scalar_charge_interpolator_source_vars>>>>,
184+ tmpl::pair<
185+ Event,
186+ tmpl::flatten<tmpl::list<
187+ intrp::Events::Interpolate<volume_dim, ApparentHorizon,
188+ interpolator_source_vars>,
189+ control_system::metafunctions::control_system_events<
190+ control_systems>,
191+ intrp::Events::InterpolateWithoutInterpComponent<
192+ volume_dim, ExcisionBoundaryA, interpolator_source_vars>,
193+ intrp::Events::InterpolateWithoutInterpComponent<
194+ volume_dim, SphericalSurface,
195+ scalar_charge_interpolator_source_vars>>>>,
174196 tmpl::pair<DenseTrigger,
175- control_system::control_system_triggers<control_systems>>>;
197+ control_system::control_system_triggers<control_systems>>,
198+ tmpl::pair<control_system::size::State,
199+ control_system::size::States::factory_creatable_states>>;
176200 };
177201
178202 using typename st_base::const_global_cache_tags;
179203
180204 using observed_reduction_data_tags =
181205 observers::collect_reduction_data_tags<tmpl::push_back<
182206 tmpl::at<typename factory_creation::factory_classes, Event>,
183- typename AhA ::post_horizon_find_callbacks>>;
207+ typename ApparentHorizon ::post_horizon_find_callbacks>>;
184208
185209 using dg_registration_list =
186210 tmpl::push_back<typename st_base::dg_registration_list,
@@ -220,7 +244,14 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
220244 ::domain::Actions::CheckFunctionsOfTimeAreReady<volume_dim>,
221245 evolution::Actions::RunEventsAndTriggers<local_time_stepping>,
222246 Actions::ChangeSlabSize, step_actions, Actions::AdvanceTime,
223- PhaseControl::Actions::ExecutePhaseChange>>>>>;
247+ PhaseControl::Actions::ExecutePhaseChange>>,
248+ Parallel::PhaseActions<
249+ Parallel::Phase::PostFailureCleanup,
250+ tmpl::list<Actions::RunEventsOnFailure<::Tags::Time>,
251+ Parallel::Actions::TerminatePhase>>>>>;
252+
253+ // ControlSystem/Measurements/CharSpeed.hpp assumes gh_dg_element_array
254+ using gh_dg_element_array = st_dg_element_array;
224255
225256 template <typename ParallelComponent>
226257 struct registration_list {
@@ -232,8 +263,8 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
232263 using component_list = tmpl::flatten<tmpl::list<
233264 observers::Observer<EvolutionMetavars>,
234265 observers::ObserverWriter<EvolutionMetavars>,
235- mem_monitor::MemoryMonitor<EvolutionMetavars>,
236- st_dg_element_array, intrp::Interpolator<EvolutionMetavars>,
266+ mem_monitor::MemoryMonitor<EvolutionMetavars>, st_dg_element_array,
267+ intrp::Interpolator<EvolutionMetavars>,
237268 control_system::control_components<EvolutionMetavars, control_systems>,
238269 tmpl::transform<interpolation_target_tags,
239270 tmpl::bind<intrp::InterpolationTarget,
0 commit comments