SpECTRE Documentation Coverage Report
Current view: top level - Time/TimeSteppers - DormandPrince5.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 4 17 23.5 %
Date: 2025-12-05 05:03:31
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 1.14