Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "DataStructures/DataBox/PrefixHelpers.hpp" 7 : #include "DataStructures/DataBox/Prefixes.hpp" 8 : #include "Utilities/TMPL.hpp" 9 : #include "Utilities/TypeTraits/IsA.hpp" 10 : 11 : /// \cond 12 : class TimeStepId; 13 : namespace Tags { 14 : template <typename Tag> 15 : struct HistoryEvolvedVariables; 16 : struct TimeStepId; 17 : } // namespace Tags 18 : namespace TimeSteppers { 19 : template <typename Vars> 20 : class History; 21 : } // namespace TimeSteppers 22 : namespace gsl { 23 : template <class T> 24 : class not_null; 25 : } // namespace gsl 26 : /// \endcond 27 : 28 : /// \ingroup TimeGroup 29 : /// Records the variables and their time derivatives in the time stepper 30 : /// history. 31 : /// @{ 32 : template <typename System, 33 : typename = tmpl::conditional_t< 34 : tt::is_a_v<tmpl::list, typename System::variables_tag>, 35 : typename System::variables_tag, 36 : tmpl::list<typename System::variables_tag>>> 37 1 : struct RecordTimeStepperData; 38 : 39 : template <typename System, typename... VariablesTags> 40 0 : struct RecordTimeStepperData<System, tmpl::list<VariablesTags...>> { 41 0 : using return_tags = 42 : tmpl::list<Tags::HistoryEvolvedVariables<VariablesTags>...>; 43 0 : using argument_tags = 44 : tmpl::list<Tags::TimeStepId, VariablesTags..., 45 : db::add_tag_prefix<Tags::dt, VariablesTags>...>; 46 : 47 0 : static void apply( 48 : const gsl::not_null< 49 : TimeSteppers::History<typename VariablesTags::type>*>... histories, 50 : const TimeStepId& time_step_id, 51 : const typename VariablesTags::type&... vars, 52 : const typename db::add_tag_prefix<Tags::dt, 53 : VariablesTags>::type&... dt_vars); 54 : }; 55 : /// @}