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