Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstdint> 7 : 8 : #include "Utilities/TMPL.hpp" 9 : 10 : /// \cond 11 : class AdaptiveSteppingDiagnostics; 12 : class TimeDelta; 13 : class TimeStepId; 14 : class TimeStepper; 15 : namespace Tags { 16 : struct AdaptiveSteppingDiagnostics; 17 : template <typename Tag> 18 : struct Next; 19 : struct StepperErrorEstimatesEnabled; 20 : struct StepNumberWithinSlab; 21 : struct Time; 22 : struct TimeStep; 23 : struct TimeStepId; 24 : template <typename StepperInterface> 25 : struct TimeStepper; 26 : } // namespace Tags 27 : namespace gsl { 28 : template <class T> 29 : class not_null; 30 : } // namespace gsl 31 : /// \endcond 32 : 33 : /// \ingroup TimeGroup 34 : /// \brief Advance time one substep 35 : /// 36 : /// Replaces the time state with the `Tags::Next` values, advances the 37 : /// `Tags::Next` values, and sets `Tags::Time` to the new substep time. 38 1 : struct AdvanceTime { 39 0 : using return_tags = 40 : tmpl::list<Tags::TimeStepId, Tags::Next<Tags::TimeStepId>, Tags::TimeStep, 41 : Tags::Time, Tags::StepNumberWithinSlab, 42 : Tags::AdaptiveSteppingDiagnostics>; 43 0 : using argument_tags = tmpl::list<Tags::TimeStepper<TimeStepper>, 44 : Tags::StepperErrorEstimatesEnabled>; 45 : 46 0 : static void apply(gsl::not_null<TimeStepId*> time_id, 47 : gsl::not_null<TimeStepId*> next_time_id, 48 : gsl::not_null<TimeDelta*> time_step, 49 : gsl::not_null<double*> time, 50 : gsl::not_null<uint64_t*> step_number_within_slab, 51 : gsl::not_null<AdaptiveSteppingDiagnostics*> diags, 52 : const TimeStepper& time_stepper, bool using_error_control); 53 : };