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 : 8 : #include "DataStructures/DataBox/Tag.hpp" 9 : #include "Evolution/DiscontinuousGalerkin/EqualRateLts/EqualRateRegions.hpp" 10 : #include "Utilities/TMPL.hpp" 11 : 12 : namespace evolution::dg::Tags { 13 : /// Regions that cannot perform local time-stepping. 14 : /// 15 : /// Accessible as a base class through the `EqualRateRegions` tag 16 : /// without the second template parameter. 17 : template <size_t Dim, typename RegionGenerators> 18 1 : struct ConcreteEqualRateRegions : db::SimpleTag { 19 0 : using type = evolution::dg::EqualRateRegions<Dim, RegionGenerators>; 20 0 : using option_tags = typename type::creation_tags; 21 : 22 0 : static constexpr bool pass_metavariables = false; 23 : template <typename... Args> 24 0 : static type create_from_options(const Args&... options) { 25 : return type{options...}; 26 : } 27 : }; 28 : 29 : /// Regions that cannot perform local time-stepping. 30 : template <size_t Dim> 31 1 : struct EqualRateRegions : db::SimpleTag { 32 0 : using type = evolution::dg::EqualRateRegionsBase<Dim>; 33 : }; 34 : 35 : /// Reference tag converting ConcreteEqualRateRegions to the base class. 36 : template <size_t Dim, typename RegionGenerators> 37 1 : struct EqualRateRegionsRef : EqualRateRegions<Dim>, db::ReferenceTag { 38 0 : using base = EqualRateRegions<Dim>; 39 0 : using argument_tags = 40 : tmpl::list<ConcreteEqualRateRegions<Dim, RegionGenerators>>; 41 0 : static const EqualRateRegionsBase<Dim>& get( 42 : const EqualRateRegionsBase<Dim>& regions) { 43 : return regions; 44 : } 45 : }; 46 : } // namespace evolution::dg::Tags