|
SpECTRE
v2025.08.19
|
Scalar self force for a scalar charge on a circular equatorial orbit. More...
#include <CircularOrbit.hpp>
Classes | |
| struct | BlackHoleMass |
| struct | BlackHoleSpin |
| struct | HyperboloidalSlicingTransitions |
| struct | MModeNumber |
| struct | OrbitalRadius |
Public Types | |
| using | options = tmpl::list< BlackHoleMass, BlackHoleSpin, OrbitalRadius, MModeNumber, HyperboloidalSlicingTransitions > |
| using | background_tags = tmpl::list< Tags::Alpha, Tags::Beta, Tags::Gamma > |
| using | source_tags = tmpl::list< ::Tags::FixedSource< Tags::MMode >, Tags::SingularField, ::Tags::deriv< Tags::SingularField, tmpl::size_t< 2 >, Frame::Inertial >, Tags::BoyerLindquistRadius > |
Public Member Functions | |
| CircularOrbit (const CircularOrbit &)=default | |
| CircularOrbit & | operator= (const CircularOrbit &)=default |
| CircularOrbit (CircularOrbit &&)=default | |
| CircularOrbit & | operator= (CircularOrbit &&)=default |
| CircularOrbit (double black_hole_mass, double black_hole_spin, double orbital_radius, int m_mode_number, std::optional< std::array< double, 4 > > hyperboloidal_slicing_transitions) | |
| CircularOrbit (CkMigrateMessage *m) | |
| WRAPPED_PUPable_decl_template (CircularOrbit) | |
| tnsr::I< double, 2 > | puncture_position () const |
| double | black_hole_mass () const |
| double | black_hole_spin () const |
| double | orbital_radius () const |
| int | m_mode_number () const |
| std::optional< std::array< double, 4 > > | hyperboloidal_slicing_transitions () const |
| tuples::tagged_tuple_from_typelist< background_tags > | variables (const tnsr::I< DataVector, 2 > &x, background_tags) const |
| tuples::tagged_tuple_from_typelist< source_tags > | variables (const tnsr::I< DataVector, 2 > &x, source_tags) const |
| template<typename... RequestedTags> | |
| tuples::TaggedTuple< RequestedTags... > | variables (const tnsr::I< DataVector, 2 > &x, const Mesh< 2 > &, const InverseJacobian< DataVector, 2, Frame::ElementLogical, Frame::Inertial > &, tmpl::list< RequestedTags... >) const |
| void | pup (PUP::er &p) override |
Static Public Member Functions | |
| static tuples::TaggedTuple< Tags::MMode > | variables (const tnsr::I< DataVector, 2 > &x, tmpl::list< Tags::MMode >) |
Static Public Attributes | |
| static constexpr Options::String | help |
Friends | |
| bool | operator== (const CircularOrbit &lhs, const CircularOrbit &rhs) |
Scalar self force for a scalar charge on a circular equatorial orbit.
This class implements Eq. (2.9) in [158] . It does so by defining the background fields \(\alpha\), \(\beta\), and \(\gamma_i\) in the general form of the equations
\begin{equation} -\partial_i F^i + \beta \Psi_m + \gamma_i F^i = S_m \text{.} \end{equation}
with the flux
\begin{equation} F^i = \{\partial_{r_\star}, \alpha \partial_{\cos\theta}\} \Psi_m \text{.} \end{equation}
Note that we use \(\cos\theta\) as angular coordinate but [158] uses \(\theta\). We also multiply Eq. (2.9) by the factor \(\Sigma^2 / (r^2 + a^2)^2\) so we can easily write it in first-order flux form. The resulting factors in the equation are:
\begin{align} &\alpha = \frac{\Delta}{(r^2 + a^2)^2} \sin^2\theta \\ &\beta = \left(-m^2\Omega^2 \Sigma^2 + 4a m^2 \Omega M r + \Delta \left[ \frac{m^2}{\sin^2\theta} + \frac{2M}{r}(1-\frac{a^2}{Mr}) + \frac{2iam}{r} \right]\right) \frac{1}{(r^2 + a^2)^2} \\ &\gamma_{r_\star} = -\frac{2iam}{r^2+a^2} + \frac{2a^2}{r} \frac{\alpha}{\sin^2\theta} \\ &\gamma_{\cos\theta} = 0 \end{align}
This class also provides the effective source \(S_m^\mathrm{eff} = \Delta_m \Psi_m^P\) and the singular field \(\Psi_m^P\) in the regularized region (see ScalarSelfForce::FirstOrderSystem and Sec. III in [158] ). The effective source is computed using the scalar EffectiveSource code by Wardell et. al. (https://github.com/barrywardell/EffectiveSource and [211] ). It is then transformed to correspond to the m-mode decomposition used in [158] Eq. (2.8) as:
\begin{align} &\Psi_m^P = \frac{r}{2 \pi} e^{-i m \Delta\phi} \Phi_m^\mathrm{Wardell} \\ &S_m^\mathrm{eff} = \frac{r}{2 \pi} e^{-i m \Delta\phi} \frac{\Delta\,(r^2 + a^2\cos^2\theta)}{(r^2 + a^2)^2} S_m^\mathrm{Wardell} \text{,} \end{align}
where \(\Delta\phi = \frac{a}{r_+ - r_-} \ln(\frac{r-r_+}{r-r_-})\) (Eq. (2.7) in [158] ).
\begin{align} &\partial_{r_*} \rightarrow \partial_{r_*} + i m\Omega H(r_*) \\ &\partial_{r_*}^2 \rightarrow \partial_{r_*}^2 + 2 i m\Omega H(r_*) \partial_{r_*} + i m\Omega H'(r_*) -m^2\Omega^2 H(r_*)^2 \end{align}
where \(H(r_*) = h'(r_*)\) is the boost function that asymptotes to \(H(r_* \rightarrow \pm \infty) = \pm 1\). This maps to the following additional terms in \(\beta\) and \(\gamma_{r_*}\):\begin{align} &\beta \rightarrow \beta + i m\Omega \gamma_{r_*} H(r_*) - i m\Omega H'(r_*) + m^2\Omega^2 H(r_*)^2 \\ &\gamma_{r_*} \rightarrow \gamma_{r_*} - 2 i m\Omega H(r_*) \end{align}
For the boost function we choose here a simple sigmoid so that it is exactly zero in a finite region around the puncture where we apply the effective source, and transitions to -1 and 1 outside of this region. We choose the \(C^1\) continuoussmoothstep<1> for this. Reasonable transition points are from the boundaries of the effective source region to about \(20M\) away from it, though this hasn't been tested very much yet. We may also want to try jumping from \(H=0\) to \(H=\pm 1\) discontinuously at the boundary of the effective source region, which is supported by the DG scheme (see fluxes_computer::is_discontinuous in elliptic::protocols::FirstOrderSystem), so (1) we don't have to resolve the transition, and (2) we can more easily support the 2nd order self-force source.
|
staticconstexpr |