SpECTRE
v2024.12.16
|
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 | Events |
Events for CCE. | |
namespace | InitializationTags |
Initialization tags for CCE. | |
namespace | InitializeJ |
Contains utilities and DataBox mutators for generating data for | |
namespace | InterfaceManagers |
Code for interfacing between the characteristic and Cachy systems. | |
namespace | OptionTags |
Option tags for CCE | |
namespace | ReceiveTags |
Tags used by CCE for communication. | |
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 | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::Eth > > |
Specialization for the spin-weighted derivative | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::Ethbar > > |
Specialization for the spin-weighted derivative | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthbarEth > > |
Specialization for the spin-weighted derivative | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthbarEthbar > > |
Specialization for the spin-weighted derivative | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthEth > > |
Specialization for the spin-weighted derivative | |
struct | ApplySwshJacobianInplace< Spectral::Swsh::Tags::Derivative< ArgumentTag, Spectral::Swsh::Tags::EthEthbar > > |
Specialization for the spin-weighted derivative | |
class | BondiWorldtubeDataManager |
Manages the bondi 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 CCE input worldtube H5 files that have metric data stored in Bondi-Sachs format in either either modal or nodal form. 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::KleinGordonPsi > > |
Computes the leading part of the scalar field | |
struct | CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi0 > > |
Computes the leading part of | |
struct | CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi1 > > |
Computes the leading part of | |
struct | CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi2 > > |
Computes the leading part of | |
struct | CalculateScriPlusValue< Tags::ScriPlus< Tags::Psi3 > > |
Computes the leading part of | |
struct | CalculateScriPlusValue< Tags::ScriPlus< Tags::Strain > > |
Computes the leading part of the strain | |
struct | CalculateScriPlusValue< Tags::TimeIntegral< Tags::ScriPlus< Tags::Psi4 > > > |
Compute the contribution to the leading | |
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 | |
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 | |
struct | ComputeBondiIntegrand< Tags::LinearFactor< Tags::BondiH > > |
Computes the linear factor which multiplies | |
struct | ComputeBondiIntegrand< Tags::LinearFactorForConjugate< Tags::BondiH > > |
Computes the linear factor which multiplies | |
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 | |
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 | |
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 | |
struct | ComputeBondiIntegrand< Tags::PoleOfIntegrand< Tags::KleinGordonPi > > |
Computes the pole part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the scalar quantity | |
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 | |
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 | |
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 | |
struct | ComputeBondiIntegrand< Tags::RegularIntegrand< Tags::KleinGordonPi > > |
Computes the regular part of the integrand (right-hand side) of the equation which determines the radial (y) dependence of the scalar quantity | |
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 | |
struct | ComputeKleinGordonSource< Tags::BondiH > |
Computes the Klein-Gordon source of the Bondi | |
struct | ComputeKleinGordonSource< Tags::BondiQ > |
Computes the Klein-Gordon source of the Bondi | |
struct | ComputeKleinGordonSource< Tags::BondiU > |
Computes the Klein-Gordon source of the Bondi | |
struct | ComputeKleinGordonSource< Tags::BondiW > |
Computes the Klein-Gordon source of the Bondi | |
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 | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiH > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiJ > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiQ > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiR > |
Computes the evolution gauge Bondi | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiU > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::BondiW > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::Dr< Tags::BondiJ > > |
Computes the evolution gauge quantity | |
struct | GaugeAdjustedBoundaryValue< Tags::DuRDividedByR > |
Computes the evolution gauge | |
struct | GaugeAdjustedBoundaryValue< Tags::KleinGordonPi > |
Computes the evolution gauge quantity | |
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 | |
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 | |
struct | GaugeUpdateTimeDerivatives |
Update the Cauchy gauge cartesian coordinate derivative | |
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 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 | |
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 CCE input worldtube H5 files that have cartesian metric components stored in either modal or nodal form. 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 | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::BondiR > |
Computes a volume version of Bondi radius of the worldtube | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::DuRDividedByR > |
Computes | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::EthEthbarRDividedByR > |
Computes | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::EthEthRDividedByR > |
Computes | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::EthRDividedByR > |
Computes | |
struct | PrecomputeCceDependencies< BoundaryPrefix, Tags::OneMinusY > |
Computes | |
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 | |
struct | PreSwshDerivatives< Tags::BondiQbar > |
struct | PreSwshDerivatives< Tags::BondiUbar > |
Compute | |
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 | |
struct | PreSwshDerivatives< Tags::Dy< Spectral::Swsh::Tags::Derivative< Tag, DerivKind > > > |
Compute the derivative with respect to the numerical radial coordinate | |
struct | PreSwshDerivatives< Tags::Dy< Tag > > |
Compute the derivative of the quantity represented by Tag with respect to the numerical radial coordinate | |
struct | PreSwshDerivatives< Tags::Dy< Tags::BondiBeta > > |
Computes the first derivative with respect to Tags::BondiBeta . More... | |
struct | PreSwshDerivatives< Tags::Dy< Tags::BondiU > > |
Computes the first derivative with respect to Tags::BondiU . More... | |
struct | PreSwshDerivatives< Tags::Exp2Beta > |
Compute | |
struct | PreSwshDerivatives< Tags::JbarQMinus2EthBeta > |
Compute | |
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 Rhs . More... | |
struct | PreSwshDerivatives<::Tags::Multiplies< Tags::BondiJbar, Rhs > > |
Compute the product of Rhs . More... | |
struct | PreSwshDerivatives<::Tags::Multiplies< Tags::BondiUbar, Rhs > > |
Compute the product of 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 | 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 | |
struct | VolumeWeyl< Tags::Psi0Match > |
Compute the Weyl scalar | |
class | WorldtubeBufferUpdater |
Abstract base class for utilities that are able to perform the buffer updating procedure needed by the WorldtubeDataManager or by the PreprocessCceWorldtube executable. 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... | |
class | WorldtubeModeRecorder |
Class that standardizes the output of our worldtube data into the Bondi modal format that the CharacteristicExtract executable can read in. 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 = implementation defined |
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 = implementation defined |
The set of tags that should be calculated before the initial data is computed on the first hypersurface. | |
using | bondi_hypersurface_step_tags = implementation defined |
template<typename Tag > | |
using | integrand_temporary_tags = typename ComputeBondiIntegrand< Tag >::temporary_tags |
template<template< typename > class BoundaryPrefix> | |
using | pre_computation_boundary_tags = implementation defined |
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 = implementation defined |
A typelist for the set of tags computed by the set of template specializations of PrecomputeCceDepedencies . More... | |
using | all_swsh_derivative_tags_for_scri = implementation defined |
Typelist of steps for SwshDerivatives mutations called on volume quantities needed for scri+ computations. | |
using | all_boundary_pre_swsh_derivative_tags_for_scri = implementation defined |
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 = implementation defined |
Typelist of steps for SwshDerivatives mutations called on boundary (angular grid only) quantities needed for scri+ computations. | |
using | all_swsh_derivative_tags = implementation defined |
A typelist for the set of tags computed by spin-weighted differentiation using utilities from the Swsh namespace. More... | |
using | all_transform_buffer_tags = implementation defined |
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 = implementation defined |
Typelist of steps for PreSwshDerivatives mutations needed for scri+ computations. | |
using | all_pre_swsh_derivative_tags = implementation defined |
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 = implementation defined |
The tags that are needed to be interpolated at scri+ for the available observation tags. | |
template<typename Tag > | |
using | OnDemandInputsForSwshJacobian = implementation defined |
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). | |
template<typename T > | |
using | cce_metric_input_tags = implementation defined |
the full set of metric tensors to be extracted from the worldtube h5 file | |
using | klein_gordon_input_tags = implementation defined |
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 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 | |
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 | |
void | deriv_cartesian_metric_lapse_shift_from_nodes (gsl::not_null< tnsr::ijj< DataVector, 3 > * > d_cartesian_spatial_metric, gsl::not_null< tnsr::iJ< DataVector, 3 > * > d_cartesian_shift, gsl::not_null< tnsr::i< DataVector, 3 > * > d_cartesian_lapse, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > buffer, gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > eth_buffer, const tnsr::ii< DataVector, 3 > &cartesian_spatial_metric, const tnsr::ii< DataVector, 3 > &dr_cartesian_spatial_metric, const tnsr::I< DataVector, 3 > &cartesian_shift, const tnsr::I< DataVector, 3 > &dr_cartesian_shift, const Scalar< DataVector > &cartesian_lapse, const Scalar< DataVector > &dr_cartesian_lapse, const CartesianiSphericalJ &inverse_cartesian_to_spherical_jacobian, size_t l_max) |
Computes spatial derivatives of cartesian metric, shift, and lapse from nodal metric quantities on a spherical worldtube. 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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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... | |
template<typename BoundaryTagList > | |
void | create_bondi_boundary_data (const gsl::not_null< Variables< BoundaryTagList > * > bondi_boundary_data, const tnsr::ii< DataVector, 3 > &cartesian_spatial_metric, const tnsr::ii< DataVector, 3 > &cartesian_dt_spatial_metric, const tnsr::ii< DataVector, 3 > &cartesian_dr_spatial_metric, const tnsr::I< DataVector, 3 > &cartesian_shift, const tnsr::I< DataVector, 3 > &cartesian_dt_shift, const tnsr::I< DataVector, 3 > &cartesian_dr_shift, const Scalar< DataVector > &cartesian_lapse, const Scalar< DataVector > &cartesian_dt_lapse, const Scalar< DataVector > &cartesian_dr_lapse, const double extraction_radius, const size_t l_max) |
Process the worldtube data from nodal 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 | |
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 | |
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... | |
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 | |
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 | |
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... | |
template<typename Tag > | |
std::string | dataset_label_for_tag () |
The dataset string associated with each scalar that will be output from the Cce::Tags::worldtube_boundary_tags_for_writing list (from the tags within the BoundaryPrefix). | |
std::string | get_text_radius (const std::string &cce_data_filename) |
Retrieves the extraction radius from the specified file name. More... | |
std::optional< double > | get_extraction_radius (const std::string &cce_data_filename, const std::optional< double > &extraction_radius, bool error=true) |
Retrieves the extraction radius from the specified file name. 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
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 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
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
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 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
Unfortunately, those quantities at 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
The Bondi-like metric has
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
The numerical time derivative (along the worldtube, rather than along the surface of constant Bondi
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
The Bondi-like metric has
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
The definition of
and
also provided is
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]).
where
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
The Bondi-like metric has
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
The Bondi-like metric has
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
This function interpolates the modes of input
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
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
This function interpolates the modes of input
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
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
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
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 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 | ( | const gsl::not_null< Variables< BoundaryTagList > * > | bondi_boundary_data, |
const tnsr::ii< DataVector, 3 > & | cartesian_spatial_metric, | ||
const tnsr::ii< DataVector, 3 > & | cartesian_dt_spatial_metric, | ||
const tnsr::ii< DataVector, 3 > & | cartesian_dr_spatial_metric, | ||
const tnsr::I< DataVector, 3 > & | cartesian_shift, | ||
const tnsr::I< DataVector, 3 > & | cartesian_dt_shift, | ||
const tnsr::I< DataVector, 3 > & | cartesian_dr_shift, | ||
const Scalar< DataVector > & | cartesian_lapse, | ||
const Scalar< DataVector > & | cartesian_dt_lapse, | ||
const Scalar< DataVector > & | cartesian_dr_lapse, | ||
const double | extraction_radius, | ||
const size_t | l_max | ||
) |
Process the worldtube data from nodal 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 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()
gh::phi()
gr::time_derivative_of_spacetime_metric
gr::spacetime_metric
worldtube_normal_and_derivatives()
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_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 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
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:
,
where the first derivative of
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] :
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::deriv_cartesian_metric_lapse_shift_from_nodes | ( | gsl::not_null< tnsr::ijj< DataVector, 3 > * > | d_cartesian_spatial_metric, |
gsl::not_null< tnsr::iJ< DataVector, 3 > * > | d_cartesian_shift, | ||
gsl::not_null< tnsr::i< DataVector, 3 > * > | d_cartesian_lapse, | ||
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 0 > > * > | buffer, | ||
gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 1 > > * > | eth_buffer, | ||
const tnsr::ii< DataVector, 3 > & | cartesian_spatial_metric, | ||
const tnsr::ii< DataVector, 3 > & | dr_cartesian_spatial_metric, | ||
const tnsr::I< DataVector, 3 > & | cartesian_shift, | ||
const tnsr::I< DataVector, 3 > & | dr_cartesian_shift, | ||
const Scalar< DataVector > & | cartesian_lapse, | ||
const Scalar< DataVector > & | dr_cartesian_lapse, | ||
const CartesianiSphericalJ & | inverse_cartesian_to_spherical_jacobian, | ||
size_t | l_max | ||
) |
Computes spatial derivatives of cartesian metric, shift, and lapse from nodal metric quantities on a spherical worldtube.
See the details for cartesian_spatial_metric_and_derivatives_from_modes
, cartesian_shift_and_derivatives_from_modes
, and cartesian_lapse_and_derivatives_from_modes
ignoring the transformation from modal to nodal (since the metric quantities are already in nodal form).
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
For full expressions of the
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
The radial derivative of the angular spin-weighted scalar
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
The numerical time derivative (along the surface of constant r, not along the worldtube) is computed by (see equation (50) of [11])
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] :
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
std::optional< double > Cce::get_extraction_radius | ( | const std::string & | cce_data_filename, |
const std::optional< double > & | extraction_radius, | ||
bool | error = true |
||
) |
Retrieves the extraction radius from the specified file name.
We assume that the filename has the extraction radius encoded as an integer between the last occurrence of 'R' and the last occurrence of '.'. This is the format provided by SpEC.
std::string Cce::get_text_radius | ( | const std::string & | cce_data_filename | ) |
Retrieves the extraction radius from the specified file name.
We assume that the filename has the extraction radius encoded as an integer between the last occurrence of 'R' and the last occurrence of '.'. This is the format provided by SpEC.
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]):
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
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
The provided matrix acts on the integrand collocation points and solves the equation,
for
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
Computes and returns by not_null
pointer the solution to the equation
where pole_of_integrand
and 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 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
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.