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