Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <optional> 7 : #include <vector> 8 : 9 : #include "DataStructures/DataBox/PrefixHelpers.hpp" 10 : #include "DataStructures/IdPair.hpp" 11 : #include "DataStructures/Tensor/TypeAliases.hpp" 12 : #include "Domain/Structure/BlockId.hpp" 13 : #include "Utilities/TaggedTuple.hpp" 14 : 15 : namespace intrp { 16 : namespace Vars { 17 : /// PointInfoTag holds the points to be interpolated onto, 18 : /// in whatever frame those points are to be held constant. 19 : /// PointInfoTag is used only for interpolation points that are 20 : /// time-independent in some frame, so that there is no `Interpolator` 21 : /// ParallelComponent. 22 : template <typename InterpolationTargetTag, size_t VolumeDim> 23 1 : struct PointInfoTag { 24 0 : using type = 25 : tnsr::I<DataVector, VolumeDim, 26 : typename InterpolationTargetTag::compute_target_points::frame>; 27 : }; 28 : } // namespace Vars 29 : 30 : namespace Tags { 31 : 32 : namespace point_info_detail { 33 : template <typename InterpolationTargetTag, typename Metavariables> 34 : using WrappedPointInfoTag = 35 : Vars::PointInfoTag<InterpolationTargetTag, Metavariables::volume_dim>; 36 : } // namespace point_info_detail 37 : 38 : /// Base tag for `InterpPointInfo` so we don't have to have the metavariables in 39 : /// order to retrieve the tag 40 1 : struct InterpPointInfoBase : db::BaseTag {}; 41 : 42 : /// The following tag is for the case in which interpolation 43 : /// bypasses the `Interpolator` ParallelComponent. In that case, 44 : /// the `Element` must hold interpolation information in its `DataBox`. 45 : /// 46 : /// A particular `Vars::PointInfo` can be retrieved from this 47 : /// `TaggedTuple` via a `Vars::PointInfoTag`. 48 : template <typename Metavariables> 49 1 : struct InterpPointInfo : db::SimpleTag, InterpPointInfoBase { 50 0 : using type = tuples::tagged_tuple_from_typelist<db::wrap_tags_in< 51 : point_info_detail::WrappedPointInfoTag, 52 : typename Metavariables::interpolation_target_tags, Metavariables>>; 53 : }; 54 : 55 : } // namespace Tags 56 : } // namespace intrp