WeylPropagating.hpp
1 // Distributed under the MIT License.
2 // See LICENSE.txt for details.
3 
4 #pragma once
5 
6 #include <cstddef>
7 
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 <size_t SpatialDim, typename Frame, typename DataType>
48 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) noexcept;
58 
59 template <size_t SpatialDim, typename Frame, typename DataType>
60 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) noexcept;
71 /// @}
72 } // namespace gr
gr::weyl_propagating
tnsr::ii< DataType, SpatialDim, Frame > weyl_propagating(const tnsr::ii< DataType, SpatialDim, Frame > &ricci, const tnsr::ii< DataType, SpatialDim, Frame > &extrinsic_curvature, const tnsr::II< DataType, SpatialDim, Frame > &inverse_spatial_metric, const tnsr::ijj< DataType, SpatialDim, Frame > &cov_deriv_extrinsic_curvature, const tnsr::I< DataType, SpatialDim, Frame > &unit_interface_normal_vector, const tnsr::II< DataType, SpatialDim, Frame > &projection_IJ, const tnsr::ii< DataType, SpatialDim, Frame > &projection_ij, const tnsr::Ij< DataType, SpatialDim, Frame > &projection_Ij, const double sign) noexcept
Computes the propagating modes of the Weyl tensor.
cstddef
gr
Definition: GaugeWave.hpp:28
Tensor.hpp
gr::extrinsic_curvature
tnsr::ii< DataType, SpatialDim, Frame > extrinsic_curvature(const Scalar< DataType > &lapse, const tnsr::I< DataType, SpatialDim, Frame > &shift, const tnsr::iJ< DataType, SpatialDim, Frame > &deriv_shift, const tnsr::ii< DataType, SpatialDim, Frame > &spatial_metric, const tnsr::ii< DataType, SpatialDim, Frame > &dt_spatial_metric, const tnsr::ijj< DataType, SpatialDim, Frame > &deriv_spatial_metric) noexcept
Computes extrinsic curvature from metric and derivatives.
gsl
Implementations from the Guideline Support Library.
Definition: ReadSpecPiecewisePolynomial.hpp:11
gsl::not_null
Require a pointer to not be a nullptr
Definition: ReadSpecPiecewisePolynomial.hpp:13