SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Executables/GeneralizedHarmonic - EvolveGhSingleBlackHole.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 0.0 % 42 0
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <cstdint>
       7              : #include <string>
       8              : #include <vector>
       9              : 
      10              : #include "ControlSystem/Actions/InitializeMeasurements.hpp"
      11              : #include "ControlSystem/CleanFunctionsOfTime.hpp"
      12              : #include "ControlSystem/Component.hpp"
      13              : #include "ControlSystem/ControlErrors/Size/Factory.hpp"
      14              : #include "ControlSystem/ControlErrors/Size/State.hpp"
      15              : #include "ControlSystem/Measurements/SingleHorizon.hpp"
      16              : #include "ControlSystem/Metafunctions.hpp"
      17              : #include "ControlSystem/Systems/Shape.hpp"
      18              : #include "ControlSystem/Systems/Size.hpp"
      19              : #include "ControlSystem/Systems/Translation.hpp"
      20              : #include "ControlSystem/Trigger.hpp"
      21              : #include "DataStructures/Tensor/IndexType.hpp"
      22              : #include "Domain/Structure/ObjectLabel.hpp"
      23              : #include "Evolution/Actions/RunEventsAndTriggers.hpp"
      24              : #include "Evolution/DiscontinuousGalerkin/EqualRateLts/ChangeFixedLtsRatio.hpp"
      25              : #include "Evolution/DiscontinuousGalerkin/Initialization/ProjectSpectralFilters.hpp"
      26              : #include "Evolution/Executables/GeneralizedHarmonic/Deadlock.hpp"
      27              : #include "Evolution/Executables/GeneralizedHarmonic/GeneralizedHarmonicBase.hpp"
      28              : #include "Evolution/Systems/Cce/Callbacks/DumpBondiSachsOnWorldtube.hpp"
      29              : #include "Evolution/Systems/GeneralizedHarmonic/Actions/SetInitialData.hpp"
      30              : #include "NumericalAlgorithms/Strahlkorper/IO/InitialShapeFromFile.hpp"
      31              : #include "NumericalAlgorithms/Strahlkorper/InitialShape.hpp"
      32              : #include "Options/FactoryHelpers.hpp"
      33              : #include "Options/Protocols/FactoryCreation.hpp"
      34              : #include "Options/String.hpp"
      35              : #include "Parallel/ArrayCollection/DgElementCollection.hpp"
      36              : #include "Parallel/GlobalCache.hpp"
      37              : #include "Parallel/Invoke.hpp"
      38              : #include "Parallel/MemoryMonitor/MemoryMonitor.hpp"
      39              : #include "Parallel/PhaseControl/ExecutePhaseChange.hpp"
      40              : #include "Parallel/Protocols/RegistrationMetavariables.hpp"
      41              : #include "ParallelAlgorithms/Actions/FunctionsOfTimeAreReady.hpp"
      42              : #include "ParallelAlgorithms/Actions/MutateApply.hpp"
      43              : #include "ParallelAlgorithms/Amr/Events/ObserveAmrCriteria.hpp"
      44              : #include "ParallelAlgorithms/Amr/Events/ObserveAmrStats.hpp"
      45              : #include "ParallelAlgorithms/Amr/Events/RefineMesh.hpp"
      46              : #include "ParallelAlgorithms/Amr/Projectors/CopyFromCreatorOrLeaveAsIs.hpp"
      47              : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/FailedHorizonFind.hpp"
      48              : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/ObserveFieldsOnHorizon.hpp"
      49              : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/ObserveTimeSeriesOnHorizon.hpp"
      50              : #include "ParallelAlgorithms/ApparentHorizonFinder/Component.hpp"
      51              : #include "ParallelAlgorithms/ApparentHorizonFinder/Criteria/Criterion.hpp"
      52              : #include "ParallelAlgorithms/ApparentHorizonFinder/Criteria/Factory.hpp"
      53              : #include "ParallelAlgorithms/ApparentHorizonFinder/Events/FindApparentHorizon.hpp"
      54              : #include "ParallelAlgorithms/ApparentHorizonFinder/HorizonAliases.hpp"
      55              : #include "ParallelAlgorithms/ApparentHorizonFinder/KerrSchild.hpp"
      56              : #include "ParallelAlgorithms/ApparentHorizonFinder/Protocols/HorizonMetavars.hpp"
      57              : #include "ParallelAlgorithms/EventsAndTriggers/Actions/RunEventsOnFailure.hpp"
      58              : #include "ParallelAlgorithms/Interpolation/Actions/ElementInitInterpPoints.hpp"
      59              : #include "ParallelAlgorithms/Interpolation/Actions/InitializeInterpolationTarget.hpp"
      60              : #include "ParallelAlgorithms/Interpolation/Callbacks/ObserveSurfaceData.hpp"
      61              : #include "ParallelAlgorithms/Interpolation/Callbacks/ObserveTimeSeriesOnSurface.hpp"
      62              : #include "ParallelAlgorithms/Interpolation/ComputeExcisionBoundaryVolumeQuantities.hpp"
      63              : #include "ParallelAlgorithms/Interpolation/ComputeExcisionBoundaryVolumeQuantities.tpp"
      64              : #include "ParallelAlgorithms/Interpolation/Events/InterpolateWithoutInterpComponent.hpp"
      65              : #include "ParallelAlgorithms/Interpolation/InterpolationTarget.hpp"
      66              : #include "ParallelAlgorithms/Interpolation/Protocols/InterpolationTargetTag.hpp"
      67              : #include "ParallelAlgorithms/Interpolation/Tags.hpp"
      68              : #include "ParallelAlgorithms/Interpolation/Targets/Sphere.hpp"
      69              : #include "PointwiseFunctions/GeneralRelativity/DetAndInverseSpatialMetric.hpp"
      70              : #include "PointwiseFunctions/GeneralRelativity/Surfaces/Tags.hpp"
      71              : #include "Time/Actions/SelfStartActions.hpp"
      72              : #include "Time/AdvanceTime.hpp"
      73              : #include "Time/ChangeSlabSize/Action.hpp"
      74              : #include "Time/ChangeSlabSize/Tags.hpp"
      75              : #include "Time/StepChoosers/Factory.hpp"
      76              : #include "Time/Tags/StepperErrors.hpp"
      77              : #include "Time/Tags/Time.hpp"
      78              : #include "Time/Tags/TimeAndPrevious.hpp"
      79              : #include "Utilities/Algorithm.hpp"
      80              : #include "Utilities/ErrorHandling/Error.hpp"
      81              : #include "Utilities/PrettyType.hpp"
      82              : #include "Utilities/ProtocolHelpers.hpp"
      83              : 
      84              : struct EvolutionMetavars : public GeneralizedHarmonicTemplateBase<3> {
      85              :   static constexpr size_t volume_dim = 3;
      86            0 :   using gh_base = GeneralizedHarmonicTemplateBase<volume_dim>;
      87              :   using typename gh_base::initialize_initial_data_dependent_quantities_actions;
      88              :   using typename gh_base::system;
      89              : 
      90              :   static constexpr Options::String help{
      91              :       "Evolve the Einstein field equations using the Generalized Harmonic "
      92              :       "formulation,\n"
      93              :       "on a domain with a single horizon and corresponding excised region"};
      94              : 
      95            0 :   struct ApparentHorizon : tt::ConformsTo<ah::protocols::HorizonMetavars> {
      96            0 :     using time_tag = ah::Tags::ObservationTime<0>;
      97              : 
      98            0 :     using frame = ::Frame::Inertial;
      99              : 
     100            0 :     using horizon_find_callbacks = tmpl::list<
     101              :         ah::callbacks::ObserveTimeSeriesOnHorizon<
     102              :             ::ah::tags_for_observing<Frame::Inertial>, ApparentHorizon>,
     103              :         ah::callbacks::ObserveFieldsOnHorizon<::ah::surface_tags_for_observing,
     104              :                                               ApparentHorizon>>;
     105            0 :     using horizon_find_failure_callbacks =
     106              :         tmpl::list<ah::callbacks::FailedHorizonFind<ApparentHorizon, false>>;
     107              : 
     108            0 :     using compute_tags_on_element =
     109              :         tmpl::list<ah::Tags::ObservationTimeCompute<0>>;
     110              : 
     111            0 :     static constexpr ah::Destination destination = ah::Destination::Observation;
     112              : 
     113            0 :     static std::string name() { return "ApparentHorizon"; }
     114              :   };
     115              : 
     116              :   struct ExcisionBoundary
     117              :       : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
     118            0 :     using temporal_id = ::Tags::Time;
     119            0 :     using tags_to_observe =
     120              :         tmpl::list<gr::Tags::Lapse<DataVector>,
     121              :                    gr::Tags::Shift<DataVector, 3, Frame::Grid>>;
     122            0 :     using compute_vars_to_interpolate =
     123              :         intrp::ComputeExcisionBoundaryVolumeQuantities;
     124            0 :     using vars_to_interpolate_to_target = tags_to_observe;
     125            0 :     using compute_items_on_source = tmpl::list<>;
     126            0 :     using compute_items_on_target = tmpl::list<>;
     127            0 :     using compute_target_points =
     128              :         intrp::TargetPoints::Sphere<ExcisionBoundary, ::Frame::Grid>;
     129            0 :     using post_interpolation_callbacks =
     130              :         tmpl::list<intrp::callbacks::ObserveSurfaceData<
     131              :             tags_to_observe, ExcisionBoundary, ::Frame::Grid>>;
     132              :     // run_callbacks
     133              :     template <typename metavariables>
     134            0 :     using interpolating_component = typename metavariables::gh_dg_element_array;
     135              :   };
     136              : 
     137            0 :   using control_systems =
     138              :       tmpl::list<control_system::Systems::Shape<
     139              :                      ::domain::ObjectLabel::None, 2,
     140              :                      control_system::measurements::SingleHorizon<
     141              :                          ::domain::ObjectLabel::None>>,
     142              :                  control_system::Systems::Translation<
     143              :                      2,
     144              :                      control_system::measurements::SingleHorizon<
     145              :                          ::domain::ObjectLabel::None>,
     146              :                      1>,
     147              :                  control_system::Systems::Size<::domain::ObjectLabel::None, 2>>;
     148              : 
     149              :   static constexpr bool use_control_systems =
     150              :       tmpl::size<control_systems>::value > 0;
     151              : 
     152              :   struct BondiSachs;
     153              : 
     154            0 :   using interpolation_target_tags = tmpl::push_back<
     155              :       control_system::metafunctions::interpolation_target_tags<control_systems>,
     156              :       ExcisionBoundary, BondiSachs>;
     157            0 :   using source_vars_no_deriv =
     158              :       tmpl::list<gr::Tags::SpacetimeMetric<DataVector, volume_dim>,
     159              :                  gh::Tags::Pi<DataVector, volume_dim>,
     160              :                  gh::Tags::Phi<DataVector, volume_dim>>;
     161              : 
     162              :   struct BondiSachs : tt::ConformsTo<intrp::protocols::InterpolationTargetTag> {
     163            0 :     static std::string name() { return "BondiSachsInterpolation"; }
     164            0 :     using temporal_id = ::Tags::Time;
     165            0 :     using vars_to_interpolate_to_target = source_vars_no_deriv;
     166            0 :     using compute_target_points =
     167              :         intrp::TargetPoints::Sphere<BondiSachs, ::Frame::Inertial>;
     168            0 :     using post_interpolation_callbacks =
     169              :         tmpl::list<intrp::callbacks::DumpBondiSachsOnWorldtube<BondiSachs>>;
     170            0 :     using compute_items_on_target = tmpl::list<>;
     171              :     template <typename Metavariables>
     172            0 :     using interpolating_component = typename Metavariables::gh_dg_element_array;
     173              :   };
     174              : 
     175              :   // The interpolator_source_vars need to be the same in both the Interpolate
     176              :   // event and the InterpolateWithoutInterpComponent event.  The Interpolate
     177              :   // event interpolates to the horizon, and the
     178              :   // InterpolateWithoutInterpComponent event interpolates to the excision
     179              :   // boundary. Every Target gets the same interpolator_source_vars, so they need
     180              :   // to be made the same. Otherwise a static assert is triggered.
     181              :   struct factory_creation
     182              :       : tt::ConformsTo<Options::protocols::FactoryCreation> {
     183            0 :     using factory_classes = Options::add_factory_classes<
     184              :         typename gh_base::factory_creation::factory_classes,
     185              :         tmpl::pair<ah::Criterion, ah::Criteria::standard_criteria>,
     186              :         tmpl::pair<ylm::InitialShape<Frame::Inertial>,
     187              :                    tmpl::list<ylm::InitialShapes::Sphere<Frame::Inertial>,
     188              :                               ylm::InitialShapes::FromFile<Frame::Inertial>,
     189              :                               ah::InitialShapes::KerrSchild<Frame::Inertial>>>,
     190              :         tmpl::pair<ylm::InitialShape<Frame::Distorted>,
     191              :                    tmpl::list<ylm::InitialShapes::Sphere<Frame::Distorted>,
     192              :                               ylm::InitialShapes::FromFile<Frame::Distorted>,
     193              :                               ah::InitialShapes::KerrSchild<Frame::Distorted>>>,
     194              :         tmpl::pair<Event,
     195              :                    tmpl::flatten<tmpl::list<
     196              :                        ah::Events::FindApparentHorizon<ApparentHorizon>,
     197              :                        control_system::metafunctions::control_system_events<
     198              :                            control_systems>,
     199              :                        control_system::CleanFunctionsOfTime,
     200              :                        intrp::Events::InterpolateWithoutInterpComponent<
     201              :                            3, BondiSachs, source_vars_no_deriv>,
     202              :                        intrp::Events::InterpolateWithoutInterpComponent<
     203              :                            3, ExcisionBoundary, ::ah::source_vars<volume_dim>>,
     204              :                        amr::Events::RefineMesh,
     205              :                        amr::Events::ObserveAmrStats<volume_dim>>>>,
     206              :         tmpl::pair<DenseTrigger,
     207              :                    control_system::control_system_triggers<control_systems>>,
     208              :         tmpl::pair<control_system::size::State,
     209              :                    control_system::size::States::factory_creatable_states>>;
     210              :   };
     211              : 
     212              :   using typename gh_base::const_global_cache_tags;
     213              : 
     214            0 :   using observed_reduction_data_tags =
     215              :       observers::collect_reduction_data_tags<tmpl::push_back<
     216              :           tmpl::at<typename factory_creation::factory_classes, Event>,
     217              :           typename ExcisionBoundary::post_interpolation_callbacks>>;
     218              : 
     219            0 :   using dg_registration_list = typename gh_base::dg_registration_list;
     220              : 
     221            0 :   using step_actions =
     222              :       typename gh_base::template step_actions<EvolutionMetavars,
     223              :                                               control_systems>;
     224              : 
     225            0 :   using initialization_actions = tmpl::push_back<
     226              :       tmpl::pop_back<typename gh_base::template initialization_actions<
     227              :           EvolutionMetavars, use_control_systems>>,
     228              :       control_system::Actions::InitializeMeasurements<control_systems>,
     229              :       intrp::Actions::ElementInitInterpPoints<volume_dim,
     230              :                                               interpolation_target_tags>,
     231              :       tmpl::back<typename gh_base::template initialization_actions<
     232              :           EvolutionMetavars, use_control_systems>>>;
     233              : 
     234            0 :   using gh_dg_element_array = DgElementArray<
     235              :       EvolutionMetavars,
     236              :       tmpl::flatten<tmpl::list<
     237              :           Parallel::PhaseActions<Parallel::Phase::Initialization,
     238              :                                  initialization_actions>,
     239              :           Parallel::PhaseActions<
     240              :               Parallel::Phase::RegisterWithElementDataReader,
     241              :               tmpl::list<importers::Actions::RegisterWithElementDataReader,
     242              :                          Parallel::Actions::TerminatePhase>>,
     243              :           Parallel::PhaseActions<
     244              :               Parallel::Phase::ImportInitialData,
     245              :               tmpl::list<gh::Actions::SetInitialData,
     246              :                          gh::Actions::ReceiveNumericInitialData,
     247              :                          Parallel::Actions::TerminatePhase>>,
     248              :           Parallel::PhaseActions<
     249              :               Parallel::Phase::InitializeInitialDataDependentQuantities,
     250              :               initialize_initial_data_dependent_quantities_actions>,
     251              :           Parallel::PhaseActions<
     252              :               Parallel::Phase::InitializeTimeStepperHistory,
     253              :               SelfStart::self_start_procedure<step_actions, system>>,
     254              :           Parallel::PhaseActions<Parallel::Phase::Register,
     255              :                                  tmpl::list<dg_registration_list,
     256              :                                             Parallel::Actions::TerminatePhase>>,
     257              :           Parallel::PhaseActions<Parallel::Phase::Restart,
     258              :                                  tmpl::list<dg_registration_list,
     259              :                                             Parallel::Actions::TerminatePhase>>,
     260              :           Parallel::PhaseActions<
     261              :               Parallel::Phase::WriteCheckpoint,
     262              :               tmpl::list<evolution::Actions::RunEventsAndTriggers<
     263              :                              Triggers::WhenToCheck::AtCheckpoints>,
     264              :                          Parallel::Actions::TerminatePhase>>,
     265              :           Parallel::PhaseActions<Parallel::Phase::CheckDomain,
     266              :                                  tmpl::list<::amr::Actions::SendAmrDiagnostics,
     267              :                                             Parallel::Actions::TerminatePhase>>,
     268              :           Parallel::PhaseActions<
     269              :               Parallel::Phase::Evolve,
     270              :               tmpl::flatten<tmpl::list<
     271              :                   ::domain::Actions::CheckFunctionsOfTimeAreReady<volume_dim>,
     272              :                   evolution::Actions::RunEventsAndTriggers<
     273              :                       Triggers::WhenToCheck::AtSteps>,
     274              :                   evolution::Actions::RunEventsAndTriggers<
     275              :                       Triggers::WhenToCheck::AtSlabs>,
     276              :                   Actions::ChangeSlabSize,
     277              :                   evolution::dg::Actions::ChangeFixedLtsRatio, step_actions,
     278              :                   Actions::MutateApply<AdvanceTime<>>,
     279              :                   PhaseControl::Actions::ExecutePhaseChange>>>,
     280              :           Parallel::PhaseActions<
     281              :               Parallel::Phase::PostFailureCleanup,
     282              :               tmpl::list<Actions::RunEventsOnFailure<::Tags::Time>,
     283              :                          Parallel::Actions::TerminatePhase>>>>>;
     284              : 
     285              :   struct amr : tt::ConformsTo<::amr::protocols::AmrMetavariables> {
     286            0 :     using element_array = gh_dg_element_array;
     287            0 :     using projectors = tmpl::list<
     288              :         Initialization::ProjectTimeStepping<volume_dim>,
     289              :         evolution::dg::Initialization::ProjectDomain<volume_dim>,
     290              :         ::amr::projectors::ProjectVariables<volume_dim,
     291              :                                             typename system::variables_tag>,
     292              :         evolution::dg::Initialization::ProjectMortars<volume_dim>,
     293              :         Initialization::ProjectTimeStepperHistory<EvolutionMetavars>,
     294              :         evolution::Actions::ProjectRunEventsAndDenseTriggers,
     295              :         evolution::dg::Initialization::ProjectSpectralFilters<
     296              :             volume_dim, typename system::variables_tag::tags_list>,
     297              :         ::amr::projectors::DefaultInitialize<
     298              :             Initialization::Tags::InitialTimeDelta,
     299              :             Initialization::Tags::InitialSlabSize,
     300              :             ::domain::Tags::InitialExtents<volume_dim>,
     301              :             ::domain::Tags::InitialRefinementLevels<volume_dim>,
     302              :             evolution::dg::Tags::Quadrature,
     303              :             Tags::StepperErrors<typename system::variables_tag>,
     304              :             SelfStart::Tags::InitialValue<typename system::variables_tag>,
     305              :             SelfStart::Tags::InitialValue<Tags::TimeStep>>,
     306              :         ::amr::projectors::CopyFromCreatorOrLeaveAsIs<tmpl::push_back<
     307              :             tmpl::append<
     308              :                 typename control_system::Actions::InitializeMeasurements<
     309              :                     control_systems>::simple_tags,
     310              :                 tmpl::transform<
     311              :                     intrp::InterpolationTarget_detail::
     312              :                         get_non_sequential_target_tags<
     313              :                             interpolation_target_tags>,
     314              :                     tmpl::bind<intrp::Tags::PointInfo, tmpl::_1,
     315              :                                tmpl::pin<tmpl::size_t<volume_dim>>>>>,
     316              :             evolution::dg::Tags::ChangeFixedLtsRatio::NumberOfExpectedMessages,
     317              :             evolution::dg::Tags::ChangeFixedLtsRatio::NewStepSize,
     318              :             Tags::FixedLtsRatio,
     319              :             Parallel::Tags::Section<gh_dg_element_array,
     320              :                                     evolution::dg::Tags::EqualRateRegionId>,
     321              :             Tags::ChangeSlabSize::NumberOfExpectedMessages,
     322              :             Tags::ChangeSlabSize::NewSlabSize>>>;
     323              :     static constexpr bool keep_coarse_grids = false;
     324              :     static constexpr bool p_refine_only_in_event = true;
     325              :   };
     326              : 
     327              :   struct registration
     328              :       : tt::ConformsTo<Parallel::protocols::RegistrationMetavariables> {
     329            0 :     using element_registrars =
     330              :         tmpl::map<tmpl::pair<gh_dg_element_array, dg_registration_list>>;
     331              :   };
     332              : 
     333            0 :   using control_system_horizon_metavars =
     334              :       control_system::metafunctions::horizon_metavars<control_systems>;
     335            0 :   using control_components =
     336              :       control_system::control_components<EvolutionMetavars, control_systems>;
     337              : 
     338            0 :   static void run_deadlock_analysis_simple_actions(
     339              :       Parallel::GlobalCache<EvolutionMetavars>& cache,
     340              :       const std::vector<std::string>& deadlocked_components) {
     341              :     gh::deadlock::run_deadlock_analysis_simple_actions<
     342              :         gh_dg_element_array, control_components, interpolation_target_tags,
     343              :         tmpl::list<ApparentHorizon>>(cache, deadlocked_components);
     344              :   }
     345              : 
     346            0 :   using component_list = tmpl::flatten<tmpl::list<
     347              :       ::amr::Component<EvolutionMetavars>,
     348              :       observers::Observer<EvolutionMetavars>,
     349              :       observers::ObserverWriter<EvolutionMetavars>,
     350              :       mem_monitor::MemoryMonitor<EvolutionMetavars>,
     351              :       importers::ElementDataReader<EvolutionMetavars>, gh_dg_element_array,
     352              :       ah::Component<EvolutionMetavars, ApparentHorizon>, control_components,
     353              :       tmpl::transform<
     354              :           control_system_horizon_metavars,
     355              :           tmpl::bind<ah::Component, tmpl::pin<EvolutionMetavars>, tmpl::_1>>,
     356              :       tmpl::transform<interpolation_target_tags,
     357              :                       tmpl::bind<intrp::InterpolationTarget,
     358              :                                  tmpl::pin<EvolutionMetavars>, tmpl::_1>>>>;
     359              : };
        

Generated by: LCOV version 2.0-1