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/DataBox/Tag.hpp" 9 : #include "DataStructures/Tensor/TypeAliases.hpp" 10 : 11 : /// \cond 12 : namespace gsl { 13 : template <typename> 14 : struct not_null; 15 : } // namespace gsl 16 : /// \endcond 17 : 18 : namespace hydro { 19 : 20 : namespace Tags { 21 : /// \brief Tag containing the quadrupole moment. 22 : /// 23 : /// The quadrupole moment is defined as \f$\tilde{D} x^i x^j\f$ 24 : /// (equation 21 of \cite Shibata2003), with 25 : /// \f$\tilde{D}=\sqrt{\gamma}\rho W\f$, $W$ being the Lorentz factor, 26 : /// $\gamma$ being the determinant of the spatial metric, and 27 : /// \f$x\f$ the coordinates in Frame Fr. 28 : template <typename DataType, size_t Dim, typename Fr = Frame::Inertial> 29 1 : struct QuadrupoleMoment : db::SimpleTag { 30 0 : using type = tnsr::ii<DataType, Dim, Fr>; 31 : }; 32 : 33 : /// \brief Tag containing the first time derivative of the quadrupole moment. 34 : /// 35 : /// For the first derivative of the quadrupole moment, we use 36 : /// \f$\tilde{D} (v^i x^j + x^i v^j)\f$ (equation 23 of \cite Shibata2003), 37 : /// with \f$\tilde{D}=\sqrt{\gamma}\rho W\f$, $W$ being the Lorentz factor, 38 : /// $\gamma$ being the determinant of the spatial metric, \f$x\f$ the 39 : /// coordinates in Frame Fr, and \f$v\f$ the corresponding spatial velocity. 40 : template <typename DataType, size_t Dim, typename Fr = Frame::Inertial> 41 1 : struct QuadrupoleMomentDerivative : db::SimpleTag { 42 0 : using type = tnsr::ii<DataType, Dim, Fr>; 43 : }; 44 : } // namespace Tags 45 : 46 : /// \brief Function computing the quadrupole moment. 47 : /// 48 : /// Computes the quadrupole moment, using 49 : /// \f$\tilde{D} x^i x^j\f$ (equation 21 of \cite Shibata2003), 50 : /// with \f$\tilde{D}=\sqrt{\gamma}\rho W\f$, $W$ being the Lorentz factor, 51 : /// $\gamma$ being the determinant of the spatial metric, and 52 : /// \f$x\f$ the coordinates in Frame Fr. Result of calculation stored in result. 53 : template <typename DataType, size_t Dim, typename Fr = Frame::Inertial> 54 1 : void quadrupole_moment( 55 : const gsl::not_null<tnsr::ii<DataType, Dim, Fr>*> result, 56 : const Scalar<DataType>& tilde_d, 57 : const tnsr::I<DataType, Dim, Fr>& coordinates); 58 : 59 : /// \brief Function computing the first time derivative of the 60 : /// quadrupole moment. 61 : /// 62 : /// Computes the first time derivative of the quadrupole moment, using 63 : /// \f$\tilde{D} (v^i x^j + x^i v^j)\f$ (equation 23 of \cite Shibata2003), 64 : /// with \f$\tilde{D}=\sqrt{\gamma}\rho W\f$, $W$ being the Lorentz factor, 65 : /// $\gamma$ being the determinant of the spatial metric, \f$x\f$ the 66 : /// coordinates in Frame Fr, and \f$v\f$ the corresponding spatial velocity. 67 : /// Result of calculation stored in result. 68 : template <typename DataType, size_t Dim, typename Fr = Frame::Inertial> 69 1 : void quadrupole_moment_derivative( 70 : const gsl::not_null<tnsr::ii<DataType, Dim, Fr>*> result, 71 : const Scalar<DataType>& tilde_d, 72 : const tnsr::I<DataType, Dim, Fr>& coordinates, 73 : const tnsr::I<DataType, Dim, Fr>& spatial_velocity); 74 : 75 : } // namespace hydro