SpECTRE
v0.0.0
Documentation
Introduction
Installation
User Tutorials
Dev Guide
Code of Conduct
Contributing Guide
Code Reference
Topics
Namespaces
Files
Bibliography
View on GitHub
src
Evolution
Systems
Cce
System.hpp
1
// Distributed under the MIT License.
2
// See LICENSE.txt for details.
3
4
#pragma once
5
6
/*!
7
* \ingroup EvolutionSystemsGroup
8
* \brief The set of utilities for performing Cauchy characteristic evolution
9
* and Cauchy characteristic matching.
10
*
11
* \details Cauchy characteristic evolution (CCE) is a secondary nonlinear GR
12
* evolution system that covers the domain extending from a spherical boundary
13
* away from the strong-field regime, and extending all the way to future null
14
* infinity \f$\mathcal I^+\f$. The evolution system is governed by five
15
* hypersurface equations that are integrated radially along future null slices,
16
* and one evolution equation that governs the evolution of one hypersurface to
17
* the next.
18
*
19
* The mathematics of CCE are intricate, and SpECTRE's version implements a
20
* number of tricks and improvements that are not yet present in other contexts.
21
* For introductions to CCE generally, see papers \cite Bishop1997ik,
22
* \cite Bishop1998uk, and \cite Barkett2019uae. Here we do not present a full
23
* description of all of the mathematics, but instead just provide a high-level
24
* roadmap of the SpECTRE utilities and how they come together in the CCE
25
* system. This is intended as a map for maintainers of the codebase.
26
*
27
* First, worldtube data from a completed or running Cauchy evolution of the
28
* Einstein field equations (currently the only one implemented in SpECTRE is
29
* Generalized Harmonic) must be translated to Bondi spin-weighted scalars at
30
* the extraction sphere. Relevant utilities for this conversion are
31
* `Cce::WorldtubeDataManager`, `Cce::ReducedWorldtubeDataManager`,
32
* `Cce::create_bondi_boundary_data`. Relevant parts of the parallel
33
* infrastructure are `Cce::H5WorldtubeBoundary`,
34
* `Cce::Actions::BoundaryComputeAndSendToEvolution`,
35
* `Cce::Actions::RequestBoundaryData`, and
36
* `Cce::Actions::ReceiveWorldtubeData`.
37
*
38
* The first hypersurface must be initialized with some reasonable starting
39
* value for the evolved Bondi quantity \f$J\f$. There isn't a universal perfect
40
* prescription for this, as a complete description would require, like the
41
* Cauchy initial data problem, knowledge of the system arbitrarily far in the
42
* past. A utility for assigning the initial data is `Cce::InitializeJ`.
43
*
44
* SpECTRE CCE is currently unique in implementing an additional gauge transform
45
* after the worldtube boundary data is derived. This is performed to obtain an
46
* asymptotically well-behaved gauge that is guaranteed to avoid logarithmic
47
* behavior that has plagued other CCE implementations, and so that the
48
* asymptotic computations can be as simple, fast, and reliable as possible.
49
* Relevant utilities for the gauge transformation are
50
* `Cce::GaugeAdjustedBoundaryValue` (see template specializations),
51
* `Cce::GaugeUpdateTimeDerivatives`, `Cce::GaugeUpdateAngularFromCartesian`,
52
* `Cce::GaugeUpdateJacobianFromCoordinates`, `Cce::GaugeUpdateInterpolator`,
53
* `Cce::GaugeUpdateOmega`, and `Cce::InitializeGauge`.
54
*
55
* Next, the CCE system must evaluate the hypersurface differential equations.
56
* There are five, in sequence, deriving \f$\beta, Q, U, W,\f$ and \f$H\f$. For
57
* each of the five radial differential equations, first the products and
58
* derivatives on the right-hand side must be evaluated, then the full
59
* right-hand side of the equation must be computed, and finally the radial
60
* differential equation is integrated. The equations have a hierarchical
61
* structure, so the result for \f$\beta\f$ feeds into the radial differential
62
* equation for \f$Q\f$, and both feed into \f$U\f$, and so on.
63
*
64
* Relevant utilities for computing the inputs to the hypersurface equations are
65
* `Cce::PrecomputeCceDependencies` (see template specializations),
66
* `Cce::mutate_all_precompute_cce_dependencies`, `Cce::PreSwshDerivatives` (see
67
* template specializations), `Cce::mutate_all_pre_swsh_derivatives_for_tag`,
68
* and `Cce::mutate_all_swsh_derivatives_for_tag`. There are a number of
69
* typelists in `IntegrandInputSteps.hpp` that determine the set of quantities
70
* to be evaluated in each of the five hypersurface steps.
71
* Once the hypersurface equation inputs are computed, then a hypersurface
72
* equation right-hand side can be evaluated via `Cce::ComputeBondiIntegrand`
73
* (see template specializations). Then, the hypersurface equation may be
74
* integrated via `Cce::RadialIntegrateBondi` (see template specializations).
75
*
76
* Relevant parts of the parallel infrastructure for performing the hypersurface
77
* steps are: `Cce::CharacteristicEvolution`,
78
* `Cce::Actions::CalculateIntegrandInputsForTag`, and
79
* `Cce::Actions::PrecomputeGlobalCceDependencies`. Note that most of the
80
* algorithmic steps are laid out in order in the phase-dependent action list of
81
* `Cce::CharacteristicEvolution`.
82
*
83
* The time integration for the hyperbolic part of the CCE equations is
84
* performed via \f$\partial_u J = H\f$, where \f$\partial_u\f$ represents
85
* differentiation with respect to retarded time at fixed numerical radius
86
* \f$y\f$.
87
*
88
* At this point, all of the Bondi quantities on a given hypersurface have been
89
* evaluated, and we wish to output the relevant waveform quantities at
90
* \f$\mathcal I^+\f$. This acts much like an additional step in the
91
* hypersurface sequence, with inputs that need to be calculated before the
92
* quantities of interest can be evaluated. The action
93
* `Cce::Actions::CalculateScriInputs` performs the sequence of steps to obtain
94
* those inputs, and the utilities `Cce::CalculateScriPlusValue` (see template
95
* specializations) can be used to evaluate the desired outputs at
96
* \f$\mathcal I^+\f$.
97
*
98
* Unfortunately, those quantities at \f$\mathcal I^+\f$ are not yet an
99
* appropriate waveform output, because the time coordinate with which they are
100
* evaluated is the simulation time, not an asymptotically inertial time. So,
101
* instead of directly writing the waveform outputs, we must put them in a queue
102
* to be interpolated once enough data points have been accumulated to perform a
103
* reliable interpolation at a consistent cut of \f$\mathcal I^+\f$ at constant
104
* inertial time. Utilities for calculating and evolving the asymptotic inertial
105
* time are `Cce::InitializeScriPlusValue` and `Cce::CalculateScriPlusValue`
106
* using arguments involving `Cce::Tags::InertialRetardedTime`. A utility for
107
* managing the interpolation is `Cce::ScriPlusInterpolationManager`, and
108
* relevant parts of the parallel infrastructure for manipulating the data into
109
* the interpolator and writing the results to disk are
110
* `Cce::Actions::InsertInterpolationScriData` and
111
* `Cce::Actions::ScriObserveInterpolated`.
112
*
113
*/
114
namespace
Cce
{
115
116
struct
System
{
117
using
variables_tag
=
::Tags::Variables<Tags::BondiJ>
;
118
};
119
}
Tags::Variables
Definition:
VariablesTag.hpp:21
Cce
The set of utilities for performing Cauchy characteristic evolution and Cauchy characteristic matchin...
Definition:
BoundaryComputeAndSendToEvolution.hpp:28
Cce::System
Definition:
System.hpp:116
© Copyright 2017 - 2020
SXS Collaboration
,
Distributed under the
MIT License