SpECTRE Documentation Coverage Report
Current view: top level - Time/StepChoosers - Cfl.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 23.5 % 17 4
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 <cmath>
       7              : #include <cstddef>
       8              : #include <limits>
       9              : #include <pup.h>
      10              : 
      11              : #include "DataStructures/DataBox/DataBox.hpp"
      12              : #include "Domain/MinimumGridSpacing.hpp"
      13              : #include "Options/String.hpp"
      14              : #include "Time/StepChoosers/StepChooser.hpp"
      15              : #include "Time/TimeStepRequest.hpp"
      16              : #include "Time/TimeSteppers/TimeStepper.hpp"
      17              : #include "Utilities/Serialization/CharmPupable.hpp"
      18              : #include "Utilities/TMPL.hpp"
      19              : 
      20              : /// \cond
      21              : namespace Tags {
      22              : template <typename StepperInterface>
      23              : struct TimeStepper;
      24              : }  // namespace Tags
      25              : namespace domain {
      26              : namespace Tags {
      27              : template <size_t Dim, typename Frame>
      28              : struct MinimumGridSpacing;
      29              : }  // namespace Tags
      30              : }  // namespace domain
      31              : 
      32              : /// \endcond
      33              : 
      34              : namespace StepChoosers {
      35              : /// Sets a goal based on the CFL stability criterion.
      36              : template <typename Frame, typename System>
      37            1 : class Cfl : public StepChooser<StepChooserUse::Slab>,
      38              :             public StepChooser<StepChooserUse::LtsStep> {
      39              :  public:
      40              :   /// \cond
      41              :   Cfl() = default;
      42              :   explicit Cfl(CkMigrateMessage* /*unused*/) {}
      43              :   using PUP::able::register_constructor;
      44              :   WRAPPED_PUPable_decl_template(Cfl);  // NOLINT
      45              :   /// \endcond
      46              : 
      47            0 :   struct SafetyFactor {
      48            0 :     using type = double;
      49            0 :     static constexpr Options::String help{"Multiplier for computed step"};
      50            0 :     static type lower_bound() { return 0.0; }
      51              :   };
      52              : 
      53            0 :   static constexpr Options::String help{
      54              :       "Sets a goal based on the CFL stability criterion."};
      55            0 :   using options = tmpl::list<SafetyFactor>;
      56              : 
      57            0 :   explicit Cfl(const double safety_factor) : safety_factor_(safety_factor) {}
      58              : 
      59            0 :   using argument_tags =
      60              :       tmpl::list<domain::Tags::MinimumGridSpacing<System::volume_dim, Frame>,
      61              :                  ::Tags::TimeStepper<TimeStepper>,
      62              :                  typename System::compute_largest_characteristic_speed::base>;
      63              : 
      64            0 :   using compute_tags = tmpl::list<
      65              :       domain::Tags::MinimumGridSpacingCompute<System::volume_dim, Frame>,
      66              :       typename System::compute_largest_characteristic_speed>;
      67              : 
      68            0 :   TimeStepRequest operator()(const double minimum_grid_spacing,
      69              :                              const TimeStepper& time_stepper,
      70              :                              const double speed, const double last_step) const {
      71              :     const double time_stepper_stability_factor = time_stepper.stable_step();
      72              :     const double step_size = safety_factor_ * time_stepper_stability_factor *
      73              :                              minimum_grid_spacing /
      74              :                              (speed * System::volume_dim);
      75              :     return {.size_goal = std::copysign(step_size, last_step)};
      76              :   }
      77              : 
      78            1 :   bool uses_local_data() const override { return true; }
      79            1 :   bool can_be_delayed() const override { return true; }
      80            1 :   bool must_set_step_size() const override { return false; }
      81              : 
      82              :   // NOLINTNEXTLINE(google-runtime-references)
      83            0 :   void pup(PUP::er& p) override {
      84              :     StepChooser<StepChooserUse::Slab>::pup(p);
      85              :     StepChooser<StepChooserUse::LtsStep>::pup(p);
      86              :     p | safety_factor_;
      87              :   }
      88              : 
      89              :  private:
      90            0 :   double safety_factor_ = std::numeric_limits<double>::signaling_NaN();
      91              : };
      92              : 
      93              : /// \cond
      94              : template <typename Frame, typename System>
      95              : PUP::able::PUP_ID Cfl<Frame, System>::my_PUP_ID = 0;  // NOLINT
      96              : /// \endcond
      97              : }  // namespace StepChoosers
        

Generated by: LCOV version 2.0-1