SpECTRE Documentation Coverage Report
Current view: top level - Time/TimeSteppers - Rk4Owren.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 17.6 % 17 3
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 <cstddef>
       7              : 
       8              : #include "DataStructures/TaggedVariant.hpp"
       9              : #include "Options/String.hpp"
      10              : #include "Time/TimeSteppers/RungeKutta.hpp"
      11              : #include "Utilities/Serialization/CharmPupable.hpp"
      12              : #include "Utilities/TMPL.hpp"
      13              : 
      14              : namespace TimeSteppers {
      15              : /*!
      16              :  * \ingroup TimeSteppersGroup
      17              :  * \brief A fourth order continuous-extension RK method that provides 4th-order
      18              :  * dense output.
      19              :  *
      20              :  * \f{eqnarray}{
      21              :  * \frac{du}{dt} & = & \mathcal{L}(t,u).
      22              :  * \f}
      23              :  * Given a solution \f$u(t^n)=u^n\f$, this stepper computes
      24              :  * \f$u(t^{n+1})=u^{n+1}\f$ using the following equations:
      25              :  *
      26              :  * \f{align}{
      27              :  * k^{(i)} & = \mathcal{L}(t^n + c_i \Delta t,
      28              :  *                         u^n + \Delta t \sum_{j=1}^{i-1} a_{ij} k^{(j)}),
      29              :  *                              \mbox{ } 1 \leq i \leq s,\\
      30              :  * u^{n+1}(t^n + \theta \Delta t) & = u^n + \Delta t \sum_{i=1}^{s} b_i(\theta)
      31              :  * k^{(i)}. \f}
      32              :  *
      33              :  * Here the coefficients \f$a_{ij}\f$, \f$b_i\f$, and \f$c_i\f$ are given
      34              :  * in \cite Owren1992 and \cite Gassner20114232. Note that \f$c_1 = 0\f$,
      35              :  * \f$s\f$ is the number of stages, and \f$\theta\f$ is the fraction of the
      36              :  * step. This is an FSAL stepper.
      37              :  *
      38              :  * The CFL factor/stable step size is 1.4367588951002057.
      39              :  */
      40            1 : class Rk4Owren : public RungeKutta {
      41              :  public:
      42            0 :   using options = tmpl::list<>;
      43            0 :   static constexpr Options::String help = {
      44              :       "A 4th-order continuous extension Runge-Kutta time stepper."};
      45              : 
      46            0 :   Rk4Owren() = default;
      47            0 :   Rk4Owren(const Rk4Owren&) = default;
      48            0 :   Rk4Owren& operator=(const Rk4Owren&) = default;
      49            0 :   Rk4Owren(Rk4Owren&&) = default;
      50            0 :   Rk4Owren& operator=(Rk4Owren&&) = default;
      51            0 :   ~Rk4Owren() override = default;
      52              : 
      53            1 :   variants::TaggedVariant<Tags::FixedOrder, Tags::VariableOrder> order()
      54              :       const override;
      55              : 
      56            1 :   double stable_step() const override;
      57              : 
      58            0 :   WRAPPED_PUPable_decl_template(Rk4Owren);  // NOLINT
      59              : 
      60            0 :   explicit Rk4Owren(CkMigrateMessage* /*msg*/);
      61              : 
      62            0 :   const ButcherTableau& butcher_tableau() const override;
      63              : };
      64              : 
      65            0 : inline bool constexpr operator==(const Rk4Owren& /*lhs*/,
      66              :                                  const Rk4Owren& /*rhs*/) {
      67              :   return true;
      68              : }
      69              : 
      70            0 : inline bool constexpr operator!=(const Rk4Owren& /*lhs*/,
      71              :                                  const Rk4Owren& /*rhs*/) {
      72              :   return false;
      73              : }
      74              : }  // namespace TimeSteppers
        

Generated by: LCOV version 2.0-1