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/DataBox/Tag.hpp" 7 : #include "DataStructures/Tensor/TypeAliases.hpp" 8 : 9 : /// \cond 10 : class ComplexDataVector; 11 : class DataVector; 12 : /// \endcond 13 : 14 : /*! 15 : * \ingroup EllipticSystemsGroup 16 : * \brief Items related to solving the self force of a scalar charge on a Kerr 17 : * background. 18 : * 19 : * \see ScalarSelfForce::FirstOrderSystem 20 : */ 21 : namespace ScalarSelfForce {} 22 : 23 : /// Tags for the ScalarSelfForce system. 24 1 : namespace ScalarSelfForce::Tags { 25 : 26 : /*! 27 : * \brief The complex m-mode field $\Psi_m$. 28 : * 29 : * Defined by the m-mode decomposition of the complex scalar field $\Phi$ 30 : * [Eq. (2.6) in \cite Osburn:2022bby ]: 31 : * 32 : * \begin{equation} 33 : * \Phi(t,r,\theta,\phi) = \frac{1}{r} \sum_{m=-\infty}^{\infty} 34 : * \Psi_m(r,\theta) e^{im\Delta\phi(r)} e^{im(\phi - \Omega t)} 35 : * \end{equation} 36 : * 37 : * where $\Delta\phi(r) = \frac{a}{r_\plus - r_\minus} 38 : * \ln(\frac{r-r_\plus}{r-r_\minus})$. 39 : */ 40 1 : struct MMode : db::SimpleTag { 41 0 : using type = Scalar<ComplexDataVector>; 42 : }; 43 : 44 : /*! 45 : * \brief The factor multiplying the angular derivative in the principal part of 46 : * the equations. 47 : * 48 : * This is the factor $\alpha$ that defines the principal part of the equations 49 : * and allows to write it in first-order flux form given by 50 : * \begin{equation} 51 : * -\partial_i F^i + \beta \Psi_m + \gamma_i F^i = S_m 52 : * \end{equation} 53 : * with the flux 54 : * \begin{equation} 55 : * F^i = \{\partial_{r_\star}, \alpha \partial_{\cos\theta}\} \Psi_m 56 : * \text{.} 57 : * \end{equation} 58 : * This factor is set by the analytic data class (see 59 : * `ScalarSelfForce::AnalyticData::CircularOrbit`). 60 : */ 61 1 : struct Alpha : db::SimpleTag { 62 0 : using type = Scalar<ComplexDataVector>; 63 : }; 64 : 65 : /*! 66 : * \brief The factor multiplying the non-derivative terms in the equations. 67 : * 68 : * This is the factor $\beta$ in the general form of the equations 69 : * \begin{equation} 70 : * -\partial_i F^i + \beta \Psi_m + \gamma_i F^i = S_m 71 : * \text{.} 72 : * \end{equation} 73 : * This factor is set by the analytic data class (see 74 : * `ScalarSelfForce::AnalyticData::CircularOrbit`). 75 : */ 76 1 : struct Beta : db::SimpleTag { 77 0 : using type = Scalar<ComplexDataVector>; 78 : }; 79 : 80 : /*! 81 : * \brief The factor multiplying the first-derivative terms in the equations. 82 : * 83 : * This is the factor $\gamma_i$ in the general form of the equations 84 : * \begin{equation} 85 : * -\partial_i F^i + \beta \Psi_m + \gamma_i F^i = S_m 86 : * \text{.} 87 : * \end{equation} 88 : * This factor is set by the analytic data class (see 89 : * `ScalarSelfForce::AnalyticData::CircularOrbit`). 90 : */ 91 1 : struct Gamma : db::SimpleTag { 92 0 : using type = tnsr::i<ComplexDataVector, 2>; 93 : }; 94 : 95 : /*! 96 : * \brief A flag indicating that we are solving for the regularized field in 97 : * this element. 98 : * 99 : * In elements at and around the scalar point charge we use the effective source 100 : * approach to split the m-mode field into a singular and a regular field 101 : * [Eq. (3.6) in \cite Osburn:2022bby ]: 102 : * \begin{equation} 103 : * \Psi_m = \Psi_m^\mathcal{P} + \Psi_m^\mathcal{R} 104 : * \text{.} 105 : * \end{equation} 106 : * In these elements, we solve for $\Psi_m^\mathcal{R}$ rather than $\Psi_m$. 107 : */ 108 1 : struct FieldIsRegularized : db::SimpleTag { 109 0 : using type = bool; 110 : }; 111 : 112 : /*! 113 : * \brief The singular field $\Psi_m^\mathcal{P}$. 114 : * 115 : * Only defined where `FieldIsRegularized` is true. 116 : */ 117 1 : struct SingularField : db::SimpleTag { 118 0 : using type = Scalar<ComplexDataVector>; 119 : }; 120 : 121 : /*! 122 : * \brief The Boyer-Lindquist radius $r$. 123 : * 124 : * Computed numerically from the tortoise radial coordinate $r_\star$ 125 : * [see Eq. (2.12) in \cite Osburn:2022bby ]. 126 : */ 127 1 : struct BoyerLindquistRadius : db::SimpleTag { 128 0 : using type = Scalar<DataVector>; 129 : }; 130 : 131 : } // namespace ScalarSelfForce::Tags