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 <optional> 8 : 9 : #include "Evolution/DgSubcell/Tags/SubcellOptions.hpp" 10 : #include "Time/Tags/FixedLtsRatio.hpp" 11 : #include "Utilities/TMPL.hpp" 12 : 13 : /// \cond 14 : template <size_t Dim, typename T> 15 : class DirectionalIdMap; 16 : template <size_t VolumeDim> 17 : class Element; 18 : namespace domain::Tags { 19 : template <size_t VolumeDim> 20 : struct Element; 21 : } // namespace domain::Tags 22 : namespace evolution::dg { 23 : template <size_t VolumeDim> 24 : class MortarInfo; 25 : } // namespace evolution::dg 26 : namespace evolution::dg::Tags { 27 : template <size_t Dim> 28 : struct MortarInfo; 29 : } // namespace evolution::dg::Tags 30 : namespace evolution::dg::subcell { 31 : class SubcellOptions; 32 : } // namespace evolution::dg::subcell 33 : namespace gsl { 34 : template <class T> 35 : class not_null; 36 : } // namespace gsl 37 : /// \endcond 38 : 39 : namespace evolution::dg::subcell { 40 : /*! 41 : * \brief Initialization mutator that disables local time-stepping in 42 : * subcell regions for a mixed subcell-LTS evolution. 43 : * 44 : * Sets `Tags::FixedLtsRatio` for all elements not specified in 45 : * `OnlyDgBlocksAndGroups`, and sets all boundaries between such 46 : * elements to `TimeSteppingPolicy::EqualRate`. 47 : */ 48 : template <size_t Dim> 49 1 : struct DisableLts { 50 0 : using const_global_cache_tags = tmpl::list<Tags::SubcellOptions<Dim>>; 51 0 : using mutable_global_cache_tags = tmpl::list<>; 52 0 : using simple_tags_from_options = tmpl::list<>; 53 0 : using simple_tags = tmpl::list<::Tags::FixedLtsRatio>; 54 0 : using compute_tags = tmpl::list<>; 55 : 56 0 : using return_tags = 57 : tmpl::list<::Tags::FixedLtsRatio, evolution::dg::Tags::MortarInfo<Dim>>; 58 0 : using argument_tags = 59 : tmpl::list<domain::Tags::Element<Dim>, Tags::SubcellOptions<Dim>>; 60 : 61 0 : static void apply( 62 : gsl::not_null<std::optional<size_t>*> fixed_lts_ratio, 63 : gsl::not_null<DirectionalIdMap<Dim, ::evolution::dg::MortarInfo<Dim>>*> 64 : mortar_infos, 65 : const Element<Dim>& element, const SubcellOptions& subcell_options); 66 : }; 67 : } // namespace evolution::dg::subcell