Breathers and exact solutions¶
Higher-order soliton solutions and breathers for GNLSE configurations. Docstrings are the source of truth, rendered with mkdocstrings (numpydoc style).
photonics_helper.breathers ¶
Exact soliton-on-finite-background (breather) solutions of the NLSE.
Analytic solutions of the focusing nonlinear Schrödinger equation on a
non-zero background. These describe modulation-instability growth and decay
(Akhmediev breather), the extreme-event limit localised in both dimensions
(Peregrine soliton), and the periodically breathing solution
(Kuznetsov–Ma soliton). They are the structures seen in spontaneous MI and
rogue-wave experiments and are the ground truth used by the
narhi_2016_mi_breathers and kuznetsov_ma_2012_breather reproductions.
Convention
The dimensionless focusing NLSE used throughout this module is
.. math::
i\,\partial_\xi\psi + \tfrac{1}{2}\partial_\tau^2\psi
+ |\psi|^2\psi = 0,
which is the normalisation of the fibre equation
i A_z = (β₂/2) A_TT − γ|A|²A in the anomalous-dispersion regime
(β₂ < 0) under
.. math::
A(z,T) = \sqrt{P_0}\,\psi(\xi,\tau), \quad
T = \tau T_0, \quad z = \xi L_{NL}, \quad
L_{NL} = \frac{1}{\gamma P_0}, \quad
T_0 = \sqrt{|\beta_2|\,L_{NL}}.
The general solution (Akhmediev–Korneev) is
.. math::
\psi(\xi,\tau) = e^{i\xi}\left[1 +
\frac{2(1-2a)\cosh(b\xi) + i b\sinh(b\xi)}
{\sqrt{2a}\cos(\nu\tau) - \cosh(b\xi)}\right],
with :math:b = \sqrt{8a(1-2a)} and :math:\nu = 2\sqrt{1-2a}.
- :math:
a < 1/2— Akhmediev breather (:math:b,\nureal): periodic in time, grows and decays once in :math:\xi. - :math:
a = 1/2— Peregrine soliton (limiting case). - :math:
a > 1/2— Kuznetsov–Ma soliton (:math:b,\nuimaginary): localised in time, periodic in :math:\xi.
References
- N. Akhmediev & V. I. Korneev, Theor. Math. Phys. 69, 1089 (1986).
- D. H. Peregrine, J. Austral. Math. Soc. Ser. B 25, 16 (1983).
- B. Kibler et al., Nat. Phys. 6, 790 (2010); Sci. Rep. 2, 463 (2012).
- M. Närhi et al., Nat. Commun. 7, 13675 (2016).
- J. M. Dudley et al., Nat. Photon. 8, 755 (2014).
SolitonOnBackground
dataclass
¶
SolitonOnBackground(beta2: float, gamma: float, P0: float)
Physical mapping of the SFB family onto a fibre/waveguide.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
beta2
|
float — group-velocity dispersion β₂ in **s²/m**. Must be negative
|
(anomalous/focusing) for the breather solutions. |
required |
gamma
|
float — nonlinear coefficient γ in 1/(W·m).
|
|
required |
P0
|
float — background (plane-wave) power in W.
|
|
required |
psi ¶
psi(z: float, t: NDArray | float, a: float) -> NDArray
Dimensionless SFB field at physical (z, t).
field ¶
field(z: float, t: NDArray | float, a: float) -> NDArray
Physical envelope A(z, T) = sqrt(P0) psi in W^{1/2}.
spatial_period_m ¶
spatial_period_m(a: float) -> float
Kuznetsov–Ma breathing period in m (a > 1/2).
initial_wave ¶
initial_wave(grid: TemporalGrid, a: float, z0: float = 0.0, wavelength: Wavelength | None = None) -> Wave
Build a :class:~photonics_helper.pulse.Wave with the exact SFB field at z0.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
grid
|
TemporalGrid
|
Time grid; for Akhmediev breathers choose a window containing an
integer number of :meth: |
required |
a
|
float — SFB parameter.
|
|
required |
z0
|
float — physical starting distance in m (e.g. ``-3 L_NL`` for a
|
Peregrine soliton so that the peak falls at |
0.0
|
wavelength
|
Wavelength — carrier; defaults to 1550 nm.
|
|
None
|
peregrine_soliton ¶
peregrine_soliton(xi: float, tau: NDArray | float) -> NDArray | complex
Exact Peregrine soliton of the focusing NLSE.
psi(xi, tau) = e^{i xi} [1 - 4(1 + 2 i xi)/(1 + 4 tau^2 + 4 xi^2)].
Peak-to-background intensity ratio is exactly |psi(0, 0)|^2 = 9.
general_sfb ¶
general_sfb(xi: float, tau: NDArray | float, a: float) -> NDArray | complex
General soliton-on-finite-background solution (Akhmediev–Korneev).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
xi
|
float — dimensionless propagation distance.
|
|
required |
tau
|
array-like — dimensionless retarded time.
|
|
required |
a
|
float — governing parameter in ``(0, 1)``; ``a < 1/2`` gives the
|
Akhmediev breather, |
required |
akhmediev_breather ¶
akhmediev_breather(xi: float, tau: NDArray | float, a: float) -> NDArray | complex
Akhmediev breather (a < 1/2): periodic in time, single growth/decay.
kuznetsov_ma ¶
kuznetsov_ma(xi: float, tau: NDArray | float, a: float) -> NDArray | complex
Kuznetsov–Ma soliton (a > 1/2): localised in time, periodic in :math:\xi.
sfb_peak_ratio ¶
sfb_peak_ratio(a: float) -> float
Maximum |psi|^2 (relative to the unit background) of the SFB family.
Gives 5.828… for a = 0.25 (Akhmediev), 9 for the Peregrine
limit and 10.876… for a = 0.66 (Kuznetsov–Ma).
sfb_spatial_period ¶
sfb_spatial_period(a: float) -> float
Dimensionless :math:\xi period of the Kuznetsov–Ma soliton (a > 1/2).
sfb_temporal_period ¶
sfb_temporal_period(a: float) -> float
Dimensionless :math:\tau period of the Akhmediev breather (a < 1/2).