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 : /// @}
|