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 <memory> 8 : #include <string> 9 : #include <unordered_map> 10 : #include <vector> 11 : 12 : #include "Domain/Creators/OptionTags.hpp" 13 : #include "Evolution/DgSubcell/Tags/SubcellOptions.hpp" 14 : #include "Utilities/TMPL.hpp" 15 : 16 : /// \cond 17 : template <size_t VolumeDim> 18 : class DomainCreator; 19 : template <size_t VolumeDim> 20 : class ElementId; 21 : namespace PUP { 22 : class er; 23 : } // namespace PUP 24 : namespace evolution::dg::subcell { 25 : class SubcellOptions; 26 : } // namespace evolution::dg::subcell 27 : /// \endcond 28 : 29 : namespace evolution::dg::subcell { 30 : /// Generator for `EqualRateRegions` labeling all elements that are 31 : /// allowed to do subcell and their neighbors. The inverse of the 32 : /// `OnlyDgBlocksAndGroups` input file option. 33 : template <size_t Dim> 34 1 : class SubcellEqualRateRegion { 35 : public: 36 0 : SubcellEqualRateRegion() = default; 37 : 38 0 : using creation_tags = tmpl::list<OptionTags::SubcellOptions, 39 : domain::OptionTags::DomainCreator<Dim>>; 40 : 41 0 : SubcellEqualRateRegion( 42 : const SubcellOptions& subcell_options, 43 : const std::unique_ptr<DomainCreator<Dim>>& domain_creator); 44 : 45 0 : std::unordered_map<std::string, size_t> regions() const; 46 : 47 0 : bool is_in_region(size_t region, const ElementId<Dim>& element_id) const; 48 : 49 0 : void pup(PUP::er& p); 50 : 51 : private: 52 0 : std::vector<size_t> only_dg_block_ids_{}; 53 : }; 54 : } // namespace evolution::dg::subcell