solprop.tools.phase_matching#
Dispersive-wave phase matching: the mismatch and its roots in wavelength.
Module Attributes
Choose the constituent, supplied-power or linear RDW phase model. |
Functions
|
Return the phase-matched dispersive-wave wavelength nearest the pump. |
|
Return every phase-matched wavelength in a window, shortest first. |
|
Return the phase mismatch between a soliton and a dispersive wave. |
- solprop.tools.phase_matching.NonlinearPhase#
Choose the constituent, supplied-power or linear RDW phase model.
alias of
Literal[‘largest’, ‘supplied_power’, ‘linear’]
- solprop.tools.phase_matching.lambda_rdw(mode, wavelength, *, soliton_mode=None, z=0.0, peak_power=None, gamma=None, fwhm=None, shape='sech', nonlinear_phase='largest', wavelength_limits=None)[source]#
Return the phase-matched dispersive-wave wavelength nearest the pump.
- Parameters:
- modeMode
The mode the dispersive wave is emitted into.
- wavelengthfloat
Wavelength of the soliton in m, > 0.
- soliton_modeMode or None, optional
The soliton’s mode;
Noneis mode.- zfloat, optional
Position along the waveguide, m.
- peak_powerfloat or None, optional
Peak power in W for the nonlinear term; see
phase_mismatch().- gammafloat or None, optional
Nonlinear coefficient in rad/(W m) for the nonlinear term.
- fwhmfloat or None, optional
Input power FWHM in s, positive; required with power for the default phase.
- shape{‘sech’, ‘gauss’}, optional
Unchirped input shape for the largest constituent.
- nonlinear_phase{‘largest’, ‘supplied_power’, ‘linear’}, optional
Default uses the largest constituent. Supplied power uses gamma P0/2 and requires omitting fwhm. Linear requires omitting all pulse numbers. Without pulse numbers the default is also linear.
- wavelength_limitstuple of float or None, optional
Window searched, m;
Noneis 100 nm to 0.9 of the pump wavelength.
- Returns:
- float
The longest root inside the window in m, which with the default window is the short-wavelength dispersive wave nearest the pump.
lambda_rdw_all()returns all of them.
- Raises:
- ToolsError
If the window holds no root, rather than returning a missing value that would propagate silently.
Examples
>>> from solprop.modes import MarcatiliMode >>> from solprop.tools import lambda_rdw >>> mode = MarcatiliMode(125e-6, "He", 1.0, cladding=1.45) >>> f"{lambda_rdw(mode, 800e-9) * 1e9:.1f}" '200.1'
- solprop.tools.phase_matching.lambda_rdw_all(mode, wavelength, *, soliton_mode=None, z=0.0, peak_power=None, gamma=None, fwhm=None, shape='sech', nonlinear_phase='largest', wavelength_limits=None)[source]#
Return every phase-matched wavelength in a window, shortest first.
- Parameters:
- modeMode
The mode the dispersive wave is emitted into.
- wavelengthfloat
Wavelength of the soliton in m, > 0.
- soliton_modeMode or None, optional
The soliton’s mode;
Noneis mode.- zfloat, optional
Position along the waveguide, m.
- peak_powerfloat or None, optional
Peak power in W for the nonlinear term; see
phase_mismatch().- gammafloat or None, optional
Nonlinear coefficient in rad/(W m) for the nonlinear term.
- fwhmfloat or None, optional
Input power FWHM in s, positive; required with power for the default phase.
- shape{‘sech’, ‘gauss’}, optional
Unchirped input shape for the largest constituent.
- nonlinear_phase{‘largest’, ‘supplied_power’, ‘linear’}, optional
Default uses the largest constituent. Supplied power uses gamma P0/2 and requires omitting fwhm. Linear requires omitting all pulse numbers. Without pulse numbers the default is also linear.
- wavelength_limitstuple of float or None, optional
Shortest and longest wavelength searched, m.
Noneis 100 nm to 0.9 of the pump wavelength, which keeps the double root at the pump out.
- Returns:
- tuple of float
The roots in m, ascending; empty when there is none. The mismatch is sampled on 2048 frequencies across the window, each sign change is refined with Brent’s method, and roots closer than one sample are not separated. A sign change through a resonance of the guide, where the mismatch has a pole or is not a number, is not a root and is skipped.
- Raises:
- ToolsError
If the window is not positive and ordered.
Examples
>>> from solprop.modes import MarcatiliMode >>> from solprop.tools import lambda_rdw_all >>> mode = MarcatiliMode(125e-6, "He", 1.0, cladding=1.45) >>> [f"{root * 1e9:.0f}" for root in lambda_rdw_all(mode, 800e-9)] ['200']
- solprop.tools.phase_matching.phase_mismatch(mode, omega, wavelength, *, soliton_mode=None, z=0.0, peak_power=None, gamma=None, fwhm=None, shape='sech', nonlinear_phase='largest')[source]#
Return the phase mismatch between a soliton and a dispersive wave.
\[\Delta\beta(\omega) = \beta_{\rm dw}(\omega) - \beta_{\rm s}(\omega_0) - \beta_{1,\rm s}(\omega_0)(\omega-\omega_0) - k_{\rm NL} .\]- Parameters:
- modeMode
The mode the dispersive wave is emitted into.
- omeganumpy.ndarray
Angular frequencies in rad/s, shape
(n_omega,).- wavelengthfloat
Wavelength of the soliton in m, > 0.
- soliton_modeMode or None, optional
The mode the soliton travels in;
Noneis mode. A different one gives intermodal phase matching.- zfloat, optional
Position along the waveguide, m.
- peak_powerfloat or None, optional
Input peak power in W. With gamma and fwhm, adds the soliton’s nonlinear wavenumber; both
None(the default) gives the linear condition.- gammafloat or None, optional
Nonlinear coefficient of the soliton’s mode in rad/(W m) (
nonlinear_coefficient()).- fwhmfloat or None, optional
Input power FWHM in s, positive; required with power for the default phase.
- shape{‘sech’, ‘gauss’}, optional
Unchirped input shape for the largest constituent.
- nonlinear_phase{‘largest’, ‘supplied_power’, ‘linear’}, optional
Default uses the largest constituent. Supplied power uses gamma P0/2 and requires omitting fwhm. Linear requires omitting all pulse numbers. Without pulse numbers the default is also linear.
- Returns:
- numpy.ndarray
Mismatch in 1/m, shape
(n_omega,). It vanishes at the pump in the linear case, with zero slope there.
- Raises:
- ToolsError
If pulse arguments are incomplete or contradictory, or the largest constituent does not exist in anomalous dispersion.
- Notes —– The default nonlinear term is gamma times the largest constituent’s
- power / 2 (
soliton_content()). The supplied-power - option treats the quoted power as a fundamental soliton, advancing as exp(i gamma P0
- z / 2) (Akhmediev and Karlsson, Phys. Rev. A 51, 2602 (1995)). Both are local
- estimates; loss, higher-order dispersion, Raman, chirp and plasma evolution are not
- included.
Examples
>>> import numpy as np >>> from solprop.modes import MarcatiliMode >>> from solprop.tools import phase_mismatch >>> mode = MarcatiliMode(125e-6, "He", 1.0) >>> pump = 2 * np.pi * 299792458.0 / 800e-9 >>> abs(float(phase_mismatch(mode, np.array([pump]), 800e-9)[0])) < 1e-6 True