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