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