SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/CurvedScalarWave/Worldtube/Triggers - OrbitRadius.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 1 12 8.3 %
Date: 2025-12-05 05:03:31
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 <pup.h>
       8             : #include <vector>
       9             : 
      10             : #include "DataStructures/Tensor/Tensor.hpp"
      11             : #include "Evolution/Systems/CurvedScalarWave/Worldtube/Tags.hpp"
      12             : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp"
      13             : #include "Time/Tags/TimeStep.hpp"
      14             : #include "Time/Time.hpp"
      15             : #include "Utilities/Serialization/CharmPupable.hpp"
      16             : 
      17             : namespace Triggers {
      18             : /*!
      19             :  * \brief This trigger returns true when the scalar charge is about to cross one
      20             :  * of the specified areal radii.
      21             :  *
      22             :  * \details As the domain is adjusted to track the position of the scalar
      23             :  * charge, the time step needs to be dynamically adjusted accordingly. This
      24             :  * trigger can be used to set the time step according to the radial position of
      25             :  * the scalar charge which gives a good approximation of when the time step
      26             :  * should be adjusted.
      27             :  * The trigger only approximates whether the particle might cross during the
      28             :  * next time step and may therefore fire twice.
      29             :  */
      30           1 : class OrbitRadius : public Trigger {
      31             :  public:
      32             :   /// \cond
      33             :   OrbitRadius() = default;
      34             :   explicit OrbitRadius(CkMigrateMessage* /*unused*/) {}
      35             :   using PUP::able::register_constructor;
      36             :   WRAPPED_PUPable_decl_template(OrbitRadius);  // NOLINT
      37             :   /// \endcond
      38             : 
      39           0 :   struct Radii {
      40           0 :     using type = std::vector<double>;
      41           0 :     static constexpr Options::String help =
      42             :         "The orbital radii which should trigger when crossed by the "
      43             :         "scalar charge.";
      44             :   };
      45             : 
      46           0 :   static constexpr Options::String help =
      47             :       "Trigger that fires when the scalar charge crosses specified radii.";
      48           0 :   using options = tmpl::list<Radii>;
      49             : 
      50           0 :   explicit OrbitRadius(const std::vector<double>& radii);
      51             : 
      52           0 :   using argument_tags =
      53             :       tmpl::list<CurvedScalarWave::Worldtube::Tags::ParticlePositionVelocity<3>,
      54             :                  Tags::TimeStep>;
      55             : 
      56           0 :   bool operator()(
      57             :       const std::array<tnsr::I<double, 3>, 2>& position_and_velocity,
      58             :       const TimeDelta& time_step) const;
      59             : 
      60             :   // NOLINTNEXTLINE(google-runtime-references)
      61           0 :   void pup(PUP::er& p) override;
      62             : 
      63             :  private:
      64           0 :   std::vector<double> radii_{};
      65             : };
      66             : }  // namespace Triggers

Generated by: LCOV version 1.14