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

Computes the analytic data for a Linearized solution to the Bondi-Sachs equations described in [5]. More...

#include <LinearizedBondiSachs.hpp>

Classes

struct  ExtractionRadius
 
struct  Frequency
 
struct  InitialModes
 

Public Types

using options = tmpl::list< InitialModes, ExtractionRadius, Frequency >
 
- Public Types inherited from Cce::Solutions::WorldtubeData
using creatable_classes = tmpl::list< BouncingBlackHole, LinearizedBondiSachs >
 
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 (LinearizedBondiSachs)
 
 LinearizedBondiSachs (CkMigrateMessage *) noexcept
 
 LinearizedBondiSachs (const std::vector< std::complex< double >> &mode_constants, double extraction_radius, double frequency) 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 (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
 
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
 

Protected Member Functions

void prepare_solution (const size_t, const double) const noexcept override
 A no-op as the linearized solution does not have substantial shared computation to prepare before the separate component calculations.
 
void linearized_bondi_j (gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > bondi_j, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(J\). More...
 
void linearized_bondi_u (gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > bondi_u, size_t l_max, double time) const noexcept
 Compute the linearized solution for \(U\). More...
 
void linearized_bondi_w (gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > bondi_w, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(W\). More...
 
void linearized_dr_bondi_j (gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > dr_bondi_j, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(\partial_r J\). More...
 
void linearized_dr_bondi_u (gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > dr_bondi_u, size_t l_max, double time) const noexcept
 Compute the linearized solution for \(\partial_r U\). More...
 
void linearized_dr_bondi_w (gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > dr_bondi_w, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(\partial_r W\). More...
 
void linearized_du_bondi_j (gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > du_bondi_j, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(\partial_u J\). More...
 
void linearized_du_bondi_u (gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > du_bondi_u, size_t l_max, double time) const noexcept
 Compute the linearized solution for \(\partial_u U\). More...
 
void linearized_du_bondi_w (gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > du_bondi_w, size_t l_max, double time) const noexcept
 Computes the linearized solution for \(\partial_u W\). More...
 
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 linearized Bondi-Sachs system. 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 linearized Bondi-Sachs system. 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 linearized Bondi-Sachs system. 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
 Determines the News function from the linearized solution parameters. 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...
 
- 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

std::complex< double > c_2a_ = std::numeric_limits<double>::signaling_NaN()
 
std::complex< double > c_3a_ = std::numeric_limits<double>::signaling_NaN()
 
std::complex< double > c_2b_ = std::numeric_limits<double>::signaling_NaN()
 
std::complex< double > c_3b_ = std::numeric_limits<double>::signaling_NaN()
 
double frequency_ = 0.0
 
- 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 Linearized solution to the Bondi-Sachs equations described in [5].

Details

The solution represented by this function is generated with only \((2,\pm2)\) and \((3,\pm3)\) modes, and is constructed according to the linearized solution documented in Section VI of [5]. For this solution, we impose additional restrictions that the linearized solution be asymptotically flat so that it is compatible with the gauge transformations performed in the SpECTRE regularity-preserving CCE. Using the notation of [5], we set:

\begin{align*} B_2 &= B_3 = 0\\ C_{2b} &= 3 C_{2a} / \nu^2\\ C_{3b} &= -3 i C_{3a} / \nu^3 \end{align*}

where \(C_{2a}\) and \(C_{3a}\) may be specified freely and are taken via input option InitialModes.

Member Function Documentation

◆ dr_spherical_metric()

void Cce::Solutions::LinearizedBondiSachs::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 linearized Bondi-Sachs system.

Details

This function dispatches to the individual computations in this class to determine the Bondi-Sachs scalars for the linearized solution. Once the scalars are determined, the radial derivative of the metric is assembled via (note \(\beta = 0\) in this solution)

\begin{align*} \partial_r g_{a b} dx^a dx^b =& - (W + r \partial_r W - 2 r h_{A B} U^A U^B - r^2 (\partial_r h_{A B}) U^A U^B - 2 r^2 h_{A B} U^A \partial_r U^B) (dt - dr)^2 \\ &- (4 r h_{A B} U^B + 2 r^2 ((\partial_r h_{A B}) U^B + h_{AB} \partial_r U^B) ) (dt - dr) dx^A + (2 r h_{A B} + r^2 \partial_r h_{A B}) dx^A dx^B, \end{align*}

where indices with capital letters refer to angular coordinates and the angular tensors may be written in terms of spin-weighted scalars. Doing so gives the metric components,

\begin{align*} \partial_r g_{t t} &= -\left( W + r \partial_r W - 2 r \Re\left(\bar J U^2 + K U \bar U\right) - r^2 \partial_r \Re\left(\bar J U^2 + K U \bar U\right)\right) \\ \partial_r g_{t r} &= -\partial_r g_{t t}\\ \partial_r g_{t \theta} &= 2 r \Re\left(K U + J \bar U\right) + r^2 \partial_r \Re\left(K U + J \bar U\right) \\ \partial_r g_{t \phi} &= 2r \Im\left(K U + J \bar U\right) + r^2 \partial_r \Im\left(K U + J \bar U\right) \\ \partial_r g_{r r} &= \partial_r g_{t t}\\ \partial_r g_{r \theta} &= -\partial_r g_{t \theta}\\ \partial_r g_{r \phi} &= -\partial_r g_{t \phi}\\ \partial_r g_{\theta \theta} &= 2 r \Re\left(J + K\right) + r^2 \Re\left(\partial_r J + \partial_r K\right) \\ \partial_r g_{\theta \phi} &= 2 r \Im\left(J\right) + r^2 \Im\left(\partial_r J\right)\\ \partial_r g_{\phi \phi} &= 2 r \Re\left(K - J\right) + r^2 \Re\left(\partial_r K - \partial_r J\right), \end{align*}

and all other components are zero.

Implements Cce::Solutions::SphericalMetricData.

◆ dt_spherical_metric()

void Cce::Solutions::LinearizedBondiSachs::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 linearized Bondi-Sachs system.

Details

This function dispatches to the individual computations in this class to determine the Bondi-Sachs scalars for the linearized solution. Once the scalars are determined, the metric is assembled via (note \(\beta = 0\) in this solution, and note that we take coordinate \(t=u\) in converting to the Cartesian coordinates)

\begin{align*} \partial_t g_{a b} dx^a dx^b =& - (r \partial_u W - r^2 \partial_u h_{A B} U^A U^B - 2 r^2 h_{A B} U^B \partial_u U^A) (dt - dr)^2 \\ &- 2 r^2 (\partial_u h_{A B} U^B + h_{A B} \partial_u U^B) (dt - dr) dx^A + r^2 \partial_u h_{A B} dx^A dx^B, \end{align*}

where indices with capital letters refer to angular coordinates and the angular tensors may be written in terms of spin-weighted scalars. Doing so gives the metric components,

\begin{align*} \partial_t g_{t t} &= -\left(r \partial_u W - r^2 \partial_u \Re\left(\bar J U^2 + K U \bar U\right)\right)\\ \partial_t g_{t r} &= -\partial_t g_{t t}\\ \partial_t g_{t \theta} &= r^2 \partial_u \Re\left(K U + J \bar U\right)\\ \partial_t g_{t \phi} &= r^2 \partial_u \Im\left(K U + J \bar U\right)\\ \partial_t g_{r r} &= \partial_t g_{t t}\\ \partial_t g_{r \theta} &= -\partial_t g_{t \theta}\\ \partial_t g_{r \phi} &= -\partial_t g_{t \phi}\\ \partial_t g_{\theta \theta} &= r^2 \Re\left(\partial_u J + \partial_u K\right)\\ \partial_t g_{\theta \phi} &= r^2 \Im\left(\partial_u J\right)\\ \partial_t g_{\phi \phi} &= r^2 \Re\left(\partial_u K - \partial_u J\right), \end{align*}

and all other components are zero.

Implements Cce::Solutions::SphericalMetricData.

◆ linearized_bondi_j()

void Cce::Solutions::LinearizedBondiSachs::linearized_bondi_j ( gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * >  bondi_j,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(J\).

Details

The linearized solution for \(J\) is given by [5],

\[ J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2}) \mathrm{Re}(J_2(r) e^{i \nu u}) + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3}) \mathrm{Re}(J_3(r) e^{i \nu u}), \]

where

\begin{align*} J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\ J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3} - \frac{C_{3 b}}{4 r^4}. \end{align*}

◆ linearized_bondi_u()

void Cce::Solutions::LinearizedBondiSachs::linearized_bondi_u ( gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * >  bondi_u,
size_t  l_max,
double  time 
) const
protectednoexcept

Compute the linearized solution for \(U\).

Details

The linearized solution for \(U\) is given by [5],

\[ U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2}) \mathrm{Re}(U_2(r) e^{i \nu u}) + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3}) \mathrm{Re}(U_3(r) e^{i \nu u}), \]

where

\begin{align*} U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3} + \frac{C_{2b}}{4 r^4} \\ U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3} + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5} \end{align*}

◆ linearized_bondi_w()

void Cce::Solutions::LinearizedBondiSachs::linearized_bondi_w ( gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * >  bondi_w,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(W\).

Details

The linearized solution for \(W\) is given by [5],

\[ W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2}) \mathrm{Re}(W_2(r) e^{i \nu u}) + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3}) \mathrm{Re}(W_3(r) e^{i \nu u}), \]

where

\begin{align*} W_2(r) &= - \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3} + \frac{C_{2b}}{2 r^4}, \\ W_3(r) &= -\frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3} + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}. \end{align*}

◆ linearized_dr_bondi_j()

void Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_j ( gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * >  dr_bondi_j,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(\partial_r J\).

Details

The linearized solution for \(\partial_r J\) is given by [5],

\[ \partial_r J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2}) \mathrm{Re}(\partial_r J_2(r) e^{i \nu u}) + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3}) \mathrm{Re}(\partial_r J_3(r) e^{i \nu u}), \]

where

\begin{align*} \partial_r J_2(r) &= - \frac{C_{2a}}{4 r^2} + \frac{C_{2b}}{4 r^4}, \\ \partial_r J_3(r) &= -\frac{C_{3a}}{10 r^2} + \frac{i \nu C_{3 b}}{2 r^4} + \frac{C_{3 b}}{r^5}. \end{align*}

◆ linearized_dr_bondi_u()

void Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_u ( gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * >  dr_bondi_u,
size_t  l_max,
double  time 
) const
protectednoexcept

Compute the linearized solution for \(\partial_r U\).

Details

The linearized solution for \(\partial_r U\) is given by [5],

\[ \partial_r U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2}) \mathrm{Re}(\partial_r U_2(r) e^{i \nu u}) + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3}) \mathrm{Re}(\partial_r U_3(r) e^{i \nu u}), \]

where

\begin{align*} \partial_r U_2(r) &= -\frac{C_{2a}}{r^3} - \frac{i \nu C_{2 b}}{r^4} - \frac{C_{2b}}{r^5} \\ \partial_r U_3(r) &= -\frac{C_{3a}}{r^3} + \frac{2 \nu^2 C_{3b}}{r^4} - \frac{5 i \nu C_{3b}}{r^5} - \frac{5 C_{3 b}}{r^6} \end{align*}

◆ linearized_dr_bondi_w()

void Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_w ( gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * >  dr_bondi_w,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(\partial_r W\).

Details

The linearized solution for \(W\) is given by [5],

\[ \partial_r W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2}) \mathrm{Re}(\partial_r W_2(r) e^{i \nu u}) + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3}) \mathrm{Re}(\partial_r W_3(r) e^{i \nu u}), \]

where

\begin{align*} \partial_r W_2(r) &= \frac{2 \nu^2 C_{2b}}{r^3} - \frac{3 i \nu C_{2 b}}{r^4} - \frac{2 C_{2b}}{r^5}, \\ \partial_r W_3(r) &= \frac{4 i \nu^3 C_{3b}}{r^3} + \frac{12 i \nu^2 C_{3b}}{r^4} - \frac{10 \nu C_{3b}}{r^5} - \frac{15 C_{3b}}{r^6}. \end{align*}

◆ linearized_du_bondi_j()

void Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_j ( gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * >  du_bondi_j,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(\partial_u J\).

Details

The linearized solution for \(\partial_u J\) is given by [5],

\[ \partial_u J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2}) \mathrm{Re}(i \nu J_2(r) e^{i \nu u}) + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3}) \mathrm{Re}(i \nu J_3(r) e^{i \nu u}), \]

where

\begin{align*} J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\ J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3} - \frac{C_{3 b}}{4 r^4}. \end{align*}

◆ linearized_du_bondi_u()

void Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_u ( gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * >  du_bondi_u,
size_t  l_max,
double  time 
) const
protectednoexcept

Compute the linearized solution for \(\partial_u U\).

Details

The linearized solution for \(U\) is given by [5],

\[ \partial_u U = \sqrt{3} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2}) \mathrm{Re}(i \nu U_2(r) e^{i \nu u}) + \sqrt{6} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3}) \mathrm{Re}(i \nu U_3(r) e^{i \nu u}), \]

where

\begin{align*} U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3} + \frac{C_{2b}}{4 r^4} \\ U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3} + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5} \end{align*}

◆ linearized_du_bondi_w()

void Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_w ( gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * >  du_bondi_w,
size_t  l_max,
double  time 
) const
protectednoexcept

Computes the linearized solution for \(\partial_u W\).

Details

The linearized solution for \(\partial_u W\) is given by [5],

\[ \partial_u W = \frac{1}{\sqrt{2}} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2}) \mathrm{Re}(i \nu W_2(r) e^{i \nu u}) + \frac{1}{\sqrt{2}} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3}) \mathrm{Re}(i \nu W_3(r) e^{i \nu u}), \]

where

\begin{align*} W_2(r) &= \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3} + \frac{C_{2b}}{2 r^4}, \\ W_3(r) &= \frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3} + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}. \end{align*}

◆ spherical_metric()

void Cce::Solutions::LinearizedBondiSachs::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 linearized Bondi-Sachs system.

Details

This function dispatches to the individual computations in this class to determine the Bondi-Sachs scalars for the linearized solution. Once the scalars are determined, the metric is assembled via (note \(\beta = 0\) in this solution)

\begin{align*} ds^2 =& - ((1 + r W) - r^2 h_{A B} U^A U^B) (dt - dr)^2 - 2 (dt - dr) dr \\ &- 2 r^2 h_{A B} U^B (dt - dr) dx^A + r^2 h_{A B} dx^A dx^B, \end{align*}

where indices with capital letters refer to angular coordinates and the angular tensors may be written in terms of spin-weighted scalars. Doing so gives the metric components,

\begin{align*} g_{t t} &= -\left(1 + r W - r^2 \Re\left(\bar J U^2 + K U \bar U\right)\right)\\ g_{t r} &= -1 - g_{t t}\\ g_{r r} &= 2 + g_{t t}\\ g_{t \theta} &= r^2 \Re\left(K U + J \bar U\right)\\ g_{t \phi} &= r^2 \Im\left(K U + J \bar U\right)\\ g_{r \theta} &= -g_{t \theta}\\ g_{r \phi} &= -g_{t \phi}\\ g_{\theta \theta} &= r^2 \Re\left(J + K\right)\\ g_{\theta \phi} &= r^2 \Im\left(J\right)\\ g_{\phi \phi} &= r^2 \Re\left(K - J\right), \end{align*}

and all other components are zero.

Implements Cce::Solutions::SphericalMetricData.

◆ variables_impl() [1/4]

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

Determines the News function from the linearized solution parameters.

Details

The News is determined from the formula given in [5],

\begin{align*} N = \frac{1}{4 \sqrt{3}} ({}_{-2} Y_{2\, 2} + {}_{-2} Y_{2\,-2}) \Re\left(i \nu^3 C_{2 b} e^{i \nu u}\right) + \frac{1}{2 \sqrt{15}} ({}_{-2} Y_{3\, 3} - {}_{-2} Y_{3\, -3}) \Re\left(- \nu^4 C_{3 b} e^{i \nu u} \right) \end{align*}

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().


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