6 #include "Evolution/Systems/Cce/AnalyticSolutions/BouncingBlackHole.hpp"
7 #include "Evolution/Systems/Cce/AnalyticSolutions/GaugeWave.hpp"
8 #include "Evolution/Systems/Cce/AnalyticSolutions/LinearizedBondiSachs.hpp"
9 #include "Evolution/Systems/Cce/AnalyticSolutions/RotatingSchwarzschild.hpp"
10 #include "Evolution/Systems/Cce/AnalyticSolutions/SphericalMetricData.hpp"
11 #include "Evolution/Systems/Cce/AnalyticSolutions/TeukolskyWave.hpp"
12 #include "Evolution/Systems/Cce/AnalyticSolutions/WorldtubeData.hpp"
13 #include "Evolution/Systems/Cce/BoundaryData.hpp"
14 #include "Evolution/Systems/Cce/Components/CharacteristicEvolution.hpp"
15 #include "Evolution/Systems/Cce/Components/WorldtubeBoundary.hpp"
16 #include "Evolution/Systems/Cce/Initialize/InitializeJ.hpp"
17 #include "Evolution/Systems/Cce/Initialize/InverseCubic.hpp"
18 #include "Evolution/Systems/Cce/Initialize/NoIncomingRadiation.hpp"
19 #include "Evolution/Systems/Cce/Initialize/RegisterInitializeJWithCharm.hpp"
20 #include "Evolution/Systems/Cce/Initialize/ZeroNonSmooth.hpp"
21 #include "Evolution/Systems/Cce/IntegrandInputSteps.hpp"
22 #include "Evolution/Systems/Cce/OptionTags.hpp"
23 #include "Evolution/Systems/Cce/System.hpp"
24 #include "Evolution/Systems/Cce/Tags.hpp"
25 #include "Evolution/Systems/Cce/WorldtubeDataManager.hpp"
26 #include "IO/Observer/ObserverComponent.hpp"
27 #include "NumericalAlgorithms/Interpolation/BarycentricRationalSpanInterpolator.hpp"
28 #include "NumericalAlgorithms/Interpolation/CubicSpanInterpolator.hpp"
29 #include "NumericalAlgorithms/Interpolation/LinearSpanInterpolator.hpp"
30 #include "NumericalAlgorithms/Interpolation/SpanInterpolator.hpp"
33 #include "Parallel/InitializationFunctions.hpp"
35 #include "Time/Tags.hpp"
36 #include "Time/TimeSteppers/TimeStepper.hpp"
40 template <
template <
typename>
class BoundaryComponent>
46 using evolved_coordinates_variables_tag =
49 using cce_boundary_communication_tags =
53 using cce_gauge_boundary_tags = tmpl::flatten<tmpl::list<
59 tmpl::bind<Cce::Tags::EvolutionGaugeBoundaryValue, tmpl::_1>>,
67 using scri_values_to_observe =
68 tmpl::list<Cce::Tags::News, Cce::Tags::ScriPlus<Cce::Tags::Strain>,
78 tmpl::list<Cce::Tags::News, Cce::Tags::ScriPlus<Cce::Tags::Strain>,
85 using cce_integrand_tags = tmpl::flatten<tmpl::transform<
89 using cce_integration_independent_tags =
90 tmpl::push_back<Cce::pre_computation_tags, Cce::Tags::DuRDividedByR>;
91 using cce_temporary_equations_tags = tmpl::remove_duplicates<tmpl::flatten<
92 tmpl::transform<cce_integrand_tags,
93 tmpl::bind<Cce::integrand_temporary_tags, tmpl::_1>>>>;
97 using cce_angular_coordinate_tags =
98 tmpl::list<Cce::Tags::CauchyAngularCoords>;
100 using cce_boundary_component = BoundaryComponent<EvolutionMetavars>;
102 using component_list =
103 tmpl::list<observers::ObserverWriter<EvolutionMetavars>,
104 cce_boundary_component,
107 using observed_reduction_data_tags = tmpl::list<>;
110 "Perform Cauchy Characteristic Extraction using .h5 input data.\n"
111 "Uses regularity-preserving formulation."};
113 enum class Phase { Initialization, Evolve, Exit };
115 template <
typename... Tags>
116 static Phase determine_next_phase(
119 const Phase& current_phase,
120 const Parallel::CProxy_GlobalCache<
122 if (current_phase == Phase::Initialization) {
123 return Phase::Evolve;
130 static const std::vector<void (*)()> charm_init_node_funcs{
131 &setup_error_handling,
133 &Cce::register_initialize_j_with_charm,
138 &Parallel::register_derived_classes_with_charm<Cce::WorldtubeDataManager>,
139 &Parallel::register_derived_classes_with_charm<TimeStepper>,
140 &Parallel::register_derived_classes_with_charm<intrp::SpanInterpolator>,
144 static const std::vector<void (*)()> charm_init_proc_funcs{
tmpl::remove_duplicates< tmpl::flatten< tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind< tmpl::list, single_swsh_derivative_tags_to_compute_for< tmpl::_1 >, second_swsh_derivative_tags_to_compute_for< tmpl::_1 > >>, all_swsh_derivative_tags_for_scri > >> all_swsh_derivative_tags
A typelist for the set of tags computed by spin-weighted differentiation using utilities from the Sws...
Definition: IntegrandInputSteps.hpp:309
Definition: System.hpp:116
tmpl::remove_duplicates< tmpl::flatten< tmpl::transform< all_swsh_derivative_tags, tmpl::bind< Spectral::Swsh::coefficient_buffer_tags_for_derivative_tag, tmpl::_1 > >> > all_transform_buffer_tags
A typelist for the full set of coefficient buffers needed to process all of the tags in all_swsh_deri...
Definition: IntegrandInputSteps.hpp:328
tmpl::list< Tags::BondiBeta, Tags::BondiQ, Tags::BondiU, Tags::BondiW, Tags::BondiH > bondi_hypersurface_step_tags
Definition: IntegrandInputSteps.hpp:23
void disable_openblas_multithreading() noexcept
Disable OpenBLAS multithreading since it conflicts with Charm++ parallelism.
tmpl::list< Spectral::Swsh::Tags::Derivative< Tags::ComplexInertialRetardedTime, Spectral::Swsh::Tags::EthEth > > all_boundary_swsh_derivative_tags_for_scri
Typelist of steps for SwshDerivatives mutations called on boundary (angular grid only) quantities nee...
Definition: IntegrandInputSteps.hpp:284
void enable_floating_point_exceptions()
tmpl::list< Tags::ComplexInertialRetardedTime > all_boundary_pre_swsh_derivative_tags_for_scri
Typelist of steps for PreSwshDerivatives mutations called on boundary (angular grid only) quantities ...
Definition: IntegrandInputSteps.hpp:278
Abstract base class for analytic worldtube data for verifying the CCE system.
Definition: WorldtubeData.hpp:71
typename detail::integrand_terms_to_compute_for_bondi_variable_impl< BondiVariable >::type integrand_terms_to_compute_for_bondi_variable
A struct for providing a tmpl::list of integrand tags that need to be computed before integration can...
Definition: Equations.hpp:93
The component for handling the CCE evolution and waveform output.
Definition: CharacteristicEvolution.hpp:95
const char *const String
The string used in option structs.
Definition: Options.hpp:32
void register_derived_classes_with_charm() noexcept
Register derived classes of the Base class.
Definition: RegisterDerivedClassesWithCharm.hpp:31
Abstract base class for utilities that are able to perform the buffer updating procedure needed by th...
Definition: WorldtubeBufferUpdater.hpp:145
Require a pointer to not be a nullptr
Definition: ReadSpecThirdOrderPiecewisePolynomial.hpp:13
tmpl::remove_duplicates< tmpl::flatten< tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind< tmpl::list, pre_swsh_derivative_tags_to_compute_for< tmpl::_1 >, detail::additional_pre_swsh_derivative_tags_for< tmpl::_1 > >>, all_pre_swsh_derivative_tags_for_scri > >> all_pre_swsh_derivative_tags
A typelist for the full set of tags needed as direct or indirect input to any ComputeBondiIntegrand t...
Definition: IntegrandInputSteps.hpp:371