Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <vector> 7 : 8 : #include "Evolution/Executables/GrMhd/GhValenciaDivClean/GhValenciaDivCleanBase.hpp" 9 : #include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp" 10 : #include "Evolution/Systems/GrMhd/GhValenciaDivClean/TimeDerivativeTerms.hpp" 11 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/Tags.hpp" 12 : #include "Evolution/VariableFixing/Tags.hpp" 13 : #include "Options/FactoryHelpers.hpp" 14 : #include "Options/Protocols/FactoryCreation.hpp" 15 : #include "Options/String.hpp" 16 : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/FailedHorizonFind.hpp" 17 : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/ObserveFieldsOnHorizon.hpp" 18 : #include "ParallelAlgorithms/ApparentHorizonFinder/Callbacks/ObserveTimeSeriesOnHorizon.hpp" 19 : #include "ParallelAlgorithms/ApparentHorizonFinder/Component.hpp" 20 : #include "ParallelAlgorithms/ApparentHorizonFinder/Criteria/Criterion.hpp" 21 : #include "ParallelAlgorithms/ApparentHorizonFinder/Criteria/Factory.hpp" 22 : #include "ParallelAlgorithms/ApparentHorizonFinder/Events/FindApparentHorizon.hpp" 23 : #include "ParallelAlgorithms/ApparentHorizonFinder/HorizonAliases.hpp" 24 : #include "ParallelAlgorithms/ApparentHorizonFinder/Protocols/HorizonMetavars.hpp" 25 : #include "PointwiseFunctions/GeneralRelativity/Surfaces/Tags.hpp" 26 : #include "PointwiseFunctions/Hydro/EquationsOfState/Factory.hpp" 27 : #include "Time/Tags/Time.hpp" 28 : #include "Utilities/ErrorHandling/Error.hpp" 29 : #include "Utilities/ProtocolHelpers.hpp" 30 : #include "Utilities/TMPL.hpp" 31 : 32 : template <bool UseControlSystems, bool UseParametrizedDeleptonization, 33 : typename... InterpolationTargetTags> 34 : struct EvolutionMetavars 35 : : public GhValenciaDivCleanTemplateBase< 36 : EvolutionMetavars<UseControlSystems, UseParametrizedDeleptonization, 37 : InterpolationTargetTags...>, 38 : false, false, UseParametrizedDeleptonization> { 39 : static_assert(not UseControlSystems, 40 : "GhValenciaWithHorizon doesn't support control systems yet."); 41 : static constexpr bool use_dg_subcell = false; 42 : 43 0 : using defaults = GhValenciaDivCleanDefaults<use_dg_subcell>; 44 0 : using base = GhValenciaDivCleanTemplateBase<EvolutionMetavars, use_dg_subcell, 45 : UseControlSystems, 46 : UseParametrizedDeleptonization>; 47 : static constexpr size_t volume_dim = defaults::volume_dim; 48 0 : using domain_frame = typename defaults::domain_frame; 49 : static constexpr bool use_damped_harmonic_rollon = 50 : defaults::use_damped_harmonic_rollon; 51 0 : using temporal_id = typename defaults::temporal_id; 52 : static constexpr bool local_time_stepping = defaults::local_time_stepping; 53 0 : using system = typename defaults::system; 54 0 : using analytic_variables_tags = typename defaults::analytic_variables_tags; 55 0 : using analytic_solution_fields = typename defaults::analytic_solution_fields; 56 0 : using ordered_list_of_primitive_recovery_schemes = 57 : typename defaults::ordered_list_of_primitive_recovery_schemes; 58 0 : using initialize_initial_data_dependent_quantities_actions = 59 : typename defaults::initialize_initial_data_dependent_quantities_actions; 60 : 61 : static constexpr Options::String help{ 62 : "Evolve the Valencia formulation of the GRMHD system with divergence " 63 : "cleaning, coupled to a dynamic spacetime evolved with the Generalized " 64 : "Harmonic formulation\n" 65 : "on a domain with a single horizon and corresponding excised region"}; 66 : 67 0 : struct AhA : tt::ConformsTo<ah::protocols::HorizonMetavars> { 68 0 : using time_tag = ah::Tags::ObservationTime<0>; 69 : 70 0 : using frame = domain_frame; 71 : 72 0 : using horizon_find_callbacks = 73 : tmpl::list<ah::callbacks::ObserveTimeSeriesOnHorizon< 74 : ::ah::tags_for_observing<domain_frame>, AhA>>; 75 0 : using horizon_find_failure_callbacks = 76 : tmpl::list<ah::callbacks::FailedHorizonFind<AhA, false>>; 77 : 78 0 : using compute_tags_on_element = 79 : tmpl::list<ah::Tags::ObservationTimeCompute<0>>; 80 : 81 0 : static constexpr ah::Destination destination = ah::Destination::Observation; 82 : 83 0 : static std::string name() { return "AhA"; } 84 : }; 85 : 86 0 : using interpolation_target_tags = tmpl::list<InterpolationTargetTags...>; 87 : 88 0 : using observe_fields = typename base::observe_fields; 89 : 90 : struct factory_creation 91 : : tt::ConformsTo<Options::protocols::FactoryCreation> { 92 0 : using factory_classes = Options::add_factory_classes< 93 : typename base::factory_creation::factory_classes, 94 : tmpl::pair<Event, tmpl::list<ah::Events::FindApparentHorizon<AhA>>>, 95 : tmpl::pair<ah::Criterion, ah::Criteria::standard_criteria>>; 96 : }; 97 : 98 0 : using initial_data_tag = typename base::initial_data_tag; 99 : 100 0 : using const_global_cache_tags = tmpl::flatten<tmpl::list< 101 : grmhd::ValenciaDivClean::Tags::PrimitiveFromConservativeOptions, 102 : gh::gauges::Tags::GaugeCondition, initial_data_tag, 103 : grmhd::ValenciaDivClean::Tags::ConstraintDampingParameter, 104 : typename base::equation_of_state_tag, 105 : gh::Tags::DampingFunctionGamma0<volume_dim, Frame::Grid>, 106 : gh::Tags::DampingFunctionGamma1<volume_dim, Frame::Grid>, 107 : gh::Tags::DampingFunctionGamma2<volume_dim, Frame::Grid>, 108 : ah::Tags::LMax>>; 109 : 110 0 : using observed_reduction_data_tags = observers::collect_reduction_data_tags< 111 : tmpl::at<typename factory_creation::factory_classes, Event>>; 112 : 113 0 : using registration = typename base::registration; 114 : 115 0 : using component_list = tmpl::push_back<typename base::component_list, 116 : ah::Component<EvolutionMetavars, AhA>>; 117 : };