Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 : #include <optional>
8 : #include <tuple>
9 :
10 : #include "DataStructures/DataBox/DataBox.hpp"
11 : #include "DataStructures/DataBox/PrefixHelpers.hpp"
12 : #include "DataStructures/TaggedTuple.hpp"
13 : #include "Parallel/AlgorithmExecution.hpp"
14 : #include "ParallelAlgorithms/Interpolation/InterpolationTargetDetail.hpp"
15 : #include "ParallelAlgorithms/Interpolation/PointInfoTag.hpp"
16 : #include "Utilities/Requires.hpp"
17 : #include "Utilities/TMPL.hpp"
18 :
19 : /// \cond
20 : namespace Parallel {
21 : template <typename Metavariables>
22 : class GlobalCache;
23 : } // namespace Parallel
24 : /// \endcond
25 :
26 1 : namespace intrp::Actions {
27 : /// \ingroup ActionsGroup
28 : /// \brief Adds interpolation point holders to the Element's DataBox.
29 : ///
30 : /// This action is for the case in which the points are time-independent.
31 : ///
32 : /// This action should be placed in the Initialization PDAL for DgElementArray.
33 : ///
34 : /// Uses: nothing
35 : ///
36 : /// DataBox changes:
37 : /// - Adds:
38 : /// - `intrp::Tags::PointInfo` for each non-sequential target tag
39 : /// - Removes: nothing
40 : /// - Modifies: nothing
41 : template <size_t VolumeDim, typename AllInterpolationTargetTags>
42 1 : struct ElementInitInterpPoints {
43 0 : using simple_tags = tmpl::transform<
44 : intrp::InterpolationTarget_detail::get_non_sequential_target_tags<
45 : AllInterpolationTargetTags>,
46 : tmpl::bind<intrp::Tags::PointInfo, tmpl::_1,
47 : tmpl::pin<tmpl::size_t<VolumeDim>>>>;
48 : template <typename DbTags, typename... InboxTags, typename Metavariables,
49 : typename ArrayIndex, typename ActionList,
50 : typename ParallelComponent>
51 0 : static Parallel::iterable_action_return_t apply(
52 : db::DataBox<DbTags>& /*box*/,
53 : const tuples::TaggedTuple<InboxTags...>& /*inboxes*/,
54 : const Parallel::GlobalCache<Metavariables>& /*cache*/,
55 : const ArrayIndex& /*array_index*/, const ActionList /*meta*/,
56 : const ParallelComponent* const /*meta*/) {
57 : // Here we only want the `intrp::Tags::PointInfo` default constructed
58 : return {Parallel::AlgorithmExecution::Continue, std::nullopt};
59 : }
60 : };
61 : } // namespace intrp::Actions
|