SpECTRE
v2024.03.19
|
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 Matrix & | 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. More... | |
void | radial_integrate_cce_pole_equations (gsl::not_null< ComplexDataVector * > integral_result, const ComplexDataVector &pole_of_integrand, const ComplexDataVector ®ular_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... | |
The set of utilities for performing Cauchy characteristic evolution and Cauchy characteristic matching.
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
.
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
.
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)
.
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.
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
.
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
.
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
.
using Cce::bondi_hypersurface_step_tags = typedef tmpl::list<Tags::BondiBeta, Tags::BondiQ, Tags::BondiU, Tags::BondiW, Tags::BondiH> |
The set of Bondi quantities computed by hypersurface step, in the required order of computation
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.
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
.
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)
.
using Cce::pre_computation_tags = typedef 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
.
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
.
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. 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.
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 \]
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.
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 \]
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.
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]).
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).
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.
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.
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.
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.
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 \]
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.
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) \]
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.
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\).
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.
This function will apply a correction factor associated with a SpEC bug.
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.
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\).
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.
This function will apply a correction factor associated with a SpEC bug.
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.
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*}
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
.
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:
trigonometric_functions_on_swsh_collocation()
gr::shift()
gr::lapse()
worldtube_normal_and_derivatives()
gr::spacetime_normal_vector()
gh::time_deriv_of_lapse()
gh::time_deriv_of_shift()
null_vector_l_and_derivatives()
cartesian_to_spherical_coordinates_and_jacobians()
null_metric_and_derivative()
dlambda_null_metric_and_inverse()
bondi_r()
d_bondi_r()
dyads()
beta_worldtube_data()
bondi_u_worldtube_data()
bondi_w_worldtube_data()
bondi_j_worldtube_data()
dr_bondi_j()
d2lambda_bondi_r()
bondi_q_worldtube_data()
bondi_h_worldtube_data()
du_j_worldtube_data()
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
.
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 Tensor
s.
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:
trigonometric_functions_on_swsh_collocation()
cartesian_to_spherical_coordinates_and_jacobians()
cartesian_spatial_metric_and_derivatives_from_modes()
cartesian_shift_and_derivatives_from_modes()
cartesian_lapse_and_derivatives_from_modes()
gh::phi()
gr::time_derivative_of_spacetime_metric
gr::spacetime_metric
generalized_harmonic_quantities()
worldtube_normal_and_derivatives()
null_vector_l_and_derivatives()
null_metric_and_derivative()
dlambda_null_metric_and_inverse()
bondi_r()
d_bondi_r()
dyads()
beta_worldtube_data()
bondi_u_worldtube_data()
bondi_w_worldtube_data()
bondi_j_worldtube_data()
dr_bondi_j()
d2lambda_bondi_r()
bondi_q_worldtube_data()
bondi_h_worldtube_data()
du_j_worldtube_data()
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.
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 Tensor
s.
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:
trigonometric_functions_on_swsh_collocation()
cartesian_to_spherical_coordinates_and_jacobians()
cartesian_spatial_metric_and_derivatives_from_unnormalized_spec_modes()
cartesian_shift_and_derivatives_from_unnormalized_spec_modes()
cartesian_lapse_and_derivatives_from_unnormalized_spec_modes()
gh::phi()
gr::time_derivative_of_spacetime_metric
gr::spacetime_metric
generalized_harmonic_quantities()
worldtube_normal_and_derivatives()
null_vector_l_and_derivatives()
null_metric_and_derivative()
dlambda_null_metric_and_inverse()
bondi_r()
d_bondi_r()
dyads()
beta_worldtube_data()
bondi_u_worldtube_data()
bondi_w_worldtube_data()
bondi_j_worldtube_data()
dr_bondi_j()
d2lambda_bondi_r()
bondi_q_worldtube_data()
bondi_h_worldtube_data()
du_j_worldtube_data()
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\).
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]
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.
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.
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\).
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.
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.
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} \]
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.
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) \]
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.
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.
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
.
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. 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.
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.
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.
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.
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.
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.
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.
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}
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\).
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.
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.
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\).
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.
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.
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.
These are needed for coordinate transformations from the input Cartesian-like coordinates.
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.
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.