|
SpECTRE
v2026.06.09.01
|
Scalar self force for a scalar charge on a circular equatorial orbit. More...
#include <CircularOrbit.hpp>
Classes | |
| struct | BlackHoleMass |
| struct | BlackHoleSpin |
| struct | OrbitalRadius |
| struct | MModeNumber |
| struct | HyperboloidalSlicingTransitions |
| struct | PenetratingHorizon |
| struct | ImposeEquatorialSymmetry |
Public Types | |
| using | options |
| using | background_tags = tmpl::list<Tags::Alpha, Tags::Beta, Tags::Gamma> |
| using | source_tags |
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, bool penetrating_horizon, bool impose_equatorial_symmetry) | |
| 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 |
| double | omega () const |
| std::optional< std::array< double, 4 > > | hyperboloidal_slicing_transitions () const |
| bool | penetrating_horizon () const |
| bool | impose_equatorial_symmetry () 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 [161] . 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 \partial_i \Psi_m = S_m \text{.} \end{equation}
with the flux [Eq. (2.39) in [213]]
\begin{equation} F^i = \{\frac{\Delta}{r^2+a^2}\partial_{r}, \frac{1-z^2}{r^2+a^2} \partial_{z}\} \Psi_m \text{.} \end{equation}
We make the following changes compared to [161] :
\[ \partial_\theta^2+\cot\theta\partial_\theta = \partial_{z}\sin^2\theta\partial_{z} \]
\[ -\partial_{z}\sin^2\theta\partial_{z} \Psi_m + \frac{m^2}{\sin^2\theta}\Psi_m = \sin(\theta)^m \left( m(m+1) + 2m z \partial_{z} - \partial_{z}\sin^2\theta\partial_{z} \right) u_m \]
We divide by \(\sin(\theta)^m\) to get the equations for \(u_m\). With the above three changes, Eq. (2.9) in [161] becomes Eq. (2.19) in [213] .Written this way, the equations are regular at the poles and converge exponentially. We also don't have to apply angular boundary conditions because regularity at the poles is automatically enforced by the \(\sin^2\theta\) factor in the flux.
The resulting factors in the equation are:
\begin{align} &\beta = \left(\frac{1}{\Delta}\left(-m^2\Omega^2 \Sigma^2 + 4a m^2 \Omega M r\right) + m (m + 1) + \frac{2M}{r}(1-\frac{a^2}{Mr}) + \frac{2iam}{r} \right) \frac{1}{r^2 + a^2} \\ &\gamma_{r} = -\frac{2iam}{r^2+a^2} + \frac{2 a^2 \Delta}{r(r^2+a^2)^2} \\ &\gamma_{z} = \frac{2 m z}{r^2 + a^2} \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 [213] ). The effective source is computed using the scalar EffectiveSource code by Wardell et. al. (https://github.com/barrywardell/EffectiveSource and [216] ). It is then transformed to correspond to the m-mode decomposition used in [213] Eq. (2.16) as:
\begin{align} \Psi_m^P &= \frac{r}{2 \pi \sin(\theta)^{|m|}} e^{i m \left( \varphi - \phi\right)} \Phi_m^\mathrm{Wardell} \\ S_m^\mathrm{eff} &= \frac{r}{2 \pi \sin(\theta)^{|m|}} e^{-i m \left( \varphi - \phi\right)} \frac{\Delta\,(r^2 + a^2\cos^2\theta)}{(r^2 + a^2)^2} S_m^\mathrm{Wardell} \text{,} \end{align}
where \(\varphi = \phi + \frac{a}{r_+ - r_-} \ln(\frac{r-r_+}{r-r_-})\) (Eq. (2.14) in [213] ). Compared to Eq. (2.8) in [161], we additionally divide by \(\sin(\theta)^{|m|}\) to account for the change of variable from \(\Psi_m\) to \(u_m\) described above.
\begin{equation} F^{\cos^2\theta} = 4 \cos^2\theta F^{\cos\theta} \text{.} \end{equation}
\begin{equation} \gamma_{\cos^2\theta} = 2 \cos\theta \gamma_{\cos\theta} + 2 \alpha \text{.} \end{equation}
\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}
The complete expressions for these factors are given in Eqs. (2.41)-(2.43) in [213] . For the boost function we use the piecewise-constant "vtu" slicing [Eq. (2.34) in [213]]: \(H = -1\) in the \(v\) domain ( \(r_* \leq r_*^v\)), \(H = 0\) in the \(t\) domain ( \(r_*^v \leq r_* \leq r_*^u\)), and \(H = +1\) in the \(u\) domain ( \(r_* \geq r_*^u\)), where \(r_*^v < r_{*0} < r_*^u\) and \(r_{*0}\) is the particle location. The jump in \(H\) at the domain interfaces produces a jump in the radial derivative of \(\Psi_m\), which we impose as junction conditions [Eqs. (2.36)-(2.37) in [213]]:\begin{align} &\left.\frac{\partial \Psi_m}{\partial r_*}\right|_{r_*=(r_*^v)^+} - \left.\frac{\partial \Psi_m}{\partial r_*}\right|_{r_*=(r_*^v)^-} = -im\Omega\Psi_m\big|_{r_*=r_*^v} \\ &\left.\frac{\partial \Psi_m}{\partial r_*}\right|_{r_*=(r_*^u)^+} - \left.\frac{\partial \Psi_m}{\partial r_*}\right|_{r_*=(r_*^u)^-} = -im\Omega\Psi_m\big|_{r_*=r_*^u} \end{align}
| using ScalarSelfForce::AnalyticData::CircularOrbit::options |
| using ScalarSelfForce::AnalyticData::CircularOrbit::source_tags |
|
staticconstexpr |