LinearizedBondiSachs.hpp
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  static type default_value() noexcept { return 20.0; }
62  };
63  struct Frequency {
64  using type = double;
65  static constexpr Options::String 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(hicpp-use-equals-default,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) (dt - dr)^2
355  * - 2 (dt - dr) dr \\
356  * &- 2 r^2 h_{A B} U^B (dt - dr) dx^A + r^2 h_{A B} dx^A dx^B,
357  * \f}
358  *
359  * where indices with capital letters refer to angular coordinates and the
360  * angular tensors may be written in terms of spin-weighted scalars. Doing so
361  * gives the metric components,
362  *
363  * \f{align*}{
364  * g_{t t} &= -\left(1 + r W
365  * - r^2 \Re\left(\bar J U^2 + K U \bar U\right)\right)\\
366  * g_{t r} &= -1 - g_{t t}\\
367  * g_{r r} &= 2 + g_{t t}\\
368  * g_{t \theta} &= r^2 \Re\left(K U + J \bar U\right)\\
369  * g_{t \phi} &= r^2 \Im\left(K U + J \bar U\right)\\
370  * g_{r \theta} &= -g_{t \theta}\\
371  * g_{r \phi} &= -g_{t \phi}\\
372  * g_{\theta \theta} &= r^2 \Re\left(J + K\right)\\
373  * g_{\theta \phi} &= r^2 \Im\left(J\right)\\
374  * g_{\phi \phi} &= r^2 \Re\left(K - J\right),
375  * \f}
376  *
377  * and all other components are zero.
378  */
379  void spherical_metric(
383  size_t l_max, double time) const noexcept override;
384
385  /*!
386  * \brief Compute the radial derivative of the spherical coordinate metric
387  * from the linearized Bondi-Sachs system.
388  *
389  * \details This function dispatches to the individual computations in this
390  * class to determine the Bondi-Sachs scalars for the linearized solution.
391  * Once the scalars are determined, the radial derivative of the metric is
392  * assembled via (note \f$\beta = 0\f$ in this solution)
393  *
394  * \f{align*}{
395  * \partial_r g_{a b} dx^a dx^b =& - (W + r \partial_r W
396  * - 2 r h_{A B} U^A U^B - r^2 (\partial_r h_{A B}) U^A U^B
397  * - 2 r^2 h_{A B} U^A \partial_r U^B) (dt - dr)^2 \\
398  * &- (4 r h_{A B} U^B + 2 r^2 ((\partial_r h_{A B}) U^B
399  * + h_{AB} \partial_r U^B) ) (dt - dr) dx^A
400  * + (2 r h_{A B} + r^2 \partial_r h_{A B}) dx^A dx^B,
401  * \f}
402  *
403  * where indices with capital letters refer to angular coordinates and the
404  * angular tensors may be written in terms of spin-weighted scalars. Doing so
405  * gives the metric components,
406  *
407  * \f{align*}{
408  * \partial_r g_{t t} &= -\left( W + r \partial_r W
409  * - 2 r \Re\left(\bar J U^2 + K U \bar U\right)
410  * - r^2 \partial_r \Re\left(\bar J U^2 + K U \bar U\right)\right) \\
411  * \partial_r g_{t r} &= -\partial_r g_{t t}\\
412  * \partial_r g_{t \theta} &= 2 r \Re\left(K U + J \bar U\right)
413  * + r^2 \partial_r \Re\left(K U + J \bar U\right) \\
414  * \partial_r g_{t \phi} &= 2r \Im\left(K U + J \bar U\right)
415  * + r^2 \partial_r \Im\left(K U + J \bar U\right) \\
416  * \partial_r g_{r r} &= \partial_r g_{t t}\\
417  * \partial_r g_{r \theta} &= -\partial_r g_{t \theta}\\
418  * \partial_r g_{r \phi} &= -\partial_r g_{t \phi}\\
419  * \partial_r g_{\theta \theta} &= 2 r \Re\left(J + K\right)
420  * + r^2 \Re\left(\partial_r J + \partial_r K\right) \\
421  * \partial_r g_{\theta \phi} &= 2 r \Im\left(J\right)
422  * + r^2 \Im\left(\partial_r J\right)\\
423  * \partial_r g_{\phi \phi} &= 2 r \Re\left(K - J\right)
424  * + r^2 \Re\left(\partial_r K - \partial_r J\right),
425  * \f}
426  *
427  * and all other components are zero.
428  */
429  void dr_spherical_metric(
433  size_t l_max, double time) const noexcept override;
434
435  /*!
436  * \brief Compute the time derivative of the spherical coordinate metric from
437  * the linearized Bondi-Sachs system.
438  *
439  * \details This function dispatches to the individual computations in this
440  * class to determine the Bondi-Sachs scalars for the linearized solution.
441  * Once the scalars are determined, the metric is assembled via (note
442  * \f$\beta = 0\f$ in this solution, and note that we take coordinate
443  * \f$t=u\f$ in converting to the Cartesian coordinates)
444  *
445  * \f{align*}{
446  * \partial_t g_{a b} dx^a dx^b =& - (r \partial_u W
447  * - r^2 \partial_u h_{A B} U^A U^B
448  * - 2 r^2 h_{A B} U^B \partial_u U^A) (dt - dr)^2 \\
449  * &- 2 r^2 (\partial_u h_{A B} U^B + h_{A B} \partial_u U^B) (dt - dr) dx^A
450  * + r^2 \partial_u h_{A B} dx^A dx^B,
451  * \f}
452  *
453  * where indices with capital letters refer to angular coordinates and the
454  * angular tensors may be written in terms of spin-weighted scalars. Doing so
455  * gives the metric components,
456  *
457  * \f{align*}{
458  * \partial_t g_{t t} &= -\left(r \partial_u W
459  * - r^2 \partial_u \Re\left(\bar J U^2 + K U \bar U\right)\right)\\
460  * \partial_t g_{t r} &= -\partial_t g_{t t}\\
461  * \partial_t g_{t \theta} &= r^2 \partial_u \Re\left(K U + J \bar U\right)\\
462  * \partial_t g_{t \phi} &= r^2 \partial_u \Im\left(K U + J \bar U\right)\\
463  * \partial_t g_{r r} &= \partial_t g_{t t}\\
464  * \partial_t g_{r \theta} &= -\partial_t g_{t \theta}\\
465  * \partial_t g_{r \phi} &= -\partial_t g_{t \phi}\\
466  * \partial_t g_{\theta \theta} &= r^2 \Re\left(\partial_u J
467  * + \partial_u K\right)\\
468  * \partial_t g_{\theta \phi} &= r^2 \Im\left(\partial_u J\right)\\
469  * \partial_t g_{\phi \phi} &= r^2 \Re\left(\partial_u K
470  * - \partial_u J\right),
471  * \f}
472  *
473  * and all other components are zero.
474  */
475  void dt_spherical_metric(
479  size_t l_max, double time) const noexcept override;
480
481  using WorldtubeData::variables_impl;
482
484
485  /*!
486  * \brief Determines the News function from the linearized solution
487  * parameters.
488  *
489  * \details The News is determined from the formula given in
490  * \cite Barkett2019uae,
491  *
492  * \f{align*}{
493  * N = \frac{1}{4 \sqrt{3}} ({}_{-2} Y_{2\, 2} + {}_{-2} Y_{2\,-2})
494  * \Re\left(i \nu^3 C_{2 b} e^{i \nu u}\right)
495  * + \frac{1}{2 \sqrt{15}} ({}_{-2} Y_{3\, 3} - {}_{-2} Y_{3\, -3})
496  * \Re\left(- \nu^4 C_{3 b} e^{i \nu u} \right)
497  * \f}
498  */
499  void variables_impl(
501  size_t l_max, double time, tmpl::type_<Tags::News> /*meta*/) const
502  noexcept override;
503
508
509  double frequency_ = 0.0;
510 };
511 } // namespace Solutions
512 } // 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
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: Gsl.hpp:80
TMPL.hpp
gsl::not_null
Require a pointer to not be a nullptr
Definition: Gsl.hpp:183