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 "Parallel/AlgorithmExecution.hpp" 13 : #include "ParallelAlgorithms/Interpolation/InterpolationTargetDetail.hpp" 14 : #include "ParallelAlgorithms/Interpolation/PointInfoTag.hpp" 15 : #include "Utilities/Requires.hpp" 16 : #include "Utilities/TMPL.hpp" 17 : #include "Utilities/TaggedTuple.hpp" 18 : 19 : /// \cond 20 : namespace Parallel { 21 : template <typename Metavariables> 22 : class GlobalCache; 23 : } // namespace Parallel 24 : /// \endcond 25 : 26 : 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