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