A practical adiabatic (0PA) flux workflow for generic EMRIs

Technical blog

This note introduces a practical workflow for large scale 0PA flux generation: a reusable radial solver layer, a tail aware mode summation order, and Adaptive Levin integration for difficult source integrals in generic EMRI calculations.

In EMRI waveform work, a flux calculation is rarely a one time exercise. One quickly ends up with many parameter points, many modes, and orbits that may be eccentric, inclined, or close to difficult regions of Kerr parameter space. The useful question is therefore not only “can I compute this mode?” It is: can I compute many modes, see where the truncation really happens, reuse the expensive pieces, and avoid wasting samples on oscillations that the integrator should understand analytically?

The main bottlenecks show up in three connected places. First, every mode needs a radial Teukolsky solve, so the radial solver quickly becomes the most expensive repeated operation. Second, the mode sum itself is hard to truncate if the calculation simply grows a rectangular block in $(\ell,m,k,n)$ space. Such a block may include many modes with negligible flux, while missing modes outside the block that still matter, which can underestimate the total flux. Third, the slow radial tail means that large $n$ modes must be evaluated, and those modes lead to highly oscillatory convolution integrals.

The workflow follows these bottlenecks one by one. The radial equation is handled by an iterative series expansion matching method, ISEM for short. The mode sum is reorganized so that the important angular structure enters first and the radial harmonic $n$ remains visible as the final tail direction. When the tail produces strongly oscillatory source integrals, the calculation switches to Adaptive Levin integration.

Workflow in one line
Kerr orbittrajectory, velocity, phases
Radial solverISEM, Teukolsky and GSN homogeneous solutions
Source integraltrapezoidal or Adaptive Levin depending on the tail
Mode shells$\ell$, $m$, $k$ grouped outside; $n$ monitored as radial tail
Flux datasetinfinity and horizon branches with recorded convergence metadata

Motivation: why this is worth doing

LISA, Taiji, and TianQin are space based gravitational wave detector projects. One important class of sources for these missions is EMRIs, where 0PA flux generation becomes a production scale numerical task rather than a small script. Frequency domain Teukolsky calculations are accurate and modular, but the cost grows sharply when the orbit becomes highly eccentric, inclined, and precessing. In the fully generic case, the signal power is spread across a large set of $(\ell,m,k,n)$ modes. If the time for a single mode cannot be reduced effectively, the full flux calculation becomes a large computational expense.

The goal is not only to compute one mode quickly. The goal is to know which part of the spectrum is still active, which part has become tail, and which numerical method should be used for each region. That is where the current implementation differs from a plain rectangular mode loop: it treats the mode sum as something to diagnose, not just something to force through a larger grid.

The radial solver layer

The first piece is the radial solver. Here the radial Teukolsky equation is handled by iterative series expansion matching, abbreviated as ISEM below. The idea is to use the transformed form of the Teukolsky equation, build series expansions from the horizon and from infinity, and then propagate the two physical branches toward an intermediate matching point. At that point, the solution and its radial derivative are matched to determine the matching coefficients, which are also the asymptotic amplitudes needed for flux evaluation. The full radial solution is then reconstructed from the matched branches.

This is the right place to spend effort because the radial solve sits inside every mode calculation and has long been a bottleneck in the source integral calculation. In the current implementation, this construction is roughly two orders of magnitude faster than the traditional direct numerical GSN solve and MST based routes for the same repeated mode production use case. Reducing this cost for each mode is what makes the larger 0PA flux workflow practical.

Animated illustration of iterative series expansion matching for radial Teukolsky solutions
ISEM as a radial construction idea: series solutions are generated from the horizon and infinity, propagated to an intermediate point, and matched through the value and radial derivative. The resulting asymptotic amplitudes feed directly into the flux calculation.
Homogeneous solutions

Build horizon side and infinity side homogeneous radial Teukolsky solutions from controlled series expansions.

Matching coefficients

Match the solution and derivative at an intermediate point to obtain the asymptotic amplitudes.

Source interface

Reuse the reconstructed radial solution and amplitudes in the source integral and flux evaluation.

How modes are added together

Next comes the mode summation order. The useful empirical structure is that the largest contributions usually sit close to the diagonal in angular space: for a fixed $\ell$, modes with $m=\pm \ell$ are often among the dominant branches. A direct rectangular loop does not exploit this structure. If one fixes $\ell$ and then scans all $m$ from $-\ell$ to $\ell$, and then repeats this inside large $k$ and $n$ ranges, the calculation can spend many modes before the relevant convergence pattern becomes clear.

A more useful order is to fix $m$ and grow $\ell$ from $\max(\mathrm{abs}(m),2)$ upward. This makes the angular convergence easier to see. The same idea can then be extended to the polar and radial harmonics. The $k$ direction often converges quickly, usually within about ten shells for the cases considered here, while the radial harmonic $n$ is slower and carries the long eccentricity tail. For that reason, $n$ is left as the final summation direction.

The older mental model is:

Rectangular grid mindset

  • Choose a large box in (ℓ, m, k, n).
  • Loop through the full block even when many entries are already negligible.
  • The slow radial tail is mixed into the whole four dimensional rectangle.

Production workflow mindset

  • For each m, grow ℓ from max(abs(m), 2) upward.
  • Add the faster k shells before the slow radial direction.
  • Leave n last, so the eccentric tail truncation is visible.

The practical advantage is that convergence becomes easier to diagnose. Instead of asking whether a whole rectangular block is large enough, the code can report where the infinity and horizon branches reached in $n$, how large the final shell contribution is, and whether $n_\mathrm{max}$ should be increased. In this ordering, the maximum radial truncation used in the code is $n_\mathrm{max}=500$, which is stable for the target cases with $e<0.9$. Compared with the rectangular ordering, this shell aware order typically reduces the number of modes that need to be evaluated by about 50%, while making the truncation decision more transparent.

Mode summation flow
Select ℓ shellangular resolution layer
Select m branchazimuthal structure and frequency sign
Select k shellpolar harmonic structure for generic orbits
Scan n tailradial harmonic tail; eccentric truncation is visible here
Latch methodswitch tail modes to Adaptive Levin when oscillations dominate

The resulting workflow is therefore $\ell \to m \to k \to n$: angular structure first, the fast polar direction next, and the slow radial tail last. This is not just a different loop order; it is a way to expose the convergence information that is otherwise hidden inside a large rectangular sum.

Adaptive Levin: use the right tool for the tail

The third piece is Adaptive Levin integration. In generic 0PA flux calculations, source integrals with large $n$ can oscillate rapidly. A plain quadrature rule then pays for many samples whose job is just to chase phase. In representative one dimensional radial integrations, a standard sampling route may need about $2^{14}=16384$ radial samples to reach the desired convergence, while the Adaptive Levin route can reach the same convergence with an effective scale closer to $2048$.

The Levin method treats a highly oscillatory integral by rewriting it as an auxiliary ODE system; after discretization, that system becomes a small matrix solve. The adaptive part is a bisection refinement of the integration interval: easy regions stay coarse, while difficult oscillatory regions are split into smaller segments. On each local segment, Levin itself only needs a small one dimensional collocation grid, typically $q=17$, rather than a very fine sampling mesh. The dense local solve scales roughly like $O(q^3)$ per segment, and the total cost follows the number of accepted segments. For generic two dimensional integrals, the current route uses Adaptive Levin in the radial direction and Clenshaw Curtis quadrature in the $\theta$ direction.

Adaptive Levin flow
Precompute orbit datareuse geodesic samples and phase information across batches
Detect tail modelarge radial harmonic or difficult generic $(n,k)$ row
Refine radiallythe high-$n$ oscillation is mainly radial
Use theta CCfixed polar Clenshaw Curtis nodes for generic 2D integrals
Record metadatasegments, depth, stop reason, and effective intervals

The effect is simple: the difficult high $n$ integrals no longer require the same brute force sampling strategy as the easy modes. Radial Adaptive Levin plus fixed $\theta$ direction Clenshaw Curtis keeps the high frequency radial direction under control, while still using a stable tensor product structure for generic orbits.

8.925 ms typical post warm time for generic case 2D convolution integral evaluation
16.531 ms 95% of high $n$ modes in generic case 2D convolution integrals finish within this time
5 ms 95% of eccentric case 1D integral tests finish below this scale
Try it and send feedback. The code and related modules are open for testing and use.