SpECTRE  v2026.09.05
Loading...
Searching...
No Matches
Cce::InitializeJ::CauchySecondOrder Struct Reference

Initialize \(J\) on the first hypersurface using a second-order matching at the worldtube. More...

#include <CauchySecondOrder.hpp>

Classes

struct  DuDrJInterpolator
struct  J0MaxIterations
struct  J0Tolerance
struct  J2MaxIterations
struct  J2Tolerance
struct  MaxCauchyJ0
struct  MaxPartiallyFlatJ2

Public Types

using options
using return_tags
using argument_tags
Public Types inherited from Cce::InitializeJ::InitializeJ< false >
using boundary_tags
using mutate_tags
using return_tags = mutate_tags
using argument_tags
using creatable_classes

Public Member Functions

 WRAPPED_PUPable_decl_template (CauchySecondOrder)
 CauchySecondOrder (CkMigrateMessage *)
 CauchySecondOrder (double j0_tolerance, size_t j0_max_iterations, double max_cauchy_j0, double j2_tolerance, size_t j2_max_iterations, double max_partially_flat_j2, std::unique_ptr< intrp::SpanInterpolator > du_dr_j_interpolator)
std::unique_ptr< InitializeJ > get_clone () const override
std::unique_ptr< intrp::SpanInterpolator > du_dr_j_interpolator () const override
 The interpolator this generator wants used to build the worldtube boundary value of \(\partial_u \partial_r J\), or nullptr to use the evolution's H5Interpolator.
void operator() (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, 2 > > * > j, gsl::not_null< tnsr::i< DataVector, 3 > * > cartesian_cauchy_coordinates, gsl::not_null< tnsr::i< DataVector, 2, ::Frame::Spherical<::Frame::Inertial > > * > angular_cauchy_coordinates, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &boundary_j, const Scalar< SpinWeighted< ComplexDataVector, 1 > > &boundary_u, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &boundary_w, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &boundary_beta, const Scalar< SpinWeighted< ComplexDataVector, 1 > > &boundary_q, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &boundary_du_j, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &boundary_dr_j, const Scalar< SpinWeighted< ComplexDataVector, 2 > > &boundary_du_dr_j, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &boundary_du_r, const Scalar< SpinWeighted< ComplexDataVector, 0 > > &r, size_t l_max, size_t number_of_radial_points, gsl::not_null< Parallel::NodeLock * > hdf5_lock) const
void pup (PUP::er &p) override
Public Member Functions inherited from Cce::InitializeJ::InitializeJ< false >
 InitializeJ (CkMigrateMessage *)
 WRAPPED_PUPable_abstract (InitializeJ)
template<typename DbTags>
void operator() (const gsl::not_null< db::DataBox< DbTags > * > box, const gsl::not_null< Parallel::NodeLock * > hdf5_lock) const

Static Public Attributes

static constexpr Options::String help

Detailed Description

Initialize \(J\) on the first hypersurface using a second-order matching at the worldtube.

Details

The volume \(J\) is built from the worldtube values of \(J\), \(\partial_r J\), and \(\partial_y^2 J\) computed from the H hypersurface equation. Matching those three worldtube values supplies only three of the four conditions on the Cauchy-gauge radial ansatz; the fourth is the remaining partially flat gauge condition \(\breve J^{(2)} = 0\), which becomes a nonlinear constraint

\begin{align*} \tilde J^{(2)} = \frac{1}{2} J^{(0)} \left[ \big|\tilde J^{(1)}\big|^2 - \big(\tilde K^{(1)}\big)^2 \right], \quad \tilde K^{(1)} = \frac{\Re\big(J^{(0)} \bar{\tilde J}^{(1)}\big)} {\sqrt{1 + |J^{(0)}|^2}} \end{align*}

on the expansion coefficients. Since the matching conditions make every coefficient an affine function of \(x \equiv \tilde J^{(2)}\), that constraint is a fixed-point problem \(x = \Phi(x)\), which is solved by iterating from \(x = 0\) to J2Tolerance within at most J2MaxIterations passes (the map is a contraction whenever the worldtube data are small enough that \(\max(\|J^{(0)}\|_\infty, \|\tilde J^{(1)}\|_\infty)\) is at most a few times \(10^{-2}\); see CauchySecondOrder_detail::solve_asymptotic_j2 for the number of passes).

The remaining angular coordinates are determined iteratively to ensure asymptotic flatness. The angular solve can eliminate \(J\) at scri+ only through a well-behaved alteration of the spherical mesh, so it tolerates only a small asymptotic \(J\); the initialization aborts if the asymptotic \(J\) in Cauchy coordinates, or the deviation at any iteration of the solve, exceeds MaxCauchyJ0. Both solves must converge within their iteration budgets. After the gauge transformation, initialization prints the maximum absolute values of the partially flat constraints \(J_0 = J|_{\mathcal{I}^+}\) and \(J_2 = \frac{1}{2}\partial_y^2 J|_{\mathcal{I}^+}\), and aborts if \(\max|J_2|\) exceeds MaxPartiallyFlatJ2.

The worldtube \(\partial_u \partial_r J\) that enters the H hypersurface equation is obtained by differentiating the worldtube \(\partial_r J\) in time with DuDrJInterpolator, which this generator supplies to the worldtube data manager. It is separate from the evolution's H5Interpolator because the match wants a low interpolation order for that derivative while the evolution wants a high one for the values it interpolates every step.

Member Typedef Documentation

◆ argument_tags

◆ options

using Cce::InitializeJ::CauchySecondOrder::options

◆ return_tags

using Cce::InitializeJ::CauchySecondOrder::return_tags
Initial value:
Bondi parameter .
Definition Tags.hpp:35
Definition Tags.hpp:217
Definition Tags.hpp:228

Member Function Documentation

◆ du_dr_j_interpolator()

std::unique_ptr< intrp::SpanInterpolator > Cce::InitializeJ::CauchySecondOrder::du_dr_j_interpolator ( ) const
overridevirtual

The interpolator this generator wants used to build the worldtube boundary value of \(\partial_u \partial_r J\), or nullptr to use the evolution's H5Interpolator.

Details

That boundary value is consumed by the initial data alone, so a generator is free to choose its own time-interpolation order for it without affecting the evolution.

Reimplemented from Cce::InitializeJ::InitializeJ< false >.

◆ get_clone()

std::unique_ptr< InitializeJ > Cce::InitializeJ::CauchySecondOrder::get_clone ( ) const
overridevirtual

Member Data Documentation

◆ help

Options::String Cce::InitializeJ::CauchySecondOrder::help
staticconstexpr
Initial value:
= {
"Second-order initial data generator for the Cauchy CCE evolution."}

The documentation for this struct was generated from the following file:
  • src/Evolution/Systems/Cce/Initialize/CauchySecondOrder.hpp