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
|