NewmanPenrose.hpp
1 // Distributed under the MIT License.
2 // See LICENSE.txt for details.
3 
4 #pragma once
5 
6 #include "DataStructures/SpinWeighted.hpp"
8 #include "Evolution/Systems/Cce/Tags.hpp"
9 #include "Utilities/Gsl.hpp"
10 #include "Utilities/TMPL.hpp"
11 
12 /// \cond
13 class ComplexDataVector;
14 /// \endcond
15 
16 namespace Cce {
17 
18 /// \cond
19 template <typename Tag>
20 struct VolumeWeyl;
21 /// \endcond
22 
23 /*!
24  * \brief Compute the Weyl scalar \f$\Psi_0\f$ in the volume according to a
25  * standard set of Newman-Penrose vectors.
26  *
27  * \details The Bondi forms of the Newman-Penrose vectors that are needed for
28  * \f$\Psi_0\f$ are:
29  *
30  * \f{align}{
31  * \mathbf{l} &= \partial_r / \sqrt{2}\\
32  * \mathbf{m} &= \frac{-1}{2 r} \left(\sqrt{1 + K} q^A \partial_A -
33  * \frac{J}{\sqrt{1 + K}}\bar{q}^A \partial_A \right)
34  * \f}
35  *
36  * Then, we may compute \f$\Psi_0 = l^\alpha m^\beta l^\mu m^\nu C_{\alpha
37  * \beta \mu \nu}\f$ from the Bondi system, giving
38  *
39  * \f{align*}{
40  * \Psi_0 = \frac{(1 - y)^4}{16 r^2 K}
41  * \bigg[& \partial_y \beta \left((1 + K) (\partial_y J)
42  * - \frac{J^2 \partial_y \bar J}{1 + K}\right)
43  * - \frac{1}{2} (1 + K) (\partial_y^2 J)
44  * + \frac{J^2 \partial_y^2 \bar J}{2(K + 1)}\\
45  * & + \frac{1}{K^2} \left(- \frac{1}{4} J \left(\bar{J}^2 \left(\partial_y
46  * J\right)^2 + J^2 \left(\partial_y \bar J\right)^2\right)
47  * + \frac{1 + K^2}{2} J (\partial_y J) (\partial_y \bar J)
48  * \right)\bigg].
49  * \f}
50  */
51 template <>
52 struct VolumeWeyl<Tags::Psi0> {
53  using return_tags = tmpl::list<Tags::Psi0>;
54  using argument_tags = tmpl::list<Tags::BondiJ, Tags::Dy<Tags::BondiJ>,
57  static void apply(
64  const Scalar<SpinWeighted<ComplexDataVector, 0>>& one_minus_y) noexcept;
65 };
66 } // namespace Cce
Cce::Tags::BondiK
Bondi parameter .
Definition: Tags.hpp:72
SpinWeighted
Make a spin-weighted type T with spin-weight Spin. Mathematical operators are restricted to addition,...
Definition: SpinWeighted.hpp:24
Cce::Tags::OneMinusY
Coordinate value , which will be cached and sent to the implementing functions.
Definition: Tags.hpp:284
db::apply
constexpr auto apply(F &&f, const DataBox< BoxTags > &box, Args &&... args) noexcept
Apply the invokable f with argument Tags TagsList from DataBox box
Definition: DataBox.hpp:1443
Cce::Tags::BondiR
The Bondi radius is of the worldtube.
Definition: Tags.hpp:336
Cce::Tags::Dy
The derivative with respect to the numerical coordinate , where is Bondi radius of the worldtube.
Definition: Tags.hpp:116
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
Gsl.hpp
Tensor.hpp
ComplexDataVector
Stores a collection of complex function values.
Definition: ComplexDataVector.hpp:47
TMPL.hpp
gsl::not_null
Require a pointer to not be a nullptr
Definition: Gsl.hpp:183