solprop.modes.antiresonant#

Single-ring tube-lattice modes with the Vincetti empirical fits.

The transverse field and protocol area remain Marcatili’s. The spectral model follows the published Vincetti fits (docs/guide/waveguides/antiresonant.md): where the printed papers and earlier published implementations of them, pyJCMwave among them, differ, CONVENTIONS names the choice and LEGACY_CONVENTIONS the form those implementations share, so that a test can assemble the latter from the same building blocks. The constants are transcribed from the three papers; the 2016 paper’s equations were read from a degraded text extraction and have not been checked against the typeset page.

Module Attributes

LOSS_WIDTH

Half-width of the loss Lorentzians in the normalised frequency.

DISPERSION_WIDTH

Damping of the dispersive Lorentzians.

RADIUS_COEFFICIENT

Coefficient of wavelength / core_radius in the effective radius.

MINIMUM_LOSS_PREFACTOR

Prefactor of the minimum confinement loss in dB/m.

DISPERSION_PREFACTOR

Prefactor of the dispersive resonance correction, Rosa 2021 eq.

AREA_FACTOR

Prefactor of the fitted effective area, Rosa 2021 eq.

MAX_TERMS

Largest number of terms in the resonance sums.

VALIDATED_WALL_RATIO

Wall thickness over outer tube radius of the 2019 validation fibres.

VALIDATED_TUBE_COUNT

Tube counts of the 2019 validation fibres.

VALIDATED_TUBE_INDEX

Real tube indices of the 2019 validation fibres.

Functions

core_radius_from_gap(tube_radius, n_tubes, gap)

Return the inscribed core radius for a tube gap.

tube_gap(core_radius, tube_radius, n_tubes)

Return the gap between neighbouring tubes.

tube_radius_from_gap(core_radius, n_tubes, gap)

Return the outer tube radius for an inscribed core and gap.

Classes

TubeLattice(wall_thickness, tube_radius, n_tubes)

Describe a single ring of identical hollow tubes.

VincettiMode(radius[, gas, pressure, kind, ...])

Model a single-ring tube-lattice fibre with the Vincetti fits.

solprop.modes.antiresonant.AREA_FACTOR: Final = 0.48#

Prefactor of the fitted effective area, Rosa 2021 eq. 22.

0.48 pi is Marcatili’s HE11 area factor, which the fit reduces to away from resonance.

solprop.modes.antiresonant.DISPERSION_PREFACTOR: Final = 4.5e-07#

Prefactor of the dispersive resonance correction, Rosa 2021 eq. 6.

solprop.modes.antiresonant.DISPERSION_WIDTH: Final = 0.03#

Damping of the dispersive Lorentzians.

gamma_d of Rosa, Melli and Vincetti (2021) eq. 2. The paper prints 0.003; earlier implementations carry 0.03, which fits the FEM index near the resonances 3.2 (vacuum) and 2.3 (argon) times better.

solprop.modes.antiresonant.LOSS_WIDTH: Final = 0.003#

Half-width of the loss Lorentzians in the normalised frequency.

gamma_l of Vincetti and Rosa (2019) eq. 2.

solprop.modes.antiresonant.MAX_TERMS: Final = 8#

Largest number of terms in the resonance sums.

The EH cutoff fit of the 2019 paper, eq. 5, carries 1 / (7.75 - nu), so more terms extrapolate through its pole; the papers stop at eight.

solprop.modes.antiresonant.MINIMUM_LOSS_PREFACTOR: Final = 0.0003#

Prefactor of the minimum confinement loss in dB/m.

Vincetti (2016) eq. 3 as revised by the 2019 paper.

solprop.modes.antiresonant.RADIUS_COEFFICIENT: Final = 10.0#

Coefficient of wavelength / core_radius in the effective radius.

The gap-penetration term of Rosa 2021 eq. 10 as printed; earlier implementations carry 20. The factor is empirical: no derivation decides between 10 and 20, and no erratum or author confirmation has been found.

class solprop.modes.antiresonant.TubeLattice(wall_thickness, tube_radius, n_tubes, n_terms=8)[source]#

Bases: Displayed

Describe a single ring of identical hollow tubes.

Attributes:
wall_thicknessfloat

Positive finite wall thickness in m, smaller than the outer radius.

tube_radiusfloat

Positive finite outer tube radius in m.

n_tubesint

Number of tubes, at least three.

n_termsint

Number of radial and azimuthal fit terms, between one and MAX_TERMS; default eight, the papers’ truncation.

core_radius_for(gap)[source]#

Return the core radius for a gap.

Parameters:
gapfloat

Nonnegative finite tube gap in m.

Returns:
float

Inscribed core radius in m.

classmethod from_gap(core_radius, gap, n_tubes, wall_thickness)[source]#

Construct a lattice from a core radius and gap.

Parameters:
core_radiusfloat

Positive inscribed core radius in m.

gapfloat

Nonnegative gap in m.

n_tubesint

Number of tubes, at least three.

wall_thicknessfloat

Positive tube wall thickness in m.

Returns:
TubeLattice

Lattice with the implied outer radius and eight fit terms.

classmethod from_inner_diameter_ratio(core_radius, wall_thickness, inner_diameter_ratio, n_tubes)[source]#

Construct a lattice from the inner tube to core diameter ratio.

Parameters:
core_radiusfloat

Positive inscribed core radius in m; the core diameter is twice this.

wall_thicknessfloat

Positive tube wall thickness in m.

inner_diameter_ratiofloat

Positive finite d/D, where d is the tube’s inner diameter and D the inscribed core diameter (some papers quote d/D with the outer diameter).

n_tubesint

Number of resonators, at least three.

Returns:
TubeLattice

Lattice with outer tube radius core_radius * inner_diameter_ratio + wall_thickness.

Raises:
ModeError

If dimensions are invalid or neighbouring tubes overlap.

gap(core_radius)[source]#

Return the tube gap at a core radius.

Parameters:
core_radiusfloat

Inscribed core radius in m, positive and finite.

Returns:
float

Gap in m, negative for overlapping tubes.

n_terms: int = 8#
n_tubes: int#
tube_radius: float#
wall_thickness: float#
solprop.modes.antiresonant.VALIDATED_TUBE_COUNT: Final = (6, 10)#

Tube counts of the 2019 validation fibres.

solprop.modes.antiresonant.VALIDATED_TUBE_INDEX: Final = (1.44, 2.42)#

Real tube indices of the 2019 validation fibres.

solprop.modes.antiresonant.VALIDATED_WALL_RATIO: Final = (0.05, 0.2)#

Wall thickness over outer tube radius of the 2019 validation fibres.

class solprop.modes.antiresonant.VincettiMode(radius, gas=None, pressure=0.0, *, kind='HE', n=1, m=1, phi=0.0, model='full', loss=True, cladding=None, temperature=None, susceptibility=None, mixture=None, lattice)[source]#

Bases: MarcatiliMode

Model a single-ring tube-lattice fibre with the Vincetti fits.

All inherited capillary parameters retain their meaning. cladding is the tube index; its real part enters the fits. Only model="full" is accepted. Loss follows the parent policy and positive extinction attenuates power. The real index is floored at EVANESCENT_INDEX_FLOOR with zero derivative where the floor binds. The protocol area and transverse fields remain Marcatili’s. The gas index enters the normalised frequency and the waveguide decrement through the parent’s refractivity route, so an absorbing species carries its small imaginary index into both, as the capillary carries it into its square root.

Attributes:
latticeTubeLattice

Tube wall, outer radius, count and number of fit terms.

References

[1]

Vincetti, Opt. Express 24, 10313 (2016), doi:10.1364/OE.24.010313.

[2]

Vincetti and Rosa, Opt. Express 27, 5230 (2019), doi:10.1364/OE.27.005230.

[3]

Rosa et al., Fibers 9, 58 (2021), doi:10.3390/fib9100058.

effective_area(omega, z=0.0, *, conventions=_Conventions(radius_coefficient=10.0, single_power_decrement=True, area_over_gas_index=True, filled_frequency=True))[source]#

Return the fitted spectral area, distinct from the protocol area.

Rosa 2021 eq. 22: 0.48 / (8 pi n_g) (u lambda)^2 / (n_g - Re n_eff), which away from resonance reduces to 0.48 pi R_eff^2, independent of the fill. The fit can diverge or become negative near resonances where its index denominator crosses zero, and the denominator is taken real for an absorbing species. It is not the area used for propagation.

Parameters:
omeganumpy.ndarray

Positive angular frequencies in rad/s, shape (n_omega,).

zfloat, optional

Position in m.

conventions_Conventions, optional

Which form of the disputed terms to evaluate; solprop’s by default. LEGACY_CONVENTIONS gives the area of earlier implementations, for the witness tests.

Returns:
numpy.ndarray

Fitted effective area in m^2, shape (n_omega,).

lattice: TubeLattice#
sampled_terms(omega)[source]#

Sample gas and tube dispersion at positive angular frequencies.

Parameters:
omeganumpy.ndarray

Positive finite angular frequencies in rad/s, shape (n_omega,).

Returns:
_VincettiTerms

The parent’s samples extended with the tube index, its analytic derivative and the vacuum wavelength.

Raises:
ModeError

If frequencies are invalid or the real tube index is not greater than one.

solprop.modes.antiresonant.core_radius_from_gap(tube_radius, n_tubes, gap)[source]#

Return the inscribed core radius for a tube gap.

Parameters:
tube_radiusfloat

Positive outer tube radius in m.

n_tubesint

Number of tubes, at least three.

gapfloat

Nonnegative finite gap in m.

Returns:
float

Core radius in m.

Raises:
ModeError

If the geometry is invalid.

solprop.modes.antiresonant.tube_gap(core_radius, tube_radius, n_tubes)[source]#

Return the gap between neighbouring tubes.

Parameters:
core_radiusfloat

Positive inscribed core radius in m.

tube_radiusfloat

Positive outer tube radius in m.

n_tubesint

Number of tubes, at least three.

Returns:
float

Gap in m; negative means overlapping tubes.

Raises:
ModeError

If a radius is not positive and finite or the count is invalid.

solprop.modes.antiresonant.tube_radius_from_gap(core_radius, n_tubes, gap)[source]#

Return the outer tube radius for an inscribed core and gap.

Parameters:
core_radiusfloat

Positive inscribed core radius in m.

n_tubesint

Number of tubes, at least three.

gapfloat

Nonnegative finite gap in m, small enough to leave a positive tube radius.

Returns:
float

Outer tube radius in m.

Raises:
ModeError

If the geometry is invalid.