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
|