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
|
Return the dispersion length \(L_D = \tau_0^2/|\beta_2|\). |
|
Return the soliton fission length \(L_{\rm fiss} = L_D/N\). |
|
Return the nonlinear coefficient \(\gamma = n_2\omega/(cA_{\rm eff})\). |
|
Return the nonlinear length \(L_{NL} = 1/(\gamma P_0)\). |
|
Calculate the soliton count and largest constituent of an unchirped pulse. |
|
Return the soliton order \(N = \sqrt{L_D/L_{NL}}\). |
|
Return the peak power that gives a soliton order. |
Classes
|
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:
objectDescribe 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.
- 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 fromsolprop.modes.base.beta2()at the pump and gamma fromnonlinear_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'