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/GeneralRelativity/Equations.hpp" 12 : #include "Elliptic/Systems/SelfForce/GeneralRelativity/Tags.hpp" 13 : #include "Utilities/ProtocolHelpers.hpp" 14 : #include "Utilities/TMPL.hpp" 15 : 16 : namespace GrSelfForce { 17 : 18 : /*! 19 : * \brief Gravitational self-force of a small gravitating body in a Kerr 20 : * background. 21 : * 22 : * Extension of the `ScalarSelfForce::FirstOrderSystem` to the gravitational 23 : * case. We solve a 2D elliptic equation for the 10 independent components of 24 : * the symmetric m-mode field $(\Psi_m)_{ab}$. The two dimensions are a 25 : * radial and angular coordinate, specifically the tortoise radius $r_\star$ and 26 : * polar angle $\theta$. We parametrize the 2D elliptic equations as: 27 : * \begin{equation} 28 : * -\Delta_m (\Psi_m)_{ab} = -\partial_i F^i_{ab} + \beta_{ab}^{cd} 29 : * (\Psi_m)_{cd} + \gamma_{iab}^{cd} F^i_{cd} = 0 30 : * \end{equation} 31 : * with the flux 32 : * \begin{equation} 33 : * F^i_{ab} = \{\partial_{r_\star}, \alpha \partial_\theta\} (\Psi_m)_{ab} 34 : * \text{,} 35 : * \end{equation} 36 : * where $\alpha$, $\beta_{ab}^{cd}$, and $\gamma_{iab}^{cd}$ are coefficients 37 : * that define the elliptic equations. The particular coefficients for a 38 : * circular equatorial orbit in Kerr are implemented in 39 : * `GrSelfForce::AnalyticData::CircularOrbit`. 40 : * 41 : * See `ScalarSelfForce::FirstOrderSystem` for a description of the 42 : * regularization and modified boundary data. 43 : * 44 : * Once the 2D elliptic equations are solved for a given m-mode, the 45 : * contribution to the self-force can be extracted from the gradient of 46 : * $(\Psi_m)_{ab}$ at the location of the small body. These self-force 47 : * contributions are then summed over all m-modes up to some cutoff. The 48 : * resulting self-force can be used to drive a quasi-adiabatic inspiral to 49 : * generate waveforms. For details and more references see \cite Osburn:2022bby 50 : * for now (more references will be added when they are published). 51 : */ 52 1 : struct FirstOrderSystem 53 : : tt::ConformsTo<elliptic::protocols::FirstOrderSystem> { 54 0 : static constexpr size_t volume_dim = 2; 55 : 56 0 : using primal_fields = tmpl::list<Tags::MMode>; 57 0 : using primal_fluxes = 58 : tmpl::list<::Tags::Flux<Tags::MMode, tmpl::size_t<2>, Frame::Inertial>>; 59 : 60 0 : using background_fields = 61 : tmpl::list<Tags::Alpha, Tags::Beta, Tags::GammaRstar, Tags::GammaTheta>; 62 0 : using inv_metric_tag = void; 63 : 64 0 : using fluxes_computer = Fluxes; 65 0 : using sources_computer = Sources; 66 0 : using modify_boundary_data = ModifyBoundaryData; 67 : 68 0 : using boundary_conditions_base = 69 : elliptic::BoundaryConditions::BoundaryCondition<2>; 70 : }; 71 : 72 : } // namespace GrSelfForce