Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <limits> 7 : #include <pup.h> 8 : 9 : #include "Evolution/Systems/CurvedScalarWave/Worldtube/Tags.hpp" 10 : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp" 11 : #include "Utilities/Serialization/CharmPupable.hpp" 12 : 13 1 : namespace Triggers { 14 : 15 : /*! 16 : * \brief This trigger is true when the worldtube is entirely within a 17 : * coordinate sphere of radius 1.99 M centered on the origin in the inertial 18 : * frame. This assumes a black hole mass of 1M. 19 : */ 20 1 : class InsideHorizon : public Trigger { 21 : public: 22 : /// \cond 23 : InsideHorizon() = default; 24 : explicit InsideHorizon(CkMigrateMessage* /*unused*/) {} 25 : using PUP::able::register_constructor; 26 : WRAPPED_PUPable_decl_template(InsideHorizon); // NOLINT 27 : /// \endcond 28 : 29 0 : static constexpr Options::String help = 30 : "Triggers if the worldtube is entirely inside a coordinate sphere with " 31 : "radius 1.99 M centered on the origin in the inertial frame."; 32 0 : static constexpr size_t Dim = 3; 33 0 : using options = tmpl::list<>; 34 0 : using argument_tags = tmpl::list< 35 : CurvedScalarWave::Worldtube::Tags::ParticlePositionVelocity<Dim>, 36 : CurvedScalarWave::Worldtube::Tags::WorldtubeRadiusParameters>; 37 : 38 0 : bool operator()(const std::array<tnsr::I<double, Dim, Frame::Inertial>, 2>& 39 : position_and_velocity, 40 : const std::array<double, 4>& worldtube_radius_params) const; 41 : 42 : // NOLINTNEXTLINE(google-runtime-references) 43 0 : void pup(PUP::er& /*p*/) override {} 44 : }; 45 : } // namespace Triggers