Initialize \(J\) on the first hypersurface using a second-order matching at the worldtube.
More...
|
|
| 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 |
|
| 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 |
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.