LinearizedBondiSachs.hpp
1 // Distributed under the MIT License.
2 // See LICENSE.txt for details.
3 
4 #pragma once
5 
6 #include <complex>
7 #include <cstddef>
8 #include <limits>
9 #include <memory>
10 #include <vector>
11 
12 #include "DataStructures/SpinWeighted.hpp"
13 #include "Evolution/Systems/Cce/AnalyticSolutions/SphericalMetricData.hpp"
14 #include "Evolution/Systems/Cce/AnalyticSolutions/WorldtubeData.hpp"
15 #include "Evolution/Systems/Cce/Tags.hpp"
16 #include "Options/Options.hpp"
18 #include "Utilities/Gsl.hpp"
19 #include "Utilities/TMPL.hpp"
20 
21 /// \cond
22 class DataVector;
23 class ComplexDataVector;
24 /// \endcond
25 
26 namespace Cce {
27 namespace Solutions {
28 
29 /*!
30  * \brief Computes the analytic data for a Linearized solution to the
31  * Bondi-Sachs equations described in \cite Barkett2019uae.
32  *
33  * \details The solution represented by this function is generated with only
34  * \f$(2,\pm2)\f$ and \f$(3,\pm3)\f$ modes, and is constructed according to the
35  * linearized solution documented in Section VI of \cite Barkett2019uae. For
36  * this solution, we impose additional restrictions that the linearized solution
37  * be asymptotically flat so that it is compatible with the gauge
38  * transformations performed in the SpECTRE regularity-preserving CCE. Using the
39  * notation of \cite Barkett2019uae, we set:
40  *
41  * \f{align*}{
42  * B_2 &= B_3 = 0\\
43  * C_{2b} &= 3 C_{2a} / \nu^2\\
44  * C_{3b} &= -3 i C_{3a} / \nu^3
45  * \f}
46  *
47  * where \f$C_{2a}\f$ and \f$C_{3a}\f$ may be specified freely and are taken via
48  * input option `InitialModes`.
49  */
51  struct InitialModes {
53  static constexpr OptionString help{
54  "The initial modes of the Robinson-Trautman scalar"};
55  };
57  using type = double;
58  static constexpr OptionString help{
59  "The extraction radius of the spherical solution"};
60  static type lower_bound() noexcept { return 0.0; }
61  static type default_value() noexcept { return 20.0; }
62  };
63  struct Frequency {
64  using type = double;
65  static constexpr OptionString help{
66  "The frequency of the linearized modes."};
67  static type lower_bound() noexcept { return 0.0; }
68  };
69 
70  using options = tmpl::list<InitialModes, ExtractionRadius, Frequency>;
71 
72  WRAPPED_PUPable_decl_template(LinearizedBondiSachs); // NOLINT
73 
74  explicit LinearizedBondiSachs(CkMigrateMessage* /*unused*/) noexcept {}
75 
76  // clang doesn't manage to use = default correctly in this case
77  // NOLINTNEXTLINE(modernize-use-equals-default)
78  LinearizedBondiSachs() noexcept {}
79 
80  LinearizedBondiSachs(const std::vector<std::complex<double>>& mode_constants,
81  double extraction_radius, double frequency) noexcept;
82 
83  std::unique_ptr<WorldtubeData> get_clone() const noexcept override;
84 
85  void pup(PUP::er& p) noexcept override;
86 
87  private:
88  // combine the (2,2) and (3,3) modes to collocation values for
89  // `bondi_quantity`
90  template <int Spin>
91  void assign_components_from_l_factors(
92  gsl::not_null<SpinWeighted<ComplexDataVector, Spin>*> bondi_quantity,
93  const std::complex<double>& l_2_factor,
94  const std::complex<double>& l_3_factor, size_t l_max, double time) const
95  noexcept;
96 
97  // combine the (2,2) and (3,3) modes to time derivative collocation values for
98  // `bondi_quantity`
99  template <int Spin>
100  void assign_du_components_from_l_factors(
101  gsl::not_null<SpinWeighted<ComplexDataVector, Spin>*> du_bondi_quantity,
102  const std::complex<double>& l_2_factor,
103  const std::complex<double>& l_3_factor, size_t l_max, double time) const
104  noexcept;
105 
106  protected:
107  /// A no-op as the linearized solution does not have substantial shared
108  /// computation to prepare before the separate component calculations.
109  void prepare_solution(const size_t /*output_l_max*/,
110  const double /*time*/) const noexcept override {}
111 
112  /*!
113  * \brief Computes the linearized solution for \f$J\f$.
114  *
115  * \details The linearized solution for \f$J\f$ is given by
116  * \cite Barkett2019uae,
117  *
118  * \f[
119  * J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
120  * \mathrm{Re}(J_2(r) e^{i \nu u})
121  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
122  * \mathrm{Re}(J_3(r) e^{i \nu u}),
123  * \f]
124  *
125  * where
126  *
127  * \f{align*}{
128  * J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\
129  * J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3}
130  * - \frac{C_{3 b}}{4 r^4}.
131  * \f}
132  */
133  void linearized_bondi_j(
134  gsl::not_null<SpinWeighted<ComplexDataVector, 2>*> bondi_j, size_t l_max,
135  double time) const noexcept;
136 
137  /*!
138  * \brief Compute the linearized solution for \f$U\f$
139  *
140  * \details The linearized solution for \f$U\f$ is given by
141  * \cite Barkett2019uae,
142  *
143  * \f[
144  * U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
145  * \mathrm{Re}(U_2(r) e^{i \nu u})
146  * + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
147  * \mathrm{Re}(U_3(r) e^{i \nu u}),
148  * \f]
149  *
150  * where
151  *
152  * \f{align*}{
153  * U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3}
154  * + \frac{C_{2b}}{4 r^4} \\
155  * U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3}
156  * + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5}
157  * \f}
158  */
159  void linearized_bondi_u(
160  gsl::not_null<SpinWeighted<ComplexDataVector, 1>*> bondi_u, size_t l_max,
161  double time) const noexcept;
162 
163  /*!
164  * \brief Computes the linearized solution for \f$W\f$.
165  *
166  * \details The linearized solution for \f$W\f$ is given by
167  * \cite Barkett2019uae,
168  *
169  * \f[
170  * W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2})
171  * \mathrm{Re}(W_2(r) e^{i \nu u})
172  * + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3})
173  * \mathrm{Re}(W_3(r) e^{i \nu u}),
174  * \f]
175  *
176  * where
177  *
178  * \f{align*}{
179  * W_2(r) &= - \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3}
180  * + \frac{C_{2b}}{2 r^4}, \\
181  * W_3(r) &= -\frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3}
182  * + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}.
183  * \f}
184  */
185  void linearized_bondi_w(
186  gsl::not_null<SpinWeighted<ComplexDataVector, 0>*> bondi_w, size_t l_max,
187  double time) const noexcept;
188 
189  /*!
190  * \brief Computes the linearized solution for \f$\partial_r J\f$.
191  *
192  * \details The linearized solution for \f$\partial_r J\f$ is given by
193  * \cite Barkett2019uae,
194  *
195  * \f[
196  * \partial_r J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
197  * \mathrm{Re}(\partial_r J_2(r) e^{i \nu u})
198  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
199  * \mathrm{Re}(\partial_r J_3(r) e^{i \nu u}),
200  * \f]
201  *
202  * where
203  *
204  * \f{align*}{
205  * \partial_r J_2(r) &= - \frac{C_{2a}}{4 r^2} + \frac{C_{2b}}{4 r^4}, \\
206  * \partial_r J_3(r) &= -\frac{C_{3a}}{10 r^2} + \frac{i \nu C_{3 b}}{2 r^4}
207  * + \frac{C_{3 b}}{r^5}.
208  * \f}
209  */
212  size_t l_max, double time) const noexcept;
213 
214  /*!
215  * \brief Compute the linearized solution for \f$\partial_r U\f$
216  *
217  * \details The linearized solution for \f$\partial_r U\f$ is given by
218  * \cite Barkett2019uae,
219  *
220  * \f[
221  * \partial_r U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
222  * \mathrm{Re}(\partial_r U_2(r) e^{i \nu u})
223  * + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
224  * \mathrm{Re}(\partial_r U_3(r) e^{i \nu u}),
225  * \f]
226  *
227  * where
228  *
229  * \f{align*}{
230  * \partial_r U_2(r) &= -\frac{C_{2a}}{r^3} - \frac{i \nu C_{2 b}}{r^4}
231  * - \frac{C_{2b}}{r^5} \\
232  * \partial_r U_3(r) &= -\frac{C_{3a}}{r^3} + \frac{2 \nu^2 C_{3b}}{r^4}
233  * - \frac{5 i \nu C_{3b}}{r^5} - \frac{5 C_{3 b}}{r^6}
234  * \f}
235  */
238  size_t l_max, double time) const noexcept;
239 
240  /*!
241  * \brief Computes the linearized solution for \f$\partial_r W\f$.
242  *
243  * \details The linearized solution for \f$W\f$ is given by
244  * \cite Barkett2019uae,
245  *
246  * \f[
247  * \partial_r W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2})
248  * \mathrm{Re}(\partial_r W_2(r) e^{i \nu u})
249  * + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3})
250  * \mathrm{Re}(\partial_r W_3(r) e^{i \nu u}),
251  * \f]
252  *
253  * where
254  *
255  * \f{align*}{
256  * \partial_r W_2(r) &= \frac{2 \nu^2 C_{2b}}{r^3}
257  * - \frac{3 i \nu C_{2 b}}{r^4} - \frac{2 C_{2b}}{r^5}, \\
258  * \partial_r W_3(r) &= \frac{4 i \nu^3 C_{3b}}{r^3}
259  * + \frac{12 i \nu^2 C_{3b}}{r^4} - \frac{10 \nu C_{3b}}{r^5}
260  * - \frac{15 C_{3b}}{r^6}.
261  * \f}
262  */
265  size_t l_max, double time) const noexcept;
266 
267  /*!
268  * \brief Computes the linearized solution for \f$\partial_u J\f$.
269  *
270  * \details The linearized solution for \f$\partial_u J\f$ is given by
271  * \cite Barkett2019uae,
272  *
273  * \f[
274  * \partial_u J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
275  * \mathrm{Re}(i \nu J_2(r) e^{i \nu u})
276  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
277  * \mathrm{Re}(i \nu J_3(r) e^{i \nu u}),
278  * \f]
279  *
280  * where
281  *
282  * \f{align*}{
283  * J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\
284  * J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3}
285  * - \frac{C_{3 b}}{4 r^4}.
286  * \f}
287  */
290  size_t l_max, double time) const noexcept;
291 
292  /*!
293  * \brief Compute the linearized solution for \f$\partial_u U\f$
294  *
295  * \details The linearized solution for \f$U\f$ is given by
296  * \cite Barkett2019uae,
297  *
298  * \f[
299  * \partial_u U = \sqrt{3} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
300  * \mathrm{Re}(i \nu U_2(r) e^{i \nu u})
301  * + \sqrt{6} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
302  * \mathrm{Re}(i \nu U_3(r) e^{i \nu u}),
303  * \f]
304  *
305  * where
306  *
307  * \f{align*}{
308  * U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3}
309  * + \frac{C_{2b}}{4 r^4} \\
310  * U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3}
311  * + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5}
312  * \f}
313  */
316  size_t l_max, double time) const noexcept;
317 
318  /*!
319  * \brief Computes the linearized solution for \f$\partial_u W\f$.
320  *
321  * \details The linearized solution for \f$\partial_u W\f$ is given by
322  * \cite Barkett2019uae,
323  *
324  * \f[
325  * \partial_u W = \frac{1}{\sqrt{2}} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
326  * \mathrm{Re}(i \nu W_2(r) e^{i \nu u})
327  * + \frac{1}{\sqrt{2}} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
328  * \mathrm{Re}(i \nu W_3(r) e^{i \nu u}),
329  * \f]
330  *
331  * where
332  *
333  * \f{align*}{
334  * W_2(r) &= \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3}
335  * + \frac{C_{2b}}{2 r^4}, \\
336  * W_3(r) &= \frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3}
337  * + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}.
338  * \f}
339  */
342  size_t l_max, double time) const noexcept;
343 
344  /*!
345  * \brief Compute the spherical coordinate metric from the linearized
346  * Bondi-Sachs system.
347  *
348  * \details This function dispatches to the individual computations in this
349  * class to determine the Bondi-Sachs scalars for the linearized solution.
350  * Once the scalars are determined, the metric is assembled via (note
351  * \f$\beta = 0\f$ in this solution)
352  *
353  * \f{align*}{
354  * ds^2 =& - ((1 + r W) - r^2 h_{A B} U^A U^B) du^2 - 2 du dr \\
355  * &- 2 r^2 h_{A B} U^B du dx^A + r^2 h_{A B} dx^A dx^B,
356  * \f}
357  *
358  * where indices with capital letters refer to angular coordinates and the
359  * angular tensors may be written in terms of spin-weighted scalars. Doing so
360  * gives the metric components,
361  *
362  * \f{align*}{
363  * g_{u u} &= -\left(1 + r W
364  * - r^2 \Re\left(\bar J U^2 + K U \bar U\right)\right)\ \
365  * g_{u r} &= -1\\
366  * g_{u \theta} &= r^2 \Re\left(K U + J \bar U\right)\\
367  * g_{u \phi} &= r^2 \Im\left(K U + J \bar U\right)\\
368  * g_{\theta \theta} &= r^2 \Re\left(J + K\right)\\
369  * g_{\theta \phi} &= r^2 \Im\left(J\right)\\
370  * g_{\phi \phi} &= r^2 \Re\left(K - J\right),
371  * \f}
372  *
373  * and all other components are zero.
374  */
375  void spherical_metric(
379  size_t l_max, double time) const noexcept override;
380 
381  /*!
382  * \brief Compute the radial derivative of the spherical coordinate metric
383  * from the linearized Bondi-Sachs system.
384  *
385  * \details This function dispatches to the individual computations in this
386  * class to determine the Bondi-Sachs scalars for the linearized solution.
387  * Once the scalars are determined, the radial derivative of the metric is
388  * assembled via (note \f$\beta = 0\f$ in this solution)
389  *
390  * \f{align*}{
391  * \partial_r g_{a b} dx^a dx^b =& - (W + r \partial_r W
392  * - 2 r h_{A B} U^A U^B - r^2 (\partial_r h_{A B}) U^A U^B
393  * - 2 r^2 h_{A B} U^A \partial_r U^B) du^2 \\
394  * &- (4 r h_{A B} U^B + 2 r^2 ((\partial_r h_{A B}) U^B
395  * + h_{AB} \partial_r U^B) ) du dx^A
396  * + (2 r h_{A B} + r^2 \partial_r h_{A B}) dx^A dx^B,
397  * \f}
398  *
399  * where indices with capital letters refer to angular coordinates and the
400  * angular tensors may be written in terms of spin-weighted scalars. Doing so
401  * gives the metric components,
402  *
403  * \f{align*}{
404  * \partial_r g_{u u} &= -\left( W + r \partial_r W
405  * - 2 r \Re\left(\bar J U^2 + K U \bar U\right)
406  * - r^2 \partial_r \Re\left(\bar J U^2 + K U \bar U\right)\right) \\
407  * \partial_r g_{u \theta} &= 2 r \Re\left(K U + J \bar U\right)
408  * + r^2 \partial_r \Re\left(K U + J \bar U\right) \\
409  * \partial_r g_{u \phi} &= 2r \Im\left(K U + J \bar U\right)
410  * + r^2 \partial_r \Im\left(K U + J \bar U\right) \\
411  * \partial_r g_{\theta \theta} &= 2 r \Re\left(J + K\right)
412  * + r^2 \Re\left(\partial_r J + \partial_r K\right) \\
413  * \partial_r g_{\theta \phi} &= 2 r \Im\left(J\right)
414  * + r^2 \Im\left(\partial_r J\right)\\
415  * \partial_r g_{\phi \phi} &= 2 r \Re\left(K - J\right)
416  * + r^2 \Re\left(\partial_r K - \partial_r J\right),
417  * \f}
418  *
419  * and all other components are zero.
420  */
421  void dr_spherical_metric(
425  size_t l_max, double time) const noexcept override;
426 
427  /*!
428  * \brief Compute the time derivative of the spherical coordinate metric from
429  * the linearized Bondi-Sachs system.
430  *
431  * \details This function dispatches to the individual computations in this
432  * class to determine the Bondi-Sachs scalars for the linearized solution.
433  * Once the scalars are determined, the metric is assembled via (note
434  * \f$\beta = 0\f$ in this solution, and note that we take coordinate
435  * \f$t=u\f$ in converting to the Cartesian coordinates)
436  *
437  * \f{align*}{
438  * \partial_t g_{a b} dx^a dx^b =& - (r \partial_u W
439  * - r^2 \partial_u h_{A B} U^A U^B
440  * - 2 r^2 h_{A B} U^B \partial_u U^A) du^2 \\
441  * &- 2 r^2 (\partial_u h_{A B} U^B + h_{A B} \partial_u U^B) du dx^A
442  * + r^2 \partial_u h_{A B} dx^A dx^B,
443  * \f}
444  *
445  * where indices with capital letters refer to angular coordinates and the
446  * angular tensors may be written in terms of spin-weighted scalars. Doing so
447  * gives the metric components,
448  *
449  * \f{align*}{
450  * \partial_t g_{u u} &= -\left(r \partial_u W
451  * - r^2 \partial_u \Re\left(\bar J U^2 + K U \bar U\right)\right)\\
452  * \partial_t g_{u \theta} &= r^2 \partial_u \Re\left(K U + J \bar U\right)\\
453  * \partial_t g_{u \phi} &= r^2 \partial_u \Im\left(K U + J \bar U\right)\\
454  * \partial_t g_{\theta \theta} &= r^2 \Re\left(\partial_u J
455  * + \partial_u K\right)\\
456  * \partial_t g_{\theta \phi} &= r^2 \Im\left(\partial_u J\right)\\
457  * \partial_t g_{\phi \phi} &= r^2 \Re\left(\partial_u K
458  * - \partial_u J\right),
459  * \f}
460  *
461  * and all other components are zero.
462  */
463  void dt_spherical_metric(
467  size_t l_max, double time) const noexcept override;
468 
469  using WorldtubeData::variables_impl;
470 
472 
473  /*!
474  * \brief Determines the News function from the linearized solution
475  * parameters.
476  *
477  * \details The News is determined from the formula given in
478  * \cite Barkett2019uae,
479  *
480  * \f{align*}{
481  * N = \frac{1}{4 \sqrt{3}} ({}_{-2} Y_{2\, 2} + {}_{-2} Y_{2\,-2})
482  * \Re\left(i \nu^3 C_{2 b} e^{i \nu u}\right)
483  * + \frac{1}{2 \sqrt{15}} ({}_{-2} Y_{3\, 3} - {}_{-2} Y_{3\, -3})
484  * \Re\left(- \nu^4 C_{3 b} e^{i \nu u} \right)
485  * \f}
486  */
487  void variables_impl(
489  size_t l_max, double time, tmpl::type_<Tags::News> /*meta*/) const
490  noexcept override;
491 
496 
497  double frequency_ = 0.0;
498 };
499 } // namespace Solutions
500 } // namespace Cce
Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_j
void linearized_du_bondi_j(gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > du_bondi_j, size_t l_max, double time) const noexcept
Computes the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_w
void linearized_du_bondi_w(gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > du_bondi_w, size_t l_max, double time) const noexcept
Computes the linearized solution for .
CharmPupable.hpp
Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_u
void linearized_dr_bondi_u(gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > dr_bondi_u, size_t l_max, double time) const noexcept
Compute the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::Frequency
Definition: LinearizedBondiSachs.hpp:63
Options.hpp
vector
Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_w
void linearized_dr_bondi_w(gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > dr_bondi_w, size_t l_max, double time) const noexcept
Computes the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::dr_spherical_metric
void dr_spherical_metric(gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > dr_spherical_metric, size_t l_max, double time) const noexcept override
Compute the radial derivative of the spherical coordinate metric from the linearized Bondi-Sachs syst...
SpinWeighted
Make a spin-weighted type T with spin-weight Spin. Mathematical operators are restricted to addition,...
Definition: SpinWeighted.hpp:24
Cce::Solutions::SphericalMetricData
Abstract base class for analytic worldtube data most easily derived in spherical coordinate form.
Definition: SphericalMetricData.hpp:42
Cce::Solutions::LinearizedBondiSachs::linearized_bondi_w
void linearized_bondi_w(gsl::not_null< SpinWeighted< ComplexDataVector, 0 > * > bondi_w, size_t l_max, double time) const noexcept
Computes the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::linearized_bondi_j
void linearized_bondi_j(gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > bondi_j, size_t l_max, double time) const noexcept
Computes the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::spherical_metric
void spherical_metric(gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > spherical_metric, size_t l_max, double time) const noexcept override
Compute the spherical coordinate metric from the linearized Bondi-Sachs system.
cstddef
Cce::Solutions::SphericalMetricData::variables_impl
void variables_impl(gsl::not_null< tnsr::aa< DataVector, 3 > * > spacetime_metric, size_t l_max, double time, tmpl::type_< gr::Tags::SpacetimeMetric< 3, ::Frame::Inertial, DataVector >>) const noexcept override
Computes the Cartesian spacetime metric from the spherical solution provided by the derived classes.
Cce::Solutions::LinearizedBondiSachs::variables_impl
void variables_impl(gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, -2 >> * > news, size_t l_max, double time, tmpl::type_< Tags::News >) const noexcept override
Determines the News function from the linearized solution parameters.
Cce::Solutions::LinearizedBondiSachs
Computes the analytic data for a Linearized solution to the Bondi-Sachs equations described in .
Definition: LinearizedBondiSachs.hpp:50
Cce::Solutions::LinearizedBondiSachs::InitialModes
Definition: LinearizedBondiSachs.hpp:51
Cce::Solutions::LinearizedBondiSachs::dt_spherical_metric
void dt_spherical_metric(gsl::not_null< tnsr::aa< DataVector, 3, ::Frame::Spherical<::Frame::Inertial >> * > dt_spherical_metric, size_t l_max, double time) const noexcept override
Compute the time derivative of the spherical coordinate metric from the linearized Bondi-Sachs system...
DataVector
Stores a collection of function values.
Definition: DataVector.hpp:42
std::numeric_limits::signaling_NaN
T signaling_NaN(T... args)
Cce::Solutions::LinearizedBondiSachs::prepare_solution
void prepare_solution(const size_t, const double) const noexcept override
A no-op as the linearized solution does not have substantial shared computation to prepare before the...
Definition: LinearizedBondiSachs.hpp:109
memory
Frame::Spherical
Represents a spherical-coordinate frame that is associated with a Cartesian frame,...
Definition: IndexType.hpp:54
Cce::Solutions::LinearizedBondiSachs::ExtractionRadius
Definition: LinearizedBondiSachs.hpp:56
Scalar
Tensor< T, Symmetry<>, index_list<> > Scalar
Definition: TypeAliases.hpp:21
Cce
The set of utilities for performing Cauchy characteristic evolution and Cauchy characteristic matchin...
Definition: BoundaryComputeAndSendToEvolution.hpp:28
Cce::Solutions::LinearizedBondiSachs::linearized_dr_bondi_j
void linearized_dr_bondi_j(gsl::not_null< SpinWeighted< ComplexDataVector, 2 > * > dr_bondi_j, size_t l_max, double time) const noexcept
Computes the linearized solution for .
limits
Gsl.hpp
complex
ComplexDataVector
Stores a collection of complex function values.
Definition: ComplexDataVector.hpp:47
std::unique_ptr
Cce::Solutions::LinearizedBondiSachs::linearized_du_bondi_u
void linearized_du_bondi_u(gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > du_bondi_u, size_t l_max, double time) const noexcept
Compute the linearized solution for .
Cce::Solutions::LinearizedBondiSachs::linearized_bondi_u
void linearized_bondi_u(gsl::not_null< SpinWeighted< ComplexDataVector, 1 > * > bondi_u, size_t l_max, double time) const noexcept
Compute the linearized solution for .
OptionString
const char *const OptionString
The string used in option structs.
Definition: Options.hpp:30
gsl
Implementations from the Guideline Support Library.
Definition: Gsl.hpp:79
TMPL.hpp
gsl::not_null
Require a pointer to not be a nullptr
Definition: Gsl.hpp:182