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 <cstddef> 8 : #include <pup.h> 9 : 10 : #include "NumericalAlgorithms/Strahlkorper/InitialShape.hpp" 11 : #include "NumericalAlgorithms/Strahlkorper/Strahlkorper.hpp" 12 : #include "Options/Context.hpp" 13 : #include "Options/String.hpp" 14 : #include "Utilities/Serialization/CharmPupable.hpp" 15 : #include "Utilities/TMPL.hpp" 16 : 17 0 : namespace ah::InitialShapes { 18 : /*! 19 : * \ingroup SurfacesGroup 20 : * \brief An initial shape for a Strahlkorper corersponding to a Kerr-Schild 21 : * black hole. 22 : */ 23 : template <typename Frame> 24 1 : class KerrSchild : public ylm::InitialShape<Frame> { 25 : public: 26 0 : struct Center { 27 0 : using type = std::array<double, 3>; 28 0 : static constexpr Options::String help = { 29 : "Center of the Strahlkorper expansion"}; 30 : }; 31 0 : struct Mass { 32 0 : using type = double; 33 0 : static constexpr Options::String help = {"Mass of the black hole"}; 34 : }; 35 0 : struct Spin { 36 0 : using type = std::array<double, 3>; 37 0 : static constexpr Options::String help = {"Dimensionless spin vector"}; 38 : }; 39 : 40 0 : using options = tmpl::list<Center, Mass, Spin>; 41 0 : static constexpr Options::String help = { 42 : "Construct a Kerr-Schild horizon for the given mass and dimensionless " 43 : "spin vector."}; 44 0 : static std::string name() { return "KerrSchild"; } 45 : 46 0 : KerrSchild() = default; 47 0 : KerrSchild(std::array<double, 3> center, double mass, 48 : std::array<double, 3> spin); 49 : 50 : /// \cond 51 : explicit KerrSchild(CkMigrateMessage* msg); 52 : using PUP::able::register_constructor; 53 : WRAPPED_PUPable_decl_template(KerrSchild); // NOLINT 54 : /// \endcond 55 : 56 1 : ylm::Strahlkorper<Frame> strahlkorper( 57 : size_t l_max, const Options::Context& context) const override; 58 : 59 0 : void pup(PUP::er& p) override; 60 : 61 : private: 62 0 : std::array<double, 3> center_{}; 63 0 : double mass_{}; 64 0 : std::array<double, 3> spin_{}; 65 : }; 66 : } // namespace ah::InitialShapes