11 #include "Evolution/Systems/Cce/OptionTags.hpp"
12 #include "Evolution/Systems/Cce/ScriPlusInterpolationManager.hpp"
14 #include "ParallelAlgorithms/Initialization/MutateAssign.hpp"
15 #include "Utilities/Rational.hpp"
18 #include "Utilities/TaggedTuple.hpp"
19 #include "Utilities/TypeTraits/IsA.hpp"
24 template <
class Metavariables>
25 struct AnalyticWorldtubeBoundary;
48 template <
typename ScriValuesToObserve,
typename BoundaryComponent>
50 using initialization_tags = tmpl::flatten<tmpl::list<
53 tt::is_a_v<AnalyticWorldtubeBoundary, BoundaryComponent>,
54 tmpl::list<Tags::AnalyticBoundaryDataManager>, tmpl::list<>>>>;
55 using initialization_tags_to_keep = tmpl::conditional_t<
56 tt::is_a_v<AnalyticWorldtubeBoundary, BoundaryComponent>,
57 tmpl::list<Tags::AnalyticBoundaryDataManager>, tmpl::list<>>;
58 using const_global_cache_tags =
59 tmpl::list<Tags::LMax, Tags::NumberOfRadialPoints>;
62 tmpl::transform<ScriValuesToObserve,
64 tmpl::pin<ComplexDataVector>, tmpl::_1>>;
66 using compute_tags = tmpl::list<>;
68 template <
typename DbTags,
typename... InboxTags,
typename Metavariables,
69 typename ArrayIndex,
typename ActionList,
70 typename ParallelComponent>
71 static auto apply(db::DataBox<DbTags>& box,
76 const ParallelComponent*
const ) noexcept {
78 typename Metavariables::scri_values_to_observe{});
79 return std::make_tuple(std::move(box));
82 template <
typename TagList,
typename... TagPack>
83 static void initialize_impl(
const gsl::not_null<db::DataBox<TagList>*> box,
84 tmpl::list<TagPack...> ) noexcept {
85 const size_t target_number_of_points =
86 db::get<InitializationTags::ScriInterpolationOrder>(*box);
87 const size_t vector_size =
89 db::get<Spectral::Swsh::Tags::LMaxBase>(*box));
92 if constexpr (
sizeof...(TagPack) > 0) {
93 Initialization::mutate_assign<simple_tags>(
95 target_number_of_points, vector_size,
96 std::make_unique<intrp::BarycentricRationalSpanInterpolator>(
97 2 * target_number_of_points - 1,
98 2 * target_number_of_points + 2)}...);