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/PrefixHelpers.hpp" 9 : #include "DataStructures/DataBox/Prefixes.hpp" 10 : #include "Utilities/TMPL.hpp" 11 : 12 : /// \cond 13 : template <size_t Dim, typename T> 14 : class DirectionalIdMap; 15 : class LtsTimeStepper; 16 : namespace Tags { 17 : template <typename StepperInterface> 18 : struct TimeStepper; 19 : } // namespace Tags 20 : namespace TimeSteppers { 21 : template <typename LocalData, typename RemoteData, typename CouplingResult> 22 : class BoundaryHistory; 23 : } // namespace TimeSteppers 24 : namespace evolution::dg { 25 : template <size_t Dim> 26 : struct MortarData; 27 : } // namespace evolution::dg 28 : namespace evolution::dg::Tags { 29 : template <size_t Dim, typename CouplingResult> 30 : struct MortarDataHistory; 31 : } // namespace evolution::dg::Tags 32 : namespace gsl { 33 : template <class T> 34 : class not_null; 35 : } // namespace gsl 36 : /// \endcond 37 : 38 : namespace evolution::dg { 39 : /// Mutator to remove old entries from the mortar histories in a 40 : /// local-time-stepping DG evolution. 41 : template <typename System> 42 1 : struct CleanMortarHistory { 43 0 : static constexpr size_t dim = System::volume_dim; 44 0 : using dt_variables_tag = 45 : db::add_tag_prefix<::Tags::dt, typename System::variables_tag>; 46 0 : using CouplingResult = typename dt_variables_tag::type; 47 : 48 0 : using return_tags = 49 : tmpl::list<evolution::dg::Tags::MortarDataHistory<dim, CouplingResult>>; 50 0 : using argument_tags = tmpl::list<::Tags::TimeStepper<LtsTimeStepper>>; 51 : 52 0 : static void apply( 53 : gsl::not_null<DirectionalIdMap< 54 : dim, TimeSteppers::BoundaryHistory<::evolution::dg::MortarData<dim>, 55 : ::evolution::dg::MortarData<dim>, 56 : CouplingResult>>*> 57 : history, 58 : const LtsTimeStepper& time_stepper); 59 : }; 60 : } // namespace evolution::dg