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