SpECTRE Documentation Coverage Report
Current view: top level - Elliptic/Systems/SelfForce/Scalar - FirstOrderSystem.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 9.1 % 11 1
Test Date: 2026-10-22 17:29:42
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 <cstddef>
       7              : 
       8              : #include "DataStructures/DataBox/Prefixes.hpp"
       9              : #include "Elliptic/BoundaryConditions/BoundaryCondition.hpp"
      10              : #include "Elliptic/Protocols/FirstOrderSystem.hpp"
      11              : #include "Elliptic/Systems/SelfForce/Scalar/Equations.hpp"
      12              : #include "Elliptic/Systems/SelfForce/Scalar/Tags.hpp"
      13              : #include "Utilities/ProtocolHelpers.hpp"
      14              : #include "Utilities/TMPL.hpp"
      15              : 
      16              : namespace ScalarSelfForce {
      17              : 
      18              : /*!
      19              :  * \brief Self-force of a scalar charge on a Kerr background.
      20              :  *
      21              :  * In this formulation we solve a 2D elliptic equation for the m-mode field
      22              :  * $\Psi_m$, following \cite Osburn:2022bby . The two dimensions are a radial
      23              :  * and angular coordinate, specifically the tortoise radius $r_\star$ and
      24              :  * $\cos\theta$ (note that \cite Osburn:2022bby uses $\theta$).
      25              :  *
      26              :  * We write the equations in generic first-order flux form
      27              :  * \begin{equation}
      28              :  * -\Delta_m \Psi_m = -\partial_i F^i + \beta \Psi_m + \gamma_i \partial_i
      29              :  * \Psi_m = 0
      30              :  * \end{equation}
      31              :  * with the flux
      32              :  * \begin{equation}
      33              :  * F^i = \{\partial_{r_\star}, \alpha \partial_{\cos\theta}\} \Psi_m
      34              :  * \text{,}
      35              :  * \end{equation}
      36              :  * where $\alpha$, $\beta$, and $\gamma_i$ are coefficients that define the
      37              :  * elliptic equations. The particular coefficients that match Eq. (2.9) of
      38              :  * \cite Osburn:2022bby for a circular equatorial orbit in Kerr are implemented
      39              :  * in `ScalarSelfForce::AnalyticData::CircularOrbit`.
      40              :  *
      41              :  * \par Regularization and modified boundary data
      42              :  * As described in \cite Osburn:2022bby Sec. III, the field $\Psi_m$ is singular
      43              :  * at the location of the scalar point charge ("puncture"). Therefore, in a
      44              :  * region near the puncture we split the field into a regular and a singular
      45              :  * part,
      46              :  * \begin{equation}
      47              :  *   \Psi_m = \Psi_m^R + \Psi_m^P
      48              :  *   \text{,}
      49              :  * \end{equation}
      50              :  * where $\Psi_m^P$ is the singular part that we can (approximately) compute
      51              :  * analytically and $\Psi_m^R$ is the regular part that we solve for. Therefore,
      52              :  * we need to transform variables between the full field $\Psi_m$ and the
      53              :  * regularized field $\Psi_m^R$ when data moves across the boundary of the
      54              :  * regularized region. We do this at element boundaries using the
      55              :  * `modify_boundary_data` mechanism detailed in
      56              :  * `elliptic::protocols::FirstOrderSystem` by just adding or subtracting the
      57              :  * singular field to/from the received data (see also
      58              :  * `ScalarSelfForce::ModifyBoundaryData`). In this regularized region the
      59              :  * equations transform to
      60              :  * \begin{equation}
      61              :  * -\Delta_m \Psi_m^R = \Delta_m \Psi_m^P = S_m^\mathrm{eff}
      62              :  * \text{,}
      63              :  * \end{equation}
      64              :  * so they gain an effective source $S_m^\mathrm{eff}$ from the singular field
      65              :  * $\Psi_m^P$. The singular field and the effective source for a circular
      66              :  * equatorial orbit in Kerr is implemented in
      67              :  * `ScalarSelfForce::AnalyticData::CircularOrbit`.
      68              :  */
      69            1 : struct FirstOrderSystem
      70              :     : tt::ConformsTo<elliptic::protocols::FirstOrderSystem> {
      71            0 :   static constexpr size_t volume_dim = 2;
      72              : 
      73            0 :   using primal_fields = tmpl::list<Tags::MMode>;
      74            0 :   using primal_fluxes =
      75              :       tmpl::list<::Tags::Flux<Tags::MMode, tmpl::size_t<2>, Frame::Inertial>>;
      76              : 
      77            0 :   using background_fields = tmpl::list<Tags::Alpha, Tags::Beta, Tags::Gamma>;
      78            0 :   using inv_metric_tag = void;
      79              : 
      80            0 :   using fluxes_computer = Fluxes;
      81            0 :   using sources_computer = Sources;
      82            0 :   using modify_boundary_data = ModifyBoundaryData;
      83              : 
      84            0 :   using boundary_conditions_base =
      85              :       elliptic::BoundaryConditions::BoundaryCondition<2>;
      86              : };
      87              : 
      88              : }  // namespace ScalarSelfForce
        

Generated by: LCOV version 2.0-1