solprop.driver.routes.hollow#

The hollow-guide route: capillaries and supplied gas-filled mode sets.

The grid, modes, transverse quadrature, responses and statistics of a gas-filled hollow guide, the checks of its walls, gas flow and plasma settings, and the route itself.

Module Attributes

PLASMA_STATISTICS

Backend statistics that read the plasma the run compiled; refused without one.

BACKEND_STATISTICS

The statistics only a backend can compute, recorded by a capillary run by default.

ORTHONORMALITY_TOLERANCE

How far a given mode set may stray from orthonormality before it is refused.

Functions

default_radial_order(n_modes)

Return the radial order of the fixed rule a capillary run uses by default.

solprop.driver.routes.hollow.BACKEND_STATISTICS = ('peak_intensity', 'quadrature_error', 'electron_density', 'peak_ionisation_rate')#

The statistics only a backend can compute, recorded by a capillary run by default.

Each needs something the kernel contract does not carry to a later pass: the quadrature nodes the plasma was evaluated at, the mode set the axis needs, or the embedded coarse-rule projection, which is gone once the step is accepted. The two plasma entries are recorded only by a run that has a plasma response; the backend refuses them otherwise, and a default that always asked for them would make plasma=False fail.

solprop.driver.routes.hollow.ORTHONORMALITY_TOLERANCE = 1e-06#

How far a given mode set may stray from orthonormality before it is refused.

The transform is one synthesis matrix and its dual, which represent an orthonormal basis and nothing else, so a set that is not one is propagating a different problem from the one it describes. The bound is loose because the overlaps are integrated adaptively by scipy.integrate.dblquad(), whose own accuracy on a set of Bessel profiles is around 1e-9.

solprop.driver.routes.hollow.PLASMA_STATISTICS = ('electron_density', 'peak_ionisation_rate')#

Backend statistics that read the plasma the run compiled; refused without one.

solprop.driver.routes.hollow.default_radial_order(n_modes)[source]#

Return the radial order of the fixed rule a capillary run uses by default.

The rule has to integrate the quartic of the mode profiles, because the Kerr polarisation is cubic in the field and its projection multiplies by one more profile. Those are Bessel functions of r/a, so a Gauss rule converges spectrally and the only question is where. Two measurements set the number: the quartic overlap tensor of four HE_1m modes is converged to 2e-14 at n_r = 32 (docs/guide/waveguides/mode-sets.md), and the embedded error estimate for three modes falls 1.6e-1, 2.1e-2, 4.1e-5, 7.2e-9, 1.2e-15 at n_r = 8, 16, 24, 32, 48. Thus 32 clears the alarm by two orders on three modes and is the reference’s rounding on four. Eight nodes per mode carries that scaling to larger sets, since the highest radial order in the quartic grows with the set.

A flat, larger order whatever the mode count would be safer and slower; 32 nodes on the sets a capillary run actually uses, with the alarm watching, is the trade this makes. The number rests on these two measurements and has not been calibrated further.

Parameters:
n_modesint

How many modes the set carries, >= 1.

Returns:
int

Radial nodes asked of solprop.modes.quadrature.transverse_quadrature(), which with radial_rule="gauss_kronrod" rounds an even count up by one so that the rule is the Kronrod extension of the half-order Gauss rule.

Examples

>>> from solprop.driver.routes.hollow import default_radial_order
>>> default_radial_order(1), default_radial_order(4), default_radial_order(8)
(32, 32, 64)