SpECTRE  v2024.04.12
Cce::Solutions::BouncingBlackHole Struct Reference

Analytic solution representing a coordinate oscillation about a stationary Schwarzschild black hole. More...

#include <BouncingBlackHole.hpp>

Classes

struct  Amplitude
 
struct  ExtractionRadius
 
struct  Mass
 
struct  Period
 

Public Types

using options = tmpl::list< Amplitude, ExtractionRadius, Mass, Period >
 
- 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< DataVector, 3 >, ::Tags::dt< gr::Tags::SpacetimeMetric< DataVector, 3 > >, gh::Tags::Pi< DataVector, 3 >, gh::Tags::Phi< DataVector, 3 >, gr::Tags::SpatialMetric< DataVector, 3 >, ::Tags::dt< gr::Tags::SpatialMetric< DataVector, 3 > >, Tags::Dr< gr::Tags::SpatialMetric< DataVector, 3 > >, gr::Tags::Shift< DataVector, 3 >, ::Tags::dt< gr::Tags::Shift< DataVector, 3 > >, Tags::Dr< gr::Tags::Shift< DataVector, 3 > >, 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 (BouncingBlackHole)
 
 BouncingBlackHole (CkMigrateMessage *msg)
 
 BouncingBlackHole (double amplitude, double extraction_radius, double mass, double period)
 
std::unique_ptr< WorldtubeDataget_clone () const override
 
void pup (PUP::er &p) override
 
- Public Member Functions inherited from Cce::Solutions::WorldtubeData
 WRAPPED_PUPable_abstract (WorldtubeData)
 
 WorldtubeData (const double extraction_radius)
 
 WorldtubeData (CkMigrateMessage *msg)
 
virtual std::unique_ptr< WorldtubeDataget_clone () const =0
 
template<typename... Tags>
tuples::TaggedTuple< Tags... > variables (const size_t output_l_max, const double time, tmpl::list< Tags... >) const
 Retrieve worldtube data represented by the analytic solution, at boundary angular resolution l_max and time time More...
 
void pup (PUP::er &p) override
 
virtual std::unique_ptr< Cce::InitializeJ::InitializeJ< false > > get_initialize_j (const double) const
 
virtual bool use_noninertial_news () const
 

Static Public Attributes

static constexpr Options::String help
 

Protected Member Functions

void prepare_solution (const size_t, const double) const override
 
void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< DataVector, 3 > >) const override
 The implementation function that computes the spacetime metric on the extraction sphere at collocation points associated with angular resolution l_max. 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< DataVector, 3 > > >) const override
 The implementation function that computes the first time derivative of the spacetime metric on the extraction sphere. More...
 
void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t l_max, double time, tmpl::type_< gh::Tags::Phi< DataVector, 3 > >) const override
 The implementation function that computes the first spatial derivative of the spacetime metric on the extraction sphere. More...
 
void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 > > * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const override
 The News in the bouncing black hole solution vanishes, as the oscillation comes entirely from a coordinate transform. 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
 
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
 
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< DataVector, 3 > >) const=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< DataVector, 3 > > >) const=0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< gh::Tags::Pi< DataVector, 3 > >) const
 
virtual void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t output_l_max, double time, tmpl::type_< gh::Tags::Phi< DataVector, 3 > >) const=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< DataVector, 3 > >) const
 
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< DataVector, 3 > > >) const
 
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< DataVector, 3 > > >) const
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< DataVector, 3 > >) const
 
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< DataVector, 3 > > >) const
 
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< DataVector, 3 > > >) const
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector > >) const
 
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
 
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
 
virtual void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 > > * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const=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
 
virtual void prepare_solution (size_t output_l_max, double time) const =0
 
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
 
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
 
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< DataVector, 3 > >) const =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< DataVector, 3 > > >) const =0
 
virtual void variables_impl (gsl::not_null< tnsr::aa< DataVector, 3 > * > pi, size_t output_l_max, double time, tmpl::type_< gh::Tags::Pi< DataVector, 3 > >) const
 
virtual void variables_impl (gsl::not_null< tnsr::iaa< DataVector, 3 > * > d_spacetime_metric, size_t output_l_max, double time, tmpl::type_< gh::Tags::Phi< DataVector, 3 > >) const =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< DataVector, 3 > >) const
 
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< DataVector, 3 > > >) const
 
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< DataVector, 3 > > >) const
 
virtual void variables_impl (gsl::not_null< tnsr::I< DataVector, 3 > * > shift, size_t output_l_max, double time, tmpl::type_< gr::Tags::Shift< DataVector, 3 > >) const
 
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< DataVector, 3 > > >) const
 
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< DataVector, 3 > > >) const
 
virtual void variables_impl (gsl::not_null< Scalar< DataVector > * > lapse, size_t output_l_max, double time, tmpl::type_< gr::Tags::Lapse< DataVector > >) const
 
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
 
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
 
virtual void variables_impl (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 > > * > news, size_t output_l_max, double time, tmpl::type_< Tags::News >) const =0
 

Protected Attributes

double amplitude_ = std::numeric_limits<double>::signaling_NaN()
 
double mass_ = std::numeric_limits<double>::signaling_NaN()
 
double frequency_ = 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

- 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< DataVector, 3 >, gh::Tags::Pi< DataVector, 3 >, gh::Tags::Phi< DataVector, 3 >, gr::Tags::SpatialMetric< DataVector, 3 >, gr::Tags::Shift< DataVector, 3 >, gr::Tags::Lapse< DataVector >, ::Tags::dt< gr::Tags::SpacetimeMetric< DataVector, 3 > >, ::Tags::dt< gr::Tags::SpatialMetric< DataVector, 3 > >, ::Tags::dt< gr::Tags::Shift< DataVector, 3 > >, ::Tags::dt< gr::Tags::Lapse< DataVector > >, Tags::Dr< gr::Tags::SpatialMetric< DataVector, 3 > >, Tags::Dr< gr::Tags::Shift< DataVector, 3 > >, Tags::Dr< gr::Tags::Lapse< DataVector > >, Tags::News >, tmpl::bind< IntermediateCacheTag, tmpl::_1 > > >
 

Detailed Description

Analytic solution representing a coordinate oscillation about a stationary Schwarzschild black hole.

Details

As the oscillation in the metric data at the worldtube is a pure coordinate effect, the system evolved using this worldtube data should produce zero news. The solution is a coordinate transform applied to the Schwarzschild solution in Kerr-Schild coordinates.

Member Function Documentation

◆ get_clone()

std::unique_ptr< WorldtubeData > Cce::Solutions::BouncingBlackHole::get_clone ( ) const
overridevirtual

◆ prepare_solution()

void Cce::Solutions::BouncingBlackHole::prepare_solution ( const  size_t,
const double   
) const
inlineoverrideprotectedvirtual

◆ variables_impl() [1/20]

virtual void Cce::Solutions::WorldtubeData::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
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [2/20]

virtual void Cce::Solutions::WorldtubeData::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
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [3/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< Scalar< DataVector > * >  lapse,
size_t  output_l_max,
double  time,
tmpl::type_< gr::Tags::Lapse< DataVector > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [4/20]

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

The News in the bouncing black hole solution vanishes, as the oscillation comes entirely from a coordinate transform.

Implements Cce::Solutions::WorldtubeData.

◆ variables_impl() [5/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 > > * >  news,
size_t  output_l_max,
double  time,
tmpl::type_< Tags::News  
) const
protectedvirtual

◆ variables_impl() [6/20]

void Cce::Solutions::BouncingBlackHole::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< DataVector, 3 > > >   
) const
overrideprotected

The implementation function that computes the first time derivative of the spacetime metric on the extraction sphere.

Details

The time derivative of the spacetime metric \(\partial_t g_{a b}\) comes entirely from the Jacobian factor:

\begin{align*} \partial_t x = \frac{8 \pi A}{T} \cos\left(\frac{2 \pi t}{T}\right) \left(\sin\left(\frac{2 \pi t}{T}\right)\right)^3, \end{align*}

so the transformed metric derivative is,

\begin{align*} \partial_t g_{a^\prime b^\prime} = 2 \partial_{(a^\prime} \partial_t x \partial_{b^\prime)} x^a g_{x a}. \end{align*}

In this notation we take the primed coordinates to be the coordinates for which the black hole has time-dependent coordinate position.

◆ variables_impl() [7/20]

virtual void Cce::Solutions::WorldtubeData::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< DataVector, 3 > > >   
) const
protectedvirtual

◆ variables_impl() [8/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::aa< DataVector, 3 > * >  pi,
size_t  output_l_max,
double  time,
tmpl::type_< gh::Tags::Pi< DataVector, 3 > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [9/20]

void Cce::Solutions::BouncingBlackHole::variables_impl ( gsl::not_null< tnsr::aa< DataVector, 3 > * >  spacetime_metric,
size_t  l_max,
double  time,
tmpl::type_< gr::Tags::SpacetimeMetric< DataVector, 3 > >   
) const
overrideprotectedvirtual

The implementation function that computes the spacetime metric on the extraction sphere at collocation points associated with angular resolution l_max.

Details

The spacetime metric \(g_{a b}\) is determined by evaluating the Kerr-Schild metric at a set of transformed coordinates \(t^\prime = t, y^\prime = y, z^\prime = z\), and

\begin{align*} x = x^\prime + A \left(\sin\left(\frac{2 \pi t}{T}\right)\right)^4, \end{align*}

where the amplitude \(A\) is set by the option Amplitude and the period \(T\) is set by the option Period. In this notation we take the primed coordinates to be the coordinates for which the black hole has time-dependent coordinate position.

Implements Cce::Solutions::WorldtubeData.

◆ variables_impl() [10/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::aa< DataVector, 3 > * >  spacetime_metric,
size_t  output_l_max,
double  time,
tmpl::type_< gr::Tags::SpacetimeMetric< DataVector, 3 > >   
) const
protectedvirtual

◆ variables_impl() [11/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::i< DataVector, 3 > * >  cartesian_coordinates,
size_t  output_l_max,
double  time,
tmpl::type_< Tags::CauchyCartesianCoords  
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [12/20]

virtual void Cce::Solutions::WorldtubeData::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
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [13/20]

virtual void Cce::Solutions::WorldtubeData::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< DataVector, 3 > > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [14/20]

virtual void Cce::Solutions::WorldtubeData::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< DataVector, 3 > > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [15/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::I< DataVector, 3 > * >  shift,
size_t  output_l_max,
double  time,
tmpl::type_< gr::Tags::Shift< DataVector, 3 > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [16/20]

void Cce::Solutions::BouncingBlackHole::variables_impl ( gsl::not_null< tnsr::iaa< DataVector, 3 > * >  d_spacetime_metric,
size_t  l_max,
double  time,
tmpl::type_< gh::Tags::Phi< DataVector, 3 > >   
) const
overrideprotectedvirtual

The implementation function that computes the first spatial derivative of the spacetime metric on the extraction sphere.

Details

The calculation proceeds by standard coordinate transform techniques for the transformation given by \(t^\prime = t, y^\prime = y, z^\prime = z\), and

\begin{align*} x = x^\prime + A \left(\sin\left(\frac{2 \pi t}{T}\right)\right)^4, \end{align*}

The general coordinate transformation formula that gives the metric is then

\begin{align*} \partial_a g_{b c} = \partial_a \partial_b x^{\prime a^\prime} \partial_c x^{\prime b^\prime} g_{a^\prime b^\prime} + \partial_b x^{\prime a^\prime} \partial_a \partial_c x^{\prime b^\prime} g_{a^\prime b^\prime} + \partial_a x^{\prime a^\prime} \partial_b x^{\prime b^\prime} \partial_c x^{\prime c^\prime} \partial_a g_{b c} \end{align*}

Implements Cce::Solutions::WorldtubeData.

◆ variables_impl() [17/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::iaa< DataVector, 3 > * >  d_spacetime_metric,
size_t  output_l_max,
double  time,
tmpl::type_< gh::Tags::Phi< DataVector, 3 > >   
) const
protectedvirtual

◆ variables_impl() [18/20]

virtual void Cce::Solutions::WorldtubeData::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< DataVector, 3 > > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [19/20]

virtual void Cce::Solutions::WorldtubeData::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< DataVector, 3 > > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

◆ variables_impl() [20/20]

virtual void Cce::Solutions::WorldtubeData::variables_impl ( gsl::not_null< tnsr::ii< DataVector, 3 > * >  spatial_metric,
size_t  output_l_max,
double  time,
tmpl::type_< gr::Tags::SpatialMetric< DataVector, 3 > >   
) const
protectedvirtual

Reimplemented from Cce::Solutions::WorldtubeData.

Member Data Documentation

◆ help

constexpr Options::String Cce::Solutions::BouncingBlackHole::help
staticconstexpr
Initial value:
{
"Analytic solution in which a static black hole is placed in an "
"oscillating coordinate system"}

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