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 : };
|