SpECTRE Documentation Coverage Report
Current view: top level - Elliptic/Systems/SelfForce/GeneralRelativity - Tags.hpp Hit Total Coverage
Commit: e168c1aa7e6b7eeddf3f9be0a985c755ae24c13d Lines: 10 31 32.3 %
Date: 2026-09-15 09:43:04
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <string>
       7             : 
       8             : #include "DataStructures/DataBox/Tag.hpp"
       9             : #include "DataStructures/Tensor/TypeAliases.hpp"
      10             : #include "Domain/Creators/DomainCreator.hpp"
      11             : #include "Domain/Creators/OptionTags.hpp"
      12             : #include "Domain/Structure/BlockGroups.hpp"
      13             : 
      14             : /// \cond
      15             : class ComplexDataVector;
      16             : class DataVector;
      17             : /// \endcond
      18             : 
      19             : /*!
      20             :  * \ingroup EllipticSystemsGroup
      21             :  * \brief Items related to solving the gravitational self-force of a gravitating
      22             :  * body in a Kerr background.
      23             :  *
      24             :  * \see GrSelfForce::FirstOrderSystem
      25             :  */
      26             : namespace GrSelfForce {
      27             : 
      28           0 : namespace OptionTags {
      29             : 
      30           0 : struct OptionGroup {
      31           0 :   static std::string name() { return "GrSelfForce"; }
      32           0 :   static constexpr Options::String help =
      33             :       "Options for the GR self-force system";
      34             : };
      35             : 
      36           0 : struct NullSlicingBlocks {
      37           0 :   using group = OptionGroup;
      38           0 :   using type = std::vector<std::string>;
      39           0 :   static constexpr Options::String help =
      40             :       "The blocks in which to use null slicing (vtu-slicing).";
      41             : };
      42             : 
      43             : }  // namespace OptionTags
      44             : 
      45             : /// Tags for the GrSelfForce system.
      46           1 : namespace Tags {
      47             : 
      48             : /*!
      49             :  * \brief The complex m-mode field $(\Psi_m)_{ab}$.
      50             :  *
      51             :  * Defined by the m-mode decomposition of the metric perturbation $h_{ab}$:
      52             :  * \begin{equation}
      53             :  * \bar{h}_{ab}(t,r,\theta,\phi) = \sum_{m=-\infty}^{\infty}
      54             :  *   \bar{h}^m_{ab}(r,\theta) e^{im(\phi - \Omega t)}
      55             :  * \end{equation}
      56             :  * and further decomposition with convenient prefactors:
      57             :  * \begin{align*}
      58             :  * &(\Psi_m)_{tt} = r \bar{h}^m_{tt} \\
      59             :  * &(\Psi_m)_{tr} = \frac{\Delta}{r} \bar{h}^m_{tr} \\
      60             :  * &(\Psi_m)_{t\theta} = \bar{h}^m_{t\theta} \\
      61             :  * &(\Psi_m)_{t\phi} = \frac{1}{\sin\theta} \bar{h}^m_{t\phi} \\
      62             :  * &(\Psi_m)_{rr} = \frac{\Delta^2}{r^3} \bar{h}^m_{rr} \\
      63             :  * &(\Psi_m)_{r\theta} = \frac{\Delta}{r^2} \bar{h}^m_{r\theta} \\
      64             :  * &(\Psi_m)_{r\phi} = \frac{\Delta}{r^2\sin\theta} \bar{h}^m_{r\phi} \\
      65             :  * &(\Psi_m)_{\theta\theta} = \frac{1}{r} \bar{h}^m_{\theta\theta} \\
      66             :  * &(\Psi_m)_{\theta\phi} = \frac{1}{r\sin\theta} \bar{h}^m_{\theta\phi} \\
      67             :  * &(\Psi_m)_{\phi\phi} = \frac{1}{r\sin^2\theta} \bar{h}^m_{\phi\phi} \\
      68             :  * \end{align*}
      69             :  */
      70           1 : struct MMode : db::SimpleTag {
      71           0 :   using type = tnsr::aa<ComplexDataVector, 3>;
      72             : };
      73             : 
      74             : /*!
      75             :  * \brief The factor multiplying the angular derivative in the principal part of
      76             :  * the equations.
      77             :  *
      78             :  * This is the factor $\alpha$ that defines the principal part of the equations
      79             :  * and allows to write it in first-order flux form (see
      80             :  * `GrSelfForce::FirstOrderSystem`). This factor is set by the analytic data
      81             :  * class (see `ScalarSelfForce::AnalyticData::CircularOrbit`).
      82             :  */
      83           1 : struct Alpha : db::SimpleTag {
      84           0 :   using type = Scalar<ComplexDataVector>;
      85             : };
      86             : 
      87             : /*!
      88             :  * \brief The factors $\beta_{ab}^{cd}$ multiplying the non-derivative terms in
      89             :  * the equations.
      90             :  */
      91           1 : struct Beta : db::SimpleTag {
      92           0 :   using type = tnsr::aaBB<ComplexDataVector, 3>;
      93             : };
      94             : 
      95             : /*!
      96             :  * \brief The factors $\gamma_{{r_\star}ab}^{cd}$ multiplying the
      97             :  * $r_\star$-derivative terms in the equations.
      98             :  */
      99           1 : struct GammaRstar : db::SimpleTag {
     100           0 :   using type = tnsr::aaBB<ComplexDataVector, 3>;
     101             : };
     102             : 
     103             : /*!
     104             :  * \brief The factors $\gamma_{\theta ab}^{cd}$ multiplying the
     105             :  * $\theta$-derivative terms in the equations.
     106             :  */
     107           1 : struct GammaTheta : db::SimpleTag {
     108           0 :   using type = tnsr::aaBB<ComplexDataVector, 3>;
     109             : };
     110             : 
     111             : /*!
     112             :  * \brief A flag indicating that we are solving for the regularized field in
     113             :  * this element.
     114             :  *
     115             :  * In elements at and around the point mass we use the effective source
     116             :  * approach to split the m-mode field into a singular and a regular field
     117             :  * [Eq. (3.6) in \cite Osburn:2022bby ]:
     118             :  * \begin{equation}
     119             :  * \Psi_m = \Psi_m^\mathcal{P} + \Psi_m^\mathcal{R}
     120             :  * \text{.}
     121             :  * \end{equation}
     122             :  * In these elements, we solve for $\Psi_m^\mathcal{R}$ rather than $\Psi_m$.
     123             :  */
     124           1 : struct FieldIsRegularized : db::SimpleTag {
     125           0 :   using type = bool;
     126             : };
     127             : 
     128             : /*!
     129             :  * \brief The singular field $\Psi_m^\mathcal{P}$.
     130             :  *
     131             :  * Only defined where `FieldIsRegularized` is true.
     132             :  */
     133           1 : struct SingularField : db::SimpleTag {
     134           0 :   using type = tnsr::aa<ComplexDataVector, 3>;
     135             : };
     136             : 
     137             : /*!
     138             :  * \brief The Boyer-Lindquist radius $r$.
     139             :  *
     140             :  * Computed numerically from the tortoise radial coordinate $r_\star$
     141             :  * [see Eq. (2.12) in \cite Osburn:2022bby ].
     142             :  */
     143           1 : struct BoyerLindquistRadius : db::SimpleTag {
     144           0 :   using type = Scalar<DataVector>;
     145             : };
     146             : 
     147             : /*!
     148             :  * \brief Blocks in which we use null slicing (vtu-slicing).
     149             :  */
     150             : template <size_t Dim>
     151           1 : struct NullSlicingBlocks : db::SimpleTag {
     152           0 :   using type = std::vector<size_t>;
     153           0 :   using option_tags = tmpl::list<OptionTags::NullSlicingBlocks,
     154             :                                  domain::OptionTags::DomainCreator<Dim>>;
     155           0 :   static constexpr bool pass_metavariables = false;
     156           0 :   static type create_from_options(
     157             :       const std::vector<std::string>& null_slicing_blocks,
     158             :       const std::unique_ptr<DomainCreator<Dim>>& domain_creator) {
     159             :     return domain::block_ids_from_names(null_slicing_blocks,
     160             :                                         domain_creator->block_names(),
     161             :                                         domain_creator->block_groups());
     162             :   }
     163             : };
     164             : 
     165             : }  // namespace Tags
     166             : }  // namespace GrSelfForce

Generated by: LCOV version 1.14