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 <vector>
8 :
9 : #include "Evolution/Actions/RunEventsAndTriggers.hpp"
10 : #include "Evolution/DiscontinuousGalerkin/EqualRateLts/ChangeFixedLtsRatio.hpp"
11 : #include "Evolution/DiscontinuousGalerkin/Initialization/ProjectSpectralFilters.hpp"
12 : #include "Evolution/Executables/GeneralizedHarmonic/GeneralizedHarmonicBase.hpp"
13 : #include "Options/Protocols/FactoryCreation.hpp"
14 : #include "Options/String.hpp"
15 : #include "Parallel/ArrayCollection/DgElementCollection.hpp"
16 : #include "Parallel/MemoryMonitor/MemoryMonitor.hpp"
17 : #include "Parallel/PhaseControl/PhaseControlTags.hpp"
18 : #include "Parallel/Protocols/RegistrationMetavariables.hpp"
19 : #include "ParallelAlgorithms/Actions/MutateApply.hpp"
20 : #include "ParallelAlgorithms/Amr/Projectors/CopyFromCreatorOrLeaveAsIs.hpp"
21 : #include "PointwiseFunctions/AnalyticSolutions/GeneralRelativity/GaugeWave.hpp"
22 : #include "Time/Actions/SelfStartActions.hpp"
23 : #include "Time/AdvanceTime.hpp"
24 : #include "Time/ChangeSlabSize/Action.hpp"
25 : #include "Time/ChangeSlabSize/Tags.hpp"
26 : #include "Time/Tags/StepperErrors.hpp"
27 : #include "Utilities/ErrorHandling/Error.hpp"
28 : #include "Utilities/ProtocolHelpers.hpp"
29 :
30 : template <size_t VolumeDim>
31 : struct EvolutionMetavars : public GeneralizedHarmonicTemplateBase<VolumeDim> {
32 : static constexpr size_t volume_dim = VolumeDim;
33 0 : using gh_base = GeneralizedHarmonicTemplateBase<volume_dim>;
34 : using typename gh_base::const_global_cache_tags;
35 : using typename gh_base::dg_registration_list;
36 0 : using initialization_actions =
37 : typename gh_base::template initialization_actions<EvolutionMetavars,
38 : false>;
39 : using typename gh_base::initialize_initial_data_dependent_quantities_actions;
40 : using typename gh_base::observed_reduction_data_tags;
41 : using typename gh_base::system;
42 : static constexpr bool use_dg_element_collection =
43 : gh_base::use_dg_element_collection;
44 :
45 0 : using step_actions =
46 : typename gh_base::template step_actions<EvolutionMetavars, tmpl::list<>>;
47 :
48 0 : using gh_dg_element_array = DgElementArray<
49 : EvolutionMetavars,
50 : tmpl::flatten<tmpl::list<
51 : Parallel::PhaseActions<Parallel::Phase::Initialization,
52 : initialization_actions>,
53 : Parallel::PhaseActions<
54 : Parallel::Phase::RegisterWithElementDataReader,
55 : tmpl::list<importers::Actions::RegisterWithElementDataReader,
56 : Parallel::Actions::TerminatePhase>>,
57 : Parallel::PhaseActions<
58 : Parallel::Phase::ImportInitialData,
59 : tmpl::list<
60 : gh::Actions::SetInitialData,
61 : tmpl::conditional_t<VolumeDim == 3,
62 : gh::Actions::ReceiveNumericInitialData,
63 : tmpl::list<>>,
64 : Parallel::Actions::TerminatePhase>>,
65 : Parallel::PhaseActions<
66 : Parallel::Phase::InitializeInitialDataDependentQuantities,
67 : initialize_initial_data_dependent_quantities_actions>,
68 : Parallel::PhaseActions<
69 : Parallel::Phase::InitializeTimeStepperHistory,
70 : SelfStart::self_start_procedure<step_actions, system>>,
71 : Parallel::PhaseActions<Parallel::Phase::Register,
72 : tmpl::list<dg_registration_list,
73 : Parallel::Actions::TerminatePhase>>,
74 : Parallel::PhaseActions<Parallel::Phase::Restart,
75 : tmpl::list<dg_registration_list,
76 : Parallel::Actions::TerminatePhase>>,
77 : Parallel::PhaseActions<
78 : Parallel::Phase::WriteCheckpoint,
79 : tmpl::list<evolution::Actions::RunEventsAndTriggers<
80 : Triggers::WhenToCheck::AtCheckpoints>,
81 : Parallel::Actions::TerminatePhase>>,
82 : Parallel::PhaseActions<Parallel::Phase::CheckDomain,
83 : tmpl::list<::amr::Actions::SendAmrDiagnostics,
84 : Parallel::Actions::TerminatePhase>>,
85 : Parallel::PhaseActions<
86 : Parallel::Phase::Evolve,
87 : tmpl::flatten<
88 : tmpl::list<evolution::Actions::RunEventsAndTriggers<
89 : Triggers::WhenToCheck::AtSteps>,
90 : ::evolution::Actions::RunEventsAndTriggers<
91 : Triggers::WhenToCheck::AtSlabs>,
92 : Actions::ChangeSlabSize,
93 : evolution::dg::Actions::ChangeFixedLtsRatio,
94 : step_actions, Actions::MutateApply<AdvanceTime<>>,
95 : PhaseControl::Actions::ExecutePhaseChange>>>>>>;
96 :
97 : struct amr : tt::ConformsTo<::amr::protocols::AmrMetavariables> {
98 0 : using element_array = gh_dg_element_array;
99 0 : using projectors = tmpl::list<
100 : Initialization::ProjectTimeStepping<volume_dim>,
101 : evolution::dg::Initialization::ProjectDomain<volume_dim>,
102 : ::amr::projectors::ProjectVariables<volume_dim,
103 : typename system::variables_tag>,
104 : evolution::dg::Initialization::ProjectMortars<volume_dim>,
105 : Initialization::ProjectTimeStepperHistory<EvolutionMetavars>,
106 : evolution::Actions::ProjectRunEventsAndDenseTriggers,
107 : evolution::dg::Initialization::ProjectSpectralFilters<
108 : volume_dim, typename system::variables_tag::tags_list>,
109 : ::amr::projectors::DefaultInitialize<
110 : Initialization::Tags::InitialTimeDelta,
111 : Initialization::Tags::InitialSlabSize,
112 : ::domain::Tags::InitialExtents<volume_dim>,
113 : ::domain::Tags::InitialRefinementLevels<volume_dim>,
114 : evolution::dg::Tags::Quadrature,
115 : Tags::StepperErrors<typename system::variables_tag>,
116 : SelfStart::Tags::InitialValue<typename system::variables_tag>,
117 : SelfStart::Tags::InitialValue<Tags::TimeStep>>,
118 : ::amr::projectors::CopyFromCreatorOrLeaveAsIs<
119 : evolution::dg::Tags::ChangeFixedLtsRatio::NumberOfExpectedMessages,
120 : evolution::dg::Tags::ChangeFixedLtsRatio::NewStepSize,
121 : Tags::FixedLtsRatio,
122 : Parallel::Tags::Section<gh_dg_element_array,
123 : evolution::dg::Tags::EqualRateRegionId>,
124 : Tags::ChangeSlabSize::NumberOfExpectedMessages,
125 : Tags::ChangeSlabSize::NewSlabSize>>;
126 : static constexpr bool keep_coarse_grids = false;
127 : static constexpr bool p_refine_only_in_event = true;
128 : };
129 :
130 : struct registration
131 : : tt::ConformsTo<Parallel::protocols::RegistrationMetavariables> {
132 0 : using element_registrars =
133 : tmpl::map<tmpl::pair<gh_dg_element_array, dg_registration_list>>;
134 : };
135 :
136 0 : using component_list =
137 : tmpl::flatten<tmpl::list<::amr::Component<EvolutionMetavars>,
138 : observers::Observer<EvolutionMetavars>,
139 : observers::ObserverWriter<EvolutionMetavars>,
140 : mem_monitor::MemoryMonitor<EvolutionMetavars>,
141 : importers::ElementDataReader<EvolutionMetavars>,
142 : gh_dg_element_array>>;
143 :
144 : static constexpr Options::String help{
145 : "Evolve the Einstein field equations using the Generalized Harmonic "
146 : "formulation\n"};
147 : };
|