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

An analytic solution representing a specialization of the radiative Robinson-Trautman solution described in [36]. More...

#include <RobinsonTrautman.hpp>

Classes

struct  ExtractionRadius
 
struct  InitialModes
 
struct  LMax
 
struct  StartTime
 
struct  Tolerance
 

Public Types

using options = tmpl::list< InitialModes, ExtractionRadius, LMax, Tolerance, StartTime >
 
- 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 (RobinsonTrautman)
 
 RobinsonTrautman (CkMigrateMessage *msg) noexcept
 
 RobinsonTrautman (std::vector< std::complex< double >> initial_modes, double extraction_radius, size_t l_max, double tolerance, double start_time, const Options::Context &context)
 
std::unique_ptr< WorldtubeDataget_clone () const noexcept override
 
void pup (PUP::er &p) noexcept override
 
bool use_noninertial_news () const 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
 

Static Public Attributes

static constexpr Options::String help
 

Protected Member Functions

void prepare_solution (size_t output_l_max, double time) const noexcept override
 The Robinson-Trautman solution performs the time-stepping to advance the internal member scalar used to generate the metric solution to the correct state for time. 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 of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\). 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 radial derivative of the spherical coordinate metric of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\). 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 time derivative of the spherical coordinate metric of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\). 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 Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\). 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
 

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 > >>
 
- Protected Attributes inherited from Cce::Solutions::WorldtubeData
IntermediateCacheTuple intermediate_cache_
 
double extraction_radius_ = std::numeric_limits<double>::quiet_NaN()
 

Detailed Description

An analytic solution representing a specialization of the radiative Robinson-Trautman solution described in [36].

Details

This solution is not quite analytic, in the sense that there is a single scalar field that must be evolved. Ultimately, it is a partial specialization of the Characteristic equations such that \(J = 0\) and the evolution equations have been manipulated to give a time evolution equation for \(e^{-2 \beta}\), which is equivalent to the Robinson-Trautman scalar \(\omega_{\text{RT}}\) (denoted \(W\) in [36] – we deviate from their notation because the symbol \(W\) is already used elsewhere in the CCE system).

Note
The value of \(\omega_{\text{RT}}\) should be real and near 1, which is imposed by the solution itself, any modes specified in the input file are treated as perturbations to the leading value of 1.0 for the Robinson-Trautman scalar \(\omega_{\text{RT}}\).
The use of substep time-steppers in conjunction with RobinsonTrautman analytic data is explictly forbidden by checks in Cce::Actions::InitializeWorldtubeBoundary. The reason is that any time the RobinsonTrautman receives a request for data at a time in the past of its current state, it must re-start its internal time stepper from the beginning of the evolution. This is a reasonable cost for multistep methods that only have non-ordered time steps during self-start, but will lead to \(\mathcal O(N^2)\) internal steps in the RobinsonTrautman solution if a substep method is used, where \(N\) is the number of steps performed by the substep method. If you find an unavoidable need to use RobinsonTrautman with a substep method, you will either need to only do so for very short evolutions, or need to write more sophisticated caching of the internal time step data.

Member Function Documentation

◆ dr_spherical_metric()

void Cce::Solutions::RobinsonTrautman::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 radial derivative of the spherical coordinate metric of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\).

Details

The radial derivative (at constant time t) of the Robinson-Trautman solution is obtained by differentiating the expressions from the documentation for RobinsonTrautman::spherical_metric():

\begin{align*} (\partial_r g_{a b} + \partial_t g_{a b}) dx^a dx^b = - (\omega_{\text{RT}} (r \partial_r W + W) - 2 r U \bar U - r^2 (\bar U\partial_r U + U \partial_r \bar U)) (dt - dr)^2 - 2 r U^A q_{A B} dx^B (dt - dr) + 2 r q_{A B} dx^A dx^B \end{align*}

where \(q_{A B}\) represents the angular unit sphere metric, and the remaining Bondi-Sachs scalars and angular tensors are defined in terms of the Robinson-Trautman scalar \(\omega_{\text{RT}}\)

\begin{align*} W &= \frac{1}{r}\left(\omega_{\text{RT}} + \eth \bar \eth \omega_{\text{RT}} - 1\right) - \frac{2}{r^2 \omega_{\text{RT}}^2}\\ \partial_r W &= -\frac{1}{r^2} \left(\omega_{\text{RT}} + \eth \bar \eth \omega_{\text{RT}} - 1\right) + \frac{4}{r^3 \omega_{\text{RT}}^2}\\ U &\equiv U^A q_A = \frac{\eth \omega_{\text{RT}}}{r}. \end{align*}

and \(q_A\) is the angular dyad on the unit sphere. The Robinson-Trautman scalar \(\omega_{\text{RT}}\) is independent of the Bondi radius \(r\), so all radial derivatives of \(\omega_{\text{RT}}\) have been dropped

Implements Cce::Solutions::SphericalMetricData.

◆ dt_spherical_metric()

void Cce::Solutions::RobinsonTrautman::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 time derivative of the spherical coordinate metric of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\).

Details

The time derivative of the Robinson-Trautman solution is obtained by differentiating the expressions from the documentation for RobinsonTrautman::spherical_metric():

\begin{align*} \partial_t g_{a b} dx^a dx^b = -( \partial_u \omega_{\text{RT}} (r W + 1) + \omega_{\text{RT}} \partial_u W - r^2 (\bar U \partial_u U + U \partial_u \bar U)) (dt - dr)^2 - 2 \partial_u \omega_{\text{RT}} (dt - dr) dr - 2 r^2 \partial_u U^A q_{AB} dx^B (dt - dr), \end{align*}

where \(q_{A B}\) represents the angular unit sphere metric, and the remaining Bondi-Sachs scalars and angular tensors are defined in terms of the Robinson-Trautman scalar \(\omega_{\text{RT}}\)

\begin{align*} W &= \frac{1}{r}\left(\omega_{\text{RT}} + \eth \bar \eth \omega_{\text{RT}} - 1\right) - \frac{2}{r^2 \omega_{\text{RT}}^2}\\ \partial_u W &= \frac{1}{r}\left(\partial_u \omega_{\text{RT}} + \eth \bar \eth \partial_u \omega_{\text{RT}}\right) + \frac{4 \partial_u \omega_{\text{RT}}}{r^2 \omega_{\text{RT}}^3} \\ \partial_u U &= q_A \partial_u U^A = \frac{\eth \partial_u \omega_{\text{RT}}}{r}, \end{align*}

and \(q_A\) is the angular dyad on the unit sphere; and the time derivative of the Robinson-Trautman scalar \(\omega_{\text{RT}}\) is

\[ \partial_u \omega_{\text{RT}} = \frac{1}{12} \left(-\omega^4_{\text{RT}} \eth^2 \bar \eth^2 \omega_{\text{RT}} + \omega_{\text{RT}}^3 (\eth^2 \omega_{\text{RT}}) (\bar \eth^2 \omega_{\text{RT}}) \right) \]

Implements Cce::Solutions::SphericalMetricData.

◆ prepare_solution()

void Cce::Solutions::RobinsonTrautman::prepare_solution ( size_t  output_l_max,
double  time 
) const
overrideprotectedvirtualnoexcept

The Robinson-Trautman solution performs the time-stepping to advance the internal member scalar used to generate the metric solution to the correct state for time.

Details

The generating scalar \(\omega_{\text{RT}}\) is evolved using equation (2.5) from [36] (manipulated to a form convenient for our numerical utilities)

\[ \partial_u \omega_{\text{RT}} = - \left(\omega^4_{\text{RT}} \eth^2 \bar \eth^2 \omega_{\text{RT}} - \omega_{\text{RT}}^3 (\eth^2 \omega_{\text{RT}}) (\bar \eth^2 \omega_{\text{RT}}) \right) \]

As the scalar \(\omega_{\text{RT}}\) is evolved, it is filtered by zeroing the highest two angular modes.

Implements Cce::Solutions::WorldtubeData.

◆ spherical_metric()

void Cce::Solutions::RobinsonTrautman::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 of the Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\).

Details

The spacetime metric of the Robinson-Trautman solution can be expressed as a specialization of the Bondi-Sachs metric (note the metric signature change as compared to equation (1.2) from [36])

\[ ds^2 = -((r W + 1) \omega_{\text{RT}} - r^2 U \bar U) (dt - dr)^2 - 2 \omega_{\text{RT}} (dt - dr) dr - 2 r^2 U^A q_{AB} dx^B (dt - dr) + r^2 q_{A B} dx^A dx^B, \]

where \(q_{A B}\) represents the angular unit sphere metric, and the remaining Bondi-Sachs scalars and angular tensors are defined in terms of the Robinson-Trautman scalar \(\omega_{\text{RT}}\)

\begin{align*} W &= \frac{1}{r}\left(\omega_{\text{RT}} + \eth \bar \eth \omega_{\text{RT}} - 1\right) - \frac{2}{r^2 \omega_{\text{RT}}^2}\\ U &\equiv U^A q_A = \frac{\eth \omega_{\text{RT}}}{r}. \end{align*}

and \(q_A\) is the angular dyad on the unit sphere.

The angular part of the metric can be expressed in terms of the \(U\) scalar as

\begin{align*} g_{u \theta} &= r^2 \Re U\\ g_{u \phi} &= r^2 \Im U \end{align*}

Implements Cce::Solutions::SphericalMetricData.

◆ variables_impl() [1/4]

void Cce::Solutions::RobinsonTrautman::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 Robinson-Trautman solution generated by the time-evolved scalar \(\omega_{\text{RT}}\).

Details

The Bondi-Sachs news in the Robinson-Trautman solution is

\begin{align*} N = \frac{\bar \eth \bar \eth \omega_{\text{RT}}}{\omega_{\text{RT}}} \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().

Member Data Documentation

◆ help

constexpr Options::String Cce::Solutions::RobinsonTrautman::help
staticconstexpr
Initial value:
= {
"Analytic solution representing worldtube data for the nonlinear "
"semi-analytic Robinson-Trautman metric, which requires a single "
"scalar on the boundary to be evolved to determine the metric"}

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