Classes | Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
Cce::Solutions::TeukolskyWave Struct Reference

Computes the analytic data for a Teukolsky wave solution described in [7]. More...

#include <TeukolskyWave.hpp>

Classes

struct  Amplitude
 
struct  Duration
 
struct  ExtractionRadius
 

Public Types

using options = tmpl::list< ExtractionRadius, Amplitude, Duration >
 
- Public Types inherited from Cce::Solutions::WorldtubeData
using creatable_classes = tmpl::list< BouncingBlackHole, GaugeWave, LinearizedBondiSachs, RobinsonTrautman, RotatingSchwarzschild, TeukolskyWave >
 
using tags = tmpl::list< Tags::CauchyCartesianCoords, Tags::Dr< Tags::CauchyCartesianCoords >, gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >, ::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector > >, GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >, GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >, gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >, ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector > >, Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector > >, gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >, ::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector > >, Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector > >, gr::Tags::Lapse< DataVector >, ::Tags::dt< gr::Tags::Lapse< DataVector > >, Tags::Dr< gr::Tags::Lapse< DataVector > >, Tags::News >
 The set of available tags provided by the analytic solution.
 

Public Member Functions

 WRAPPED_PUPable_decl_template (TeukolskyWave)
 
 TeukolskyWave (CkMigrateMessage *msg) noexcept
 
 TeukolskyWave (double extraction_radius, double amplitude, double duration) noexcept
 
std::unique_ptr< WorldtubeDataget_clone () const noexcept override
 
void pup (PUP::er &p) noexcept override
 
- Public Member Functions inherited from Cce::Solutions::SphericalMetricData
 WRAPPED_PUPable_abstract (SphericalMetricData)
 
 SphericalMetricData (CkMigrateMessage *msg) noexcept
 
 SphericalMetricData (const double extraction_radius) noexcept
 
void jacobian (gsl::not_null< SphericaliCartesianJ * > jacobian, size_t l_max) const noexcept
 
void inverse_jacobian (gsl::not_null< CartesianiSphericalJ * > inverse_jacobian, size_t l_max) const noexcept
 
void dr_inverse_jacobian (gsl::not_null< CartesianiSphericalJ * > dr_inverse_jacobian, size_t l_max) const noexcept
 
void pup (PUP::er &p) noexcept override
 
- Public Member Functions inherited from Cce::Solutions::WorldtubeData
 WRAPPED_PUPable_abstract (WorldtubeData)
 
 WorldtubeData (const double extraction_radius) noexcept
 
 WorldtubeData (CkMigrateMessage *msg) noexcept
 
template<typename... Tags>
tuples::TaggedTuple< Tags... > variables (const size_t output_l_max, const double time, tmpl::list< Tags... >) const noexcept
 Retrieve worldtube data represented by the analytic solution, at boundary angular resolution l_max and time time More...
 
void pup (PUP::er &p) noexcept override
 
virtual std::unique_ptr< Cce::InitializeJ::InitializeJget_initialize_j (const double) const noexcept
 
virtual bool use_noninertial_news () const noexcept
 

Static Public Attributes

static constexpr Options::String help
 

Protected Member Functions

void prepare_solution (const size_t, const double) const noexcept override
 A no-op as the Teukolsky wave solution does not have substantial shared computation to prepare before the separate component calculations.
 
void spherical_metric (gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > spherical_metric, size_t l_max, double time) const noexcept override
 Compute the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric. More...
 
void dr_spherical_metric (gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > dr_spherical_metric, size_t l_max, double time) const noexcept override
 Compute the radial derivative of the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric. More...
 
void dt_spherical_metric (gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > dt_spherical_metric, size_t l_max, double time) const noexcept override
 Compute the time derivative of the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric. More...
 
void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * > news, size_t l_max, double time, tmpl::type_< Tags::News >) const noexcept override
 Compute the news associated with the (2,0)-mode Teukolsky wave. More...
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::CauchyCartesianCoords >) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > dr_cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::Dr< Tags::CauchyCartesianCoords >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > dt_spacetime_metric, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > spatial_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_spatial_metric, size_t output_l_max, double time, tmpl::type_< ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dr_spatial_metric, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dt_shift, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dr_shift, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dt_lapse, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dr_lapse, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const noexcept=0
 
void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept override
 Computes the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > dt_spacetime_metric, size_t l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept override
 Computes the time derivative of the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >>) const noexcept override
 Computes the spatial derivatives of the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::CauchyCartesianCoords >) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > dr_cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::Dr< Tags::CauchyCartesianCoords >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > dt_spacetime_metric, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > spatial_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_spatial_metric, size_t output_l_max, double time, tmpl::type_< ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dr_spatial_metric, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dt_shift, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dr_shift, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dt_lapse, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dr_lapse, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const noexcept=0
 
- Protected Member Functions inherited from Cce::Solutions::SphericalMetricData
void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept override
 Computes the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > dt_spacetime_metric, size_t l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept override
 Computes the time derivative of the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >>) const noexcept override
 Computes the spatial derivatives of the Cartesian spacetime metric from the spherical solution provided by the derived classes. More...
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::CauchyCartesianCoords >) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > dr_cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::Dr< Tags::CauchyCartesianCoords >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > dt_spacetime_metric, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >>) const noexcept=0
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > spatial_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_spatial_metric, size_t output_l_max, double time, tmpl::type_< ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dr_spatial_metric, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dt_shift, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dr_shift, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dt_lapse, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dr_lapse, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const noexcept=0
 
- Protected Member Functions inherited from Cce::Solutions::WorldtubeData
template<typename Tag >
const auto & cache_or_compute (const size_t output_l_max, const double time) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::CauchyCartesianCoords >) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::i< DataVector, 3 > * > dr_cartesian_coordinates, size_t output_l_max, double time, tmpl::type_< Tags::Dr< Tags::CauchyCartesianCoords >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > spatial_metric, size_t output_l_max, double time, tmpl::type_< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_spatial_metric, size_t output_l_max, double time, tmpl::type_< ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::ii< DataVector, 3 > * > dr_spatial_metric, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dt_shift, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > dr_shift, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector >>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dt_lapse, size_t output_l_max, double time, tmpl::type_<::Tags::dt< gr::Tags::Lapse< DataVector >>>) const noexcept
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > dr_lapse, size_t output_l_max, double time, tmpl::type_< Tags::Dr< gr::Tags::Lapse< DataVector >>>) const noexcept
 

Protected Attributes

double amplitude_ = std::numeric_limits<double>::signaling_NaN()
 
double duration_ = std::numeric_limits<double>::signaling_NaN()
 
- Protected Attributes inherited from Cce::Solutions::WorldtubeData
IntermediateCacheTuple intermediate_cache_
 
double extraction_radius_ = std::numeric_limits<double>::quiet_NaN()
 

Additional Inherited Members

- Static Public Member Functions inherited from Cce::Solutions::SphericalMetricData
static void dr_jacobian (gsl::not_null< SphericaliCartesianJ * > dr_jacobian, size_t l_max) noexcept
 
- Protected Types inherited from Cce::Solutions::WorldtubeData
using IntermediateCacheTuple = tuples::tagged_tuple_from_typelist< tmpl::transform< tmpl::list< Tags::CauchyCartesianCoords, Tags::Dr< Tags::CauchyCartesianCoords >, gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >, GeneralizedHarmonic::Tags::Pi< 3, ::Frame::Inertial >, GeneralizedHarmonic::Tags::Phi< 3, ::Frame::Inertial >, gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector >, gr::Tags::Shift< 3, ::Frame::Inertial, DataVector >, gr::Tags::Lapse< DataVector >, ::Tags::dt< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector > >, ::Tags::dt< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector > >, ::Tags::dt< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector > >, ::Tags::dt< gr::Tags::Lapse< DataVector > >, Tags::Dr< gr::Tags::SpatialMetric< 3, ::Frame::Inertial, DataVector > >, Tags::Dr< gr::Tags::Shift< 3, ::Frame::Inertial, DataVector > >, Tags::Dr< gr::Tags::Lapse< DataVector > >, Tags::News >, tmpl::bind< IntermediateCacheTag, tmpl::_1 > >>
 

Detailed Description

Computes the analytic data for a Teukolsky wave solution described in [7].

Details

This test computes an outgoing perturbative wave solution in spherical coordinates with wave profile

\[ F(u) = A e^{- u^2 / k^2}. \]

Member Function Documentation

◆ dr_spherical_metric()

void Cce::Solutions::TeukolskyWave::dr_spherical_metric ( gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * >  dr_spherical_metric,
size_t  l_max,
double  time 
) const
overrideprotectedvirtualnoexcept

Compute the radial derivative of the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric.

Details

The specific outgoing wave selected in this analytic solution is constructed from a (2,0) mode as in [7], and takes the form

\begin{align*} \partial_r g_{rr} &= f_{r r} \partial_r A \\ \partial_r g_{r \theta} &= f_{r \theta} (B + r \partial_r B)\\ \partial_r g_{\theta \theta} &= 2 (1 + C f_{\theta \theta}^{(C)} + A f_{\theta \theta}^{(A)}) r + (\partial_r C f_{\theta \theta}^{(C)} + \partial_r A f_{\theta \theta}^{(A)}) r^2 \\ \partial_r g_{\phi \phi} &= 2 (1 + C f_{\phi \phi}^{(C)} + A f_{\phi \phi}^{(A)}) r \sin^2 \theta + (\partial_r C f_{\phi \phi}^{(C)} + \partial_r A f_{\phi \phi}^{(A)}) r^2 \sin^2 \theta\\ \end{align*}

and all other components vanish. The angular factors \(f_{a b}\) and the metric component functions \(A, B,\) and \(C\) are defined as in TeukolskyWave::spherical_metric(). The radial derivatives of the pulse profile functions are obtained by:

\begin{align*} \partial_r A + \partial_t A &= \frac{-9 a e^{-u^2/k^2}}{k^4 r^6} \left( 5 k^4 + 4 r^2 u^2 - 2 k^2 r (r + 4 u)\right), \\ \partial_r B + \partial_t B &= \frac{2 a e^{-u^2/k^2}}{k^6 r^6} \left( 15 k^6 - 8 r^3 u^3 + 6 k^2 r^2 u (2 r + 3 u) - 3 k^4 r (3 r + 8 u)\right), \\ \partial_r C + \partial_t C &= \frac{-a e^{-u^2/k^2}}{4 k^8 r^6} \left( 105 k^8 + 16 k^4 u^4 - 16 k^2 r^3 u^2 (3 r + 2 u) - 6 k^6 r (9 r + 28 u) + 12 k^4 r^2 (r^2 + 4 r u + 9 u^2)\right), \end{align*}

and the time derivatives of the pulse profile functions are given in TeukolskyWave::dt_spherical_metric().

Note
The \(\phi\) components are returned in a form for which the \(\sin(\theta)\) factors are omitted, assuming that derivatives and Jacobians will be applied similarly omitting those factors (and therefore improving precision of the tensor expression). If you require the \(\sin(\theta)\) factors, be sure to put them in by hand in the calling code.

Implements Cce::Solutions::SphericalMetricData.

◆ dt_spherical_metric()

void Cce::Solutions::TeukolskyWave::dt_spherical_metric ( gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * >  dt_spherical_metric,
size_t  l_max,
double  time 
) const
overrideprotectedvirtualnoexcept

Compute the time derivative of the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric.

Details

The specific outgoing wave selected in this analytic solution is constructed from a (2,0) mode as in [7], and takes the form

\begin{align*} \partial_t g_{rr} &= f_{r r} \partial_t A \\ \partial_t g_{r \theta} &= f_{r \theta} r \partial_t B\\ \partial_t g_{\theta \theta} &= (\partial_t C f_{\theta \theta}^{(C)} + \partial_t A f_{\theta \theta}^{(A)}) r^2 \\ \partial_t g_{\phi \phi} &= (\partial_t C f_{\phi \phi}^{(C)} + \partial_t A f_{\phi \phi}^{(A)}) r^2 \sin^2 \theta\\ \end{align*}

and all other components vanish. The angular factors \(f_{a b}\) and the metric component functions \(A, B,\) and \(C\) are defined as in TeukolskyWave::spherical_metric(). The time derivatives of the pulse profile functions are:

\begin{align*} \partial_t A &= \frac{-2 u}{k^2} A + \frac{3 a e^{-u^2/k^2}}{k^4 r^5} \left( 8 r^2 u - 6 k^2 r \right), \\ \partial_t B &= \frac{-2 u}{k^2} B + \frac{2 a e^{-u^2/k^2}}{k^6 r^5} \left(12 r^3 u^2 - 6 k^2 r^2 (r + 2 u) + 6 k^4 r\right), \\ \partial_t C &= \frac{-2 u}{k^2} C + \frac{-a e^{-u^2/k^2}}{4 k^8 r^5} \left(64 k^4 u^3 - 16 k^2 r^3 u (6 r + 3 u) - 42 k^6 r + 12 k^4 r^2 (2 r + 6 u)\right), \end{align*}

Note
The \(\phi\) components are returned in a form for which the \(\sin(\theta)\) factors are omitted, assuming that derivatives and Jacobians will be applied similarly omitting those factors (and therefore improving precision of the tensor expression). If you require the \(\sin(\theta)\) factors, be sure to put them in by hand in the calling code.

Implements Cce::Solutions::SphericalMetricData.

◆ spherical_metric()

void Cce::Solutions::TeukolskyWave::spherical_metric ( gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * >  spherical_metric,
size_t  l_max,
double  time 
) const
overrideprotectedvirtualnoexcept

Compute the spherical coordinate metric from the closed-form perturbative Teukolsky wave metric.

Details

The specific outgoing wave selected in this analytic solution is constructed from a (2,0) mode as in [7], and takes the form

\begin{align*} g_{tt} &= -1\\ g_{rr} &= (1 + A f_{rr}) \\ g_{r \theta} &= 2 B f_{r \theta} r\\ g_{\theta \theta} &= (1 + C f_{\theta \theta}^{(C)} + A f_{\theta \theta}^{(A)}) r^2\\ g_{\phi \phi} &= (1 + C f_{\phi \phi}^{(C)} + A f_{\phi \phi}^{(A)}) r^2 \sin^2 \theta\\ \end{align*}

and all other components vanish. The angular factors generated by the choice of spin-weighted spherical harmonic are

\begin{align*} f_{rr} &= 2 - 3 \sin^2 \theta \\ f_{r \theta} &= -3 \sin \theta \cos \theta \\ f_{\theta \theta}^{(C)} &= 3 \sin^2 \theta \\ f_{\theta \theta}^{(A)} &= -1 \\ f_{\phi \phi}^{(C)} &= - 3 \sin^2 \theta \\ f_{\phi \phi}^{(A)} &= 3 \sin^2 \theta -1, \end{align*}

the radial and time dependent factors are

\begin{align*} A &= 3 \left(\frac{\partial_u^2 F(u)}{r^3} + \frac{3 \partial_u F(u)}{r^4} + \frac{3 F(u)}{r^5} \right),\\ B &= - \left(\frac{\partial_u^3 F(u)}{r^2} + \frac{3 \partial_u^2 F(u)}{r^3} + \frac{6 \partial_uF(u)}{r^4} + \frac{6 F(u)}{r^5}\right), \\ C &= \frac{1}{4} \left(\frac{\partial_u^4 F(u)}{r} + \frac{2 \partial_u^3 F(u)}{r^2} + \frac{9 \partial_u^2 F(u)}{r^3} + \frac{21 \partial_u F(u)}{r^4} + \frac{21 F(u)}{r}\right), \end{align*}

and the pulse profile is

\[ F(u) = a e^{-u^2 /k^2}. \]

So, the pulse profile factors expand to

\begin{align*} A &= \frac{3 a e^{-u^2/k^2}}{k^4 r^5} \left(3 k^4 + 4 r^2 u^2 - 2 k^2 r (r + 3 u)\right),\\ B &= \frac{2 a e^{-u^2/k^2}}{k^6 r^5} \left(-3 k^6 + 4 r^3 u^3 - 6 k^2 r^2 u (r + u) + 3 k^4 r (r + 2 u)\right), \\ C &= \frac{a e^{-u^2/k^2}}{4 k^8 r^5} \left(21 k^8 + 16 r^4 u^4 - 16 k^2 r^3 u^2 (3 r + u) - 6 k^6 r (3 r + 7 u) + 12 k^4 r^2 (r^2 + 2 r u + 3 u^2)\right), \end{align*}

Note
The \(\phi\) components are returned in a form for which the \(\sin(\theta)\) factors are omitted, assuming that derivatives and Jacobians will be applied similarly omitting those factors (and therefore improving precision of the tensor expression). If you require the \(\sin(\theta)\) factors, be sure to put them in by hand in the calling code.

Implements Cce::Solutions::SphericalMetricData.

◆ variables_impl() [1/4]

void Cce::Solutions::TeukolskyWave::variables_impl ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * >  news,
size_t  l_max,
double  time,
tmpl::type_< Tags::News  
) const
overrideprotectedvirtualnoexcept

Compute the news associated with the (2,0)-mode Teukolsky wave.

Details

The value of the news is

\begin{align*} N = \frac{3 \sin^2 \theta}{4} \partial_u^5 F(u) \end{align*}

where \(F(u)\) is the pulse profile, taken to be

\[ F(u) = a e^{-u^2 /k^2}, \]

So, the news expands to

\[ N = -\frac{6 a e^{-u^2/k^2} u}{k^{10}} \left(15 k^4 - 20 k^2 u^2 + 4 u^4\right) \]

in this analytic solution.

Implements Cce::Solutions::WorldtubeData.

◆ variables_impl() [2/4]

void Cce::Solutions::SphericalMetricData::variables_impl
overrideprotectednoexcept

Computes the time derivative of the Cartesian spacetime metric from the spherical solution provided by the derived classes.

Details

The derived classes provide the time derivative of the spherical metric data via the virtual function SphericalMetricData::dt_spherical_metric() at a resolution determined by the l_max argument. This function performs the coordinate transformation using the Jacobian computed from SphericalMetricData::inverse_jacobian().

◆ variables_impl() [3/4]

void Cce::Solutions::SphericalMetricData::variables_impl
overrideprotectednoexcept

Computes the Cartesian spacetime metric from the spherical solution provided by the derived classes.

Details

The derived classes provide spherical metric data via the virtual function SphericalMetricData::spherical_metric() at a resolution determined by the l_max argument. This function performs the coordinate transformation using the Jacobian computed from SphericalMetricData::inverse_jacobian().

◆ variables_impl() [4/4]

void Cce::Solutions::SphericalMetricData::variables_impl
overrideprotectednoexcept

Computes the spatial derivatives of the Cartesian spacetime metric from the spherical solution provided by the derived classes.

Details

The derived classes provide the radial derivative of the spherical metric data via the virtual function SphericalMetricData::dr_spherical_metric() at a resolution determined by the l_max_ argument. This function performs the additional angular derivatives necessary to assemble the full spatial derivative and performs the coordinate transformation to Cartesian coordinates via the Jacobians computed in SphericalMetricData::inverse_jacobian() and SphericalMetricData::inverse_jacobian().

Member Data Documentation

◆ help

constexpr Options::String Cce::Solutions::TeukolskyWave::help
staticconstexpr
Initial value:
{
"An analytic solution derived from the linearized Teukolsky equation"}

The documentation for this struct was generated from the following file: