Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <array> 7 : #include <cstddef> 8 : #include <string> 9 : #include <utility> 10 : 11 : #include "DataStructures/DataBox/Tag.hpp" 12 : #include "DataStructures/DataBox/TagName.hpp" 13 : #include "Domain/Structure/DirectionalIdMap.hpp" 14 : #include "NumericalAlgorithms/DiscontinuousGalerkin/SimpleMortarData.hpp" 15 : #include "NumericalAlgorithms/Spectral/SegmentSize.hpp" 16 : #include "Options/String.hpp" 17 : #include "Utilities/PrettyType.hpp" 18 : 19 : /// Functionality related to discontinuous Galerkin schemes 20 : namespace dg {} 21 : 22 : namespace Tags { 23 : /// \ingroup DataBoxTagsGroup 24 : /// \ingroup DiscontinuousGalerkinGroup 25 : /// Data on mortars, indexed by a DirectionalId 26 : template <typename Tag, size_t VolumeDim> 27 1 : struct Mortars : db::PrefixTag, db::SimpleTag { 28 0 : using tag = Tag; 29 0 : using type = DirectionalIdMap<VolumeDim, typename Tag::type>; 30 : }; 31 : 32 : /// \ingroup DataBoxTagsGroup 33 : /// \ingroup DiscontinuousGalerkinGroup 34 : /// Size of a mortar, relative to the element face. That is, the part 35 : /// of the face that it covers. 36 : template <size_t Dim> 37 1 : struct MortarSize : db::SimpleTag { 38 0 : using type = std::array<Spectral::SegmentSize, Dim>; 39 : }; 40 : } // namespace Tags 41 : 42 : namespace OptionTags { 43 : /*! 44 : * \ingroup OptionGroupsGroup 45 : * \brief Holds the `OptionTags::NumericalFlux` option in the input file 46 : */ 47 1 : struct NumericalFluxGroup { 48 0 : static std::string name() { return "NumericalFlux"; } 49 0 : static constexpr Options::String help = "The numerical flux scheme"; 50 : }; 51 : 52 : /*! 53 : * \ingroup OptionTagsGroup 54 : * \brief The option tag that retrieves the parameters for the numerical 55 : * flux from the input file 56 : */ 57 : template <typename NumericalFluxType> 58 1 : struct NumericalFlux { 59 0 : static std::string name() { return pretty_type::name<NumericalFluxType>(); } 60 0 : static constexpr Options::String help = "Options for the numerical flux"; 61 0 : using type = NumericalFluxType; 62 0 : using group = NumericalFluxGroup; 63 : }; 64 : } // namespace OptionTags 65 : 66 : namespace Tags { 67 : /*! 68 : * \brief The global cache tag for the numerical flux 69 : */ 70 : template <typename NumericalFluxType> 71 1 : struct NumericalFlux : db::SimpleTag { 72 0 : using type = NumericalFluxType; 73 0 : using option_tags = 74 : tmpl::list<::OptionTags::NumericalFlux<NumericalFluxType>>; 75 : 76 0 : static constexpr bool pass_metavariables = false; 77 0 : static NumericalFluxType create_from_options( 78 : const NumericalFluxType& numerical_flux) { 79 : return numerical_flux; 80 : } 81 : }; 82 : } // namespace Tags