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