solprop.translate.radial#

Translate radial Hankel geometry and bulk propagation into the spatial seam.

Functions

radial_operators(space, dispersion, *, ...)

Build cumulative radial dispersion and the matching nonlinear prefactor.

radial_rate_bounds(linear)

Bound the real part of a radial operator over its whole span, for the budget.

radial_transform(space, time, *, n_pol, z_max)

Build the scalar inverse/forward QDHT applied to each state polarisation.

solprop.translate.radial.radial_operators(space, dispersion, *, n_pol, z_max, absorber=None, margin=0.05, tol=1e-12, reuse_linear=None, reuse_prefactor=None)[source]#

Build cumulative radial dispersion and the matching nonlinear prefactor.

Parameters:
spacesolprop.grid.RadialGrid

Radial spectral samples.

dispersionsolprop.spatial.SpatialDispersion

Bulk material, temporal grid and common frame.

n_polint

State polarisation components, 1 or 2.

z_maxfloat

Positive propagation length in m.

absorbersolprop.boundaries.Absorber or None, optional

Spectral power absorption rates in m^-1.

marginfloat, optional

Relative extension of the cumulative tables beyond z_max.

tolfloat, optional

Relative expansion target, positive. The linear expansion additionally budgets cancellation roundoff from the material and frame wave numbers.

reuse_linear, reuse_prefactorParameterExpansion or None, optional

Coefficients of unchanged operator functions on this grid, transverse geometry and frame. The caller verifies function identity; new paths must also lie inside the original sampled ranges to share their terms.

Returns:
tuple

Cumulative operator and prefactor representation, including temporal crop scaling. Constant media use exact constant tables; varying gas density uses the existing parameter expansions and cumulative scalar integral tables.

Raises:
TranslationError

If the run span is invalid or a varying medium cannot be resolved by an expansion, for example when it crosses a transverse cutoff.

solprop.translate.radial.radial_rate_bounds(linear)[source]#

Bound the real part of a radial operator over its whole span, for the budget.

SEP 22 section 4.5 on the radial kind (its Q16). The radial operator is dense in (k_r, omega) rather than separable, and every backend forms the inverse stage factor exp(-dPhi) from it exactly as on the separable kinds, so a decaying column overflows it once h max(-Re D) passes log(DBL_MAX). A constant medium’s bound is exact: dPhi = D h, and the extremes are those of phi_constant. A varying medium’s rate is a piecewise Chebyshev series, z table or scalar weights of an expansion’s fixed terms, and |T_j| <= 1 on each interval bounds it: Re D of a z table lies within Re c_0 +- sum |Re c_j|, and an expansion’s weights within w_0 +- sum |w_j|, combined with the sign of each term’s real part. Both bounds are sufficient, never smaller than the rate the backends evaluate.

A varying medium’s rate includes the adiabatic amplitude term -1/2 d ln(Re k_z)/dz (SEP 34 section 4.4), which is positive where Re k_z falls: its endpoint block is one more set of terms of the expansion, or part of the z table, so both bounds above include it and a lossless decreasing medium reports a gain.

The rate’s parts (medium, capped evanescent attenuation, spectral rate, adiabatic amplitude) are not separable from D, so the whole loss is reported as propagating and the other terms are zero.

Parameters:
linearsolprop.translate.linop.LinearOperator

A radial operator, any representation but "separable".

Returns:
solprop.translate.spatial.RateBounds

loss bounds max(-Re D) and gain bounds max(Re D), m^-1.

Examples

>>> import numpy as np
>>> from solprop.translate.linop import constant_phi
>>> from solprop.translate.radial import radial_rate_bounds
>>> bounds = radial_rate_bounds(constant_phi(np.array([-3.0 - 1j, 0.5j]), 1.0))
>>> bounds.loss, bounds.gain
(3.0, 0.0)
solprop.translate.radial.radial_transform(space, time, *, n_pol, z_max, absorber=None, node_budget=67108864, margin=0.05)[source]#

Build the scalar inverse/forward QDHT applied to each state polarisation.

Parameters:
spacesolprop.grid.RadialGrid

Validated radial axes, weights and collar.

timesolprop.grid.TimeGrid

Temporal grid supplying the pad scaling and chunk-buffer size.

n_polint

Number of state polarisation components, 1 or 2.

z_maxfloat

Propagation length in m, positive.

absorbersolprop.boundaries.Absorber or None, optional

Supplies the spatial collar’s reference length. None disables spatial loss.

node_budgetint, optional

Shared node-buffer budget in bytes, positive.

marginfloat, optional

Relative extension of the scalar diagnostic table beyond z_max.

Returns:
solprop.translate.modal.Transform

Hankel matrices, geometry and bounded node chunk, ready for all backends.