Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <type_traits> 7 : 8 : #include "DataStructures/DataBox/TagTraits.hpp" 9 : 10 : namespace Parallel { 11 : namespace initialization_tag_detail { 12 : template <template <typename> typename> 13 : constexpr bool is_templated() { 14 : return true; 15 : } 16 : } // namespace initialization_tag_detail 17 : 18 : /*! 19 : * \ingroup ParallelGroup 20 : * Concept for an initialization tag with `pass_metavariables` true. 21 : */ 22 : template <typename Tag> 23 : concept templated_initialization_tag = 24 : db::simple_tag<Tag> and Tag::pass_metavariables and 25 : initialization_tag_detail::is_templated<Tag::template option_tags>(); 26 : 27 : /*! 28 : * \ingroup ParallelGroup 29 : * Concept for an initialization tag with `pass_metavariables` false. 30 : */ 31 : template <typename Tag> 32 : concept untemplated_initialization_tag = 33 : db::simple_tag<Tag> and not Tag::pass_metavariables and 34 : requires { typename Tag::option_tags; }; 35 : 36 : /*! 37 : * \ingroup ParallelGroup 38 : * Concept for an initialization tag. 39 : */ 40 : template <typename Tag> 41 : concept initialization_tag = 42 : templated_initialization_tag<Tag> or untemplated_initialization_tag<Tag>; 43 : } // namespace Parallel