Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "DataStructures/DataBox/PrefixHelpers.hpp" 7 : #include "DataStructures/DataBox/Tag.hpp" 8 : #include "DataStructures/VariablesTag.hpp" 9 : 10 : /// \cond 11 : template <typename X, typename Symm, typename IndexList> 12 : class Tensor; 13 : template <typename TagsList> 14 : class Variables; 15 : /// \endcond 16 : 17 : namespace evolution::dg::subcell::Tags { 18 : /// Mark a tag as the being on the subcell grid 19 : template <typename Tag> 20 1 : struct OnSubcells : db::PrefixTag, db::SimpleTag { 21 : static_assert(tt::is_a_v<Tensor, typename Tag::type>, 22 : "A subcell tag must be either a Tensor or a Variables " 23 : "currently, though this can be generalized if needed."); 24 0 : using type = typename Tag::type; 25 0 : using tag = Tag; 26 : }; 27 : 28 : /// \cond 29 : // This tag currently exposes its constituents as subitems. Possible 30 : // compile-time optimization: Remove this template specialization and use 31 : // `OnSubcells<VariablesTag<tmpl::list<Tag1, Tag2>>>` instead of the individual 32 : // `OnSubcells<Tag1>`. 33 : template <typename TagList> 34 : struct OnSubcells<::Tags::Variables<TagList>> 35 : : ::Tags::Variables<db::wrap_tags_in<OnSubcells, TagList>> { 36 : private: 37 : using wrapped_tags_list = db::wrap_tags_in<OnSubcells, TagList>; 38 : 39 : public: 40 : using tag = ::Tags::Variables<TagList>; 41 : using type = Variables<wrapped_tags_list>; 42 : }; 43 : /// \endcond 44 : } // namespace evolution::dg::subcell::Tags