solprop.tools.soliton#

Soliton numbers: dispersion and nonlinear lengths, orders and constituents.

The closed forms of a pulse in a mode of given dispersion and nonlinear coefficient, the soliton content of an unchirped input, and the fill’s nonlinear coefficient.

Functions

dispersion_length(fwhm, beta2[, shape])

Return the dispersion length \(L_D = \tau_0^2/|\beta_2|\).

fission_length(peak_power, fwhm, gamma, beta2)

Return the soliton fission length \(L_{\rm fiss} = L_D/N\).

nonlinear_coefficient(mode, n2, wavelength)

Return the nonlinear coefficient \(\gamma = n_2\omega/(cA_{\rm eff})\).

nonlinear_length(peak_power, gamma)

Return the nonlinear length \(L_{NL} = 1/(\gamma P_0)\).

soliton_content(peak_power, fwhm, gamma, beta2)

Calculate the soliton count and largest constituent of an unchirped pulse.

soliton_order(peak_power, fwhm, gamma, beta2)

Return the soliton order \(N = \sqrt{L_D/L_{NL}}\).

soliton_peak_power(order, fwhm, gamma, beta2)

Return the peak power that gives a soliton order.

Classes

SolitonContent(area_order, count, ...)

Describe the discrete soliton content of an unchirped single-lobe pulse.

class solprop.tools.soliton.SolitonContent(area_order, count, largest_eigenvalue, largest_peak_power, largest_width, largest_nonlinear_wavenumber)[source]#

Bases: object

Describe the discrete soliton content of an unchirped single-lobe pulse.

Attributes:
area_orderfloat

Dimensionless field area divided by pi, not the conventional soliton order.

countint

Number of strictly positive discrete eigenvalues; zero at first threshold.

largest_eigenvaluefloat or None

Imaginary part of the largest Zakharov-Shabat eigenvalue, dimensionless with time scaled by the input shape’s natural width. None if count is zero.

largest_peak_powerfloat or None

Peak power of the largest constituent in W, or None if count is zero.

largest_widthfloat or None

Natural sech width of that constituent in s, or None if count is zero.

largest_nonlinear_wavenumberfloat or None

Positive optics-convention phase rate in 1/m, or None if count is zero.

area_order: float#
count: int#
largest_eigenvalue: float | None#
largest_nonlinear_wavenumber: float | None#
largest_peak_power: float | None#
largest_width: float | None#
solprop.tools.soliton.dispersion_length(fwhm, beta2, shape='sech')[source]#

Return the dispersion length \(L_D = \tau_0^2/|\beta_2|\).

Parameters:
fwhmfloat

Full width at half maximum of the power in s, > 0.

beta2float

Group-velocity dispersion in s^2/m, non-zero.

shape{‘sech’, ‘gauss’}, optional

The pulse shape; see pulse_width().

Returns:
float

Dispersion length in m.

Raises:
ToolsError

If the dispersion is zero or not finite, or the width is not positive.

Examples

>>> from solprop.tools import dispersion_length
>>> f"{dispersion_length(10e-15, -8e-30):.3f}"
'4.023'
solprop.tools.soliton.fission_length(peak_power, fwhm, gamma, beta2, shape='sech')[source]#

Return the soliton fission length \(L_{\rm fiss} = L_D/N\).

Parameters:
peak_powerfloat

Peak power in W, > 0.

fwhmfloat

Full width at half maximum of the power in s, > 0.

gammafloat

Nonlinear coefficient in rad/(W m), > 0.

beta2float

Group-velocity dispersion in s^2/m, non-zero.

shape{‘sech’, ‘gauss’}, optional

The pulse shape; see pulse_width().

Returns:
float

Fission length in m, the geometric mean of the two lengths.

Examples

>>> from solprop.tools import fission_length
>>> f"{fission_length(1e9, 10e-15, 1e-9, -8e-30):.4f}"
'2.0057'
solprop.tools.soliton.nonlinear_coefficient(mode, n2, wavelength, z=0.0)[source]#

Return the nonlinear coefficient \(\gamma = n_2\omega/(cA_{\rm eff})\).

Parameters:
modeMode

The mode, for its effective area.

n2float

Nonlinear index of the fill in m^2/W, >= 0.

wavelengthfloat

Vacuum wavelength in m, > 0.

zfloat, optional

Position along the waveguide, m.

Returns:
float

Nonlinear coefficient in rad/(W m).

Raises:
ToolsError

If the nonlinear index is negative or not finite.

Examples

>>> from solprop.modes import MarcatiliMode
>>> from solprop.tools import nonlinear_coefficient
>>> mode = MarcatiliMode(125e-6, "He", 1.0)
>>> f"{nonlinear_coefficient(mode, 3.55e-25, 800e-9):.4e}"
'1.1919e-10'
solprop.tools.soliton.nonlinear_length(peak_power, gamma)[source]#

Return the nonlinear length \(L_{NL} = 1/(\gamma P_0)\).

Parameters:
peak_powerfloat

Peak power in W, > 0.

gammafloat

Nonlinear coefficient in rad/(W m), > 0.

Returns:
float

Nonlinear length in m.

Raises:
ToolsError

If either quantity is not positive.

Examples

>>> from solprop.tools import nonlinear_length
>>> nonlinear_length(1e9, 1e-9)
1.0
solprop.tools.soliton.soliton_content(peak_power, fwhm, gamma, beta2, shape='sech')[source]#

Calculate the soliton count and largest constituent of an unchirped pulse.

This is the scattering content of the lossless cubic focusing NLSE, not a prediction of fission dynamics with higher-order dispersion, Raman or plasma. The conventional soliton_order() remains a separate design parameter.

Parameters:
peak_powerfloat

Input peak power in W, finite and positive.

fwhmfloat

Input power FWHM in s, finite and positive.

gammafloat

Nonlinear coefficient in rad/(W m), finite and positive.

beta2float

Anomalous group-velocity dispersion in s^2/m, finite and negative.

shape{‘sech’, ‘gauss’}, optional

Unchirped input field shape; the Gaussian power is exp(-t^2/tau0^2).

Returns:
SolitonContent

Analytic count and largest constituent. The sech eigenvalue is analytic; the Gaussian eigenvalue is numerical, with dimensionless absolute accuracy about 1e-10 away from thresholds. Relative accuracy degrades at threshold.

Raises:
ToolsError

If inputs are invalid, dispersion is not anomalous, or scattering fails.

References

[1]

Klaus and Shaw, SIAM J. Math. Anal. 34, 759 (2003), doi:10.1137/S0036141002403067.

[2]

Kim, Lee and Lyng, arXiv:1310.4145, sections 1-2.

solprop.tools.soliton.soliton_order(peak_power, fwhm, gamma, beta2, shape='sech')[source]#

Return the soliton order \(N = \sqrt{L_D/L_{NL}}\).

The number is defined for either sign of the dispersion; it is a soliton order in the physical sense only where beta2 < 0.

Parameters:
peak_powerfloat

Peak power in W, > 0.

fwhmfloat

Full width at half maximum of the power in s, > 0.

gammafloat

Nonlinear coefficient in rad/(W m), > 0.

beta2float

Group-velocity dispersion in s^2/m, non-zero.

shape{‘sech’, ‘gauss’}, optional

The pulse shape, used for the width throughout.

Returns:
float

The soliton order, dimensionless.

Examples

>>> from solprop.tools import soliton_order
>>> f"{soliton_order(1e9, 10e-15, 1e-9, -8e-30):.4f}"
'2.0057'
solprop.tools.soliton.soliton_peak_power(order, fwhm, gamma, beta2, shape='sech')[source]#

Return the peak power that gives a soliton order.

The inverse of soliton_order() at fixed dispersion, nonlinear coefficient and width: \(N^2 = \gamma P_0\tau_0^2/|\beta_2|\) is linear in the peak power, so \(P_0 = N^2|\beta_2|/(\gamma\tau_0^2)\). pulse_energy() turns it into an energy. On a mode, take beta2 from solprop.modes.base.beta2() at the pump and gamma from nonlinear_coefficient(), both at the launch position.

Parameters:
orderfloat

Conventional soliton order, > 0.

fwhmfloat

Full width at half maximum of the power in s, > 0.

gammafloat

Nonlinear coefficient in rad/(W m), > 0.

beta2float

Group-velocity dispersion in s^2/m, non-zero.

shape{‘sech’, ‘gauss’}, optional

The pulse shape, used for the width.

Returns:
float

Peak power in W.

Raises:
ToolsError

If a quantity is not positive, the dispersion is zero, or the shape is unknown.

Examples

>>> from solprop.tools import soliton_order, soliton_peak_power
>>> power = soliton_peak_power(2.0, 10e-15, 1e-9, -8e-30)
>>> f"{power / 1e9:.4f} {soliton_order(power, 10e-15, 1e-9, -8e-30):.4f}"
'0.9943 2.0000'