SpECTRE Documentation Coverage Report
Current view: top level - Elliptic/Systems/SelfForce/Scalar - Tags.hpp Hit Total Coverage
Commit: 1edafdcf8f1daa3b8a44b1fa87ed2c4fd57bcd0e Lines: 11 33 33.3 %
Date: 2026-04-11 02:12:25
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 "DataStructures/DataBox/Tag.hpp"
       7             : #include "DataStructures/Tensor/TypeAliases.hpp"
       8             : #include "Domain/Creators/DomainCreator.hpp"
       9             : #include "Domain/Creators/OptionTags.hpp"
      10             : #include "Domain/Structure/BlockGroups.hpp"
      11             : 
      12             : /// \cond
      13             : class ComplexDataVector;
      14             : class DataVector;
      15             : /// \endcond
      16             : 
      17             : /*!
      18             :  * \ingroup EllipticSystemsGroup
      19             :  * \brief Items related to solving the self force of a scalar charge on a Kerr
      20             :  * background.
      21             :  *
      22             :  * \see ScalarSelfForce::FirstOrderSystem
      23             :  */
      24             : namespace ScalarSelfForce {
      25             : 
      26           0 : namespace OptionTags {
      27             : 
      28           0 : struct OptionGroup {
      29           0 :   static std::string name() { return "ScalarSelfForce"; }
      30           0 :   static constexpr Options::String help =
      31             :       "Options for the scalar self-force system";
      32             : };
      33             : 
      34           0 : struct NullSlicingBlocks {
      35           0 :   using group = OptionGroup;
      36           0 :   using type = std::vector<std::string>;
      37           0 :   static constexpr Options::String help =
      38             :       "The blocks in which to use null slicing (vtu-slicing).";
      39             : };
      40             : 
      41             : }  // namespace OptionTags
      42             : 
      43             : /// Tags for the ScalarSelfForce system.
      44           1 : namespace Tags {
      45             : 
      46             : /*!
      47             :  * \brief The complex m-mode field $\Psi_m$.
      48             :  *
      49             :  * Defined by the m-mode decomposition of the complex scalar field $\Phi$
      50             :  * [Eq. (2.6) in \cite Osburn:2022bby ]:
      51             :  *
      52             :  * \begin{equation}
      53             :  * \Phi(t,r,\theta,\phi) = \frac{1}{r} \sum_{m=-\infty}^{\infty}
      54             :  *   \Psi_m(r,\theta) e^{im\Delta\phi(r)} e^{im(\phi - \Omega t)}
      55             :  * \end{equation}
      56             :  *
      57             :  * where $\Delta\phi(r) = \frac{a}{r_\plus - r_\minus}
      58             :  * \ln(\frac{r-r_\plus}{r-r_\minus})$.
      59             :  */
      60           1 : struct MMode : db::SimpleTag {
      61           0 :   using type = Scalar<ComplexDataVector>;
      62             : };
      63             : 
      64             : /*!
      65             :  * \brief The factor multiplying the angular derivative in the principal part of
      66             :  * the equations.
      67             :  *
      68             :  * This is the factor $\alpha$ that defines the principal part of the equations
      69             :  * and allows to write it in first-order flux form given by
      70             :  * \begin{equation}
      71             :  * -\partial_i F^i + \beta \Psi_m + \gamma_i \partial_i \Psi_m = S_m
      72             :  * \end{equation}
      73             :  * with the flux
      74             :  * \begin{equation}
      75             :  * F^i = \{\partial_{r_\star}, \alpha \partial_{\cos\theta}\} \Psi_m
      76             :  * \text{.}
      77             :  * \end{equation}
      78             :  * This factor is set by the analytic data class (see
      79             :  * `ScalarSelfForce::AnalyticData::CircularOrbit`).
      80             :  */
      81           1 : struct Alpha : db::SimpleTag {
      82           0 :   using type = Scalar<ComplexDataVector>;
      83             : };
      84             : 
      85             : /*!
      86             :  * \brief The factor multiplying the non-derivative terms in the equations.
      87             :  *
      88             :  * This is the factor $\beta$ in the general form of the equations
      89             :  * \begin{equation}
      90             :  * -\partial_i F^i + \beta \Psi_m + \gamma_i \partial_i \Psi_m = S_m
      91             :  * \text{.}
      92             :  * \end{equation}
      93             :  * This factor is set by the analytic data class (see
      94             :  * `ScalarSelfForce::AnalyticData::CircularOrbit`).
      95             :  */
      96           1 : struct Beta : db::SimpleTag {
      97           0 :   using type = Scalar<ComplexDataVector>;
      98             : };
      99             : 
     100             : /*!
     101             :  * \brief The factor multiplying the first-derivative terms in the equations.
     102             :  *
     103             :  * This is the factor $\gamma_i$ in the general form of the equations
     104             :  * \begin{equation}
     105             :  * -\partial_i F^i + \beta \Psi_m + \gamma_i \partial_i \Psi_m = S_m
     106             :  * \text{.}
     107             :  * \end{equation}
     108             :  * This factor is set by the analytic data class (see
     109             :  * `ScalarSelfForce::AnalyticData::CircularOrbit`).
     110             :  */
     111           1 : struct Gamma : db::SimpleTag {
     112           0 :   using type = tnsr::i<ComplexDataVector, 2>;
     113             : };
     114             : 
     115             : /*!
     116             :  * \brief A flag indicating that we are solving for the regularized field in
     117             :  * this element.
     118             :  *
     119             :  * In elements at and around the scalar point charge we use the effective source
     120             :  * approach to split the m-mode field into a singular and a regular field
     121             :  * [Eq. (3.6) in \cite Osburn:2022bby ]:
     122             :  * \begin{equation}
     123             :  * \Psi_m = \Psi_m^\mathcal{P} + \Psi_m^\mathcal{R}
     124             :  * \text{.}
     125             :  * \end{equation}
     126             :  * In these elements, we solve for $\Psi_m^\mathcal{R}$ rather than $\Psi_m$.
     127             :  */
     128           1 : struct FieldIsRegularized : db::SimpleTag {
     129           0 :   using type = bool;
     130             : };
     131             : 
     132             : /*!
     133             :  * \brief The singular field $\Psi_m^\mathcal{P}$.
     134             :  *
     135             :  * Only defined where `FieldIsRegularized` is true.
     136             :  */
     137           1 : struct SingularField : db::SimpleTag {
     138           0 :   using type = Scalar<ComplexDataVector>;
     139             : };
     140             : 
     141             : /*!
     142             :  * \brief The Boyer-Lindquist radius $r$.
     143             :  *
     144             :  * Computed numerically from the tortoise radial coordinate $r_\star$
     145             :  * [see Eq. (2.12) in \cite Osburn:2022bby ].
     146             :  */
     147           1 : struct BoyerLindquistRadius : db::SimpleTag {
     148           0 :   using type = Scalar<DataVector>;
     149             : };
     150             : 
     151             : /*!
     152             :  * \brief Blocks in which we use null slicing (vtu-slicing).
     153             :  */
     154           1 : struct NullSlicingBlocks : db::SimpleTag {
     155           0 :   using type = std::vector<size_t>;
     156           0 :   using option_tags = tmpl::list<OptionTags::NullSlicingBlocks,
     157             :                                  domain::OptionTags::DomainCreator<2>>;
     158           0 :   static constexpr bool pass_metavariables = false;
     159           0 :   static type create_from_options(
     160             :       const std::vector<std::string>& null_slicing_blocks,
     161             :       const std::unique_ptr<DomainCreator<2>>& domain_creator) {
     162             :     return domain::block_ids_from_names(null_slicing_blocks,
     163             :                                         domain_creator->block_names(),
     164             :                                         domain_creator->block_groups());
     165             :   }
     166             : };
     167             : 
     168             : /*!
     169             :  * \brief The hyperboloidal boost function $H(r_*)$.
     170             :  */
     171           1 : struct BoostFunction : db::SimpleTag {
     172           0 :   using type = Scalar<ComplexDataVector>;
     173             : };
     174             : 
     175             : /*!
     176             :  * \brief The radial derivative of the boost function, $H'(r_*)$.
     177             :  */
     178           1 : struct BoostFunctionDeriv : db::SimpleTag {
     179           0 :   using type = Scalar<ComplexDataVector>;
     180             : };
     181             : 
     182             : }  // namespace Tags
     183             : }  // namespace ScalarSelfForce

Generated by: LCOV version 1.14