SpECTRE Documentation Coverage Report
Current view: top level - Time - TimeStepRequest.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 10.0 % 10 1
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <optional>
       7              : 
       8              : /// \cond
       9              : namespace PUP {
      10              : class er;
      11              : }  // namespace PUP
      12              : /// \endcond
      13              : 
      14              : /// Information on a requested time-step size returned by `StepChooser`s.
      15              : ///
      16              : /// Requests made using this struct control most of the changing of
      17              : /// slab and local-time-stepping step sizes.  Slab-size changing is
      18              : /// more complex, as it is controlled using the `ChangeSlabSize`
      19              : /// event, which may run zero or more times per slab, and may have the
      20              : /// application of its result delayed.  The step size for LTS is
      21              : /// adjusted using a constant list of `StepChoosers` on every step.
      22              : ///
      23              : /// For slab-size adjustment (including the global time step when not
      24              : /// using LTS), a "goal" step size is maintained from step to step.
      25              : /// It is initially the initial slab size from the input file, and can
      26              : /// be adjusted by any request setting the `size_goal` field of this
      27              : /// struct.  If multiple requests set new goals at the same time, the
      28              : /// smallest value is used.  At the start of each slab, the size is
      29              : /// chosen to be the smallest of the current goal and the temporary
      30              : /// limits imposed by any requests processed at that time.  For the
      31              : /// LTS step size, the current step size is used as the goal if no
      32              : /// request sets a new one.
      33              : ///
      34              : /// Any request with either the `size` or `end` fields set introduces
      35              : /// a temporary step size limit.  If only one of the two is set, the
      36              : /// chosen step size will be limited to be not larger than `*size`, or
      37              : /// not go beyond the time `*end`.  If both are set, the tighter limit
      38              : /// may be ignored if the looser limit is chosen as the actual step,
      39              : /// but the step will not be chosen to be intermediate between two
      40              : /// temporary limits from the same request object.
      41              : ///
      42              : /// The hard limits are not used in setting the step size, but if the
      43              : /// actual step does not satisfy all hard limits from all requests the
      44              : /// evolution will be terminated with an error.
      45              : ///
      46              : /// \note All step sizes are subject to roundoff error in either
      47              : /// direction except for two cases:
      48              : /// * Slab sizes imposed by the `end` limit of a request will always
      49              : ///   end precisely at the requested time.
      50              : /// * LTS step sizes within a single slab will always be considered to
      51              : ///   have size ratios that are exactly powers of two for the purposes
      52              : ///   of the `size_goal` and `size` limits.
      53            1 : struct TimeStepRequest {
      54            0 :   std::optional<double> size_goal{};
      55              : 
      56            0 :   std::optional<double> size{};
      57            0 :   std::optional<double> end{};
      58              : 
      59            0 :   std::optional<double> size_hard_limit{};
      60            0 :   std::optional<double> end_hard_limit{};
      61              : 
      62            0 :   void pup(PUP::er& p);
      63              : };
      64              : 
      65            0 : bool operator==(const TimeStepRequest& a, const TimeStepRequest& b);
      66            0 : bool operator!=(const TimeStepRequest& a, const TimeStepRequest& b);
        

Generated by: LCOV version 2.0-1