hmf.core._kernels.mass_variance.tail_integral¶
- hmf.core._kernels.mass_variance.tail_integral(k3p_edge: ArrayLike, slope: ArrayLike, x_edge: ArrayLike, envelope: tuple[tuple[float, float], ...], high: bool, oscillating: tuple[tuple[float, float], ...] = (), omega: float = 1.0) ndarray[tuple[Any, ...], dtype[float64]][source]¶
Bound a tail of a variance integral beyond the end of the k grid.
The power beyond the edge is extrapolated as a power law, \(k^3 P \propto k^{3+n}\), and the window factor is bounded by
\[\sum_i c_i x^{p_i} + \sum_j a_j x^{q_j} \sin(\omega x + \phi_j),\]a smooth part (
envelope) and, for the high-k tail only, a part oscillating with frequency \(\omega\) in \(x = kR\) (oscillating). Each smooth term integrates exactly: for the high-k tail\[\int_{k_e}^\infty k^3 P\, c x^p\, d\ln k = \frac{c\, k_e^3 P_e\, x_e^p}{-(3 + n + p)},\]finite if \(3 + n + p < 0\) (and the same with the opposite sign, finite if \(3 + n + p > 0\), for the low-k tail). Each oscillating term is bounded by the second mean-value theorem: \(|\int_{x_e}^\infty g(x) \sin(\omega x + \phi) dx| \le 2 g(x_e)/\omega\) for a decreasing \(g \ge 0\), here \(g = k^3 P\, a x^{q - 1}\) (decreasing if \(3 + n + q - 1 < 0\)). Bounding the oscillating part this way, rather than by its envelope, matters: for the top-hat the envelope of \(W W'\) falls only as \(x^{-3}\), but its tail integral as \(x^{-4}\). A divergent or unbounded term gives
inf.- Parameters:
k3p_edge – \(k^3 P\) at the edge of the grid.
slope – \(n = d\ln P/d\ln k\) at the edge.
x_edge – \(kR\) at the edge.
envelope – The smooth part,
((c_0, p_0), (c_1, p_1), ...), withc_i >= 0.high – Whether this is the high-k tail (else the low-k one).
oscillating – The amplitudes of the oscillating part,
((a_0, q_0), ...),a_j >= 0.omega – The angular frequency of the oscillating part, in x.
- Returns:
The bound on the tail integral, without the \(1/2\pi^2\).
- Return type:
ndarray