SpECTRE Documentation Coverage Report
Current view: top level - Time/TimeSteppers - ImexRungeKutta.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 50.0 % 8 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 <vector>
       7              : 
       8              : #include "Time/TimeSteppers/ImexTimeStepper.hpp"
       9              : #include "Time/TimeSteppers/RungeKutta.hpp"
      10              : #include "Utilities/Gsl.hpp"
      11              : 
      12              : /// \cond
      13              : class TimeDelta;
      14              : namespace TimeSteppers {
      15              : template <typename T>
      16              : class ConstUntypedHistory;
      17              : }  // namespace TimeSteppers
      18              : /// \endcond
      19              : 
      20              : namespace TimeSteppers {
      21              : /*!
      22              :  * \ingroup TimeSteppersGroup
      23              :  * Intermediate base class implementing a generic IMEX Runge-Kutta
      24              :  * scheme.
      25              :  *
      26              :  * Implements most of the virtual methods of ImexTimeStepper for a
      27              :  * generic Runge-Kutta method.  Derived classes must implement the
      28              :  * requirements of the `RungeKutta` base class, as well as
      29              :  * `imex_order()`, `implicit_stage_order()`, and
      30              :  * `implicit_butcher_tableau()`.
      31              :  */
      32            1 : class ImexRungeKutta : public virtual RungeKutta,
      33              :                        public virtual ImexTimeStepper {
      34              :  public:
      35              :   /// Implicit part of the Butcher tableau.  Most parts of the tableau
      36              :   /// must be the same as the explicit part, and so are omitted.
      37            1 :   struct ImplicitButcherTableau {
      38              :     /*!
      39              :      * The coefficient matrix of the substeps.  We can only reasonably
      40              :      * support EDIRK methods (including special cases such as ESDIRK
      41              :      * and QESDIRK, see \cite Kennedy2016), so the tableau must be
      42              :      * lower-triangular with an empty first row.  As with the explicit
      43              :      * tableau, the initial blank row should be omitted.  For a
      44              :      * stiffly-accurate method, the final row must be the same as the
      45              :      * result coefficients in the explicit tableau.
      46              :      *
      47              :      * More general DIRK methods can be implemented inefficiently by
      48              :      * adding an unused initial substep to convert them to EDIRK form.
      49              :      */
      50            1 :     std::vector<std::vector<double>> substep_coefficients;
      51              :   };
      52              : 
      53              :   /*!
      54              :    * Smallest order of the intermediate result at any substep.  For
      55              :    * the methods supported by this class, this cannot exceed 2.
      56              :    */
      57            1 :   virtual size_t implicit_stage_order() const = 0;
      58              : 
      59            0 :   virtual const ImplicitButcherTableau& implicit_butcher_tableau() const = 0;
      60              : 
      61              :  private:
      62              :   template <typename T>
      63            0 :   void add_inhomogeneous_implicit_terms_impl(
      64              :       gsl::not_null<T*> u, const ConstUntypedHistory<T>& implicit_history,
      65              :       const TimeDelta& time_step) const;
      66              : 
      67              :   template <typename T>
      68            0 :   double implicit_weight_impl(const ConstUntypedHistory<T>& implicit_history,
      69              :                               const TimeDelta& time_step) const;
      70              : 
      71              :   IMEX_TIME_STEPPER_DECLARE_OVERLOADS
      72              : };
      73              : }  // namespace TimeSteppers
        

Generated by: LCOV version 2.0-1