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

Generated by: LCOV version 1.14