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 Options::String help{
54  "The initial modes of the Robinson-Trautman scalar"};
55  };
57  using type = double;
58  static constexpr Options::String help{
59  "The extraction radius of the spherical solution"};
60  static type lower_bound() noexcept { return 0.0; }
61  };
62  struct Frequency {
63  using type = double;
64  static constexpr Options::String help{
65  "The frequency of the linearized modes."};
66  static type lower_bound() noexcept { return 0.0; }
67  };
68 
69  using options = tmpl::list<InitialModes, ExtractionRadius, Frequency>;
70 
71  WRAPPED_PUPable_decl_template(LinearizedBondiSachs); // NOLINT
72 
73  explicit LinearizedBondiSachs(CkMigrateMessage* /*unused*/) noexcept {}
74 
75  // clang doesn't manage to use = default correctly in this case
76  // NOLINTNEXTLINE(hicpp-use-equals-default,modernize-use-equals-default)
77  LinearizedBondiSachs() noexcept {}
78 
79  LinearizedBondiSachs(const std::vector<std::complex<double>>& mode_constants,
80  double extraction_radius, double frequency) noexcept;
81 
82  std::unique_ptr<WorldtubeData> get_clone() const noexcept override;
83 
84  void pup(PUP::er& p) noexcept override;
85 
86  private:
87  // combine the (2,2) and (3,3) modes to collocation values for
88  // `bondi_quantity`
89  template <int Spin>
90  void assign_components_from_l_factors(
91  gsl::not_null<SpinWeighted<ComplexDataVector, Spin>*> bondi_quantity,
92  const std::complex<double>& l_2_factor,
93  const std::complex<double>& l_3_factor, size_t l_max, double time) const
94  noexcept;
95 
96  // combine the (2,2) and (3,3) modes to time derivative collocation values for
97  // `bondi_quantity`
98  template <int Spin>
99  void assign_du_components_from_l_factors(
100  gsl::not_null<SpinWeighted<ComplexDataVector, Spin>*> du_bondi_quantity,
101  const std::complex<double>& l_2_factor,
102  const std::complex<double>& l_3_factor, size_t l_max, double time) const
103  noexcept;
104 
105  protected:
106  /// A no-op as the linearized solution does not have substantial shared
107  /// computation to prepare before the separate component calculations.
108  void prepare_solution(const size_t /*output_l_max*/,
109  const double /*time*/) const noexcept override {}
110 
111  /*!
112  * \brief Computes the linearized solution for \f$J\f$.
113  *
114  * \details The linearized solution for \f$J\f$ is given by
115  * \cite Barkett2019uae,
116  *
117  * \f[
118  * J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
119  * \mathrm{Re}(J_2(r) e^{i \nu u})
120  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
121  * \mathrm{Re}(J_3(r) e^{i \nu u}),
122  * \f]
123  *
124  * where
125  *
126  * \f{align*}{
127  * J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\
128  * J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3}
129  * - \frac{C_{3 b}}{4 r^4}.
130  * \f}
131  */
132  void linearized_bondi_j(
133  gsl::not_null<SpinWeighted<ComplexDataVector, 2>*> bondi_j, size_t l_max,
134  double time) const noexcept;
135 
136  /*!
137  * \brief Compute the linearized solution for \f$U\f$
138  *
139  * \details The linearized solution for \f$U\f$ is given by
140  * \cite Barkett2019uae,
141  *
142  * \f[
143  * U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
144  * \mathrm{Re}(U_2(r) e^{i \nu u})
145  * + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
146  * \mathrm{Re}(U_3(r) e^{i \nu u}),
147  * \f]
148  *
149  * where
150  *
151  * \f{align*}{
152  * U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3}
153  * + \frac{C_{2b}}{4 r^4} \\
154  * U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3}
155  * + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5}
156  * \f}
157  */
158  void linearized_bondi_u(
159  gsl::not_null<SpinWeighted<ComplexDataVector, 1>*> bondi_u, size_t l_max,
160  double time) const noexcept;
161 
162  /*!
163  * \brief Computes the linearized solution for \f$W\f$.
164  *
165  * \details The linearized solution for \f$W\f$ is given by
166  * \cite Barkett2019uae,
167  *
168  * \f[
169  * W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2})
170  * \mathrm{Re}(W_2(r) e^{i \nu u})
171  * + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3})
172  * \mathrm{Re}(W_3(r) e^{i \nu u}),
173  * \f]
174  *
175  * where
176  *
177  * \f{align*}{
178  * W_2(r) &= - \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3}
179  * + \frac{C_{2b}}{2 r^4}, \\
180  * W_3(r) &= -\frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3}
181  * + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}.
182  * \f}
183  */
184  void linearized_bondi_w(
185  gsl::not_null<SpinWeighted<ComplexDataVector, 0>*> bondi_w, size_t l_max,
186  double time) const noexcept;
187 
188  /*!
189  * \brief Computes the linearized solution for \f$\partial_r J\f$.
190  *
191  * \details The linearized solution for \f$\partial_r J\f$ is given by
192  * \cite Barkett2019uae,
193  *
194  * \f[
195  * \partial_r J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
196  * \mathrm{Re}(\partial_r J_2(r) e^{i \nu u})
197  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
198  * \mathrm{Re}(\partial_r J_3(r) e^{i \nu u}),
199  * \f]
200  *
201  * where
202  *
203  * \f{align*}{
204  * \partial_r J_2(r) &= - \frac{C_{2a}}{4 r^2} + \frac{C_{2b}}{4 r^4}, \\
205  * \partial_r J_3(r) &= -\frac{C_{3a}}{10 r^2} + \frac{i \nu C_{3 b}}{2 r^4}
206  * + \frac{C_{3 b}}{r^5}.
207  * \f}
208  */
211  size_t l_max, double time) const noexcept;
212 
213  /*!
214  * \brief Compute the linearized solution for \f$\partial_r U\f$
215  *
216  * \details The linearized solution for \f$\partial_r U\f$ is given by
217  * \cite Barkett2019uae,
218  *
219  * \f[
220  * \partial_r U = \sqrt{3} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
221  * \mathrm{Re}(\partial_r U_2(r) e^{i \nu u})
222  * + \sqrt{6} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
223  * \mathrm{Re}(\partial_r U_3(r) e^{i \nu u}),
224  * \f]
225  *
226  * where
227  *
228  * \f{align*}{
229  * \partial_r U_2(r) &= -\frac{C_{2a}}{r^3} - \frac{i \nu C_{2 b}}{r^4}
230  * - \frac{C_{2b}}{r^5} \\
231  * \partial_r U_3(r) &= -\frac{C_{3a}}{r^3} + \frac{2 \nu^2 C_{3b}}{r^4}
232  * - \frac{5 i \nu C_{3b}}{r^5} - \frac{5 C_{3 b}}{r^6}
233  * \f}
234  */
237  size_t l_max, double time) const noexcept;
238 
239  /*!
240  * \brief Computes the linearized solution for \f$\partial_r W\f$.
241  *
242  * \details The linearized solution for \f$W\f$ is given by
243  * \cite Barkett2019uae,
244  *
245  * \f[
246  * \partial_r W = \frac{1}{\sqrt{2}} ({}_0 Y_{2\,2} + {}_0 Y_{2\, -2})
247  * \mathrm{Re}(\partial_r W_2(r) e^{i \nu u})
248  * + \frac{1}{\sqrt{2}} ({}_0 Y_{3\,3} - {}_0 Y_{3\, -3})
249  * \mathrm{Re}(\partial_r W_3(r) e^{i \nu u}),
250  * \f]
251  *
252  * where
253  *
254  * \f{align*}{
255  * \partial_r W_2(r) &= \frac{2 \nu^2 C_{2b}}{r^3}
256  * - \frac{3 i \nu C_{2 b}}{r^4} - \frac{2 C_{2b}}{r^5}, \\
257  * \partial_r W_3(r) &= \frac{4 i \nu^3 C_{3b}}{r^3}
258  * + \frac{12 i \nu^2 C_{3b}}{r^4} - \frac{10 \nu C_{3b}}{r^5}
259  * - \frac{15 C_{3b}}{r^6}.
260  * \f}
261  */
264  size_t l_max, double time) const noexcept;
265 
266  /*!
267  * \brief Computes the linearized solution for \f$\partial_u J\f$.
268  *
269  * \details The linearized solution for \f$\partial_u J\f$ is given by
270  * \cite Barkett2019uae,
271  *
272  * \f[
273  * \partial_u J = \sqrt{12} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
274  * \mathrm{Re}(i \nu J_2(r) e^{i \nu u})
275  * + \sqrt{30} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
276  * \mathrm{Re}(i \nu J_3(r) e^{i \nu u}),
277  * \f]
278  *
279  * where
280  *
281  * \f{align*}{
282  * J_2(r) &= \frac{C_{2a}}{4 r} - \frac{C_{2b}}{12 r^3}, \\
283  * J_3(r) &= \frac{C_{3a}}{10 r} - \frac{i \nu C_{3 b}}{6 r^3}
284  * - \frac{C_{3 b}}{4 r^4}.
285  * \f}
286  */
289  size_t l_max, double time) const noexcept;
290 
291  /*!
292  * \brief Compute the linearized solution for \f$\partial_u U\f$
293  *
294  * \details The linearized solution for \f$U\f$ is given by
295  * \cite Barkett2019uae,
296  *
297  * \f[
298  * \partial_u U = \sqrt{3} ({}_2 Y_{2\,2} + {}_2 Y_{2\, -2})
299  * \mathrm{Re}(i \nu U_2(r) e^{i \nu u})
300  * + \sqrt{6} ({}_2 Y_{3\,3} - {}_2 Y_{3\, -3})
301  * \mathrm{Re}(i \nu U_3(r) e^{i \nu u}),
302  * \f]
303  *
304  * where
305  *
306  * \f{align*}{
307  * U_2(r) &= \frac{C_{2a}}{2 r^2} + \frac{i \nu C_{2 b}}{3 r^3}
308  * + \frac{C_{2b}}{4 r^4} \\
309  * U_3(r) &= \frac{C_{3a}}{2 r^2} - \frac{2 \nu^2 C_{3b}}{3 r^3}
310  * + \frac{5 i \nu C_{3b}}{4 r^4} + \frac{C_{3 b}}{r^5}
311  * \f}
312  */
315  size_t l_max, double time) const noexcept;
316 
317  /*!
318  * \brief Computes the linearized solution for \f$\partial_u W\f$.
319  *
320  * \details The linearized solution for \f$\partial_u W\f$ is given by
321  * \cite Barkett2019uae,
322  *
323  * \f[
324  * \partial_u W = \frac{1}{\sqrt{2}} ({}_1 Y_{2\,2} + {}_1 Y_{2\, -2})
325  * \mathrm{Re}(i \nu W_2(r) e^{i \nu u})
326  * + \frac{1}{\sqrt{2}} ({}_1 Y_{3\,3} - {}_1 Y_{3\, -3})
327  * \mathrm{Re}(i \nu W_3(r) e^{i \nu u}),
328  * \f]
329  *
330  * where
331  *
332  * \f{align*}{
333  * W_2(r) &= \frac{\nu^2 C_{2b}}{r^2} + \frac{i \nu C_{2 b}}{r^3}
334  * + \frac{C_{2b}}{2 r^4}, \\
335  * W_3(r) &= \frac{2 i \nu^3 C_{3b}}{r^2} - \frac{4 i \nu^2 C_{3b}}{r^3}
336  * + \frac{5 \nu C_{3b}}{2 r^4} + \frac{3 C_{3b}}{r^5}.
337  * \f}
338  */
341  size_t l_max, double time) const noexcept;
342 
343  /*!
344  * \brief Compute the spherical coordinate metric from the linearized
345  * Bondi-Sachs system.
346  *
347  * \details This function dispatches to the individual computations in this
348  * class to determine the Bondi-Sachs scalars for the linearized solution.
349  * Once the scalars are determined, the metric is assembled via (note
350  * \f$\beta = 0\f$ in this solution)
351  *
352  * \f{align*}{
353  * ds^2 =& - ((1 + r W) - r^2 h_{A B} U^A U^B) (dt - dr)^2
354  * - 2 (dt - dr) dr \\
355  * &- 2 r^2 h_{A B} U^B (dt - dr) 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_{t t} &= -\left(1 + r W
364  * - r^2 \Re\left(\bar J U^2 + K U \bar U\right)\right)\\
365  * g_{t r} &= -1 - g_{t t}\\
366  * g_{r r} &= 2 + g_{t t}\\
367  * g_{t \theta} &= r^2 \Re\left(K U + J \bar U\right)\\
368  * g_{t \phi} &= r^2 \Im\left(K U + J \bar U\right)\\
369  * g_{r \theta} &= -g_{t \theta}\\
370  * g_{r \phi} &= -g_{t \phi}\\
371  * g_{\theta \theta} &= r^2 \Re\left(J + K\right)\\
372  * g_{\theta \phi} &= r^2 \Im\left(J\right)\\
373  * g_{\phi \phi} &= r^2 \Re\left(K - J\right),
374  * \f}
375  *
376  * and all other components are zero.
377  */
378  void spherical_metric(
382  size_t l_max, double time) const noexcept override;
383 
384  /*!
385  * \brief Compute the radial derivative of the spherical coordinate metric
386  * from the linearized Bondi-Sachs system.
387  *
388  * \details This function dispatches to the individual computations in this
389  * class to determine the Bondi-Sachs scalars for the linearized solution.
390  * Once the scalars are determined, the radial derivative of the metric is
391  * assembled via (note \f$\beta = 0\f$ in this solution)
392  *
393  * \f{align*}{
394  * \partial_r g_{a b} dx^a dx^b =& - (W + r \partial_r W
395  * - 2 r h_{A B} U^A U^B - r^2 (\partial_r h_{A B}) U^A U^B
396  * - 2 r^2 h_{A B} U^A \partial_r U^B) (dt - dr)^2 \\
397  * &- (4 r h_{A B} U^B + 2 r^2 ((\partial_r h_{A B}) U^B
398  * + h_{AB} \partial_r U^B) ) (dt - dr) dx^A
399  * + (2 r h_{A B} + r^2 \partial_r h_{A B}) dx^A dx^B,
400  * \f}
401  *
402  * where indices with capital letters refer to angular coordinates and the
403  * angular tensors may be written in terms of spin-weighted scalars. Doing so
404  * gives the metric components,
405  *
406  * \f{align*}{
407  * \partial_r g_{t t} &= -\left( W + r \partial_r W
408  * - 2 r \Re\left(\bar J U^2 + K U \bar U\right)
409  * - r^2 \partial_r \Re\left(\bar J U^2 + K U \bar U\right)\right) \\
410  * \partial_r g_{t r} &= -\partial_r g_{t t}\\
411  * \partial_r g_{t \theta} &= 2 r \Re\left(K U + J \bar U\right)
412  * + r^2 \partial_r \Re\left(K U + J \bar U\right) \\
413  * \partial_r g_{t \phi} &= 2r \Im\left(K U + J \bar U\right)
414  * + r^2 \partial_r \Im\left(K U + J \bar U\right) \\
415  * \partial_r g_{r r} &= \partial_r g_{t t}\\
416  * \partial_r g_{r \theta} &= -\partial_r g_{t \theta}\\
417  * \partial_r g_{r \phi} &= -\partial_r g_{t \phi}\\
418  * \partial_r g_{\theta \theta} &= 2 r \Re\left(J + K\right)
419  * + r^2 \Re\left(\partial_r J + \partial_r K\right) \\
420  * \partial_r g_{\theta \phi} &= 2 r \Im\left(J\right)
421  * + r^2 \Im\left(\partial_r J\right)\\
422  * \partial_r g_{\phi \phi} &= 2 r \Re\left(K - J\right)
423  * + r^2 \Re\left(\partial_r K - \partial_r J\right),
424  * \f}
425  *
426  * and all other components are zero.
427  */
428  void dr_spherical_metric(
432  size_t l_max, double time) const noexcept override;
433 
434  /*!
435  * \brief Compute the time derivative of the spherical coordinate metric from
436  * the linearized Bondi-Sachs system.
437  *
438  * \details This function dispatches to the individual computations in this
439  * class to determine the Bondi-Sachs scalars for the linearized solution.
440  * Once the scalars are determined, the metric is assembled via (note
441  * \f$\beta = 0\f$ in this solution, and note that we take coordinate
442  * \f$t=u\f$ in converting to the Cartesian coordinates)
443  *
444  * \f{align*}{
445  * \partial_t g_{a b} dx^a dx^b =& - (r \partial_u W
446  * - r^2 \partial_u h_{A B} U^A U^B
447  * - 2 r^2 h_{A B} U^B \partial_u U^A) (dt - dr)^2 \\
448  * &- 2 r^2 (\partial_u h_{A B} U^B + h_{A B} \partial_u U^B) (dt - dr) dx^A
449  * + r^2 \partial_u h_{A B} dx^A dx^B,
450  * \f}
451  *
452  * where indices with capital letters refer to angular coordinates and the
453  * angular tensors may be written in terms of spin-weighted scalars. Doing so
454  * gives the metric components,
455  *
456  * \f{align*}{
457  * \partial_t g_{t t} &= -\left(r \partial_u W
458  * - r^2 \partial_u \Re\left(\bar J U^2 + K U \bar U\right)\right)\\
459  * \partial_t g_{t r} &= -\partial_t g_{t t}\\
460  * \partial_t g_{t \theta} &= r^2 \partial_u \Re\left(K U + J \bar U\right)\\
461  * \partial_t g_{t \phi} &= r^2 \partial_u \Im\left(K U + J \bar U\right)\\
462  * \partial_t g_{r r} &= \partial_t g_{t t}\\
463  * \partial_t g_{r \theta} &= -\partial_t g_{t \theta}\\
464  * \partial_t g_{r \phi} &= -\partial_t g_{t \phi}\\
465  * \partial_t g_{\theta \theta} &= r^2 \Re\left(\partial_u J
466  * + \partial_u K\right)\\
467  * \partial_t g_{\theta \phi} &= r^2 \Im\left(\partial_u J\right)\\
468  * \partial_t g_{\phi \phi} &= r^2 \Re\left(\partial_u K
469  * - \partial_u J\right),
470  * \f}
471  *
472  * and all other components are zero.
473  */
474  void dt_spherical_metric(
478  size_t l_max, double time) const noexcept override;
479 
480  using WorldtubeData::variables_impl;
481 
483 
484  /*!
485  * \brief Determines the News function from the linearized solution
486  * parameters.
487  *
488  * \details The News is determined from the formula given in
489  * \cite Barkett2019uae,
490  *
491  * \f{align*}{
492  * N = \frac{1}{4 \sqrt{3}} ({}_{-2} Y_{2\, 2} + {}_{-2} Y_{2\,-2})
493  * \Re\left(i \nu^3 C_{2 b} e^{i \nu u}\right)
494  * + \frac{1}{2 \sqrt{15}} ({}_{-2} Y_{3\, 3} - {}_{-2} Y_{3\, -3})
495  * \Re\left(- \nu^4 C_{3 b} e^{i \nu u} \right)
496  * \f}
497  */
498  void variables_impl(
500  size_t l_max, double time, tmpl::type_<Tags::News> /*meta*/) const
501  noexcept override;
502 
507 
508  double frequency_ = 0.0;
509 };
510 } // namespace Solutions
511 } // 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:62
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:108
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
Options::String
const char *const String
The string used in option structs.
Definition: Options.hpp:32
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 .
gsl
Implementations from the Guideline Support Library.
Definition: ReadSpecThirdOrderPiecewisePolynomial.hpp:11
TMPL.hpp
gsl::not_null
Require a pointer to not be a nullptr
Definition: ReadSpecThirdOrderPiecewisePolynomial.hpp:13