Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "Evolution/Executables/Cce/CharacteristicExtractBase.hpp" 7 : #include "Evolution/Systems/Cce/AnalyticSolutions/BouncingBlackHole.hpp" 8 : #include "Evolution/Systems/Cce/AnalyticSolutions/GaugeWave.hpp" 9 : #include "Evolution/Systems/Cce/AnalyticSolutions/LinearizedBondiSachs.hpp" 10 : #include "Evolution/Systems/Cce/AnalyticSolutions/RobinsonTrautman.hpp" 11 : #include "Evolution/Systems/Cce/AnalyticSolutions/RotatingSchwarzschild.hpp" 12 : #include "Evolution/Systems/Cce/AnalyticSolutions/SphericalMetricData.hpp" 13 : #include "Evolution/Systems/Cce/AnalyticSolutions/TeukolskyWave.hpp" 14 : #include "Evolution/Systems/Cce/Components/KleinGordonCharacteristicEvolution.hpp" 15 : #include "Evolution/Systems/Cce/Events/ObserveFields.hpp" 16 : #include "Evolution/Systems/Cce/Events/ObserveTimeStep.hpp" 17 : #include "Evolution/Systems/Cce/Initialize/ConformalFactor.hpp" 18 : #include "Evolution/Systems/Cce/KleinGordonSystem.hpp" 19 : #include "IO/Observer/ObserverComponent.hpp" 20 : #include "Parallel/Algorithms/AlgorithmSingleton.hpp" 21 : #include "ParallelAlgorithms/Events/Factory.hpp" 22 : #include "ParallelAlgorithms/EventsAndTriggers/Event.hpp" 23 : #include "ParallelAlgorithms/EventsAndTriggers/EventsAndTriggers.hpp" 24 : #include "ParallelAlgorithms/EventsAndTriggers/LogicalTriggers.hpp" 25 : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp" 26 : #include "Time/TimeSteppers/Factory.hpp" 27 : #include "Time/Triggers/TimeTriggers.hpp" 28 : 29 : /// \cond 30 : namespace PUP { 31 : class er; 32 : } // namespace PUP 33 : /// \endcond 34 : 35 : template <template <typename> class BoundaryComponent> 36 : struct EvolutionMetavars 37 : : CharacteristicExtractDefaults<Cce::KleinGordonSystem<false>> { 38 0 : using cce_boundary_component = BoundaryComponent<EvolutionMetavars>; 39 0 : using cce_base = CharacteristicExtractDefaults<Cce::KleinGordonSystem<false>>; 40 : 41 0 : using evolved_swsh_dt_tags = 42 : tmpl::append<cce_base::evolved_swsh_dt_tags, 43 : tmpl::list<Cce::Tags::KleinGordonPi>>; 44 : 45 0 : using klein_gordon_boundary_communication_tags = 46 : Cce::Tags::klein_gordon_worldtube_boundary_tags; 47 : 48 0 : using klein_gordon_gauge_boundary_tags = tmpl::list< 49 : Cce::Tags::EvolutionGaugeBoundaryValue<Cce::Tags::KleinGordonPsi>, 50 : Cce::Tags::EvolutionGaugeBoundaryValue<Cce::Tags::KleinGordonPi>>; 51 : 52 0 : using klein_gordon_scri_tags = 53 : tmpl::list<Cce::Tags::ScriPlus<Cce::Tags::KleinGordonPi>>; 54 : 55 0 : using klein_gordon_pre_swsh_derivative_tags = 56 : tmpl::list<Cce::Tags::Dy<Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>>, 57 : Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>>; 58 : 59 0 : using klein_gordon_swsh_derivative_tags = tmpl::list< 60 : Spectral::Swsh::Tags::Derivative<Cce::Tags::KleinGordonPsi, 61 : Spectral::Swsh::Tags::Eth>, 62 : Spectral::Swsh::Tags::Derivative<Cce::Tags::KleinGordonPsi, 63 : Spectral::Swsh::Tags::Ethbar>, 64 : Spectral::Swsh::Tags::Derivative<Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>, 65 : Spectral::Swsh::Tags::Eth>, 66 : Spectral::Swsh::Tags::Derivative<Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>, 67 : Spectral::Swsh::Tags::Ethbar>, 68 : Spectral::Swsh::Tags::Derivative<Cce::Tags::KleinGordonPsi, 69 : Spectral::Swsh::Tags::EthEth>, 70 : Spectral::Swsh::Tags::Derivative<Cce::Tags::KleinGordonPsi, 71 : Spectral::Swsh::Tags::EthEthbar>>; 72 0 : using klein_gordon_transform_buffer_tags = tmpl::list< 73 : Spectral::Swsh::Tags::SwshTransform<Cce::Tags::KleinGordonPsi>, 74 : Spectral::Swsh::Tags::SwshTransform< 75 : Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>>, 76 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 77 : Cce::Tags::KleinGordonPsi, Spectral::Swsh::Tags::Eth>>, 78 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 79 : Cce::Tags::KleinGordonPsi, Spectral::Swsh::Tags::Ethbar>>, 80 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 81 : Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>, Spectral::Swsh::Tags::Eth>>, 82 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 83 : Cce::Tags::Dy<Cce::Tags::KleinGordonPsi>, 84 : Spectral::Swsh::Tags::Ethbar>>, 85 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 86 : Cce::Tags::KleinGordonPsi, Spectral::Swsh::Tags::EthEth>>, 87 : Spectral::Swsh::Tags::SwshTransform<Spectral::Swsh::Tags::Derivative< 88 : Cce::Tags::KleinGordonPsi, Spectral::Swsh::Tags::EthEthbar>>>; 89 : 90 0 : using klein_gordon_source_tags = tmpl::flatten< 91 : tmpl::transform<Cce::bondi_hypersurface_step_tags, 92 : tmpl::bind<Cce::Tags::KleinGordonSource, tmpl::_1>>>; 93 : 94 0 : using klein_gordon_cce_integrand_tags = 95 : tmpl::list<Cce::Tags::PoleOfIntegrand<Cce::Tags::KleinGordonPi>, 96 : Cce::Tags::RegularIntegrand<Cce::Tags::KleinGordonPi>>; 97 : 98 0 : using scri_values_to_observe = 99 : tmpl::append<cce_base::scri_values_to_observe, 100 : tmpl::list<Cce::Tags::ScriPlus<Cce::Tags::KleinGordonPsi>>>; 101 : 102 0 : using cce_scri_tags = 103 : tmpl::append<cce_base::cce_scri_tags, 104 : tmpl::list<Cce::Tags::ScriPlus<Cce::Tags::KleinGordonPsi>>>; 105 : 106 0 : using component_list = 107 : tmpl::list<observers::ObserverWriter<EvolutionMetavars>, 108 : cce_boundary_component, 109 : Cce::KleinGordonCharacteristicEvolution<EvolutionMetavars>>; 110 : 111 : struct factory_creation 112 : : tt::ConformsTo<Options::protocols::FactoryCreation> { 113 0 : using factory_classes = tmpl::map< 114 : tmpl::pair<LtsTimeStepper, TimeSteppers::lts_time_steppers>, 115 : tmpl::pair<StepChooser<StepChooserUse::LtsStep>, cce_step_choosers>, 116 : tmpl::pair<StepChooser<StepChooserUse::Slab>, cce_slab_choosers>, 117 : tmpl::pair<TimeSequence<double>, 118 : TimeSequences::all_time_sequences<double>>, 119 : tmpl::pair<TimeSequence<std::uint64_t>, 120 : TimeSequences::all_time_sequences<std::uint64_t>>, 121 : tmpl::pair<Event, tmpl::list<Cce::Events::ObserveFields, 122 : Cce::Events::ObserveTimeStep>>, 123 : tmpl::pair<Trigger, tmpl::append<Triggers::logical_triggers, 124 : Triggers::time_triggers>>>; 125 : }; 126 : 127 0 : using observed_reduction_data_tags = tmpl::list<>; 128 : 129 : static constexpr Options::String help{ 130 : "Perform Cauchy Characteristic Extraction for the Klein-Gordon system " 131 : "coupled with General Relativity, using .h5 input data."}; 132 : 133 : static constexpr std::array<Parallel::Phase, 4> default_phase_order{ 134 : {Parallel::Phase::Initialization, 135 : Parallel::Phase::InitializeTimeStepperHistory, Parallel::Phase::Evolve, 136 : Parallel::Phase::Exit}}; 137 : 138 : // NOLINTNEXTLINE(google-runtime-references) 139 0 : void pup(PUP::er& /*p*/) {} 140 : };