Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <string> 7 : 8 : #include "DataStructures/DataBox/PrefixHelpers.hpp" 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/DataBox/TagName.hpp" 11 : #include "Elliptic/BoundaryConditions/BoundaryConditionType.hpp" 12 : #include "Options/String.hpp" 13 : #include "Utilities/TaggedTuple.hpp" 14 : 15 : namespace elliptic { 16 1 : namespace OptionTags { 17 : 18 : template <typename Tag> 19 0 : struct BoundaryConditionType { 20 0 : static std::string name() { return db::tag_name<Tag>(); } 21 0 : using type = elliptic::BoundaryConditionType; 22 0 : static constexpr Options::String help = 23 : "Type of boundary conditions to impose on this variable"; 24 : }; 25 : 26 : } // namespace OptionTags 27 : 28 0 : namespace Tags { 29 : 30 : /// The `elliptic::BoundaryConditionType` to impose on the variable represented 31 : /// by `Tag`, e.g. Dirichlet or Neumann boundary conditions 32 : template <typename Tag> 33 1 : struct BoundaryConditionType : db::PrefixTag, db::SimpleTag { 34 0 : using type = elliptic::BoundaryConditionType; 35 0 : using tag = Tag; 36 : }; 37 : 38 : /// The `elliptic::BoundaryConditionType` to impose on the variables represented 39 : /// by `Tags`, e.g. Dirichlet or Neumann boundary conditions 40 : template <typename Tags> 41 1 : struct BoundaryConditionTypes : db::SimpleTag { 42 0 : using type = tuples::tagged_tuple_from_typelist< 43 : db::wrap_tags_in<elliptic::Tags::BoundaryConditionType, Tags>>; 44 : }; 45 : 46 : } // namespace Tags 47 : } // namespace elliptic