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