12 #include "Domain/CoordinateMaps/Tags.hpp"
14 #include "Domain/TagsTimeDependent.hpp"
15 #include "Evolution/Initialization/InitialData.hpp"
16 #include "Evolution/Initialization/Tags.hpp"
17 #include "Evolution/TypeTraits.hpp"
20 #include "ParallelAlgorithms/Initialization/MergeIntoDataBox.hpp"
21 #include "PointwiseFunctions/AnalyticData/Tags.hpp"
22 #include "PointwiseFunctions/AnalyticSolutions/Tags.hpp"
26 #include "Utilities/TaggedTuple.hpp"
30 template <
typename Metavariables>
36 namespace Initialization {
53 template <
typename LogicalCoordinatesTag>
55 using initialization_option_tags =
56 tmpl::list<::Initialization::Tags::InitialTime>;
58 template <
typename DbTagsList,
typename... InboxTags,
typename Metavariables,
59 typename ArrayIndex,
typename ActionList,
60 typename ParallelComponent>
62 db::DataBox<DbTagsList>& box,
65 const ArrayIndex& , ActionList ,
66 const ParallelComponent*
const ) noexcept {
67 if constexpr (tmpl::list_contains_v<
68 typename db::DataBox<DbTagsList>::simple_item_tags,
73 "Could not find dependency 'Initialization::Tags::InitialTime' in "
76 return {std::move(box)};
80 template <
typename Metavariables,
typename DbTagsList>
81 static void impl(
const gsl::not_null<db::DataBox<DbTagsList>*> box) noexcept {
82 const double initial_time =
83 db::get<::Initialization::Tags::InitialTime>(*box);
84 const auto inertial_coords =
89 db::get<LogicalCoordinatesTag>(*box)),
90 initial_time, db::get<::domain::Tags::FunctionsOfTime>(*box));
92 using system =
typename Metavariables::system;
94 const auto& solution_or_data =
95 db::get<::Tags::AnalyticSolutionOrData>(*box);
97 if constexpr (Metavariables::system::has_primitive_and_conservative_vars) {
98 using primitives_tag =
typename system::primitive_variables_tag;
100 db::mutate<primitives_tag>(
101 box, [&initial_time, &inertial_coords, &solution_or_data ](
103 primitive_vars) noexcept {
105 solution_or_data, inertial_coords, initial_time,
106 typename Metavariables::analytic_variables_tags{}));
109 using variables_tag =
typename system::variables_tag;
112 using Vars =
typename variables_tag::type;
113 db::mutate<variables_tag>(
114 box, [&initial_time, &inertial_coords,
117 solution_or_data, inertial_coords, initial_time,
118 typename Vars::tags_list{}));