SpECTRE Documentation Coverage Report
Current view: top level - Domain/FunctionsOfTime - FixedSpeedCubic.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 33.3 % 30 10
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 <array>
       7              : #include <cmath>
       8              : #include <cstddef>
       9              : #include <limits>
      10              : #include <memory>
      11              : #include <ostream>
      12              : #include <pup.h>
      13              : 
      14              : #include "DataStructures/DataVector.hpp"
      15              : #include "Domain/FunctionsOfTime/FunctionOfTime.hpp"
      16              : #include "Utilities/Serialization/CharmPupable.hpp"
      17              : 
      18              : namespace domain {
      19            1 : namespace FunctionsOfTime {
      20              : /*!
      21              :  * \ingroup ControlSystemGroup
      22              :  * \brief Sets \f$f(t)\f$ and derivatives using cubic rational functions,
      23              :  * such that the first derivative approaches a constant and the second
      24              :  * derivative approaches zero.
      25              :  *
      26              :  * The resultant function of time is
      27              :  *
      28              :  * \f{align*}{
      29              :  *   f(t) &= f_0 + \frac{v(t-t_0)^3}{\tau^2+(t-t_0)^2},
      30              :  * \f}
      31              :  *
      32              :  * where \f$f_0\f$ is the value of the function \f$f\f$ at the initial time
      33              :  * \f$t_0\f$, and \f$v\f$ is the velocity that \f$f^\prime(t)\f$ approaches on a
      34              :  * timescale of \f$\tau\f$.
      35              :  */
      36            1 : class FixedSpeedCubic : public FunctionOfTime {
      37              :  public:
      38            0 :   FixedSpeedCubic() = default;
      39            0 :   FixedSpeedCubic(double initial_function_value, double initial_time,
      40              :                   double velocity, double decay_timescale);
      41              : 
      42            0 :   ~FixedSpeedCubic() override = default;
      43            0 :   FixedSpeedCubic(FixedSpeedCubic&&) = default;
      44            0 :   FixedSpeedCubic& operator=(FixedSpeedCubic&&) = default;
      45            0 :   FixedSpeedCubic(const FixedSpeedCubic&) = default;
      46            0 :   FixedSpeedCubic& operator=(const FixedSpeedCubic&) = default;
      47              : 
      48              :   // NOLINTNEXTLINE(google-runtime-references)
      49            0 :   WRAPPED_PUPable_decl_template(FixedSpeedCubic);
      50              : 
      51            0 :   explicit FixedSpeedCubic(CkMigrateMessage* /*unused*/) {}
      52              : 
      53            0 :   auto get_clone() const -> std::unique_ptr<FunctionOfTime> override;
      54              : 
      55              :   /// Returns the function at an arbitrary time `t`.
      56            1 :   std::array<DataVector, 1> func(double t) const override;
      57              :   /// Returns the function and its first derivative at an arbitrary time `t`.
      58            1 :   std::array<DataVector, 2> func_and_deriv(double t) const override;
      59              :   /// Returns the function and the first two derivatives at an arbitrary time
      60              :   /// `t`.
      61            1 :   std::array<DataVector, 3> func_and_2_derivs(double t) const override;
      62              : 
      63              :   /// Returns the domain of validity of the function.
      64            1 :   std::array<double, 2> time_bounds() const override;
      65              : 
      66            1 :   double expiration_after(double time) const override;
      67              : 
      68            1 :   void truncate_at_time(double time) override;
      69              : 
      70              :   /// Returns the velocity that the function approaches
      71            1 :   double velocity() const;
      72              : 
      73              :   /// Returns the timescale at which the function approaches a constant
      74              :   /// velocity.
      75            1 :   double decay_timescale() const;
      76              : 
      77              :   // NOLINTNEXTLINE(google-runtime-references)
      78            0 :   void pup(PUP::er& p) override;
      79              : 
      80              :  private:
      81            0 :   friend bool operator==(const FixedSpeedCubic& lhs,
      82              :                          const FixedSpeedCubic& rhs);
      83              : 
      84            0 :   friend std::ostream& operator<<(  // NOLINT(readability-redundant-declaration
      85              :       std::ostream& os, const FixedSpeedCubic& fixed_speed_cubic);
      86              : 
      87              :   template <size_t MaxDerivReturned = 2>
      88            0 :   std::array<DataVector, MaxDerivReturned + 1> func_and_derivs(double t) const;
      89              : 
      90            0 :   double initial_function_value_{std::numeric_limits<double>::signaling_NaN()};
      91            0 :   double initial_time_{std::numeric_limits<double>::signaling_NaN()};
      92            0 :   double velocity_{std::numeric_limits<double>::signaling_NaN()};
      93            0 :   double squared_decay_timescale_{std::numeric_limits<double>::signaling_NaN()};
      94              : };
      95              : 
      96            0 : bool operator!=(const FixedSpeedCubic& lhs, const FixedSpeedCubic& rhs);
      97              : }  // namespace FunctionsOfTime
      98              : }  // namespace domain
        

Generated by: LCOV version 2.0-1