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 <string> 8 : 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/DataBox/TagName.hpp" 11 : #include "Domain/BoundaryVariables.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : #include "Utilities/TypeTraits/IsA.hpp" 14 : 15 : namespace Tags { 16 : template <size_t Dim, typename TagsList> 17 0 : struct BoundaryVariables : db::SimpleTag { 18 : static_assert( 19 : tt::is_a_v<tmpl::list, TagsList>, 20 : "The TagsList passed to Tags::BoundaryVariables is not a typelist"); 21 0 : using tags_list = TagsList; 22 0 : using type = ::BoundaryVariables<Dim, TagsList>; 23 0 : static std::string name() { 24 : std::string tag_name{"BoundaryVariables("}; 25 : size_t iter = 0; 26 : tmpl::for_each<TagsList>([&tag_name, &iter](auto tag) { 27 : tag_name += db::tag_name<tmpl::type_from<decltype(tag)>>(); 28 : if (iter + 1 != tmpl::size<TagsList>::value) { 29 : tag_name += ","; 30 : } 31 : iter++; 32 : }); 33 : return tag_name + ")"; 34 : } 35 : }; 36 : } // namespace Tags