SpECTRE  v2024.02.05
Cce Namespace Reference

The set of utilities for performing Cauchy characteristic evolution and Cauchy characteristic matching. More...

Namespaces

namespace  Actions
 The set of actions for use in the CCE evolution system.
 
namespace  InitializeJ
 Contains utilities and DataBox mutators for generating data for \(J\) on the initial CCE hypersurface.
 
namespace  Solutions
 Analytic solutions for CCE worldtube data and corresponding waveform News.
 
namespace  Tags
 Tags for Cauchy Characteristic Extraction routines.
 

Classes

class  AnalyticBoundaryDataManager
 A boundary data manager that constructs the desired boundary data into the Variables from the data provided by the analytic solution. More...
 
struct  AnalyticWorldtubeBoundary
 Component that supplies CCE worldtube boundary data sourced from an analytic solution. More...
 
struct  ApplySwshJacobianInplace
 Performs a mutation to a spin-weighted spherical harmonic derivative value from the numerical coordinate (the spin-weighted derivative at fixed \(y\)) to the Bondi coordinates (the spin-weighted derivative at fixed \(r\)), inplace to the requested tag. More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::Eth > >
 Specialization for the spin-weighted derivative \(\eth\). More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::Ethbar > >
 Specialization for the spin-weighted derivative \(\bar{\eth}\). More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthbarEth > >
 Specialization for the spin-weighted derivative \(\bar{\eth} \eth\). More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthbarEthbar > >
 Specialization for the spin-weighted derivative \(\bar{\eth} \bar{\eth}\). More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthEth > >
 Specialization for the spin-weighted derivative \(\eth \eth\). More...
 
struct  ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthEthbar > >
 Specialization for the spin-weighted derivative \(\eth \bar{\eth}\). More...
 
class  BondiWorldtubeDataManager
 Manages the 'reduced' cached buffer dataset associated with a CCE worldtube and interpolates to requested time points to provide worldtube boundary data to the main evolution routines. More...
 
class  BondiWorldtubeH5BufferUpdater
 A WorldtubeBufferUpdater specialized to the CCE input worldtube H5 file produced by the reduced SpEC format. More...
 
struct  CalculateScriPlusValue
 
struct  CalculateScriPlusValue< Tags::EthInertialRetardedTime >
 Determines the angular derivative of the asymptotic inertial time, useful for asymptotic coordinate transformations. More...
 
struct  CalculateScriPlusValue< Tags::News >
 Compute the Bondi news from the evolution quantities. More...
 
struct  CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi0 > >
 Computes the leading part of \(\Psi_0\) near \(\mathcal I^+\). More...
 
struct  CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi1 > >
 Computes the leading part of \(\Psi_1\) near \(\mathcal I^+\). More...
 
struct  CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi2 > >
 Computes the leading part of \(\Psi_2\) near \(\mathcal I^+\). More...
 
struct  CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi3 > >
 Computes the leading part of \(\Psi_3\) near \(\mathcal I^+\). More...
 
struct  CalculateScriPlusValue< Tags::ScriPlus< Tags::Strain > >
 Computes the leading part of the strain \(h\) near \(\mathcal I^+\). More...
 
struct  CalculateScriPlusValue< Tags::TimeIntegral< Tags::ScriPlus< Tags::Psi4 > > >
 Compute the contribution to the leading \(\Psi_4\) that corresponds to a total time derivative. More...
 
struct  CalculateScriPlusValue<::Tags::dt< Tags::InertialRetardedTime > >
 Assign the time derivative of the asymptotically inertial time coordinate. More...
 
struct  CceEvolutionLabelTag
 
struct  CharacteristicEvolution
 The component for handling the CCE evolution and waveform output. More...
 
struct  ComputeBondiIntegrand
 Computes one of the inputs for the integration of one of the Characteristic hypersurface equations. More...
 
struct  ComputeBondiIntegrand< Tags::Integrand< Tags::BondiBeta > >
 Computes the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(\beta\). More...
 
struct  ComputeBondiIntegrand< Tags::Integrand< Tags::BondiU > >
 Computes the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(U\). More...
 
struct  ComputeBondiIntegrand< Tags::LinearFactor< Tags::BondiH > >
 Computes the linear factor which multiplies \(H\) in the equation which determines the radial (y) dependence of the Bondi quantity \(H\). More...
 
struct  ComputeBondiIntegrand< Tags::LinearFactorForConjugate< Tags::BondiH > >
 Computes the linear factor which multiplies \(\bar{H}\) in the equation which determines the radial (y) dependence of the Bondi quantity \(H\). More...
 
struct  ComputeBondiIntegrand< Tags::PoleOfIntegrand< Tags::BondiH > >
 Computes the pole part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(H\). More...
 
struct  ComputeBondiIntegrand< Tags::PoleOfIntegrand< Tags::BondiQ > >
 Computes the pole part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(Q\). More...
 
struct  ComputeBondiIntegrand< Tags::PoleOfIntegrand< Tags::BondiW > >
 Computes the pole part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(W\). More...
 
struct  ComputeBondiIntegrand< Tags::RegularIntegrand< Tags::BondiH > >
 Computes the pole part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(H\). More...
 
struct  ComputeBondiIntegrand< Tags::RegularIntegrand< Tags::BondiQ > >
 Computes the regular part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(Q\). More...
 
struct  ComputeBondiIntegrand< Tags::RegularIntegrand< Tags::BondiW > >
 Computes the regular part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the Bondi quantity \(W\). More...
 
struct  ComputeKleinGordonSource
 Computes Tags::KleinGordonSource<Tag> for the tags evolved by Klein-Gordon Cce. More...
 
struct  ComputeKleinGordonSource< Tags::BondiBeta >
 Computes the Klein-Gordon source of the Bondi \(\beta\). More...
 
struct  ComputeKleinGordonSource< Tags::BondiH >
 Computes the Klein-Gordon source of the Bondi \(H\). More...
 
struct  ComputeKleinGordonSource< Tags::BondiQ >
 Computes the Klein-Gordon source of the Bondi \(Q\). More...
 
struct  ComputeKleinGordonSource< Tags::BondiU >
 Computes the Klein-Gordon source of the Bondi \(U\). More...
 
struct  ComputeKleinGordonSource< Tags::BondiW >
 Computes the Klein-Gordon source of the Bondi \(W\). More...
 
struct  GaugeAdjustedBoundaryValue
 Computes the gauge-transformed Tags::EvolutionGaugeBoundaryValue<Tag> for any of the boundary tags needed in the evolution. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiBeta >
 Computes the evolution gauge quantity \(\hat \beta\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiH >
 Computes the evolution gauge quantity \(\hat H\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiJ >
 Computes the evolution gauge quantity \(\hat J\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiQ >
 Computes the evolution gauge quantity \(\hat Q\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiR >
 Computes the evolution gauge Bondi \(\hat R\) on the worldtube from Cauchy gauge quantities. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiU >
 Computes the evolution gauge quantity \(\mathcal U\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::BondiW >
 Computes the evolution gauge quantity \(\hat W\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::Dr< Tags::BondiJ > >
 Computes the evolution gauge quantity \(\partial_{\hat r} \hat J\) on the worldtube. More...
 
struct  GaugeAdjustedBoundaryValue< Tags::DuRDividedByR >
 Computes the evolution gauge \(\partial_{\hat u} \hat R / \hat R\) on the worldtube. More...
 
struct  GaugeUpdateAngularFromCartesian
 Update the angular coordinates stored in AngularTag via trigonometric operations applied to the Cartesian coordinates stored in CartesianTag. More...
 
struct  GaugeUpdateInertialTimeDerivatives
 Update the inertial gauge cartesian coordinate derivative \(\partial_u \hat x(x)\). More...
 
struct  GaugeUpdateInterpolator
 Update the interpolator stored in Spectral::Swsh::Tags::SwshInterpolator<AngularCoordinates>. More...
 
struct  GaugeUpdateJacobianFromCoordinates
 From the angular coordinates AngularCoordinateTag and the Cartesian coordinates CartesianCoordinateTag, determine the spin-weighted Jacobian factors GaugeFactorSpin2 and GaugeFactorSpin0. More...
 
struct  GaugeUpdateOmega
 Update the quantity \(\hat \omega\) and \(\hat \eth \hat \omega\) for updated spin-weighted Jacobian quantities \(\hat c\) and \(\hat d\). More...
 
struct  GaugeUpdateTimeDerivatives
 Update the Cauchy gauge cartesian coordinate derivative \(\partial_u x(\hat x)\), as well as remaining gauge quantities \(\mathcal U^{(0)}\), \(\hat U \equiv \mathcal U - \mathcal U^{(0)}\), and \(\partial_{\hat u} \hat \omega\) to maintain asymptotically inertial angular coordinates. More...
 
struct  GhWorldtubeBoundary
 Component that supplies CCE worldtube boundary data sourced from a running GH system. More...
 
struct  H5WorldtubeBoundary
 Component that supplies CCE worldtube boundary data. More...
 
struct  InitializeGauge
 Initialize to default values (identity transform) all of the angular gauge quantities for the boundary gauge transforms. More...
 
struct  InitializeScriPlusValue
 Initialize the \(\mathcal I^+\) value Tag for the first hypersurface. More...
 
struct  InitializeScriPlusValue< Tags::InertialRetardedTime >
 Initialize the inertial retarded time to the value provided in the mutator arguments. More...
 
struct  InnerBoundaryWeyl
 Compute the Weyl scalar \(\Psi_0\) and its radial derivative \(\partial_\lambda \Psi_0\) on the inner boundary of CCE domain. The quantities are in the Cauchy coordinates. More...
 
struct  KleinGordonCharacteristicEvolution
 The component for handling the CCE evolution for the Klein-Gordon system coupled with General Relativity. More...
 
struct  KleinGordonH5WorldtubeBoundary
 Component that supplies scalar-tensor worldtube boundary data. More...
 
struct  KleinGordonSystem
 Performing Cauchy characteristic evolution and Cauchy characteristic matching for Einstein-Klein-Gordon system. More...
 
class  KleinGordonWorldtubeDataManager
 
class  KleinGordonWorldtubeH5BufferUpdater
 A WorldtubeBufferUpdater specialized to the Klein-Gordon input worldtube H5 file produced by the SpEC format. We assume the scalar field is real-valued. More...
 
class  MetricWorldtubeDataManager
 Manages the cached buffer data associated with a CCE worldtube and interpolates to requested time points to provide worldtube boundary data to the main evolution routines. More...
 
class  MetricWorldtubeH5BufferUpdater
 A WorldtubeBufferUpdater specialized to the CCE input worldtube H5 file produced by SpEC. More...
 
struct  mock_gh_worldtube_boundary
 
struct  mock_h5_worldtube_boundary
 
struct  mock_klein_gordon_h5_worldtube_boundary
 
struct  pre_swsh_derivative_tags_to_compute_for
 A typelist for the set of tags computed by the set of template specializations of ComputePreSwshDerivatives. More...
 
struct  PrecomputeCceDependencies
 A set of procedures for computing the set of inputs to the CCE integrand computations that can be computed before any of the intermediate integrands are evaluated. More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::BondiK >
 Computes \(K = \sqrt{1 + J \bar{J}}\). More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::BondiR >
 Computes a volume version of Bondi radius of the worldtube \(R\) from its boundary value (by repeating it over the radial dimension) More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::DuRDividedByR >
 Computes \(\partial_u R / R\) from its boundary value (by repeating it over the radial dimension). More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::EthEthbarRDividedByR >
 Computes \(\eth \bar{\eth} R / R\) by differentiating and repeating the boundary value of \(R\). More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::EthEthRDividedByR >
 Computes \(\eth \eth R / R\) by differentiating and repeating the boundary value of \(R\). More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::EthRDividedByR >
 Computes \(\eth R / R\) by differentiating and repeating the boundary value of \(R\). More...
 
struct  PrecomputeCceDependencies< BoundaryPrefix, Tags::OneMinusY >
 Computes \(1 - y\) for the CCE system. More...
 
struct  PreSwshDerivatives
 A set of procedures for computing the set of inputs to the CCE integrand computations that are to be performed prior to the spin-weighted spherical harmonic differentiation (and for the first step in the series of integrations, after the PrecomputeCceDependencies) More...
 
struct  PreSwshDerivatives< Tags::BondiJbar >
 Compute \(\bar{J}\). More...
 
struct  PreSwshDerivatives< Tags::BondiQbar >
 
struct  PreSwshDerivatives< Tags::BondiUbar >
 Compute \(\bar{U}\). More...
 
struct  PreSwshDerivatives< Tags::ComplexInertialRetardedTime >
 Copies the values of the inertial retarded time into a spin-weighted container so that spin-weighted derivatives can be taken. More...
 
struct  PreSwshDerivatives< Tags::Du< Tags::BondiJ > >
 Compute \(\partial_u J\) from \(H\) and the Jacobian factors. More...
 
struct  PreSwshDerivatives< Tags::Dy< Spectral::Swsh::Tags::Derivative< Tag, DerivKind > > >
 Compute the derivative with respect to the numerical radial coordinate \(y\) of a quantity which is a spin-weighted spherical harmonic derivative. More...
 
struct  PreSwshDerivatives< Tags::Dy< Tag > >
 Compute the derivative of the quantity represented by Tag with respect to the numerical radial coordinate \(y\). More...
 
struct  PreSwshDerivatives< Tags::Dy< Tags::BondiBeta > >
 Computes the first derivative with respect to \(y\) of Tags::BondiBeta. More...
 
struct  PreSwshDerivatives< Tags::Dy< Tags::BondiU > >
 Computes the first derivative with respect to \(y\) of Tags::BondiU. More...
 
struct  PreSwshDerivatives< Tags::Exp2Beta >
 Compute \(\exp(2 \beta)\). More...
 
struct  PreSwshDerivatives< Tags::JbarQMinus2EthBeta >
 Compute \(\bar{J} * (Q - 2 \eth \beta)\). More...
 
struct  PreSwshDerivatives<::Tags::Multiplies< Lhs, Rhs > >
 Compute the product of Lhs and Rhs. More...
 
struct  PreSwshDerivatives<::Tags::Multiplies< Lhs, Tags::BondiJbar > >
 Compute the product of \(\bar{J}\) and the quantity represented by Rhs. More...
 
struct  PreSwshDerivatives<::Tags::Multiplies< Tags::BondiJbar, Rhs > >
 Compute the product of \(\bar{J}\) and the quantity represented by Rhs. More...
 
struct  PreSwshDerivatives<::Tags::Multiplies< Tags::BondiUbar, Rhs > >
 Compute the product of \(\bar{U}\) and the quantity represented by Rhs. More...
 
struct  RadialIntegrateBondi
 Computational structs for evaluating the hypersurface integrals during CCE evolution. These are compatible with use in db::mutate_apply. More...
 
struct  RadialIntegrateBondi< BoundaryPrefix, Tags::BondiH >
 
struct  RadialIntegrateBondi< BoundaryPrefix, Tags::BondiQ >
 
struct  RadialIntegrateBondi< BoundaryPrefix, Tags::BondiW >
 
struct  ReducedWorldtubeModeRecorder
 Records a compressed representation of SpEC-like worldtube data associated with just the spin-weighted scalars required to perform the CCE algorithm. More...
 
struct  ScriPlusInterpolationManager
 Stores necessary data and interpolates on to new time points at scri+. More...
 
struct  ScriPlusInterpolationManager< VectorTypeToInterpolate, ::Tags::Multiplies< MultipliesLhs, MultipliesRhs > >
 Stores necessary data and interpolates on to new time points at scri+, multiplying two results together before supplying the result. More...
 
struct  ScriPlusInterpolationManager< VectorTypeToInterpolate, Tags::Du< Tag > >
 Stores necessary data and interpolates on to new time points at scri+, differentiating before supplying the result. More...
 
struct  second_swsh_derivative_tags_to_compute_for
 A typelist for the set of tags computed by multiple spin-weighted differentiation using utilities from the Swsh namespace. More...
 
struct  single_swsh_derivative_tags_to_compute_for
 A typelist for the set of tags computed by single spin-weighted differentiation using utilities from the Swsh namespace. More...
 
struct  System
 
struct  TransformBondiJToCauchyCoords
 Transform Tags::BondiJ from the partially flat coordinates to the Cauchy coordinates. More...
 
struct  VolumeWeyl< Tags::Psi0 >
 Compute the Weyl scalar \(\Psi_0\) in the volume according to a standard set of Newman-Penrose vectors. More...
 
struct  VolumeWeyl< Tags::Psi0Match >
 Compute the Weyl scalar \(\Psi_0\) in the volume for the purpose of CCM, the quantity is in the Cauchy coordinates. More...
 
class  WorldtubeBufferUpdater
 Abstract base class for utilities that are able to perform the buffer updating procedure needed by the WorldtubeDataManager. More...
 
struct  WorldtubeComponentBase
 Generic base class for components that supply CCE worldtube boundary data. See class specializations for specific worldtube boundary components. More...
 
class  WorldtubeDataManager
 Abstract base class for managers of CCE worldtube data that is provided in large time-series chunks, especially the type provided by input h5 files. BoundaryTags is a tmpl::list of tags on the worldtube boundary. More...
 

Typedefs

using SphericaliCartesianJ = Tensor< DataVector, tmpl::integral_list< std::int32_t, 2, 1 >, index_list< SpatialIndex< 3, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial > >, SpatialIndex< 3, UpLo::Lo, ::Frame::Inertial > > >
 
using CartesianiSphericalJ = Tensor< DataVector, tmpl::integral_list< std::int32_t, 2, 1 >, index_list< SpatialIndex< 3, UpLo::Lo, ::Frame::Inertial >, SpatialIndex< 3, UpLo::Up, ::Frame::Spherical<::Frame::Inertial > > > >
 
using AngulariCartesianA = Tensor< DataVector, tmpl::integral_list< std::int32_t, 2, 1 >, index_list< SpatialIndex< 2, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial > >, SpacetimeIndex< 3, UpLo::Lo, ::Frame::Inertial > > >
 
using SphericaliCartesianjj = Tensor< DataVector, tmpl::integral_list< std::int32_t, 2, 1, 1 >, index_list< SpatialIndex< 3, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial > >, SpatialIndex< 3, UpLo::Lo, ::Frame::Inertial >, SpatialIndex< 3, UpLo::Lo, ::Frame::Inertial > > >
 
template<typename BondiVariable >
using integrand_terms_to_compute_for_bondi_variable = typename detail::integrand_terms_to_compute_for_bondi_variable_impl< BondiVariable >::type
 A struct for providing a tmpl::list of integrand tags that need to be computed before integration can proceed for a given Bondi variable tag.
 
using gauge_adjustments_setup_tags = tmpl::list< Tags::BondiR, Tags::BondiJ, Tags::Dr< Tags::BondiJ > >
 The set of tags that should be calculated before the initial data is computed on the first hypersurface.
 
using bondi_hypersurface_step_tags = tmpl::list< Tags::BondiBeta, Tags::BondiQ, Tags::BondiU, Tags::BondiW, Tags::BondiH >
 
template<typename Tag >
using integrand_temporary_tags = typename ComputeBondiIntegrand< Tag >::temporary_tags
 
template<template< typename > class BoundaryPrefix>
using pre_computation_boundary_tags = tmpl::list< BoundaryPrefix< Tags::BondiR >, BoundaryPrefix< Tags::DuRDividedByR > >
 A typelist for the set of BoundaryValue tags needed as an input to any of the template specializations of PrecomputeCceDependencies. More...
 
using pre_computation_tags = tmpl::list< Tags::EthRDividedByR, Tags::EthEthRDividedByR, Tags::EthEthbarRDividedByR, Tags::BondiK, Tags::OneMinusY, Tags::BondiR >
 A typelist for the set of tags computed by the set of template specializations of PrecomputeCceDepedencies. More...
 
using all_swsh_derivative_tags_for_scri = tmpl::list< Spectral::Swsh::Tags::Derivative< Tags::Dy< Tags::BondiU >, Spectral::Swsh::Tags::Eth >, Spectral::Swsh::Tags::Derivative< Spectral::Swsh::Tags::Derivative< Tags::BondiBeta, Spectral::Swsh::Tags::EthEthbar >, Spectral::Swsh::Tags::Ethbar >, Spectral::Swsh::Tags::Derivative< Tags::Dy< Tags::Du< Tags::BondiJ > >, Spectral::Swsh::Tags::Ethbar >, Spectral::Swsh::Tags::Derivative< Tags::Dy< Tags::Dy< Tags::BondiU > >, Spectral::Swsh::Tags::Ethbar >, Spectral::Swsh::Tags::Derivative< Tags::Dy< Tags::BondiQ >, Spectral::Swsh::Tags::Ethbar >, Spectral::Swsh::Tags::Derivative< Tags::Dy< Tags::Dy< Tags::BondiBeta > >, Spectral::Swsh::Tags::Eth > >
 Typelist of steps for SwshDerivatives mutations called on volume quantities needed for scri+ computations.
 
using all_boundary_pre_swsh_derivative_tags_for_scri = tmpl::list< Tags::ComplexInertialRetardedTime >
 Typelist of steps for PreSwshDerivatives mutations called on boundary (angular grid only) quantities needed for scri+ computations.
 
using all_boundary_swsh_derivative_tags_for_scri = tmpl::list< Spectral::Swsh::Tags::Derivative< Tags::ComplexInertialRetardedTime, Spectral::Swsh::Tags::EthEth > >
 Typelist of steps for SwshDerivatives mutations called on boundary (angular grid only) quantities needed for scri+ computations.
 
using all_swsh_derivative_tags = tmpl::remove_duplicates< tmpl::flatten< tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind< tmpl::list, single_swsh_derivative_tags_to_compute_for< tmpl::_1 >, second_swsh_derivative_tags_to_compute_for< tmpl::_1 > > >, all_swsh_derivative_tags_for_scri > > >
 A typelist for the set of tags computed by spin-weighted differentiation using utilities from the Swsh namespace. More...
 
using all_transform_buffer_tags = tmpl::remove_duplicates< tmpl::flatten< tmpl::transform< all_swsh_derivative_tags, tmpl::bind< Spectral::Swsh::coefficient_buffer_tags_for_derivative_tag, tmpl::_1 > > > >
 A typelist for the full set of coefficient buffers needed to process all of the tags in all_swsh_derivative_tags using batch processing provided in mutate_all_swsh_derivatives_for_tag. More...
 
using all_pre_swsh_derivative_tags_for_scri = tmpl::list< Tags::Du< Tags::BondiJ >, Tags::Dy< Tags::Du< Tags::BondiJ > >, Tags::Dy< Tags::Dy< Tags::Du< Tags::BondiJ > > >, Tags::Dy< Tags::Dy< Tags::BondiW > >, Tags::Dy< Tags::Dy< Tags::BondiQ > >, Tags::Dy< Tags::Dy< Tags::BondiU > >, Tags::Dy< Tags::Dy< Tags::Dy< Tags::BondiJ > > >, Tags::Dy< Tags::Dy< Tags::Dy< Tags::BondiU > > >, Tags::Dy< Tags::Dy< Tags::Dy< Tags::BondiBeta > > >, Tags::Dy< Spectral::Swsh::Tags::Derivative< Tags::BondiBeta, Spectral::Swsh::Tags::EthEthbar > > >
 Typelist of steps for PreSwshDerivatives mutations needed for scri+ computations.
 
using all_pre_swsh_derivative_tags = tmpl::remove_duplicates< tmpl::flatten< tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind< tmpl::list, pre_swsh_derivative_tags_to_compute_for< tmpl::_1 >, detail::additional_pre_swsh_derivative_tags_for< tmpl::_1 > > >, all_pre_swsh_derivative_tags_for_scri > > >
 A typelist for the full set of tags needed as direct or indirect input to any ComputeBondiIntegrand that are computed any specialization of ComputePreSwshDerivatives. More...
 
using scri_plus_interpolation_set = tmpl::list< Tags::News, Tags::ScriPlus< Tags::Strain >, Tags::ScriPlus< Tags::Psi3 >, Tags::ScriPlus< Tags::Psi2 >, Tags::ScriPlus< Tags::Psi1 >, Tags::ScriPlus< Tags::Psi0 >, Tags::Du< Tags::TimeIntegral< Tags::ScriPlus< Tags::Psi4 > > >, Tags::EthInertialRetardedTime >
 The tags that are needed to be interpolated at scri+ for the available observation tags.
 
template<typename Tag >
using OnDemandInputsForSwshJacobian = detail::OnDemandInputsForSwshJacobianImpl< Tag, std::integral_constant< int, Tag::type::type::spin >, std::true_type >
 Provide an expression template or reference to Tag, intended for situations for which a repeated computation is more desirable than storing a value in the DataBox (e.g. for conjugation and simple product rule expansion).
 
using cce_metric_input_tags = tmpl::list< Tags::detail::SpatialMetric, Tags::detail::Dr< Tags::detail::SpatialMetric >, ::Tags::dt< Tags::detail::SpatialMetric >, Tags::detail::Shift, Tags::detail::Dr< Tags::detail::Shift >, ::Tags::dt< Tags::detail::Shift >, Tags::detail::Lapse, Tags::detail::Dr< Tags::detail::Lapse >, ::Tags::dt< Tags::detail::Lapse > >
 the full set of tensors to be extracted from the worldtube h5 file
 
using cce_bondi_input_tags = tmpl::list< Spectral::Swsh::Tags::SwshTransform< Tags::BondiBeta >, Spectral::Swsh::Tags::SwshTransform< Tags::BondiU >, Spectral::Swsh::Tags::SwshTransform< Tags::BondiQ >, Spectral::Swsh::Tags::SwshTransform< Tags::BondiW >, Spectral::Swsh::Tags::SwshTransform< Tags::BondiJ >, Spectral::Swsh::Tags::SwshTransform< Tags::Dr< Tags::BondiJ > >, Spectral::Swsh::Tags::SwshTransform< Tags::Du< Tags::BondiJ > >, Spectral::Swsh::Tags::SwshTransform< Tags::BondiR >, Spectral::Swsh::Tags::SwshTransform< Tags::Du< Tags::BondiR > > >
 the full set of tensors to be extracted from the reduced form of the worldtube h5 file
 
using klein_gordon_input_tags = tmpl::list< Spectral::Swsh::Tags::SwshTransform< Tags::KleinGordonPsi >, Spectral::Swsh::Tags::SwshTransform< Tags::KleinGordonPi > >
 
template<typename Tag >
using pre_swsh_derivative_tags_to_compute_for_t = typename pre_swsh_derivative_tags_to_compute_for< Tag >::type
 
template<typename Tag >
using single_swsh_derivative_tags_to_compute_for_t = typename single_swsh_derivative_tags_to_compute_for< Tag >::type
 
template<typename Tag >
using second_swsh_derivative_tags_to_compute_for_t = typename second_swsh_derivative_tags_to_compute_for< Tag >::type
 

Functions

void trigonometric_functions_on_swsh_collocation (gsl::not_null< Scalar< DataVector > * > cos_phi, gsl::not_null< Scalar< DataVector > * > cos_theta, gsl::not_null< Scalar< DataVector > * > sin_phi, gsl::not_null< Scalar< DataVector > * > sin_theta, size_t l_max)
 Constructs the collocation values for \(\cos(\phi)\), \(\cos(\theta)\), \(\sin(\phi)\), and \(\sin(\theta)\), returned by not_null pointer in that order. More...
 
void cartesian_to_spherical_coordinates_and_jacobians (gsl::not_null< tnsr::I< DataVector, 3 > * > unit_cartesian_coords, gsl::not_null< SphericaliCartesianJ * > cartesian_to_spherical_jacobian, gsl::not_null< CartesianiSphericalJ * > inverse_cartesian_to_spherical_jacobian, const Scalar< DataVector > &cos_phi, const Scalar< DataVector > &cos_theta, const Scalar< DataVector > &sin_phi, const Scalar< DataVector > &sin_theta, double extraction_radius)
 Creates both the Jacobian and inverse Jacobian between Cartesian and spherical coordinates, and the coordinates themselves. More...
 
void cartesian_spatial_metric_and_derivatives_from_modes (gsl::not_null< tnsr::ii< DataVector, 3 > * > cartesian_spatial_metric, gsl::not_null< tnsr::II< DataVector, 3 > * > inverse_cartesian_spatial_metric, gsl::not_null< tnsr::ijj< DataVector, 3 > * > d_cartesian_spatial_metric, gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_cartesian_spatial_metric, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const tnsr::ii< ComplexModalVector, 3 > &spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dr_spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dt_spatial_metric_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, size_t l_max)
 
void cartesian_shift_and_derivatives_from_modes (gsl::not_null< tnsr::I< DataVector, 3 > * > cartesian_shift, gsl::not_null< tnsr::iJ< DataVector, 3 > * > d_cartesian_shift, gsl::not_null< tnsr::I< DataVector, 3 > * > dt_cartesian_shift, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const tnsr::I< ComplexModalVector, 3 > &shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dr_shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dt_shift_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, size_t l_max)
 Compute \(\beta^{i}\), \(\partial_i \beta^{j}\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities. More...
 
void cartesian_lapse_and_derivatives_from_modes (gsl::not_null< Scalar< DataVector > * > cartesian_lapse, gsl::not_null< tnsr::i< DataVector, 3 > * > d_cartesian_lapse, gsl::not_null< Scalar< DataVector > * > dt_cartesian_lapse, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const Scalar< ComplexModalVector > &lapse_coefficients, const Scalar< ComplexModalVector > &dr_lapse_coefficients, const Scalar< ComplexModalVector > &dt_lapse_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, size_t l_max)
 Compute \(\alpha\), \(\partial_i \alpha\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities. More...
 
void null_metric_and_derivative (gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * > du_null_metric, gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * > null_metric, const SphericaliCartesianJ &cartesian_to_spherical_jacobian, const tnsr::aa< DataVector, 3 > &dt_spacetime_metric, const tnsr::aa< DataVector, 3 > &spacetime_metric)
 Computes the spacetime metric and its first derivative in the intermediate radial null coordinates. More...
 
void worldtube_normal_and_derivatives (gsl::not_null< tnsr::I< DataVector, 3 > * > worldtube_normal, gsl::not_null< tnsr::I< DataVector, 3 > * > dt_worldtube_normal, const Scalar< DataVector > &cos_phi, const Scalar< DataVector > &cos_theta, const tnsr::aa< DataVector, 3 > &spacetime_metric, const tnsr::aa< DataVector, 3 > &dt_spacetime_metric, const Scalar< DataVector > &sin_phi, const Scalar< DataVector > &sin_theta, const tnsr::II< DataVector, 3 > &inverse_spatial_metric)
 Computes the spatial unit normal vector \(s^i\) to the spherical worldtube surface and its first time derivative. More...
 
void null_vector_l_and_derivatives (gsl::not_null< tnsr::A< DataVector, 3 > * > du_null_l, gsl::not_null< tnsr::A< DataVector, 3 > * > null_l, const tnsr::I< DataVector, 3 > &dt_worldtube_normal, const Scalar< DataVector > &dt_lapse, const tnsr::aa< DataVector, 3 > &dt_spacetime_metric, const tnsr::I< DataVector, 3 > &dt_shift, const Scalar< DataVector > &lapse, const tnsr::aa< DataVector, 3 > &spacetime_metric, const tnsr::I< DataVector, 3 > &shift, const tnsr::I< DataVector, 3 > &worldtube_normal)
 Computes the null 4-vector \(l^\mu\) on the worldtube surface that is to be used as the CCE hypersurface generator, and the first time derivative \(\partial_u l^\mu\). More...
 
void dlambda_null_metric_and_inverse (gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * > dlambda_null_metric, gsl::not_null< tnsr::AA< DataVector, 3, Frame::RadialNull > * > dlambda_inverse_null_metric, const AngulariCartesianA &angular_d_null_l, const SphericaliCartesianJ &cartesian_to_spherical_jacobian, const tnsr::iaa< DataVector, 3 > &phi, const tnsr::aa< DataVector, 3 > &dt_spacetime_metric, const tnsr::A< DataVector, 3 > &du_null_l, const tnsr::AA< DataVector, 3, Frame::RadialNull > &inverse_null_metric, const tnsr::A< DataVector, 3 > &null_l, const tnsr::aa< DataVector, 3 > &spacetime_metric)
 Computes the partial derivative of the spacetime metric and inverse spacetime metric in the intermediate null radial coordinates with respect to the null generator \(l^\mu\). More...
 
void bondi_r (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > bondi_r, const tnsr::aa< DataVector, 3, Frame::RadialNull > &null_metric)
 Computes the Bondi radius of the worldtube. More...
 
void d_bondi_r (gsl::not_null< tnsr::a< DataVector, 3, Frame::RadialNull > * > d_bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const tnsr::aa< DataVector, 3, Frame::RadialNull > &dlambda_null_metric, const tnsr::aa< DataVector, 3, Frame::RadialNull > &du_null_metric, const tnsr::AA< DataVector, 3, Frame::RadialNull > &inverse_null_metric, size_t l_max)
 Computes the full 4-dimensional partial of the Bondi radius with respect to the intermediate null coordinates. More...
 
void dyads (gsl::not_null< tnsr::i< ComplexDataVector, 2, Frame::RadialNull > * > down_dyad, gsl::not_null< tnsr::I< ComplexDataVector, 2, Frame::RadialNull > * > up_dyad)
 Compute the complex angular dyads used to define the spin-weighted scalars in the CCE system. More...
 
void beta_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > beta, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r)
 Compute the \(\beta\) (lapse) function for the CCE Bondi-like metric. More...
 
void bondi_u_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > bondi_u, const tnsr::i< ComplexDataVector, 2, Frame::RadialNull > &dyad, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const tnsr::AA< DataVector, 3, Frame::RadialNull > &inverse_null_metric)
 Compute the \(U\) (shift) function for the CCE Bondi-like metric. More...
 
void bondi_w_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > bondi_w, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const tnsr::AA< DataVector, 3, Frame::RadialNull > &inverse_null_metric, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r)
 Compute the \(W\) (mass aspect) function for the CCE Bondi-like metric. More...
 
void bondi_j_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * > bondi_j, const tnsr::aa< DataVector, 3, Frame::RadialNull > &null_metric, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &dyad)
 Compute the \(J\) (intuitively similar to the transverse-traceless part of the angular metric) function for the CCE Bondi-like metric. More...
 
void dr_bondi_j (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * > dr_bondi_j, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > denominator_buffer, const tnsr::aa< DataVector, 3, Frame::RadialNull > &dlambda_null_metric, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &bondi_j, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &dyad)
 Compute the radial derivative of the angular metric spin-weighted scalar \(\partial_r J\) in the CCE Bondi-like metric. More...
 
void d2lambda_bondi_r (gsl::not_null< Scalar< DataVector > * > d2lambda_bondi_r, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &dr_bondi_j, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &bondi_j, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r)
 Compute the second derivative of the Bondi radius with respect to the intermediate null coordinate radius \(\partial_\lambda^2 r\). More...
 
void bondi_q_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > bondi_q, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > dr_bondi_u, const Scalar< DataVector > &d2lambda_r, const tnsr::AA< DataVector, 3, Frame::RadialNull > &dlambda_inverse_null_metric, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const tnsr::i< ComplexDataVector, 2, Frame::RadialNull > &dyad, const tnsr::i< DataVector, 2, Frame::RadialNull > &angular_d_dlambda_r, const tnsr::AA< DataVector, 3, Frame::RadialNull > &inverse_null_metric, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &bondi_j, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 1 > > &bondi_u)
 Compute the Bondi metric contribution \(Q\) (radial derivative of shift). More...
 
void bondi_h_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * > bondi_h, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &bondi_j, const tnsr::aa< DataVector, 3, Frame::RadialNull > &du_null_metric, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &dyad)
 Compute the Bondi metric contribution \((\partial_u J)_{y} \equiv H\) (the retarded time derivative evaluated at fixed \(y\) coordinate) on the worldtube boundary. More...
 
void du_j_worldtube_data (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * > du_bondi_j, const tnsr::a< DataVector, 3, Frame::RadialNull > &d_bondi_r, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &bondi_j, const tnsr::aa< DataVector, 3, Frame::RadialNull > &du_null_metric, const tnsr::aa< DataVector, 3, Frame::RadialNull > &dlambda_null_metric, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &bondi_r, const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &dyad)
 Compute the Bondi metric contribution \((\partial_u J)_r\) (the retarded time derivative at fixed coordinate \(r\)) on the worldtube boundary. More...
 
template<typename BoundaryTagList >
void create_bondi_boundary_data (const gsl::not_null< Variables< BoundaryTagList > * > bondi_boundary_data, const tnsr::iaa< DataVector, 3 > &phi, const tnsr::aa< DataVector, 3 > &pi, const tnsr::aa< DataVector, 3 > &spacetime_metric, const double extraction_radius, const size_t l_max)
 Process the worldtube data from generalized harmonic quantities to desired Bondi quantities, placing the result in the passed Variables. More...
 
template<typename BoundaryTagList >
void create_bondi_boundary_data (const gsl::not_null< Variables< BoundaryTagList > * > bondi_boundary_data, const tnsr::ii< ComplexModalVector, 3 > &spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dt_spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dr_spatial_metric_coefficients, const tnsr::I< ComplexModalVector, 3 > &shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dt_shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dr_shift_coefficients, const Scalar< ComplexModalVector > &lapse_coefficients, const Scalar< ComplexModalVector > &dt_lapse_coefficients, const Scalar< ComplexModalVector > &dr_lapse_coefficients, const double extraction_radius, const size_t l_max)
 Process the worldtube data from modal metric components and derivatives to desired Bondi quantities, placing the result in the passed Variables. More...
 
void logical_partial_directional_derivative_of_complex (gsl::not_null< ComplexDataVector * > d_u, const ComplexDataVector &u, const Mesh< 3 > &mesh, size_t dimension_to_differentiate)
 Computes the partial derivative along a particular direction determined by the dimension_to_differentiate. The input u is differentiated with the spectral matrix and the solution is placed in d_u. More...
 
const Matrixprecomputed_cce_q_integrator (size_t number_of_radial_grid_points)
 Provides access to a lazily cached integration matrix for the \(Q\) and \(W\) equations in CCE hypersurface evaluation. More...
 
void radial_integrate_cce_pole_equations (gsl::not_null< ComplexDataVector * > integral_result, const ComplexDataVector &pole_of_integrand, const ComplexDataVector &regular_integrand, const ComplexDataVector &boundary, const ComplexDataVector &one_minus_y, size_t l_max, size_t number_of_radial_points)
 A utility function for evaluating the \(Q\) and \(W\) hypersurface integrals during CCE evolution. More...
 
template<template< typename > class BoundaryPrefix, typename DataBoxType >
void mutate_all_precompute_cce_dependencies (const gsl::not_null< DataBoxType * > box)
 Convenience routine for computing all of the CCE inputs to integrand computation that do not depend on intermediate integrand results. It should be executed before moving through the hierarchy of integrands. More...
 
template<typename BondiValueTag , typename DataBoxType >
void mutate_all_pre_swsh_derivatives_for_tag (const gsl::not_null< DataBoxType * > box)
 Evaluates the set of inputs to the CCE integrand for BondiValueTag that do not involve spin-weighted angular differentiation. More...
 
template<typename Tag >
std::string dataset_label_for_tag ()
 The dataset string associated with each scalar that will be output in the reduced set of SpEC-like worldtube boundary data.
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiBeta > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiU > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiQ > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiW > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiJ > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::Dr< Cce::Tags::BondiJ > > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::Du< Cce::Tags::BondiJ > > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::BondiR > > ()
 
template<>
std::string dataset_label_for_tag< Cce::Tags::BoundaryValue< Cce::Tags::Du< Cce::Tags::BondiR > > > ()
 
void cartesian_spatial_metric_and_derivatives_from_unnormalized_spec_modes (gsl::not_null< tnsr::ii< DataVector, 3 > * > cartesian_spatial_metric, gsl::not_null< tnsr::II< DataVector, 3 > * > inverse_cartesian_spatial_metric, gsl::not_null< tnsr::ijj< DataVector, 3 > * > d_cartesian_spatial_metric, gsl::not_null< tnsr::ii< DataVector, 3 > * > dt_cartesian_spatial_metric, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, gsl::not_null< Scalar< DataVector > * > radial_correction_factor, const tnsr::ii< ComplexModalVector, 3 > &spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dr_spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dt_spatial_metric_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, const tnsr::I< DataVector, 3 > &unit_cartesian_coords, size_t l_max)
 
void cartesian_shift_and_derivatives_from_unnormalized_spec_modes (gsl::not_null< tnsr::I< DataVector, 3 > * > cartesian_shift, gsl::not_null< tnsr::iJ< DataVector, 3 > * > d_cartesian_shift, gsl::not_null< tnsr::I< DataVector, 3 > * > dt_cartesian_shift, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const tnsr::I< ComplexModalVector, 3 > &shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dr_shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dt_shift_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, const Scalar< DataVector > &radial_derivative_correction_factor, size_t l_max)
 Compute \(\beta^{i}\), \(\partial_i \beta^{j}\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities. More...
 
void cartesian_lapse_and_derivatives_from_unnormalized_spec_modes (gsl::not_null< Scalar< DataVector > * > cartesian_lapse, gsl::not_null< tnsr::i< DataVector, 3 > * > d_cartesian_lapse, gsl::not_null< Scalar< DataVector > * > dt_cartesian_lapse, gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * > interpolation_modal_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > interpolation_buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const Scalar< ComplexModalVector > &lapse_coefficients, const Scalar< ComplexModalVector > &dr_lapse_coefficients, const Scalar< ComplexModalVector > &dt_lapse_coefficients, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, const Scalar< DataVector > &radial_derivative_correction_factor, size_t l_max)
 Compute \(\alpha\), \(\partial_i \alpha\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities. More...
 
template<typename TagList >
void create_bondi_boundary_data_from_unnormalized_spec_modes (const gsl::not_null< Variables< TagList > * > bondi_boundary_data, const tnsr::ii< ComplexModalVector, 3 > &spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dt_spatial_metric_coefficients, const tnsr::ii< ComplexModalVector, 3 > &dr_spatial_metric_coefficients, const tnsr::I< ComplexModalVector, 3 > &shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dt_shift_coefficients, const tnsr::I< ComplexModalVector, 3 > &dr_shift_coefficients, const Scalar< ComplexModalVector > &lapse_coefficients, const Scalar< ComplexModalVector > &dt_lapse_coefficients, const Scalar< ComplexModalVector > &dr_lapse_coefficients, const double extraction_radius, const size_t l_max)
 Process the worldtube data from modal metric components and derivatives with incorrectly normalized radial derivatives from an old version of SpEC to desired Bondi quantities, placing the result in the passed DataBox. More...
 
template<typename BondiValueTag , typename DataBoxTagList >
void mutate_all_swsh_derivatives_for_tag (const gsl::not_null< db::DataBox< DataBoxTagList > * > box)
 This routine evaluates the set of inputs to the CCE integrand for BondiValueTag which are spin-weighted angular derivatives. More...
 

Detailed Description

The set of utilities for performing Cauchy characteristic evolution and Cauchy characteristic matching.

Details

Cauchy characteristic evolution (CCE) is a secondary nonlinear GR evolution system that covers the domain extending from a spherical boundary away from the strong-field regime, and extending all the way to future null infinity \(\mathcal I^+\). The evolution system is governed by five hypersurface equations that are integrated radially along future null slices, and one evolution equation that governs the evolution of one hypersurface to the next.

The mathematics of CCE are intricate, and SpECTRE's version implements a number of tricks and improvements that are not yet present in other contexts. For introductions to CCE generally, see papers [20], [21], and [11]. Here we do not present a full description of all of the mathematics, but instead just provide a high-level roadmap of the SpECTRE utilities and how they come together in the CCE system. This is intended as a map for maintainers of the codebase.

First, worldtube data from a completed or running Cauchy evolution of the Einstein field equations (currently the only one implemented in SpECTRE is Generalized Harmonic) must be translated to Bondi spin-weighted scalars at the extraction sphere. Relevant utilities for this conversion are Cce::WorldtubeDataManager, Cce::create_bondi_boundary_data. Relevant parts of the parallel infrastructure are Cce::H5WorldtubeBoundary, Cce::Actions::BoundaryComputeAndSendToEvolution, Cce::Actions::RequestBoundaryData, and Cce::Actions::ReceiveWorldtubeData.

The first hypersurface must be initialized with some reasonable starting value for the evolved Bondi quantity \(J\). There isn't a universal perfect prescription for this, as a complete description would require, like the Cauchy initial data problem, knowledge of the system arbitrarily far in the past. A utility for assigning the initial data is Cce::InitializeJ.

SpECTRE CCE is currently unique in implementing an additional gauge transform after the worldtube boundary data is derived. This is performed to obtain an asymptotically well-behaved gauge that is guaranteed to avoid logarithmic behavior that has plagued other CCE implementations, and so that the asymptotic computations can be as simple, fast, and reliable as possible. Relevant utilities for the gauge transformation are Cce::GaugeAdjustedBoundaryValue (see template specializations), Cce::GaugeUpdateTimeDerivatives, Cce::GaugeUpdateAngularFromCartesian, Cce::GaugeUpdateJacobianFromCoordinates, Cce::GaugeUpdateInterpolator, Cce::GaugeUpdateOmega, Cce::GaugeUpdateInertialTimeDerivatives, and Cce::InitializeGauge.

Next, the CCE system must evaluate the hypersurface differential equations. There are five, in sequence, deriving \(\beta, Q, U, W,\) and \(H\). For each of the five radial differential equations, first the products and derivatives on the right-hand side must be evaluated, then the full right-hand side of the equation must be computed, and finally the radial differential equation is integrated. The equations have a hierarchical structure, so the result for \(\beta\) feeds into the radial differential equation for \(Q\), and both feed into \(U\), and so on.

Relevant utilities for computing the inputs to the hypersurface equations are Cce::PrecomputeCceDependencies (see template specializations), Cce::mutate_all_precompute_cce_dependencies, Cce::PreSwshDerivatives (see template specializations), Cce::mutate_all_pre_swsh_derivatives_for_tag, and Cce::mutate_all_swsh_derivatives_for_tag. There are a number of typelists in IntegrandInputSteps.hpp that determine the set of quantities to be evaluated in each of the five hypersurface steps. Once the hypersurface equation inputs are computed, then a hypersurface equation right-hand side can be evaluated via Cce::ComputeBondiIntegrand (see template specializations). Then, the hypersurface equation may be integrated via Cce::RadialIntegrateBondi (see template specializations).

Relevant parts of the parallel infrastructure for performing the hypersurface steps are: Cce::CharacteristicEvolution, Cce::Actions::CalculateIntegrandInputsForTag, and Cce::Actions::PrecomputeGlobalCceDependencies. Note that most of the algorithmic steps are laid out in order in the phase-dependent action list of Cce::CharacteristicEvolution.

The time integration for the hyperbolic part of the CCE equations is performed via \(\partial_u J = H\), where \(\partial_u\) represents differentiation with respect to retarded time at fixed numerical radius \(y\).

At this point, all of the Bondi quantities on a given hypersurface have been evaluated, and we wish to output the relevant waveform quantities at \(\mathcal I^+\). This acts much like an additional step in the hypersurface sequence, with inputs that need to be calculated before the quantities of interest can be evaluated. The action Cce::Actions::CalculateScriInputs performs the sequence of steps to obtain those inputs, and the utilities Cce::CalculateScriPlusValue (see template specializations) can be used to evaluate the desired outputs at \(\mathcal I^+\).

Unfortunately, those quantities at \(\mathcal I^+\) are not yet an appropriate waveform output, because the time coordinate with which they are evaluated is the simulation time, not an asymptotically inertial time. So, instead of directly writing the waveform outputs, we must put them in a queue to be interpolated once enough data points have been accumulated to perform a reliable interpolation at a consistent cut of \(\mathcal I^+\) at constant inertial time. Utilities for calculating and evolving the asymptotic inertial time are Cce::InitializeScriPlusValue and Cce::CalculateScriPlusValue using arguments involving Cce::Tags::InertialRetardedTime. A utility for managing the interpolation is Cce::ScriPlusInterpolationManager, and relevant parts of the parallel infrastructure for manipulating the data into the interpolator and writing the results to disk are Cce::Actions::InsertInterpolationScriData and Cce::Actions::ScriObserveInterpolated.

The template parameter EvolveCcm will add an extra evolved variable to the characteristic system, namely Cce::Tags::PartiallyFlatCartesianCoords.

Typedef Documentation

◆ all_pre_swsh_derivative_tags

using Cce::all_pre_swsh_derivative_tags = typedef tmpl::remove_duplicates<tmpl::flatten<tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind< tmpl::list, pre_swsh_derivative_tags_to_compute_for<tmpl::_1>, detail::additional_pre_swsh_derivative_tags_for<tmpl::_1> >>, all_pre_swsh_derivative_tags_for_scri> >>

A typelist for the full set of tags needed as direct or indirect input to any ComputeBondiIntegrand that are computed any specialization of ComputePreSwshDerivatives.

Details

This is provided for easy and maintainable construction of a Variables or DataBox with all of the quantities needed for a CCE computation or component. The data structures represented by these tags should each have size number_of_radial_points * Spectral::Swsh::number_of_swsh_collocation_points(l_max).

◆ all_swsh_derivative_tags

using Cce::all_swsh_derivative_tags = typedef tmpl::remove_duplicates<tmpl::flatten<tmpl::list< tmpl::transform< bondi_hypersurface_step_tags, tmpl::bind<tmpl::list, single_swsh_derivative_tags_to_compute_for<tmpl::_1>, second_swsh_derivative_tags_to_compute_for<tmpl::_1> >>, all_swsh_derivative_tags_for_scri> >>

A typelist for the set of tags computed by spin-weighted differentiation using utilities from the Swsh namespace.

Details

This is provided for easy and maintainable construction of a Variables or DataBox with all of the quantities needed for a CCE computation or component. The data structures represented by these tags should each have size number_of_radial_points * Spectral::Swsh::number_of_swsh_collocation_points(l_max). All of these tags (for a given integrated Bondi quantity) may be computed at once if using a DataBox using the template mutate_all_swsh_derivatives_for_tag. Individual tag computation is not provided in a convenient interface, as there is significant savings in aggregating spin-weighted differentiation steps. The full set of integrated Bondi quantities is available from the typelist bondi_hypersurface_step_tags.

◆ all_transform_buffer_tags

using Cce::all_transform_buffer_tags = typedef tmpl::remove_duplicates<tmpl::flatten<tmpl::transform< all_swsh_derivative_tags, tmpl::bind<Spectral::Swsh::coefficient_buffer_tags_for_derivative_tag, tmpl::_1> >> >

A typelist for the full set of coefficient buffers needed to process all of the tags in all_swsh_derivative_tags using batch processing provided in mutate_all_swsh_derivatives_for_tag.

Details

This is provided for easy and maintainable construction of a Variables or DataBox with all of the quantities needed for a CCE computation or component. The data structures represented by these tags should each have size number_of_radial_points * Spectral::Swsh::size_of_libsharp_coefficient_vector(l_max). Providing buffers associated with these tags is necessary for the use of the aggregated computation mutate_all_swsh_derivatives_for_tag.

◆ bondi_hypersurface_step_tags

The set of Bondi quantities computed by hypersurface step, in the required order of computation

◆ integrand_temporary_tags

template<typename Tag >
using Cce::integrand_temporary_tags = typedef typename ComputeBondiIntegrand<Tag>::temporary_tags

Metafunction that is a tmpl::list of the temporary tags taken by the ComputeBondiIntegrand computational struct.

◆ pre_computation_boundary_tags

template<template< typename > class BoundaryPrefix>
using Cce::pre_computation_boundary_tags = typedef tmpl::list<BoundaryPrefix<Tags::BondiR>, BoundaryPrefix<Tags::DuRDividedByR> >

A typelist for the set of BoundaryValue tags needed as an input to any of the template specializations of PrecomputeCceDependencies.

Details

This is provided for easy and maintainable construction of a Variables or DataBox with all of the quantities necessary for a CCE computation or portion thereof. A container of these tags should have size Spectral::Swsh::number_of_swsh_collocation_points(l_max).

◆ pre_computation_tags

A typelist for the set of tags computed by the set of template specializations of PrecomputeCceDepedencies.

Details

This is provided for easy and maintainable construction of a Variables or DataBox with all of the quantities needed for a CCE computation or component. The data structures represented by these tags should each have size number_of_radial_points * Spectral::Swsh::number_of_swsh_collocation_points(l_max). All of these tags may be computed at once if using a DataBox using the template mutate_all_precompute_cce_dependencies or individually using the template specializations PrecomputeCceDependencies.

Note
the tag Tags::DuRDividedByR is omitted from this list because in the case where a gauge transformation must be applied, the time derivative quantities must wait until later in the computation.

Function Documentation

◆ beta_worldtube_data()

void Cce::beta_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  beta,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r 
)

Compute the \(\beta\) (lapse) function for the CCE Bondi-like metric.

Details

The Bondi-like metric has \(g^{u r} = - e^{2 \beta}\), and the value of \(\beta\) is obtained from the intermediate null metric by (see equation (51) of [11]) using:

\[ \beta = -\frac{1}{2} \ln \partial_{\lambda} r \]

◆ bondi_h_worldtube_data()

void Cce::bondi_h_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * >  bondi_h,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  bondi_j,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  du_null_metric,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &  dyad 
)

Compute the Bondi metric contribution \((\partial_u J)_{y} \equiv H\) (the retarded time derivative evaluated at fixed \(y\) coordinate) on the worldtube boundary.

Details

The numerical time derivative (along the worldtube, rather than along the surface of constant Bondi \(r\)) is computed by (see equation (48) of [11])

\[ (\partial_u J)_y = \frac{1}{2 r^2} q^A q^B \partial_u g_{A B} - \frac{2 \partial_u r}{r} J \]

Note
There is the regrettable notation difference with the primary reference for these formulas [11] in that we denote with \(H\) the time derivative at constant numerical radius, where [11] uses \(H\) to denote the time derivative at constant Bondi radius.

◆ bondi_j_worldtube_data()

void Cce::bondi_j_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * >  bondi_j,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  null_metric,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &  dyad 
)

Compute the \(J\) (intuitively similar to the transverse-traceless part of the angular metric) function for the CCE Bondi-like metric.

Details

The Bondi-like metric has \(J = \frac{1}{2 r^2} q^A q^B g_{A B}\). This expression holds both for the right-hand side in the Bondi coordinates and for the right-hand side in the intermediate null coordinates (see equation (45) of [11]).

◆ bondi_q_worldtube_data()

void Cce::bondi_q_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  bondi_q,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  dr_bondi_u,
const Scalar< DataVector > &  d2lambda_r,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  dlambda_inverse_null_metric,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const tnsr::i< ComplexDataVector, 2, Frame::RadialNull > &  dyad,
const tnsr::i< DataVector, 2, Frame::RadialNull > &  angular_d_dlambda_r,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  inverse_null_metric,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  bondi_j,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 1 > > &  bondi_u 
)

Compute the Bondi metric contribution \(Q\) (radial derivative of shift).

Details

The definition of \(Q\) in terms of the Bondi metric components is

\[ Q = q^A e^{-2 \beta} g_{A B} \partial_r U^B. \]

\(Q\) can be derived from the intermediate null metric quantities via (see equations (56) and (57) of [11])

\[ \partial_\lambda U = - \left(\partial_\lambda g^{\lambda A} + \frac{\partial_A \partial_\lambda r}{\partial_\lambda r} g^{A B} + \frac{\partial_B r}{\partial_\lambda r} \partial_\lambda g^{A B}\right) q_A + 2 \partial_\lambda \beta (U + g^{\lambda A} q_A) \]

and

\[ Q = r^2 (J \partial_\lambda \bar U + K \partial_\lambda U) \]

also provided is \(\partial_r U\), which is separately useful to cache for other intermediate steps in the CCE computation.

◆ bondi_r()

void Cce::bondi_r ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  bondi_r,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  null_metric 
)

Computes the Bondi radius of the worldtube.

Details

Note that unlike the Cauchy coordinate radius, the Bondi radius is not constant over the worldtube. Instead, it is obtained by the determinant of the angular part of the metric in the intermediate null coordinates (see [11]).

\[ r = \left(\frac{\det g_{A B}}{ q_{A B}}\right)^{1/4}, \]

where \(q_{A B}\) is the unit sphere metric.

◆ bondi_u_worldtube_data()

void Cce::bondi_u_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  bondi_u,
const tnsr::i< ComplexDataVector, 2, Frame::RadialNull > &  dyad,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  inverse_null_metric 
)

Compute the \(U\) (shift) function for the CCE Bondi-like metric.

Details

The Bondi-like metric has \(g^{r A} = -e^{-2 \beta} U^A\), and the spin-weighted vector \(U = U^A q_A\). The value of \(U^A\) can be computed from the intermediate null metric quantities (see equation (54) of [11]) using:

\[ U = -(\partial_\lambda r g^{\lambda A} + \partial_B r g^{A B}) q_A / \partial_\lambda r \]

◆ bondi_w_worldtube_data()

void Cce::bondi_w_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  bondi_w,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  inverse_null_metric,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r 
)

Compute the \(W\) (mass aspect) function for the CCE Bondi-like metric.

Details

The Bondi-like metric has \(g^{rr} = e^{-2 \beta}(1 + r W)\). The value of \(W\) can be computed from the null metric quantities (see equation (55) of [11]) using:

\[ W = \frac{1}{r} \left(-1 + \frac{g^{\lambda \lambda} (\partial_\lambda r)^2 + 2 \partial_\lambda r \left(\partial_A r g^{\lambda A} - \partial_u r\right) + \partial_A r \partial_B r g^{A B}} {\partial_\lambda r}\right) \]

◆ cartesian_lapse_and_derivatives_from_modes()

void Cce::cartesian_lapse_and_derivatives_from_modes ( gsl::not_null< Scalar< DataVector > * >  cartesian_lapse,
gsl::not_null< tnsr::i< DataVector, 3 > * >  d_cartesian_lapse,
gsl::not_null< Scalar< DataVector > * >  dt_cartesian_lapse,
gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * >  interpolation_modal_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  interpolation_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  eth_buffer,
const Scalar< ComplexModalVector > &  lapse_coefficients,
const Scalar< ComplexModalVector > &  dr_lapse_coefficients,
const Scalar< ComplexModalVector > &  dt_lapse_coefficients,
const CartesianiSphericalJ inverse_cartesian_to_spherical_jacobian,
size_t  l_max 
)

Compute \(\alpha\), \(\partial_i \alpha\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities.

Details

This function interpolates the modes of input \(\alpha\), \(\partial_r \alpha\), and \(\partial_r \alpha\) to the libsharp-compatible grid. This function then applies the necessary jacobian factors and angular derivatives to determine the full \(\partial_i \alpha\).

◆ cartesian_lapse_and_derivatives_from_unnormalized_spec_modes()

void Cce::cartesian_lapse_and_derivatives_from_unnormalized_spec_modes ( gsl::not_null< Scalar< DataVector > * >  cartesian_lapse,
gsl::not_null< tnsr::i< DataVector, 3 > * >  d_cartesian_lapse,
gsl::not_null< Scalar< DataVector > * >  dt_cartesian_lapse,
gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * >  interpolation_modal_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  interpolation_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  eth_buffer,
const Scalar< ComplexModalVector > &  lapse_coefficients,
const Scalar< ComplexModalVector > &  dr_lapse_coefficients,
const Scalar< ComplexModalVector > &  dt_lapse_coefficients,
const CartesianiSphericalJ inverse_cartesian_to_spherical_jacobian,
const Scalar< DataVector > &  radial_derivative_correction_factor,
size_t  l_max 
)

Compute \(\alpha\), \(\partial_i \alpha\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities.

Details

This function will apply a correction factor associated with a SpEC bug.

◆ cartesian_shift_and_derivatives_from_modes()

void Cce::cartesian_shift_and_derivatives_from_modes ( gsl::not_null< tnsr::I< DataVector, 3 > * >  cartesian_shift,
gsl::not_null< tnsr::iJ< DataVector, 3 > * >  d_cartesian_shift,
gsl::not_null< tnsr::I< DataVector, 3 > * >  dt_cartesian_shift,
gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * >  interpolation_modal_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  interpolation_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  eth_buffer,
const tnsr::I< ComplexModalVector, 3 > &  shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dr_shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dt_shift_coefficients,
const CartesianiSphericalJ inverse_cartesian_to_spherical_jacobian,
size_t  l_max 
)

Compute \(\beta^{i}\), \(\partial_i \beta^{j}\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities.

Details

This function interpolates the modes of input \(\beta^i\), \(\partial_r \beta^i\), and \(\partial_r \beta^i\) to the libsharp-compatible grid. This function then applies the necessary jacobian factors and angular derivatives to determine the full \(\partial_i \beta^i\).

◆ cartesian_shift_and_derivatives_from_unnormalized_spec_modes()

void Cce::cartesian_shift_and_derivatives_from_unnormalized_spec_modes ( gsl::not_null< tnsr::I< DataVector, 3 > * >  cartesian_shift,
gsl::not_null< tnsr::iJ< DataVector, 3 > * >  d_cartesian_shift,
gsl::not_null< tnsr::I< DataVector, 3 > * >  dt_cartesian_shift,
gsl::not_null< Scalar< SpinWeighted< ComplexModalVector, 0 > > * >  interpolation_modal_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  interpolation_buffer,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * >  eth_buffer,
const tnsr::I< ComplexModalVector, 3 > &  shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dr_shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dt_shift_coefficients,
const CartesianiSphericalJ inverse_cartesian_to_spherical_jacobian,
const Scalar< DataVector > &  radial_derivative_correction_factor,
size_t  l_max 
)

Compute \(\beta^{i}\), \(\partial_i \beta^{j}\), and \(\partial_t \beta^i\) from input libsharp-compatible modal spatial metric quantities.

Details

This function will apply a correction factor associated with a SpEC bug.

◆ cartesian_to_spherical_coordinates_and_jacobians()

void Cce::cartesian_to_spherical_coordinates_and_jacobians ( gsl::not_null< tnsr::I< DataVector, 3 > * >  unit_cartesian_coords,
gsl::not_null< SphericaliCartesianJ * >  cartesian_to_spherical_jacobian,
gsl::not_null< CartesianiSphericalJ * >  inverse_cartesian_to_spherical_jacobian,
const Scalar< DataVector > &  cos_phi,
const Scalar< DataVector > &  cos_theta,
const Scalar< DataVector > &  sin_phi,
const Scalar< DataVector > &  sin_theta,
double  extraction_radius 
)

Creates both the Jacobian and inverse Jacobian between Cartesian and spherical coordinates, and the coordinates themselves.

Details

The cartesian_to_spherical_jacobian is \(dx^i/d\tilde{x}^{\tilde j}\), where the Cartesian components are in order \(x^i = \{x, y, z\}\) and the spherical coordinates are \(\tilde{x}^{\tilde j} = \{r, \theta, \phi\}\). The Cartesian coordinates given are the standard unit sphere coordinates:

\begin{align*} x &= \cos(\phi) \sin(\theta)\\ y &= \sin(\phi) \sin(\theta)\\ z &= \cos(\theta) \end{align*}

Note
These Jacobians are adjusted to improve regularity near the pole, in particular the \(\partial \phi / \partial x^i\) components have been scaled by \(\sin \theta\) (omitting a \(1/\sin(\theta)\)) and the \(\partial x^i/\partial \phi\) components have been scaled by \(1/\sin(\theta)\) (omitting a \(\sin(\theta)\)). The reason is that in most careful calculations, these problematic sin factors can actually be omitted because they cancel. In cases where they are actually required, they must be put in by hand.

◆ create_bondi_boundary_data() [1/2]

template<typename BoundaryTagList >
void Cce::create_bondi_boundary_data ( const gsl::not_null< Variables< BoundaryTagList > * >  bondi_boundary_data,
const tnsr::iaa< DataVector, 3 > &  phi,
const tnsr::aa< DataVector, 3 > &  pi,
const tnsr::aa< DataVector, 3 > &  spacetime_metric,
const double  extraction_radius,
const size_t  l_max 
)

Process the worldtube data from generalized harmonic quantities to desired Bondi quantities, placing the result in the passed Variables.

Details

The mathematics are a bit complicated for all of the coordinate transformations that are necessary to obtain the Bondi gauge quantities. For full mathematical details, see the documentation for functions in BoundaryData.hpp and [11] [21].

This function takes as input the full set of Generalized harmonic metric data on a two-dimensional surface of constant \(r\) and \(t\) in numerical coordinates.

Sufficient tags to provide full worldtube boundary data at a particular time are set in bondi_boundary_data. In particular, the set of tags in Tags::characteristic_worldtube_boundary_tags in the provided Variables are assigned to the worldtube boundary values associated with the input metric components.

The majority of the mathematical transformations are implemented as a set of individual cascaded functions below. The details of the manipulations that are performed to the input data may be found in the individual functions themselves, which are called in the following order:

◆ create_bondi_boundary_data() [2/2]

template<typename BoundaryTagList >
void Cce::create_bondi_boundary_data ( const gsl::not_null< Variables< BoundaryTagList > * >  bondi_boundary_data,
const tnsr::ii< ComplexModalVector, 3 > &  spatial_metric_coefficients,
const tnsr::ii< ComplexModalVector, 3 > &  dt_spatial_metric_coefficients,
const tnsr::ii< ComplexModalVector, 3 > &  dr_spatial_metric_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dt_shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dr_shift_coefficients,
const Scalar< ComplexModalVector > &  lapse_coefficients,
const Scalar< ComplexModalVector > &  dt_lapse_coefficients,
const Scalar< ComplexModalVector > &  dr_lapse_coefficients,
const double  extraction_radius,
const size_t  l_max 
)

Process the worldtube data from modal metric components and derivatives to desired Bondi quantities, placing the result in the passed Variables.

Details

The mathematics are a bit complicated for all of the coordinate transformations that are necessary to obtain the Bondi gauge quantities. For full mathematical details, see the documentation for functions in BoundaryData.hpp and [11] [21].

This function takes as input the full set of ADM metric data and its radial and time derivatives on a two-dimensional surface of constant \(r\) and \(t\) in numerical coordinates. This data must be provided as spherical harmonic coefficients in the libsharp format. This data is provided in nine Tensors.

Sufficient tags to provide full worldtube boundary data at a particular time are set in bondi_boundary_data. In particular, the set of tags in Tags::characteristic_worldtube_boundary_tags in the provided Variables are assigned to the worldtube boundary values associated with the input metric components.

The majority of the mathematical transformations are implemented as a set of individual cascaded functions below. The details of the manipulations that are performed to the input data may be found in the individual functions themselves, which are called in the following order:

◆ create_bondi_boundary_data_from_unnormalized_spec_modes()

template<typename TagList >
void Cce::create_bondi_boundary_data_from_unnormalized_spec_modes ( const gsl::not_null< Variables< TagList > * >  bondi_boundary_data,
const tnsr::ii< ComplexModalVector, 3 > &  spatial_metric_coefficients,
const tnsr::ii< ComplexModalVector, 3 > &  dt_spatial_metric_coefficients,
const tnsr::ii< ComplexModalVector, 3 > &  dr_spatial_metric_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dt_shift_coefficients,
const tnsr::I< ComplexModalVector, 3 > &  dr_shift_coefficients,
const Scalar< ComplexModalVector > &  lapse_coefficients,
const Scalar< ComplexModalVector > &  dt_lapse_coefficients,
const Scalar< ComplexModalVector > &  dr_lapse_coefficients,
const double  extraction_radius,
const size_t  l_max 
)

Process the worldtube data from modal metric components and derivatives with incorrectly normalized radial derivatives from an old version of SpEC to desired Bondi quantities, placing the result in the passed DataBox.

Details

The mathematics are a bit complicated for all of the coordinate transformations that are necessary to obtain the Bondi gauge quantities. For full mathematical details, see the documentation for functions in BoundaryData.hpp and [11] [21].

This function takes as input the full set of ADM metric data and its radial and time derivatives on a two-dimensional surface of constant \(r\) and \(t\) in numerical coordinates. This data must be provided as spherical harmonic coefficients in the libsharp format. This data is provided in nine Tensors.

Sufficient tags to provide full worldtube boundary data at a particular time are set in bondi_boundary_data. In particular, the set of tags in Tags::characteristic_worldtube_boundary_tags in the provided DataBox are assigned to the worldtube boundary values associated with the input metric components.

The majority of the mathematical transformations are implemented as a set of individual cascaded functions below. The details of the manipulations that are performed to the input data may be found in the individual functions themselves, which are called in the following order:

◆ d2lambda_bondi_r()

void Cce::d2lambda_bondi_r ( gsl::not_null< Scalar< DataVector > * >  d2lambda_bondi_r,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  dr_bondi_j,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  bondi_j,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r 
)

Compute the second derivative of the Bondi radius with respect to the intermediate null coordinate radius \(\partial_\lambda^2 r\).

Details

To determine this second derivative quantity without resorting to depending on second-derivative metric inputs, we need to take advantage of one of the Einstein field equations. Combining equations (53) and (52) of [11], we have:

\[ \partial_\lambda^2 r = \frac{-r}{4} \left( \partial_\lambda J \partial_\lambda \bar J - (\partial_\lambda K)^2\right) \]

,

where the first derivative of \(K\) can be obtained from \(K = \sqrt{1 + J \bar J}\) and the first derivative of \(J\) can be obtained from (47) of [11]

◆ d_bondi_r()

void Cce::d_bondi_r ( gsl::not_null< tnsr::a< DataVector, 3, Frame::RadialNull > * >  d_bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  dlambda_null_metric,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  du_null_metric,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  inverse_null_metric,
size_t  l_max 
)

Computes the full 4-dimensional partial of the Bondi radius with respect to the intermediate null coordinates.

Details

The expression evaluated is obtained from differentiating the determinant equation for bondi_r, from (35) of [11] :

\[ \partial_\alpha r = \frac{r}{4} \left(g^{A B} \partial_\alpha g_{A B} - \frac{\partial_\alpha \det q_{A B}}{\det q_{A B}}\right) \]

Note that for the angular derivatives, we just numerically differentiate using the utilities in Spectral::Swsh::angular_derivative(). For the time and radial derivatives, the second term in the above equation vanishes.

◆ dlambda_null_metric_and_inverse()

void Cce::dlambda_null_metric_and_inverse ( gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * >  dlambda_null_metric,
gsl::not_null< tnsr::AA< DataVector, 3, Frame::RadialNull > * >  dlambda_inverse_null_metric,
const AngulariCartesianA angular_d_null_l,
const SphericaliCartesianJ cartesian_to_spherical_jacobian,
const tnsr::iaa< DataVector, 3 > &  phi,
const tnsr::aa< DataVector, 3 > &  dt_spacetime_metric,
const tnsr::A< DataVector, 3 > &  du_null_l,
const tnsr::AA< DataVector, 3, Frame::RadialNull > &  inverse_null_metric,
const tnsr::A< DataVector, 3 > &  null_l,
const tnsr::aa< DataVector, 3 > &  spacetime_metric 
)

Computes the partial derivative of the spacetime metric and inverse spacetime metric in the intermediate null radial coordinates with respect to the null generator \(l^\mu\).

Details

For full expressions of the \(l^\mu \partial_\mu g_{a b}\) and \(l^\mu \partial_\mu g^{a b}\) computed in this function, see equation (31) and (32) of [11]. Refer to [21] for more exposition about the overall construction of the coordinate transformations used for the intermediate null coordinates.

◆ dr_bondi_j()

void Cce::dr_bondi_j ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * >  dr_bondi_j,
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * >  denominator_buffer,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  dlambda_null_metric,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  bondi_j,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &  dyad 
)

Compute the radial derivative of the angular metric spin-weighted scalar \(\partial_r J\) in the CCE Bondi-like metric.

Details

The radial derivative of the angular spin-weighted scalar \(J\) can be computed from the null metric components by (c.f. equation (47) of [11]):

\[ \partial_r J = \frac{\partial_\lambda J}{\partial_\lambda r} = \frac{q^A q^B \partial_\lambda g_{A B} / (2 r^2) - 2 \partial_\lambda r J / r}{\partial_\lambda r} \]

◆ du_j_worldtube_data()

void Cce::du_j_worldtube_data ( gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * >  du_bondi_j,
const tnsr::a< DataVector, 3, Frame::RadialNull > &  d_bondi_r,
const Scalar< SpinWeighted< ComplexDataVector, 2 > > &  bondi_j,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  du_null_metric,
const tnsr::aa< DataVector, 3, Frame::RadialNull > &  dlambda_null_metric,
const Scalar< SpinWeighted< ComplexDataVector, 0 > > &  bondi_r,
const tnsr::I< ComplexDataVector, 2, Frame::RadialNull > &  dyad 
)

Compute the Bondi metric contribution \((\partial_u J)_r\) (the retarded time derivative at fixed coordinate \(r\)) on the worldtube boundary.

Details

The numerical time derivative (along the surface of constant r, not along the worldtube) is computed by (see equation (50) of [11])

\[ \partial_u J = \frac{1}{2 r^2} q^A q^B \left(\partial_u g_{A B} - \frac{ \partial_u r}{ \partial_\lambda r} \partial_\lambda g_{A B}\right) \]

Note
There is the regrettable notation difference with the primary reference for these formulas [11] in that we denote with \(H\) the time derivative at constant numerical radius, where [11] uses \(H\) to denote the time derivative at constant Bondi radius.

◆ dyads()

void Cce::dyads ( gsl::not_null< tnsr::i< ComplexDataVector, 2, Frame::RadialNull > * >  down_dyad,
gsl::not_null< tnsr::I< ComplexDataVector, 2, Frame::RadialNull > * >  up_dyad 
)

Compute the complex angular dyads used to define the spin-weighted scalars in the CCE system.

Details

We use the typically chosen angular dyads in CCE [11] [20] :

\begin{align*} q_A &= \{-1, -i \sin(\theta)\}\\ q^A &= \left\{-1, -i \frac{1}{\sin \theta}\right\} \end{align*}

However, to maintain regularity and for compatibility with the more regular Jacobians from Cce::cartesian_to_spherical_coordinates_and_jacobians(), in the code we omit the factors of \(\sin \theta\) from the above equations.

◆ logical_partial_directional_derivative_of_complex()

void Cce::logical_partial_directional_derivative_of_complex ( gsl::not_null< ComplexDataVector * >  d_u,
const ComplexDataVector u,
const Mesh< 3 > &  mesh,
size_t  dimension_to_differentiate 
)

Computes the partial derivative along a particular direction determined by the dimension_to_differentiate. The input u is differentiated with the spectral matrix and the solution is placed in d_u.

Note
This is placed in Cce Utilities for its currently narrow use-case. If more general uses desire a single partial derivative of complex values, this should be moved to NumericalAlgorithms. This utility currently assumes the spatial dimensionality is 3, which would also need to be generalized, likely by creating a wrapping struct with partial template specializations.

◆ mutate_all_pre_swsh_derivatives_for_tag()

template<typename BondiValueTag , typename DataBoxType >
void Cce::mutate_all_pre_swsh_derivatives_for_tag ( const gsl::not_null< DataBoxType * >  box)

Evaluates the set of inputs to the CCE integrand for BondiValueTag that do not involve spin-weighted angular differentiation.

Details

This function is to be called on the DataBox holding the relevant CCE data on each hypersurface integration step, prior to evaluating the spin-weighted derivatives needed for the same CCE integrand. Provided a DataBox with the appropriate tags (including all_pre_swsh_derivative_tags, all_swsh_derivative_tags and Tags::LMax), this function will apply all of the necessary mutations to update all_pre_swsh_derivatives_for_tag<BondiValueTag> to their correct values for the current values for the remaining (input) tags.

◆ mutate_all_precompute_cce_dependencies()

template<template< typename > class BoundaryPrefix, typename DataBoxType >
void Cce::mutate_all_precompute_cce_dependencies ( const gsl::not_null< DataBoxType * >  box)

Convenience routine for computing all of the CCE inputs to integrand computation that do not depend on intermediate integrand results. It should be executed before moving through the hierarchy of integrands.

Details

Provided a DataBox with the appropriate tags (including Cce::pre_computation_boundary_tags, Cce::pre_computation_tags, Cce::Tags::BondiJ and Tags::LMax), this function will apply all of the necessary mutations to update the Cce::pre_computation_tags to their correct values for the current values for the remaining (input) tags.

The BoundaryPrefix template template parameter is to be passed a prefix tag associated with the boundary value prefix used in the computation (e.g. Cce::Tags::BoundaryValue), and allows easy switching between the regularity-preserving version and standard CCE.

◆ mutate_all_swsh_derivatives_for_tag()

template<typename BondiValueTag , typename DataBoxTagList >
void Cce::mutate_all_swsh_derivatives_for_tag ( const gsl::not_null< db::DataBox< DataBoxTagList > * >  box)

This routine evaluates the set of inputs to the CCE integrand for BondiValueTag which are spin-weighted angular derivatives.

Details

This function is called on the DataBox holding the relevant CCE data during each hypersurface integration step, after evaluating mutate_all_pre_swsh_derivatives_for_tag() with template argument BondiValueTag and before evaluating ComputeBondiIntegrand<BondiValueTag>. Provided a DataBox with the appropriate tags (including Cce::all_pre_swsh_derivative_tags, Cce::all_swsh_derivative_tags, Cce::all_transform_buffer_tags, Cce::pre_computation_tags, and Cce::Tags::LMax), this function will apply all of the necessary mutations to update Cce::single_swsh_derivative_tags_to_compute_for<BondiValueTag> and Cce::second_swsh_derivative_tags_to_compute_for<BondiValueTag> to their correct values for the current values of the remaining (input) tags.

◆ null_metric_and_derivative()

void Cce::null_metric_and_derivative ( gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * >  du_null_metric,
gsl::not_null< tnsr::aa< DataVector, 3, Frame::RadialNull > * >  null_metric,
const SphericaliCartesianJ cartesian_to_spherical_jacobian,
const tnsr::aa< DataVector, 3 > &  dt_spacetime_metric,
const tnsr::aa< DataVector, 3 > &  spacetime_metric 
)

Computes the spacetime metric and its first derivative in the intermediate radial null coordinates.

Details

These components are obtained by the steps in Section II-A of [11], which is based on the computation from Section 4.3 of [21]. The most direct comparison is to be made with equation (31) of [11], which gives the null metric components explicitly. The time derivative is then (using notation from equation (31) of [11]):

\begin{align} \partial_{\bar u} g_{\bar u \bar \lambda} = \partial_{\bar u} g_{\bar \lambda \bar \lambda} = \partial_{\bar u} g_{\bar \lambda \bar A} &= 0 \\ \partial_{\bar u} g_{\bar u \bar u} &= \partial_{\breve t} g_{\breve t \breve t} \\ \partial_{\bar u} g_{\bar u \bar A} &= \frac{\partial \breve x^{\breve i}}{\partial \bar x^{\bar A}}\\ g_{\breve i \breve t} \partial_{\bar u} g_{\bar A \bar B} &= \frac{\partial \breve x^{\breve i}}{\partial \bar x^{\bar A}} \frac{\partial \breve x^{\breve j}}{\partial \bar x^{\bar B}} g_{\breve i \breve j} \end{align}

◆ null_vector_l_and_derivatives()

void Cce::null_vector_l_and_derivatives ( gsl::not_null< tnsr::A< DataVector, 3 > * >  du_null_l,
gsl::not_null< tnsr::A< DataVector, 3 > * >  null_l,
const tnsr::I< DataVector, 3 > &  dt_worldtube_normal,
const Scalar< DataVector > &  dt_lapse,
const tnsr::aa< DataVector, 3 > &  dt_spacetime_metric,
const tnsr::I< DataVector, 3 > &  dt_shift,
const Scalar< DataVector > &  lapse,
const tnsr::aa< DataVector, 3 > &  spacetime_metric,
const tnsr::I< DataVector, 3 > &  shift,
const tnsr::I< DataVector, 3 > &  worldtube_normal 
)

Computes the null 4-vector \(l^\mu\) on the worldtube surface that is to be used as the CCE hypersurface generator, and the first time derivative \(\partial_u l^\mu\).

Details

For mathematical description of our choice of the null generator, refer to equation (22) of [11], and for the first time derivative see (25) of [11]. Refer to [21] for more exposition about the overall construction of the coordinate transformations used for the intermediate null coordinates.

◆ precomputed_cce_q_integrator()

const Matrix & Cce::precomputed_cce_q_integrator ( size_t  number_of_radial_grid_points)

Provides access to a lazily cached integration matrix for the \(Q\) and \(W\) equations in CCE hypersurface evaluation.

Details

The provided matrix acts on the integrand collocation points and solves the equation,

\[ (1 - y) \partial_y f + 2 f = g, \]

for \(f\) given integrand \(g\).

◆ radial_integrate_cce_pole_equations()

void Cce::radial_integrate_cce_pole_equations ( gsl::not_null< ComplexDataVector * >  integral_result,
const ComplexDataVector pole_of_integrand,
const ComplexDataVector regular_integrand,
const ComplexDataVector boundary,
const ComplexDataVector one_minus_y,
size_t  l_max,
size_t  number_of_radial_points 
)

A utility function for evaluating the \(Q\) and \(W\) hypersurface integrals during CCE evolution.

Details

Computes and returns by not_null pointer the solution to the equation

\[ (1 - y) \partial_y f + 2 f = A + (1 - y) B, \]

where \(A\) is provided as pole_of_integrand and \(B\) is provided as regular_integrand. The value one_minus_y is required for determining the integrand and l_max is required to determine the shape of the spin-weighted spherical harmonic mesh.

◆ trigonometric_functions_on_swsh_collocation()

void Cce::trigonometric_functions_on_swsh_collocation ( gsl::not_null< Scalar< DataVector > * >  cos_phi,
gsl::not_null< Scalar< DataVector > * >  cos_theta,
gsl::not_null< Scalar< DataVector > * >  sin_phi,
gsl::not_null< Scalar< DataVector > * >  sin_theta,
size_t  l_max 
)

Constructs the collocation values for \(\cos(\phi)\), \(\cos(\theta)\), \(\sin(\phi)\), and \(\sin(\theta)\), returned by not_null pointer in that order.

Details

These are needed for coordinate transformations from the input Cartesian-like coordinates.

◆ worldtube_normal_and_derivatives()

void Cce::worldtube_normal_and_derivatives ( gsl::not_null< tnsr::I< DataVector, 3 > * >  worldtube_normal,
gsl::not_null< tnsr::I< DataVector, 3 > * >  dt_worldtube_normal,
const Scalar< DataVector > &  cos_phi,
const Scalar< DataVector > &  cos_theta,
const tnsr::aa< DataVector, 3 > &  spacetime_metric,
const tnsr::aa< DataVector, 3 > &  dt_spacetime_metric,
const Scalar< DataVector > &  sin_phi,
const Scalar< DataVector > &  sin_theta,
const tnsr::II< DataVector, 3 > &  inverse_spatial_metric 
)

Computes the spatial unit normal vector \(s^i\) to the spherical worldtube surface and its first time derivative.

Details

Refer to equation (20) of [11] for the expression of the spatial unit normal vector, and equation (23) of [11] for the first time derivative. Refer to [21] for more exposition about the overall construction of the coordinate transformations used for the intermediate null coordinates.