solprop.translate.radial#
Translate radial Hankel geometry and bulk propagation into the spatial seam.
Functions
|
Build cumulative radial dispersion and the matching nonlinear prefactor. |
|
Bound the real part of a radial operator over its whole span, for the budget. |
|
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 factorexp(-dPhi)from it exactly as on the separable kinds, so a decaying column overflows it onceh max(-Re D)passeslog(DBL_MAX). A constant medium’s bound is exact:dPhi = D h, and the extremes are those ofphi_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| <= 1on each interval bounds it:Re Dof a z table lies withinRe c_0 +- sum |Re c_j|, and an expansion’s weights withinw_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 whereRe k_zfalls: 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
lossboundsmax(-Re D)andgainboundsmax(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.