Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 :
8 : #include "DataStructures/Tensor/Tensor.hpp"
9 :
10 : /// \cond
11 : namespace gsl {
12 : template <typename>
13 : struct not_null;
14 : } // namespace gsl
15 : /// \endcond
16 :
17 : namespace gr {
18 : /// @{
19 : /*!
20 : * \ingroup GeneralRelativityGroup
21 : * \brief Computes the propagating modes of the Weyl tensor
22 : *
23 : * \details The Weyl tensor evolution system in vacuum has six characteristic
24 : * fields, of which two (\f$ U^{8\pm}\f$) are proportional to the
25 : * Newman-Penrose components of the Weyl tensor \f$\Psi_4\f$ and \f$\Psi_0\f$.
26 : * These represent the true gravitational-wave degrees of freedom, and
27 : * can be written down in terms of \f$3+1\f$ quantities as
28 : * \cite Kidder2004rw (see Eq. 75):
29 : *
30 : * \f{align}
31 : * U^{8\pm}_{ij} &= \left(P^{k}_i P^{l}_j - \frac{1}{2} P_{ij} P^{kl}\right)
32 : * \left(R_{kl} + K K_{kl} - K_k^m K_{ml}
33 : * \mp n^m \nabla_m K_{kl} \pm n^m \nabla_{(k}K_{l)m}
34 : * \right),\\
35 : * &= \left(P^{k}_i P^{l}_j - \frac{1}{2} P_{ij} P^{kl}\right)
36 : * \left(E_{kl} \mp n^m \nabla_m K_{kl}
37 : * \pm n^m \nabla_{(k}K_{l)m}\right),
38 : * \f}
39 : *
40 : * where \f$R_{ij}\f$ is the spatial Ricci tensor, \f$K_{ij}\f$ is the
41 : * extrinsic curvature, \f$K\f$ is the trace of \f$K_{ij}\f$, \f$E_{ij}\f$ is
42 : * the electric part of the Weyl tensor in vacuum, \f$n^i\f$ is the outward
43 : * directed unit normal vector to the interface, \f$\nabla_i\f$ denotes the
44 : * covariant derivative, and \f$P^{ij}\f$ and its index-raised and lowered forms
45 : * project tensors transverse to \f$n^i\f$.
46 : */
47 : template <typename DataType, size_t SpatialDim, typename Frame>
48 1 : tnsr::ii<DataType, SpatialDim, Frame> weyl_propagating(
49 : const tnsr::ii<DataType, SpatialDim, Frame>& ricci,
50 : const tnsr::ii<DataType, SpatialDim, Frame>& extrinsic_curvature,
51 : const tnsr::II<DataType, SpatialDim, Frame>& inverse_spatial_metric,
52 : const tnsr::ijj<DataType, SpatialDim, Frame>& cov_deriv_extrinsic_curvature,
53 : const tnsr::I<DataType, SpatialDim, Frame>& unit_interface_normal_vector,
54 : const tnsr::II<DataType, SpatialDim, Frame>& projection_IJ,
55 : const tnsr::ii<DataType, SpatialDim, Frame>& projection_ij,
56 : const tnsr::Ij<DataType, SpatialDim, Frame>& projection_Ij,
57 : const double sign);
58 :
59 : template <typename DataType, size_t SpatialDim, typename Frame>
60 1 : void weyl_propagating(
61 : gsl::not_null<tnsr::ii<DataType, SpatialDim, Frame>*> weyl_prop_u8,
62 : const tnsr::ii<DataType, SpatialDim, Frame>& ricci,
63 : const tnsr::ii<DataType, SpatialDim, Frame>& extrinsic_curvature,
64 : const tnsr::II<DataType, SpatialDim, Frame>& inverse_spatial_metric,
65 : const tnsr::ijj<DataType, SpatialDim, Frame>& cov_deriv_extrinsic_curvature,
66 : const tnsr::I<DataType, SpatialDim, Frame>& unit_interface_normal_vector,
67 : const tnsr::II<DataType, SpatialDim, Frame>& projection_IJ,
68 : const tnsr::ii<DataType, SpatialDim, Frame>& projection_ij,
69 : const tnsr::Ij<DataType, SpatialDim, Frame>& projection_Ij,
70 : const double sign);
71 : /// @}
72 : } // namespace gr
|