Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <string>
7 : #include <type_traits>
8 :
9 : #include "DataStructures/VariablesTag.hpp"
10 : #include "Evolution/Systems/Cce/BoundaryData.hpp"
11 : #include "Evolution/Systems/Cce/IntegrandInputSteps.hpp"
12 : #include "Evolution/Systems/Cce/System.hpp"
13 : #include "Evolution/Systems/Cce/Tags.hpp"
14 : #include "NumericalAlgorithms/SpinWeightedSphericalHarmonics/SwshTags.hpp"
15 : #include "Time/StepChoosers/Constant.hpp"
16 : #include "Time/StepChoosers/ErrorControl.hpp"
17 : #include "Time/StepChoosers/LimitIncrease.hpp"
18 : #include "Time/StepChoosers/Maximum.hpp"
19 : #include "Time/StepChoosers/StepToTimes.hpp"
20 : #include "Utilities/TMPL.hpp"
21 :
22 : template <bool EvolveCcm>
23 0 : struct CharacteristicExtractDefaults {
24 0 : static constexpr bool evolve_ccm = EvolveCcm;
25 0 : using evolved_swsh_tags = tmpl::list<Cce::Tags::BondiJ>;
26 0 : using evolved_swsh_dt_tags = tmpl::list<Cce::Tags::BondiH>;
27 0 : using evolved_coordinates_variables_tag = Tags::Variables<
28 : tmpl::conditional_t<evolve_ccm,
29 : tmpl::list<Cce::Tags::CauchyCartesianCoords,
30 : Cce::Tags::PartiallyFlatCartesianCoords,
31 : Cce::Tags::InertialRetardedTime>,
32 : tmpl::list<Cce::Tags::CauchyCartesianCoords,
33 : Cce::Tags::InertialRetardedTime>>>;
34 :
35 0 : struct swsh_vars_selector {
36 0 : static std::string name() { return "SwshVars"; }
37 : };
38 :
39 0 : struct coord_vars_selector {
40 0 : static std::string name() { return "CoordVars"; }
41 : };
42 :
43 0 : using cce_boundary_communication_tags =
44 : Cce::Tags::characteristic_worldtube_boundary_tags<
45 : Cce::Tags::BoundaryValue>;
46 :
47 0 : using cce_gauge_boundary_tags = tmpl::flatten<tmpl::list<
48 : tmpl::transform<
49 : tmpl::list<Cce::Tags::BondiR, Cce::Tags::DuRDividedByR,
50 : Cce::Tags::BondiJ, Cce::Tags::Dr<Cce::Tags::BondiJ>,
51 : Cce::Tags::BondiBeta, Cce::Tags::BondiQ, Cce::Tags::BondiU,
52 : Cce::Tags::BondiW, Cce::Tags::BondiH>,
53 : tmpl::bind<Cce::Tags::EvolutionGaugeBoundaryValue, tmpl::_1>>,
54 : Cce::Tags::BondiUAtScri, Cce::Tags::PartiallyFlatGaugeC,
55 : Cce::Tags::PartiallyFlatGaugeD, Cce::Tags::PartiallyFlatGaugeOmega,
56 : Cce::Tags::Du<Cce::Tags::PartiallyFlatGaugeOmega>,
57 : tmpl::conditional_t<
58 : evolve_ccm,
59 : tmpl::list<
60 : Cce::Tags::CauchyGaugeC, Cce::Tags::CauchyGaugeD,
61 : Cce::Tags::CauchyGaugeOmega,
62 : Spectral::Swsh::Tags::Derivative<Cce::Tags::CauchyGaugeOmega,
63 : Spectral::Swsh::Tags::Eth>>,
64 : tmpl::list<>>,
65 : Spectral::Swsh::Tags::Derivative<Cce::Tags::PartiallyFlatGaugeOmega,
66 : Spectral::Swsh::Tags::Eth>,
67 : Cce::all_boundary_pre_swsh_derivative_tags_for_scri,
68 : Cce::all_boundary_swsh_derivative_tags_for_scri>>;
69 :
70 0 : using scri_values_to_observe =
71 : tmpl::list<Cce::Tags::News, Cce::Tags::ScriPlus<Cce::Tags::Strain>,
72 : Cce::Tags::ScriPlus<Cce::Tags::Psi3>,
73 : Cce::Tags::ScriPlus<Cce::Tags::Psi2>,
74 : Cce::Tags::ScriPlus<Cce::Tags::Psi1>,
75 : Cce::Tags::ScriPlus<Cce::Tags::Psi0>,
76 : Cce::Tags::Du<Cce::Tags::TimeIntegral<
77 : Cce::Tags::ScriPlus<Cce::Tags::Psi4>>>,
78 : Cce::Tags::EthInertialRetardedTime>;
79 :
80 0 : using cce_scri_tags =
81 : tmpl::list<Cce::Tags::News, Cce::Tags::ScriPlus<Cce::Tags::Strain>,
82 : Cce::Tags::ScriPlus<Cce::Tags::Psi3>,
83 : Cce::Tags::ScriPlus<Cce::Tags::Psi2>,
84 : Cce::Tags::ScriPlus<Cce::Tags::Psi1>,
85 : Cce::Tags::ScriPlus<Cce::Tags::Psi0>,
86 : Cce::Tags::TimeIntegral<Cce::Tags::ScriPlus<Cce::Tags::Psi4>>,
87 : Cce::Tags::EthInertialRetardedTime>;
88 0 : using cce_integrand_tags = tmpl::flatten<tmpl::transform<
89 : Cce::bondi_hypersurface_step_tags,
90 : tmpl::bind<Cce::integrand_terms_to_compute_for_bondi_variable,
91 : tmpl::_1>>>;
92 0 : using ccm_matching_tags = tmpl::list<
93 : Cce::Tags::BondiJCauchyView, Cce::Tags::Psi0Match,
94 : Cce::Tags::Dy<Cce::Tags::Psi0Match>,
95 : Cce::Tags::Psi0, Cce::Tags::Dy<Cce::Tags::BondiJCauchyView>,
96 : Cce::Tags::Dy<Cce::Tags::Dy<Cce::Tags::BondiJCauchyView>>>;
97 :
98 0 : using cce_integration_independent_tags = tmpl::conditional_t<
99 : evolve_ccm,
100 : tmpl::append<Cce::pre_computation_tags, ccm_matching_tags,
101 : tmpl::list<Cce::Tags::DuRDividedByR>>,
102 : tmpl::push_back<Cce::pre_computation_tags, Cce::Tags::DuRDividedByR>>;
103 :
104 0 : using cce_temporary_equations_tags = tmpl::remove_duplicates<tmpl::flatten<
105 : tmpl::transform<cce_integrand_tags,
106 : tmpl::bind<Cce::integrand_temporary_tags, tmpl::_1>>>>;
107 0 : using cce_pre_swsh_derivatives_tags = Cce::all_pre_swsh_derivative_tags;
108 0 : using cce_transform_buffer_tags = Cce::all_transform_buffer_tags;
109 0 : using cce_swsh_derivative_tags = Cce::all_swsh_derivative_tags;
110 0 : using cce_angular_coordinate_tags =
111 : tmpl::conditional_t<evolve_ccm,
112 : tmpl::list<Cce::Tags::CauchyAngularCoords,
113 : Cce::Tags::PartiallyFlatAngularCoords>,
114 : tmpl::list<Cce::Tags::CauchyAngularCoords>>;
115 0 : using cce_step_choosers =
116 : tmpl::list<StepChoosers::Constant, StepChoosers::LimitIncrease,
117 : StepChoosers::Maximum,
118 : StepChoosers::ErrorControl<StepChooserUse::LtsStep,
119 : Tags::Variables<evolved_swsh_tags>,
120 : swsh_vars_selector>,
121 : StepChoosers::ErrorControl<StepChooserUse::LtsStep,
122 : evolved_coordinates_variables_tag,
123 : coord_vars_selector>>;
124 0 : using cce_slab_choosers =
125 : tmpl::list<StepChoosers::Constant, StepChoosers::LimitIncrease,
126 : StepChoosers::Maximum, StepChoosers::StepToTimes>;
127 :
128 0 : using ccm_psi0 = tmpl::list<
129 : Cce::Tags::BoundaryValue<Cce::Tags::Psi0Match>,
130 : Cce::Tags::BoundaryValue<Cce::Tags::Dlambda<Cce::Tags::Psi0Match>>>;
131 : };
|