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"
3236#include " ParallelAlgorithms/ApparentHorizonFinder/ComputeHorizonVolumeQuantities.tpp"
3337#include " ParallelAlgorithms/ApparentHorizonFinder/HorizonAliases.hpp"
3438#include " ParallelAlgorithms/ApparentHorizonFinder/InterpolationTarget.hpp"
39+ #include " ParallelAlgorithms/ApparentHorizonFinder/ObserveCenters.hpp"
40+ #include " ParallelAlgorithms/EventsAndTriggers/Actions/RunEventsOnFailure.hpp"
3541#include " ParallelAlgorithms/Interpolation/Actions/CleanUpInterpolator.hpp"
3642#include " ParallelAlgorithms/Interpolation/Actions/ElementInitInterpPoints.hpp"
3743#include " ParallelAlgorithms/Interpolation/Actions/InitializeInterpolationTarget.hpp"
5359#include " PointwiseFunctions/GeneralRelativity/Surfaces/Tags.hpp"
5460#include " Time/Actions/SelfStartActions.hpp"
5561#include " Time/ChangeSlabSize/Action.hpp"
62+ #include " Time/ChangeSlabSize/Tags.hpp"
5663#include " Time/StepChoosers/Factory.hpp"
64+ #include " Time/Tags/StepperErrors.hpp"
5765#include " Time/Tags/Time.hpp"
66+ #include " Utilities/Algorithm.hpp"
5867#include " Utilities/ErrorHandling/Error.hpp"
68+ #include " Utilities/PrettyType.hpp"
5969#include " Utilities/ProtocolHelpers.hpp"
6070
6171struct EvolutionMetavars : public ScalarTensorTemplateBase <EvolutionMetavars> {
@@ -70,27 +80,31 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
7080 " field \n "
7181 " on a domain with a single horizon and corresponding excised region" };
7282
73- struct AhA : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
83+ template <typename Frame>
84+ struct Ah : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
7485 using temporal_id = ::Tags::Time;
75- using tags_to_observe = ::ah::tags_for_observing<Frame::Inertial >;
86+ using tags_to_observe = ::ah::tags_for_observing<Frame>;
7687 using surface_tags_to_observe = ::ah::surface_tags_for_observing;
7788 using compute_vars_to_interpolate = ah::ComputeHorizonVolumeQuantities;
7889 using vars_to_interpolate_to_target =
79- ::ah::vars_to_interpolate_to_target<volume_dim, :: Frame::Inertial >;
90+ ::ah::vars_to_interpolate_to_target<volume_dim, Frame>;
8091 using compute_items_on_target =
81- ::ah::compute_items_on_target<volume_dim, Frame::Inertial >;
92+ ::ah::compute_items_on_target<volume_dim, Frame>;
8293 using compute_target_points =
83- intrp::TargetPoints::ApparentHorizon<AhA, :: Frame::Inertial >;
84- using post_interpolation_callbacks = tmpl::list<
85- intrp::callbacks::FindApparentHorizon<AhA, :: Frame::Inertial >>;
94+ intrp::TargetPoints::ApparentHorizon<Ah, Frame>;
95+ using post_interpolation_callbacks =
96+ tmpl::list< intrp::callbacks::FindApparentHorizon<Ah, Frame>>;
8697 using horizon_find_failure_callbacks =
8798 tmpl::list<intrp::callbacks::IgnoreFailedApparentHorizon>;
8899 using post_horizon_find_callbacks = tmpl::list<
89- intrp::callbacks::ObserveTimeSeriesOnSurface<tags_to_observe, AhA>,
90- intrp::callbacks::ObserveSurfaceData<surface_tags_to_observe, AhA,
91- ::Frame::Inertial>>;
100+ intrp::callbacks::ObserveTimeSeriesOnSurface<tags_to_observe, Ah>,
101+ intrp::callbacks::ObserveSurfaceData<surface_tags_to_observe, Ah,
102+ Frame>,
103+ ::ah::callbacks::ObserveCenters<Ah, Frame>>;
92104 };
93105
106+ using ApparentHorizon = Ah<::Frame::Distorted>;
107+
94108 struct ExcisionBoundaryA
95109 : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
96110 using temporal_id = ::Tags::Time;
@@ -130,10 +144,17 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
130144 using interpolating_component = typename metavariables::st_dg_element_array;
131145 };
132146
133- using control_systems = tmpl::list<control_system::Systems::Shape<
134- ::domain::ObjectLabel::None, 2 ,
135- control_system::measurements::SingleHorizon<
136- ::domain::ObjectLabel::None>>>;
147+ using control_systems =
148+ tmpl::list<control_system::Systems::Shape<
149+ ::domain::ObjectLabel::None, 2 ,
150+ control_system::measurements::SingleHorizon<
151+ ::domain::ObjectLabel::None>>,
152+ control_system::Systems::Translation<
153+ 2 ,
154+ control_system::measurements::SingleHorizon<
155+ ::domain::ObjectLabel::None>,
156+ 1 >,
157+ control_system::Systems::Size<::domain::ObjectLabel::None, 2 >>;
137158
138159 static constexpr bool use_control_systems =
139160 tmpl::size<control_systems>::value > 0 ;
@@ -142,7 +163,7 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
142163
143164 using interpolation_target_tags = tmpl::push_back<
144165 control_system::metafunctions::interpolation_target_tags<control_systems>,
145- AhA , ExcisionBoundaryA, SphericalSurface, BondiSachs>;
166+ ApparentHorizon , ExcisionBoundaryA, SphericalSurface, BondiSachs>;
146167 using interpolator_source_vars = ::ah::source_vars<volume_dim>;
147168
148169 using scalar_charge_interpolator_source_vars =
@@ -185,25 +206,29 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
185206 tmpl::pair<
186207 Event,
187208 tmpl::flatten<tmpl::list<
188- intrp::Events::Interpolate<volume_dim, AhA ,
209+ intrp::Events::Interpolate<volume_dim, ApparentHorizon ,
189210 interpolator_source_vars>,
190211 intrp::Events::InterpolateWithoutInterpComponent<
191212 3 , BondiSachs, source_vars_no_deriv>,
213+ control_system::metafunctions::control_system_events<
214+ control_systems>,
192215 intrp::Events::InterpolateWithoutInterpComponent<
193216 volume_dim, ExcisionBoundaryA, interpolator_source_vars>,
194217 intrp::Events::InterpolateWithoutInterpComponent<
195218 volume_dim, SphericalSurface,
196219 scalar_charge_interpolator_source_vars>>>>,
197220 tmpl::pair<DenseTrigger,
198- control_system::control_system_triggers<control_systems>>>;
221+ control_system::control_system_triggers<control_systems>>,
222+ tmpl::pair<control_system::size::State,
223+ control_system::size::States::factory_creatable_states>>;
199224 };
200225
201226 using typename st_base::const_global_cache_tags;
202227
203228 using observed_reduction_data_tags =
204229 observers::collect_reduction_data_tags<tmpl::push_back<
205230 tmpl::at<typename factory_creation::factory_classes, Event>,
206- typename AhA ::post_horizon_find_callbacks>>;
231+ typename ApparentHorizon ::post_horizon_find_callbacks>>;
207232
208233 using dg_registration_list =
209234 tmpl::push_back<typename st_base::dg_registration_list,
@@ -252,7 +277,14 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
252277 ::domain::Actions::CheckFunctionsOfTimeAreReady<volume_dim>,
253278 evolution::Actions::RunEventsAndTriggers<local_time_stepping>,
254279 Actions::ChangeSlabSize, step_actions, Actions::AdvanceTime,
255- PhaseControl::Actions::ExecutePhaseChange>>>>>;
280+ PhaseControl::Actions::ExecutePhaseChange>>,
281+ Parallel::PhaseActions<
282+ Parallel::Phase::PostFailureCleanup,
283+ tmpl::list<Actions::RunEventsOnFailure<::Tags::Time>,
284+ Parallel::Actions::TerminatePhase>>>>>;
285+
286+ // ControlSystem/Measurements/CharSpeed.hpp assumes gh_dg_element_array
287+ using gh_dg_element_array = st_dg_element_array;
256288
257289 template <typename ParallelComponent>
258290 struct registration_list {
0 commit comments