Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "DataStructures/ComplexDataVector.hpp"
7 : #include "DataStructures/DataVector.hpp"
8 : #include "DataStructures/Tensor/TypeAliases.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 : /*!
21 : * \ingroup GeneralRelativityGroup
22 : * \brief Computes Newman Penrose quantity \f$\Psi_4\f$ using the characteristic
23 : * field U\f$^{8+}\f$ and complex vector \f$\bar{m}^i\f$.
24 : *
25 : * \details Computes \f$\Psi_4\f$ as: \f$\Psi_4 =
26 : * U^{8+}_{ij}\bar{m}^i\bar{m}^j\f$ with the characteristic field
27 : * \f$U^{8+} = (P^{(a}_i P^{b)}_j - \frac{1}{2}P_{ij}P^{ab})
28 : * (E_{ab} - \epsilon_a^{cd}n_dB_{cb}\f$)
29 : * and \f$\bar{m}^i\f$ = \f$\frac{(x^i + iy^i)}{\sqrt{2}}\f$. \f$x^i\f$ and
30 : * \f$y^i\f$ are normalized unit vectors in the frame Frame.
31 : *
32 : */
33 : template <typename Frame>
34 1 : void psi_4(gsl::not_null<Scalar<ComplexDataVector>*> psi_4_result,
35 : const tnsr::ii<DataVector, 3, Frame>& spatial_ricci,
36 : const tnsr::ii<DataVector, 3, Frame>& extrinsic_curvature,
37 : const tnsr::ijj<DataVector, 3, Frame>& cov_deriv_extrinsic_curvature,
38 : const tnsr::ii<DataVector, 3, Frame>& spatial_metric,
39 : const tnsr::II<DataVector, 3, Frame>& inverse_spatial_metric,
40 : const tnsr::I<DataVector, 3, Frame>& inertial_coords);
41 :
42 : template <typename Frame>
43 1 : Scalar<ComplexDataVector> psi_4(
44 : const tnsr::ii<DataVector, 3, Frame>& spatial_ricci,
45 : const tnsr::ii<DataVector, 3, Frame>& extrinsic_curvature,
46 : const tnsr::ijj<DataVector, 3, Frame>& cov_deriv_extrinsic_curvature,
47 : const tnsr::ii<DataVector, 3, Frame>& spatial_metric,
48 : const tnsr::II<DataVector, 3, Frame>& inverse_spatial_metric,
49 : const tnsr::I<DataVector, 3, Frame>& inertial_coords);
50 : /// @}
51 :
52 : } // namespace gr
|