SpECTRE Documentation Coverage Report
Current view: top level - Time/TimeSteppers - DormandPrince5.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            1 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : /// \file
       5              : /// Defines class DormandPrince5.
       6              : 
       7              : #pragma once
       8              : 
       9              : #include <cstddef>
      10              : 
      11              : #include "DataStructures/TaggedVariant.hpp"
      12              : #include "Options/String.hpp"
      13              : #include "Time/TimeSteppers/RungeKutta.hpp"
      14              : #include "Utilities/Serialization/CharmPupable.hpp"
      15              : #include "Utilities/TMPL.hpp"
      16              : 
      17              : namespace TimeSteppers {
      18              : 
      19              : /*!
      20              :  * \ingroup TimeSteppersGroup
      21              :  *
      22              :  * The standard 5th-order Dormand-Prince time stepping method, given e.g. in
      23              :  * Sec. 17.2 of \cite NumericalRecipes.
      24              :  *
      25              :  * \f{eqnarray}{
      26              :  * \frac{du}{dt} & = & \mathcal{L}(t,u).
      27              :  * \f}
      28              :  * Given a solution \f$u(t^n)=u^n\f$, this stepper computes
      29              :  * \f$u(t^{n+1})=u^{n+1}\f$ using the following equations:
      30              :  *
      31              :  * \f{align}{
      32              :  * k^{(1)} & = dt \mathcal{L}(t^n, u^n),\\
      33              :  * k^{(i)} & = dt \mathcal{L}(t^n + c_i dt,
      34              :  *                              u^n + \sum_{j=1}^{i-1} a_{ij} k^{(j)}),
      35              :  *                              \mbox{ } 2 \leq i \leq 6,\\
      36              :  * u^{n+1} & = u^n + \sum_{i=1}^{6} b_i k^{(i)}.
      37              :  * \f}
      38              :  *
      39              :  * Here the coefficients \f$a_{ij}\f$, \f$b_i\f$, and \f$c_i\f$ are given
      40              :  * in e.g. Sec. 17.2 of \cite NumericalRecipes. Note that \f$c_1 = 0\f$.
      41              :  *
      42              :  * The CFL factor/stable step size is 1.6532839463174733.
      43              :  */
      44            1 : class DormandPrince5 : public RungeKutta {
      45              :  public:
      46            0 :   using options = tmpl::list<>;
      47            0 :   static constexpr Options::String help = {
      48              :       "The standard Dormand-Prince 5th-order time stepper."};
      49              : 
      50            0 :   DormandPrince5() = default;
      51            0 :   DormandPrince5(const DormandPrince5&) = default;
      52            0 :   DormandPrince5& operator=(const DormandPrince5&) = default;
      53            0 :   DormandPrince5(DormandPrince5&&) = default;
      54            0 :   DormandPrince5& operator=(DormandPrince5&&) = default;
      55            0 :   ~DormandPrince5() override = default;
      56              : 
      57            1 :   variants::TaggedVariant<Tags::FixedOrder, Tags::VariableOrder> order()
      58              :       const override;
      59              : 
      60            1 :   double stable_step() const override;
      61              : 
      62            0 :   WRAPPED_PUPable_decl_template(DormandPrince5);  // NOLINT
      63              : 
      64            0 :   explicit DormandPrince5(CkMigrateMessage* /*unused*/) {}
      65              : 
      66            0 :   const ButcherTableau& butcher_tableau() const override;
      67              : };
      68              : 
      69            0 : inline bool constexpr operator==(const DormandPrince5& /*lhs*/,
      70              :                                  const DormandPrince5& /*rhs*/) {
      71              :   return true;
      72              : }
      73              : 
      74            0 : inline bool constexpr operator!=(const DormandPrince5& /*lhs*/,
      75              :                                  const DormandPrince5& /*rhs*/) {
      76              :   return false;
      77              : }
      78              : }  // namespace TimeSteppers
        

Generated by: LCOV version 2.0-1